我在笔记本电脑上运行 Linux,该笔记本电脑有时位于使用 NTLM 代理服务器的公司网络上,因此我在笔记本电脑上运行 cntlmd 作为子代理来连接到父(公司)代理服务器。笔记本电脑上运行的所有内容都配置为使用 localhost:3128(CNTLM 代理地址),然后 cntlmd 使用 NTLM 代理服务器处理非标准身份验证。
当我将笔记本电脑从公司网络中取出时,可能有十几个不同的地方被配置为使用 localhost:3128,禁用它们然后重新启用它们是很痛苦的。
当配置的代理不可用时,显然不可能将 cntlmd 配置为不使用代理。
一种选择是编写一个脚本,为我自动执行所有这些更改,但似乎拥有第二个子代理可能更简单,当 cntlm 启动失败时,我可以(自动)启动它(如果它不能启动,它就会失败)找到父代理)。第二个子代理将直接连接到网络,因此,如果它也侦听 3128,则所有配置为命中 3128 的内容都可以保持其配置相同。
我可以用什么来做到这一点? (或者,还有更好的方法?)
答案1
关于什么代理.pac
它只是一个 JavaScript,您可以将此文件托管在本地计算机或 Intranet 中的任何 Web 服务器上,并file:///opt/proxy.pac
使用此脚本在客户端进行设置,您可以执行以下操作负载均衡与您的代理。您还可以在这个java脚本中使用ip范围来划分流量,有多种功能,例如针对特定网站的绕过代理。
它会做:
- 如果代理不可用,它将指示浏览器直接访问。
- 绕过某些网站的代理(基本上某些网站不通过代理工作)
- 绕过本地、内联网服务器的代理
- 等等。
PAC 文件示例
function FindProxyForURL(url, host) {
// our local URLs from the domains below example.com don't need a proxy:
if (shExpMatch(host, "*.example.com"))
{
return "DIRECT";
}
// If on a internal/LAN IP address, send traffic direct.
if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
{
return "PROXY 10.0.0.100:8080; PROXY 10.0.0.101:8080; DIRECT";
}
else
{
return "DIRECT";
}
}