iptables nat表是不是在PREROUTING改变目标IP?

好的,在一个vanilla Ubuntu 14.04.2安装上,我运行以下命令:

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 

然后我从另一个terminalping 192.168.100.1 。 但是,我看到tcpdump显示了我:

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

但是,如果我刷新NAT表,并运行此命令 :

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

然后, tcpdump给出了这个:

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

(乒是成功的,乒乓从另一台机器回来。)

从众多的在线教程中 ,我预计即使在PREROUTING链中也要更改目标IP地址,对吧? 或者我错过了什么?

PREROUTING链不会评估本地进程生成的数据包。

您的第一条规则将对从networking接口input数据包起作用(尝试从另一台计算机ping)。

也许这张图片可以澄清如何检查数据包的stream量: 在iptables中进行数据包过滤

来源: https : //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-IPTables.html