client → local forward proxy → HTTP parent → website

从真正失败的域名入手,而不是笼统地说所有 DNS 都归“代理”负责:

需要的域名需要访问它的跳点
本地代理端点客户端
HTTP 上级代理端点本地正向代理
网站端点上级代理在建立最终连接时

当端点是主机名时,这些跳点可能使用不同的解析器。对于 HTTPS,正向代理可以把 CONNECT 的目标主机和端口交给上级代理,由它建立最终连接。原始客户端不必先解析网站。普通 HTTP 转发同样会把目标信息继续往前带。

这并不是保证每个域名只由一台机器查询。ACL 评估、缓存、策略和实现细节都可能带来额外的查询。

上级代理不可用时要检查回退策略。如果允许直接访问,本地代理就可能成为面向网站的那一跳,并拥有自己的解析器和源地址决策。仅仅配置了上级代理,并不能证明每个请求都用了它。

出现故障时,先确认失败的域名以及尝试解析它的进程,再去修改 hosts 文件。客户端一侧的修改无法修复下游的每一个决策。最终的公共源地址属于打开网站连接的那一跳;观察这个源地址并不等于测量 DNS 发生在哪里。

相关文章