So, the first rule in my book's answer says that all packets that are meant to be sent via interface eth0 should have it's source IP changed to router's public IP. My teacher says that all packets that arrive on router's local interface should have their source address changed to routers public IP.
Para um roteador simples de duas interfaces, nenhum dos dois está errado.
Mas se o roteador tivesse várias interfaces "internas" (digamos, eth1, eth2, eth3), a solução do livro seria mais correta. A solução do professor iria desnecessariamente SNAT todo o tráfego interno , isto é, pacotes de uma sub-rede interna para outra.
In the second rule, book says that all packets coming on input "subinterface" of eth0 destined for port 80 should have their destination address changed and my teacher says that all packets going out of eth1 should have their address changed.
Se bem me lembro, a interface de saída ainda não está decidida no estágio de pré-roteamento (daí o nome "pré-roteamento"), então você não pode combinar -o
. Portanto, a regra do professor nem seria aceita pelo iptables. Mas vou ter que testar ...
Em segundo lugar, novamente, se o roteador tiver várias LANs, você não desejará que o DNAT (encaminhamento de porta) se aplique ao tráfego interno. (Imagine um host na eth2 tentando acessar um servidor HTTP na eth1 - você não desejaria que o roteador o desviasse acidentalmente para outro lugar ...) Portanto, se não houver -i
check, deve haver pelo menos uma verificação de endereço de destino -d
para evitar isso.