代理排障实战:超时、DNS 污染与证书问题
摘要
按连接、解析、加密三层给出代理排障路径:区分超时/拒绝、本地与远端 DNS 解析、自签/中间人/证书锁定问题,并附 curl/tcpdump/openssl、日志、浏览器与移动端及真实案例。
代理排障实战:超时、DNS 污染与证书问题
引言
代理配完不通,是最让人抓狂的运维场景。本文按“连接→解析→加密”三层,给出可落地的排查路径与真实案例。
一、连接层:超时还是拒绝?
Connection refused:代理地址/端口写错,或代理进程没起。Connection timed out:网络不通或被防火墙拦截。先验证链路:bashRead timed out:连上了但后端迟迟不响应,调大proxy_read_timeout。
二、解析层:DNS 在哪发生?
代理有“本地解析”和“远端解析”两种模式,差异巨大:
远端解析(推荐):客户端把域名发给代理,由代理去解析,可绕过本机 DNS 污染。
本地解析:客户端先解析出 IP 再交给代理,若本机 DNS 被污染,代理也无能为力。
排查 DNS 污染:
三、加密层:证书问题
自签证书:代理做中间人解密时,需把自定义 CA 装到客户端信任库。
SNI 不匹配:SNI 残留旧域名时后端握手失败。
证书锁定(Certificate Pinning):部分 App 锁死证书,强行代理会直接报错,这类通常无法简单绕过,属预期安全行为。
用 OpenSSL 直接验证链路:
四、防火墙与 iptables
确认没有规则把代理流量挡掉:
五、日志定位
代理访问日志:看请求是否到达、返回码是什么。
后端错误日志:看是否收到请求、为何 5xx。
Nginx 可加
$upstream_response_time、$upstream_addr定位慢后端。
六、抓包定位
抓下来用 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、代理协议
