Почему не VPN
Как выяснилось, очень неудобно когда включив на компьютере VPN оказывается, что половина сайтов отказываются работать там, куда он ведёт. В голову пришла идея, что если бы в каждой вкладке браузера были свои уникальные параметры соединения, это был бы идеальный вариант.
Суть решения
Дело в том, что мне нравятся Google Chrome и Microsoft Edge, но вот беда, нормально работать с прокси они не умеют. Поэтому, проведя некоторые изыскания, я смог создать рабочий конфиг на основе privoxy и плагина для упомянутых браузеров Proxy SwitchyOmega.
privoxy обеспечивает socks5-соединение, а Proxy SwitchyOmega даёт возможность менять параметры подключения в любой момент, в том числе – автоматически по выбранному шаблону, при этом может работать с несколькими внешними прокси.
Ссылки на официальные страницы проектов:
Возможно, что есть более изящное решение, но тут мы имеем дело с типичным конструктором и собираем все компоненты в целое самостоятельно. И это хорошо!
Описание задачи
У нас есть:
-
Приложение, умеющее работать с прокси, если конкретно, то в данном случае – это браузер на основе Chromium: Chrome или Edge.
-
2 внешних socks5 прокcи с авторизацией.
Мы хотим посещать некоторые, заранее известные сайты, через прокси ONE, другие – через прокси TWO, а все остальные – напрямую. Также хочется иметь возможность быстро включать работу через прокси для всех вкладок, или наоборот, задействовать прямой выход на все вкладки.
В общем, мы сможем в любой момент менять параметры соединения сайтов, просто кликая мышью.
Установка
Privoxy, установка и конфигурирование
Раз у нас 2 внешних прокси, нам нужно поднять 2 http(s) прокси локально, для этого настроим 2 экземпляра privoxy. Данные действия выполнялись на openSUSE Tumbleweed, для Ubuntu должно подойти всё, или почти всё, с небольшими отличиями.
Сперва установка:
Получаем root
$ sudo -i
openSUSE Tumbleweed:
$ zypper in privoxy
Ubuntu:
$ apt install privoxy
Далее одинаково для любых systemd систем:
Создаём новые экземпляры конфигураций для One и Two копированием оригинального файла конфигурации:
$ cp /etc/privoxy/config /etc/privoxy/config_One
$ cp /etc/privoxy/config /etc/privoxy/config_Two
Теперь нужно в каждом новом файле нужно найти строчку listen-address 127.0.0.1:8118
и заменить её:
- в файле config_One – на
listen-address 127.0.0.1:8128
- в файле config_Two – на
listen-address 127.0.0.1:8138
.
Теперь нужно найти строку, похожую на forward-socks5 / user:pass@ip_address:port
. И указать в файлах config_One
и config_Two
свои параметры для соединения с внешним прокси (первый и второй соответственно).
Далее необходимо настроить конфигурацию запуска новых экземпляров privoxy. Для этого создадим юниты systemd – как и в первом случае, копированием оригинального юнита:
$ cp /usr/lib/systemd/system/privoxy.service /home/unclestephen/Документы/privoxy/privoxy_One.service
$ cp /usr/lib/systemd/system/privoxy.service /home/unclestephen/Документы/privoxy/privoxy_Two.service
Отредактируем их, чтобы получилось так:
$ cat /usr/lib/systemd/system/privoxy_One.service
[Unit]
Description=Privoxy Web Proxy With Advanced Filtering Capabilities
After=network.target
[Service]
# added automatically, for details please see
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
ProtectSystem=full
ProtectHome=true
PrivateDevices=true
ProtectHostname=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
RestrictRealtime=true
# end of automatic additions
Type=forking
PIDFile=/run/privoxy_One.pid
ExecStartPre=-/usr/bin/cp -upf /etc/resolv.conf /etc/host.conf /etc/hosts /etc/localtime /var/lib/privoxy/etc/
ExecStartPre=-/usr/bin/cp -upf /lib64/libresolv.so.2 /lib64/libnss_dns.so.2 /var/lib/privoxy/lib64/
ExecStart=/usr/sbin/privoxy --chroot --pidfile /run/privoxy_One.pid --user privoxy /etc/config_One
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
И вот так:
$ cat /usr/lib/systemd/system/privoxy_Two.service
[Unit]
Description=Privoxy Web Proxy With Advanced Filtering Capabilities
After=network.target
[Service]
# added automatically, for details please see
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
ProtectSystem=full
ProtectHome=true
PrivateDevices=true
ProtectHostname=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
RestrictRealtime=true
# end of automatic additions
Type=forking
PIDFile=/run/privoxy_Two.pid
ExecStartPre=-/usr/bin/cp -upf /etc/resolv.conf /etc/host.conf /etc/hosts /etc/localtime /var/lib/privoxy/etc/
ExecStartPre=-/usr/bin/cp -upf /lib64/libresolv.so.2 /lib64/libnss_dns.so.2 /var/lib/privoxy/lib64/
ExecStart=/usr/sbin/privoxy --chroot --pidfile /run/privoxy_Two.pid --user privoxy /etc/config_Two
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Эти 2 файла можно взять без изменений, для openSUSE – точно.
Теперь делаем:
$ systemctl daemon-reload
$ systemctl start privoxy_One.service
$ systemctl enable privoxy_One.service
$ systemctl start privoxy_Two.service
$ systemctl enable privoxy_Two.service
Если при выполнении этих команд ничего не ругнулось, значит всё запустилось и – возможно – даже работает.
Установка и настройка Proxy SwitchyOmega
Ссылка на магазин приложений Chrome, тут, я думаю, затруднений быть не должно.
Далее настраиваем плагин, указываем наши прокси как http, с адресом 127.0.0.1 и портом 8128
для One и портом 8138
для Two.
В разделе auto switch укажите, что использовать для каких сайтов, указывая домены сайтов по маске.
В общем, там всё довольно интуитивно и работает без сбоев, не забывайте нажимать Apply changes.
Чтобы убедиться, что всё работает правильно, посетите какой-нибудь сайт, который покажет вам ваш IP адрес, например https://whatismyipaddress.com.
Можно поиграться с настройками, пока не будет получен ожидаемый результат.
Засим всё!