iptables nat table não está mudando o IP de destino em PREROUTING?

2

OK, então em uma instalação baunilha do Ubuntu 14.04.2, eu executo os seguintes comandos:

sudo bash -c 'echo 1 > "/proc/sys/net/ipv4/ip_forward"'
sudo iptables -t nat -A PREROUTING -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230
sudo tcpdump -i wlan0 icmp and icmp[icmptype]=icmp-echo -n

Então eu pingar 192.168.100.1 de outro terminal. Mas eu vejo tcpdump me mostrando isso:

01:46:37.536354 IP 10.196.100.76 > 192.168.100.1: ICMP echo request, id 6635, seq 1, length 64

No entanto, se eu limpar a tabela nat e executar este comando em vez disso:

sudo iptables -t nat -A OUTPUT -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230

Então, tcpdump dá isto:

01:46:53.168639 IP 10.196.100.76 > 10.196.106.230: ICMP echo request, id 6638, seq 1, length 64

(O ping é bem-sucedido, com um pong vindo da outra máquina.)

A partir dos inúmeros tutoriais on-line, eu esperaria que o IP de destino fosse alterado mesmo no Cadeia PREROUTING, certo? Ou estou faltando alguma coisa?

    
por garyF 15.10.2015 / 22:25

1 resposta

1

A cadeia PREROUTING não é avaliada em pacotes gerados por processos locais.

Sua primeira regra funcionará no envio de pacotes a partir de uma interface de rede (tente fazer ping de um computador diferente).

Talvez essa imagem possa esclarecer como o fluxo de pacotes é examinado:

fonte: link

    
por 11.11.2015 / 23:25

Tags