透明模式下squid如何理解目标IP地址

透明模式下squid如何理解目标IP地址

在透明模式下,以下 iptable 规则用于将流量重定向到 squid。

iptables -I PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 3128

据我所知,REDIRECT 将目标 IP 地址更改为本地接口的 IP。

那么当流量到达 squid 时,由于目标 IP 已经改变,squid 如何知道将其转发到哪里?

答案1

您说得对,使用REDIRECT,Squid 无法看到原始的目标 IP;相反,它将解析客户端在Host:HTTP 标头中提供的主机,这在 HTTP 1.1 中是强制性的。

答案2

这与网关非常相似。

当客户端主机不知道目标主机在哪里时,它会将数据包发送到默认网关。网关定义该数据包应发送到何处。

透明代理也一样。所有发往 xxx.xxx.xxx.xxx:80 的数据包都会被转移到端口 3128,而不是数据包头中提到的端口。Squid 分析数据包及其头 -src以及dst相应的端口,然后像网关一样提交数据包,或者如果之前缓存过则立即发送应答。

主要思想是目标端口存储在每个数据包内,而数据包可以在传输过程中被路由到不同的主机/端口。

相关内容