iptables nat 表没有在 PREROUTING 中改变目标 IP?

iptables nat 表没有在 PREROUTING 中改变目标 IP?

好的,在原始 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 )。

也许这张图片可以清楚地说明如何检查数据包的流动:iptables 中的数据包过滤

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

相关内容