Autoproxy

借助 Autoproxy,Clear Linux* OS 可在公司代理服务器后平稳运行。

描述

Autoproxy 会尝试检测代理自动配置 (PAC) 脚本,并使用其自动解析给定连接所需的代理。使用 Autoproxy,可以在任意代理环境下使用 Clear Linux OS,而无需手动配置代理。

公司和专用网络可能非常复杂,因此出于安全原因需限制和控制网络连接。常见的负面效果是限制或阻止连接,且需手动配置代理以执行最普通的任务,例如克隆存储库或检查是否存在更新。通过 Clear Linux OS,所有工作便可在后台完成,以便轻松使用网络并使连接“正常工作”。

此功能可消除因代理问题所导致的极端复杂的网络连接难题。可以自动执行任务(例如单元测试),而无需担心代理未设置,并可在处理跨系统的网络不可用问题时将未设置代理这一因素排除在外。

工作原理

我们围绕多数 Linux* 发行版提供的工具设计了 Autoproxy,同时还进行了一些小的补充和修改。我们利用从系统获取的 DHCP 和网络信息,创建了 PAC 发现守护程序。该守护程序使用此信息来解析 PAC 文件的 URL。然后,守护程序将此 URL 传入 PACrunner*。PACrunner 下载 PAC 文件,使用新实现的 Duktape* 引擎来对其进行解析。

../../_images/autoproxy_0.png

图 1:Autoproxy 流程

此后,所有 cURL* 或网络请求均会查询 PACrunner 以使用正确的代理。我们修改了 cURL 库以通过 DBus 与 PACrunner 进行通信。但是,如果未加载 PAC 文件或手动设置代理,cURL 则会忽略 PACrunner 并正常运行。如此一来,环境设置便会得以应用,且不会浪费时间来尝试解析代理。所有这些步骤均在后台执行,而无需用户介入。

故障检修

Autoproxy 允许 Clear Linux OS 在代理后无缝运行,因为 swupd 和其他 Clear Linux OS 工具的实现均基于 libcurl。不使用 libcurl 的工具(例如 git)则须单独配置。

如果熟悉 PAC 文件和 WPAD,则可使用 pacdiscovery 和 FindProxyForURL,通过 Autoproxy 进行故障排除。

注解

访问 findproxyforurl,了解有关 WPAD、PAC 文件和 PAC 的更多信息。

不带参数运行 pacdiscovery,可以明确

  1. 解析 WPAD 主机名时是否出现问题:

    pacdiscovery
    
    failed getaddrinfo: No address associated with hostname
    Unable to find wpad host
    
  2. 或是是否已禁用(已屏蔽) pacrunner 服务。

    pacdiscovery
    
    PAC url: http://autoproxy.your.domain.com/wpad.dat
    Failed to create proxy config: Unit pacrunner.service is masked.
    

运行以下命令取消屏蔽 pacrunner 服务:

systemctl unmask pacrunner.service

FindProxyForURL 和 busctl,也可以明确是否已屏蔽 pacrunner.service。

busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
FindProxyForURL ss "http://www.google.com" "google.com"
Unit pacrunner.service is masked.
dig wpad, dig wpad.<domain>

FindProxyForURL 会在外部 URL 和主机作为参数提供时,返回代理服务器的 URL 和端口。

busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
FindProxyForURL ss "http://www.google.com" "google.com"
s "PROXY proxy.your.domain.com:<port>"

如果无代理服务器或是 pacrunner 正在运行但不带 PAC 文件,FindProxyForURL 则会返回 “DIRECT”。

busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
FindProxyForURL ss "http://www.google.com" "google.com"
s "DIRECT"

pacdiscovery 可查找 WPAD 后,立即重新启动 pacrunner 服务:

systemctl stop pacrunner
systemctl restart pacdiscovery

注解

/etc/resolv.conf 中的 “domain” 或 “search” 条目是查找短名称以便进行解析所必需的条目。resolv.conf 手册页包含其他详细信息。