在透明模式下,使用以下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分析数据包及其头部 – src , dst和相应的端口,然后像网关一样提交数据包,或者在之前caching的情况下立即发送答案。
主要思想是将目标端口存储在每个数据包中,而数据包可以路由到不同的主机/端口。