Динамическая смена прокси-сервера для всего исходящего трафика

Динамическая смена прокси-сервера для всего исходящего трафика

У меня в колледже три прокси-сервера, все они подключены к трем разным поставщикам услуг. В разный момент времени разные прокси-серверы дают разную скорость (в зависимости от количества пользователей, использующих этот прокси-сервер в этот момент времени). Я чувствую, что изменение конфигурации прокси-сервера в браузере (или в любом другом сетевом приложении) в разный момент времени отнимает очень много времени. Я хочу написать один скрипт, который может динамически изменять прокси-сервер, используемый всеми моими сетевыми приложениями в разный момент времени, выполняя некий тест.

Я не могу начать с этого. Может кто-нибудь дать мне идею, чтобы я мог это реализовать.

решение1

Вы можете использоватьПРОКСИ.ПАКилиWPAD.DAT

это просто JavaScript, вы можете разместить этот файл на любом веб-сервере в вашей интрасети и установить на стороне клиента http://webserever-ip/proxy.pac. используя этот скрипт вы можете сделатьБалансировка нагрузкис тремя прокси-серверами. Также вы можете разделить трафик, используя диапазоны IP-адресов в этом скрипте Java, есть несколько функций, таких как обход интрасети или любого веб-сайта.

Вы можете настроить этот скрипт автоматически на всех ваших клиентах, для этого требуются следующие опции.

  • если вы используете доменную сеть, то установите Proxy.pac с помощью групповой политики
  • Вы можете установить WPAD.DAT с помощью DHCP
  • ДНС

решение2

Чтобы настроить прокси-сервер из одной точки, вы можете настроить маршрутизатор, который перезаписывает адрес назначения с помощью правила iptables, например:

iptables -t nat -A PREROUTING -p tcp -d VIRTUAL_PROXY_IP --dport 80 -j NETMAP --to CURRENT_PROXY_IP

Все приложения и браузеры будут использовать VIRTUAL_PROXY_IP в качестве своего прокси, который вам нужно будет направить через этот специальный маршрутизатор. Вы изменяете правило по мере необходимости, чтобы изменить CURRENT_PROXY_IP.

Преимущество этого подхода в том, что он быстро настраивается и прост в администрировании. Недостаток в том, что, скорее всего, будут некоторые помехи для некоторых пользователей, у которых открыты сеансы (в зависимости от типа сеансов и типа прокси-серверов верхнего уровня). Вам также придется либо написать собственный скрипт для смены прокси-серверов, либо сделать это вручную.

Лучшим решением, предложенным комментарием sr_, было бы настроить балансировщик нагрузки. Рассмотрите LVS илиHAProxy

решение3

Предполагая, что вы используете squidДва родственных прокси с одинаковым видимым именем, похоже, справляются со своей задачей. У меня настроены 2 с именами proxy1 и proxy2 соответственно. Видимое имя хоста — proxy. Все, что вам нужно сделать на этом этапе, — это создать запись A в dns для имени proxy с IP-адресами proxy1 и proxy1. При условии, что они настроены как родственные в вашем squid.conf. Посмотрите здесьhttp://horms.net/projects/redundant_linux_paper/related/squid/hierarchies/concepts.html

решение4

Простое решение

Настройте псевдоним хоста для прокси-серверов в локальном файле хостов, например:

192.168.1.1 chosenproxy #192.168.1.2 chosenproxy #192.168.1.3 chosenproxy

Теперь настройте все приложения на использование этого псевдонима.http://chosenproxy:8080

Чтобы попробовать другие серверы, просто отредактируйте IP-адрес в файле hosts.

Управляемое решение для порта

Если вам также нужно изменить порт, используйте одну из легких прокси-программ, например, polipo. Polipo по умолчанию работает на порту 8123, поэтому настройте каждое приложение на подключение через polipo, работающий локально, например, с помощью настройкиhttp://localhost:8123

Затем, чтобы попробовать другой прокси-сервер, измените файл конфигурации Polipo ( /etc/polipo/config), указав правильный родительский прокси-сервер и номер порта, и перезапустите Polipo, чтобы активировать изменения.

Связанный контент