HTTP 代理链中的 DNS 故障:哪一跳解析域名?
诊断链式正向代理时,区分访问本地代理、解析上级代理和解析网站这三件事。
client → local forward proxy → HTTP parent → website从真正失败的域名入手,而不是笼统地说所有 DNS 都归“代理”负责:
| 需要的域名 | 需要访问它的跳点 |
|---|---|
| 本地代理端点 | 客户端 |
| HTTP 上级代理端点 | 本地正向代理 |
| 网站端点 | 上级代理在建立最终连接时 |
当端点是主机名时,这些跳点可能使用不同的解析器。对于 HTTPS,正向代理可以把 CONNECT 的目标主机和端口交给上级代理,由它建立最终连接。原始客户端不必先解析网站。普通 HTTP 转发同样会把目标信息继续往前带。
这并不是保证每个域名只由一台机器查询。ACL 评估、缓存、策略和实现细节都可能带来额外的查询。
上级代理不可用时要检查回退策略。如果允许直接访问,本地代理就可能成为面向网站的那一跳,并拥有自己的解析器和源地址决策。仅仅配置了上级代理,并不能证明每个请求都用了它。
出现故障时,先确认失败的域名以及尝试解析它的进程,再去修改 hosts 文件。客户端一侧的修改无法修复下游的每一个决策。最终的公共源地址属于打开网站连接的那一跳;观察这个源地址并不等于测量 DNS 发生在哪里。