好的,在原始 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
然后我192.168.100.1
从另一个终端 ping 了起来。但是,我看到的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
(ping 成功,并从另一台机器返回了 pong。)
来自大量教程在线,我期望即使在 PREROUTING 链中目标 IP 也会改变,对吗?还是我遗漏了什么?
答案1
PREROUTING 链不会对本地进程生成的数据包进行评估。
您的第一个规则将对从网络接口进入的数据包起作用(尝试从另一台计算机 ping )。