代理排障实战：超时、DNS 污染与证书问题

代理排障实战：超时、DNS 污染与证书问题引言代理配完不通，是最让人抓狂的运维场景。本文按“连接→解析→加密”三层，给出可落地的排查路径与真实案例。一、连接层：超时还是拒绝？ curl -v -x http://proxy:8080 https://target.com Connection refused：代理地址/端口写错，或代理进程没起。 Connection timed out：网络不通或被防火墙拦截。先验证链路： ping -c 3 proxy.host nc -vz proxy.host 8080 # 或 telnet proxy.host 8080 Read timed out：连上了但后端迟迟不响应，调大 proxy_read_timeout。二、解析层：DNS 在哪发生？代理有“本地解析”和“远端解析”两种模式，差异巨大：远端解析（推荐）：客户端把域名发给代理，由代理去解析，可绕过本机 DNS 污染。本地解析：客户端先解析出 IP 再交给代理，若本机 DNS 被污染，代理也无能为力。排查 DNS 污染： dig target.com @223.5.5.5 dig target.com @8.8.8.8 # 两个公共 DNS 结果不一致，往往说明存在污染或劫持三、加密层：证书问题自签证书：代理做中间人解密时，需把自定义 CA 装到客户端信任库。 SNI 不匹配：SNI 残留旧域名时后端握手失败。证书锁定（Certificate Pinning）：部分 App 锁死证书，强行代理会直接报错，这类通常无法简单绕过，属预期安全行为。用 OpenSSL 直接验证链路： openssl s_client -connect target.com:443 -servername target.com 四、防火墙与 iptables 确认没有规则把代理流量挡掉： iptables -L -n -v # 查看 filter 表 iptables -t nat -L -n -v # 查看 NAT（透明代理相关）五、日志定位代理访问日志：看请求是否到达、返回码是什么。后端错误日志：看是否收到请求、为何 5xx。 Nginx 可加 $upstream_response_time、$upstream_addr 定位慢后端。六、抓包定位 tcpdump -i any -n host proxy.ip and port 8080 -w proxy.pcap 抓下来用 Wireshark 看请求到底卡在哪一跳：是 TCP 没建起来、TLS 握手失败，还是应用层一直没响应。七、浏览器与移动端浏览器：设置里配置 HTTP/SOCKS 代理；用无痕窗口排除扩展干扰。移动端：Wi-Fi 高级设置里填代理；注意部分 App 不遵守系统代理，需借助 VPN/透明代理才能覆盖。八、两个真实案例案例 A：连得上但偶尔 504 —— 代理读超时设了 10s，而后端报表任务要 40s。把 proxy_read_timeout 调到 60s 解决。案例 B：某些域名打不开，其他正常 —— dig 对比发现该域名本地解析被劫持。改用远端解析（socks5h/远端 HTTP 代理）后恢复。九、排障清单（按顺序） TCP 连通性（ping/telnet/nc）。代理进程与端口（ss -lntp）。 DNS 解析位置与是否被污染（dig 对比）。 TLS 握手（openssl s_client）。后端健康（curl 直连后端）。抓包看真实交互（tcpdump）。小结代理排障的本质是分层定位：先确认 TCP 通不通，再看 DNS 在哪解析，最后查 TLS 握手。按顺序来，很少解决不了。延伸本系列前四篇：正向/反向代理、Nginx、HAProxy、代理协议