被重定向的 SYN 可能已经到达 Squid,客户端却仍在超时。在 DNAT 方案中,回程数据包也必须到达持有地址转换状态的网关。

设想这样一个局域网:

client 192.168.40.25 → gateway 192.168.40.1
                         DNAT → proxy 192.168.40.10
proxy 192.168.40.10 → client 192.168.40.25 directly

客户端最初连接的是某个网站地址。经过 DNAT 后,代理看到客户端的源地址,可能按本地子网路由直接回复。这个回复绕过了网关的反向转换,于是客户端收到的来源是代理地址,而不是它期望的网站地址。网关无法修复从未收到的数据包。

方案后果
让代理的回复经过执行转换的网关进入代理的连接可以保留客户端的源地址
同时应用合适的源地址转换代理以对端身份回复网关,但此时看到的是转换后的源地址,而不是原始客户端

不要为了日志更好看就移除 SNAT,除非你先验证回程路由。广泛启用 SNAT 还会改变源 ACL 与归因;把这当作设计的一部分接受下来。

可信的 HTTP 跳转可以把客户端元数据放进转发头,但 NAT 不会创建这个头,也不会把它变成 TCP 对端身份。在通往 Squid 的连接上保留源地址,并不等于在 Squid 另行发起网站连接时也保留它。

最后,拦截设计仍然必须提供 Squid 所需的目标信息。对称回程路由解决的是这一超时机制,而不是整个透明代理配置。

相关文章