Você está correto que, com o REDIRECT
, o Squid não pode ver o IP de destino pretendido original; em vez disso, resolverá o host fornecido pelo cliente no cabeçalho Host:
HTTP, que é obrigatório no HTTP 1.1.
No modo transparente, as regras de iptable são usadas para redirecionar o tráfego para o squid.
iptables -I PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 3128
Conforme meu conhecimento, REDIRECT altera o endereço IP de destino para o IP da interface local.
Então, quando o tráfego chega ao squid, como o squid sabe onde encaminhá-lo, já que o IP de destino mudou agora?
Isso é muito parecido com o gateway.
Quando o host do cliente não sabe onde o host de destino reside, ele envia o pacote ao gateway padrão. E o gateway define onde esse pacote deve ser enviado.
Proxy transparente faz o mesmo. Todos os pacotes para o xxx.xxx.xxx.xxx:80 são desviados para a porta 3128 em vez da porta mencionada no cabeçalho do pacote. O Squid analisa o pacote e seus cabeçalhos - src
, dst
e as portas correspondentes, e então envia o pacote como o gateway, ou imediatamente envia uma resposta se já foi armazenado em cache antes.
A idéia principal de que a porta de destino é armazenada em cada pacote enquanto o pacote pode ser roteado para os diferentes hosts / portas em trânsito.