动态更改所有传出流量的代理服务器

动态更改所有传出流量的代理服务器

我的大学有三个代理服务器,它们都连接到三个不同的服务提供商。在不同的时刻,不同的代理提供不同的速度(取决于在该时刻使用该代理的用户数量)。我觉得在不同的时刻更改浏览器(或任何其他网络应用程序)中的代理服务器配置非常耗时。我想编写一个脚本,它可以通过进行某种测试来动态更改我的所有网络应用程序在不同时刻使用的代理服务器。

我无法从它开始。有人可以给我一些想法,以便我可以实施它。

答案1

您可以使用代理PAC或者数据文件

它只是一个 JavaScript,您可以将此文件托管在您的内网中的任何 Web 服务器上并在客户端进行设置http://webserever-ip/proxy.pac。使用这个脚本你可以做负载均衡和你的三个代理。您还可以在这个java脚本中使用ip范围来划分流量,有多种功能,例如绕过内联网或任何网站。

您可以在所有客户端自动设置此脚本,相同的需要以下选项

  • 如果您使用的是域网络,则使用组策略设置 Proxy.pac
  • 您可以使用 DHCP 设置 WPAD.DAT
  • 域名系统

答案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 或HA代理

答案3

假设您使用的是鱿鱼共享相同可见名称的两个兄弟代理似乎对我有用。我分别设置了 2 个名称为 proxy1 和 proxy2 的服务器。可见的主机名是 proxy。此时您所要做的就是在 dns 中为名称 proxy 创建一条 A 记录,并使用 proxy1 和 proxy1 的 IP 地址。只要在您的squid.conf 中将它们设置为兄弟姐妹即可。看看这里http://horms.net/projects/redundant_linux_paper/lated/squid/hierarchies/concepts.html

答案4

简单的解决方案

在本地主机文件中为代理服务器设置主机别名,例如

192.168.1.1 chosenproxy #192.168.1.2 chosenproxy #192.168.1.3 chosenproxy

现在将所有应用程序配置为使用此别名http://chosenproxy:8080

然后要尝试不同的服务器,只需编辑主机文件中的 IP 地址即可。

可管理的端口解决方案

如果您还需要更改端口,请使用轻量级代理程序之一,例如 polipo。 Polipo 默认在端口 8123 上运行,因此将每个应用程序设置为通过本地运行的 polipo 进行连接,例如使用以下设置http://localhost:8123

然后,要尝试不同的代理服务器,请更改 polipo 配置文件 ( /etc/polipo/config) 以指定正确的父代理服务器和端口号,然后重新启动 polipo 以激活更改。

相关内容