如何设置不需要“父”代理的“子”代理

如何设置不需要“父”代理的“子”代理

我在笔记本电脑上运行 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";
  }
}

相关内容