我公司环境设置了一个代理,阻止外部互联网访问并要求 NTLM 身份验证。内部地址不会被代理路由,必须直接访问。
我正在尝试在这个环境中设置一台 Linux 机器(通常只适用于 Windows),并且有需要外部互联网访问的命令行工具。我发现国家地图这对于代理身份验证非常有效 - 但现在的问题是,当我设置 Linux 的 HTTP_PROXY 环境变量时,许多程序都会使用该变量来确定代理,它们总是使用代理服务器。相反,我需要他们使用基于 PAC 文件的代理/DIRECT 连接。
非常非常手动的解决方案是,当我想要访问内联网时清除 HTTP_PROXY 环境变量,当我想要访问互联网时填写它 - 但这很麻烦。
有人知道怎么做吗?(Linux 全局 .pac 设置等...)
答案1
Windows 上对代理自动配置的支持似乎非常“无缝”,因为它是由 WinHTTP 客户端实现的,该客户端存储在一个 DLL 中,所有具有公共 API 的应用程序都可以访问该 DLL。许多应用程序使用 WinHTTP 并“免费”获得代理自动配置。
在 Linux 世界中,每个应用程序通常都会进行自己的套接字调用并使用自己的 HTTP 协议实现。虽然有 HTTP 库,但与 Windows 相比,应用程序更有可能自行处理 HTTP,并且可能不需要处理代理自动配置文件所需的 Javascript 解释器。
您可以考虑在 Linux 机器上运行本地代理服务器,将其自身指定为系统范围的 HTTP_PROXY,然后使用必要的规则配置该本地代理服务器以直接访问某些站点,而不是使用公司代理作为父代理。
Squid 可以做你想做的事,但它相当重。我发现这个很有趣tinyproxy 项目,它确实看起来很有前途(允许按域选择性使用上游代理,非常轻量等),但我从未亲自使用过它,对它一无所知。(理论上,可以修改 tinyproxy 来实际解析代理自动配置文件。这是一个非常巧妙的技巧,虽然我没有时间去研究......)