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

在透明模式下,使用以下iptable规则将stream量redirect到squid。

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

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

所以当stream量到达鱿鱼时,由于目的IP已经改变了,squid怎么知道要把它转发到哪里呢?

你是正确的,使用REDIRECT ,Squid不能看到原始的预期目标IP; 而是在HTTP 1.1中强制使用Host: HTTP头来parsing客户端提供的Host:

这与网关非常相似。

当客户端主机不知道目标主机所在的位置时,它将数据包发送到默认网关。 网关定义数据包在哪里发送。

透明代理也是这样做的。 所有到xxx.xxx.xxx.xxx:80的数据包都被转移到端口3128,而不是数据包报头中提到的端口。 Squid分析数据包及其头部 – srcdst和相应的端口,然后像网关一样提交数据包,或者在之前caching的情况下立即发送答案。

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