O que iptables -j REDIRECT * realmente * faz nos cabeçalhos de pacotes?

5

Por curiosidade, estou lendo alguns tutoriais sobre proxies TOR transparentes, já que é um tópico bastante interessante do ponto de vista da rede. Ao contrário dos gateways VPN que usam apenas tun / tap interfaces e são totalmente claros para mim, o proxy TOR usa uma única porta. Todos os tutoriais repetem a linha mágica:

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

onde eth0 é a interface de entrada (LAN) e 9040 é alguma porta TOR. O problema é que eu não entendo completamente porque tal coisa faz sentido do ponto de vista da rede.

De acordo com meu entendimento das cadeias redirect / dst-nat e como ela parece funcionar nos roteadores físicos, dst-nat chain leva dst-port e dst-addr ANTES a decisão de roteamento é tomada e os muda para outra coisa. Então, por exemplo:

  • antes de dst-nat : 192.168.1.2:46364 -> 88.88.88.88:80
  • após dst-nat : 192.168.1.2:46364 -> 99.99.99.99:8080

E 99.99.99.99:8080 é o que outras cadeias na faixa de fluxo de pacotes IP veem (por exemplo filter table) e é assim que o pacote parece a partir de agora depois de sair do dispositivo, por exemplo.

Agora, muitas pessoas na Internet (incluindo neste stackexchange) afirmaram que redirect é basicamente o mesmo que dst-nat com dst-addr definido para o endereço local da interface. De tal forma, esta regra:

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

claramente não faz sentido. Se assim fosse, o TOR receberia all pacotes com destino 127.0.0.1:9040 . Para aplicações típicas onde o app pega o pacote e responde de alguma forma (por exemplo, servidores web) faz todo o sentido porque afinal de contas, tal processo de servidor é o destino final do pacote, então está certo que o endereço de destino seja localhost. Mas o roteador TOR está bem ... um roteador, então ele precisa conhecer o destino original do pacote. Estou esquecendo de algo? O DNAT não afeta o que os aplicativos locais recebem? Ou é um comportamento específico da diretiva REDIRECT ?

    
por Lapsio 28.12.2017 / 22:36

1 resposta

3

Dê uma olhada nesta resposta: Como um proxy SOCKS transparente sabe qual IP de destino usar?

Cotação:

O iptables substitui o endereço de destino original, mas lembra o antigo. O código do aplicativo pode então buscá-lo solicitando uma opção de soquete especial, SO_ORIGINAL_DST .

    
por 14.03.2018 / 20:18