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
?