我正在尝试在 PREROUTING 中尝试 DNAT。我找到了一个教程这里。其中包含以下句子:
这是在数据包进入时在 PREROUTING 链中完成的;这意味着 Linux 机器本身上的任何其他东西(路由、数据包过滤)都会看到数据包到达其“真实”目的地。
我想问一下作者最后一部分是什么意思anything else on the Linux box itself will see the packet going to its 'real' destination
?
我尝试了一个测试,我有一个虚拟设备(tap),并将传入的 ICMP 数据包重定向到该 tap 设备(我的 tap 设备地址是,10.0.4.1/24
并且有一个程序正在侦听 Tap 设备,因此其状态为 UP):
# iptables -t nat -A PREROUTING -i eth0 -p icmp -j DNAT --to-destination 10.0.4.2
当我 ping 外部 IP 时,该规则永远不会被使用(pkts
对于该规则,iptables 中的计数仍为 0)。这个观察结果与作者所说的有关吗?
答案1
你的第一个问题已经由你引用的文字回答了:
这是在数据包进入时在 PREROUTING 链中完成的;这意味着 Linux 机器本身上的任何其他内容(路由、包过滤)将看到数据包前往其“真实”目的地。
即路由和包过滤。
对于你的第二个问题:你似乎是从系统本身进行 ping 操作。因此数据包不会来进入系统,因此这些数据包不会通过 PREROUTING 链。您将需要从该系统外部生成这些数据包。