LINUX.ORG.RU

Настраиваем для браузера несколько выходов на внешние прокси и удобно переключаемся между ними

 , , , ,


2

2

Почему не 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.

Можно поиграться с настройками, пока не будет получен ожидаемый результат.

Засим всё!



Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 4)

когда включив на компьютере VPN оказывается, что половина сайтов отказываются работать

дальше не читал, учите матчасть

gagarin0
()
Ответ на: комментарий от gagarin0

я знаю про другие варианты, так и пишу

Возможно есть более изящное решение

но мне очень нравится вариант с проксёй

unclestephen
() автор топика
Ответ на: комментарий от somemong

а я понял, это просто плагин для лисы?

ну лиса это не торт, хотя кому как

unclestephen
() автор топика
Последнее исправление: unclestephen (всего исправлений: 1)

Слишком сложно. Я просто запускал два прокси и запускал хромиум с разными флагами командной строки, в которых указывались адреса соответствующих прокси. Ну и чтобы запустить разные инстансы хромиума, нужно разные профили им задать (по умолчанию $HOME/.config/chromium). Всё.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от unclestephen

А, я не заметил, что в статье большая часть текста отдана настройке самого прокси. Тогда всё норм, сорян.

kaldeon
()

Мы хотим посещать некоторые, заранее известные сайты, через прокси ONE, другие – через прокси TWO, а все остальные – напрямую. Также хочется иметь возможность быстро включать работу через прокси для всех вкладок, или наоборот, задействовать прямой выход на все вкладки.

Для firefox задача решается pac файлом и стандартными настройками прокси в браузере, даже ставить дополнительно ничего не нужно.

arax ★★
()

Я так понял, приведенные настройки это для локального privoxy. А что насчет той прокси, которая на удаленной тачке? Там настройки по дефолту? Или там используется вообще другой софт для проксирования?

А как настраивается аутентификация между локальным и внешним проксями? Просто иначе, если аутентификации нет, то к внешнему прокси сможет подключиться кто угодно.

Nibbler
()
Ответ на: комментарий от Nibbler

А что насчет той прокси, которая на удаленной тачке?

какая-то настроенная провайдером прокся, с персональным адресом лучше, с логином и паролем заведёнными провайдером.

как настраивается аутентификация между локальным и внешним проксями?

об этом говорится в тексте, отдельная строка в конфиге

Теперь нужно найти строку, похожую на forward-socks5 / user:pass@ip_address:port

из текста статьи

unclestephen
() автор топика
Ответ на: комментарий от unclestephen

А, точно, не внимательно посмотрел. Значит имя пользователя и пароль. А эти данные посылаются на внешнюю проксю скорее всего в незашифрованном виде. По крайней мере из коробки SOCKS 5 не поддерживает шифрование. Вот сам SOCKS 5 и Username/Password аутентификация. Можно Wireshark’ом проверить, в каком виде аутентификация происходит.

Nibbler
()
Ответ на: комментарий от Nibbler

А эти данные посылаются на внешнюю проксю скорее всего в незашифрованном виде

это правда

unclestephen
() автор топика
Ответ на: комментарий от hobbit

Вот тут ошибку нашёл

$ 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

заменить на

$ cp /usr/lib/systemd/system/privoxy.service /usr/lib/systemd/system/privoxy_One.service
$ cp /usr/lib/systemd/system/privoxy.service /usr/lib/systemd/system/privoxy_Two.service

unclestephen
() автор топика

Раз у нас 2 внешних прокси, нам нужно поднять 2 http(s) прокси локально

А в чём проблема сразу поднять соединение ко внешним проксям?

ya-betmen ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.