No modo transparente, as seguintes regras do 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
Pelo que sei, 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 para onde encaminhá-lo, já que o IP de destino mudou agora?
Responder1
Você está certo de que, com o REDIRECT
, o Squid não consegue ver o IP de destino original pretendido; em vez disso, resolverá o host fornecido pelo cliente no Host:
cabeçalho HTTP, que é obrigatório no HTTP 1.1.
Responder2
Isso é muito semelhante ao gateway.
Quando o host cliente não sabe onde reside o host de destino, ele envia o pacote para o gateway padrão. E o gateway define para onde esse pacote deve ser enviado.
O proxy transparente faz o mesmo. Todos os pacotes para 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
e dst
as portas correspondentes e, em seguida, envia o pacote como o gateway faz, ou envia imediatamente uma resposta se ele foi armazenado em cache antes.
A ideia principal é que a porta de destino seja armazenada dentro de cada pacote, enquanto o pacote pode ser roteado para diferentes hosts/portas em trânsito.