NF getsockopt(SO_ORIGINAL_DST) 指向原始目的地的查询。在拦截配置中,Squid 必须还原被重定向的连接最初要去的方向。

显式配置的浏览器是主动把请求发给代理的。仅仅因为 Squid 监听端口旁边写着 intercept,那条连接并不会因此获得 NAT 拦截历史。

所以这种错配可能在目的地证书成为问题之前就先失败。

先看连接是怎么到达的

  • 如果应用配置了代理地址,先确定它应该使用普通的正向代理监听器。
  • 如果是网关把本该直连的流量重定向过来,确认它确实到达了预期的拦截监听器,并确认所支持的 NAT 设计保留了必要的目的地信息。
  • 如果两种模式同时存在,检查失败的客户端实际连接的是哪个地址和端口。

Squid 关于 http_port 的文档把区别讲得很清楚:省略模式标志选择正向代理模式;intercept 则期望在 IP 层做 NAT 拦截。

然后把传输安全分开处理。HTTP 代理可以通过 CONNECT 承载 HTTPS。到代理的 TLS 连接需要匹配的监听器和客户端配置。解密到目的地的流量又是另一项可选能力。

不要照搬那种只因为目的地 URL 以 HTTPS 开头就打开证书生成的旧“HTTPS 修复”。先把客户端和监听器之间的配合修好。之后如果还剩下真正的 TLS 报错,那才是更值得排查的报错。

相关文章