我正在尝试在 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)。这个观察与作者所说的有关吗?
您引用的文字已经回答了您的第一个问题:
即路由和包过滤。
对于您的第二个问题:您似乎是从系统本身发出的。因此数据包不会进入系统,因此这些数据包不会通过 PREROUTING 链。您将需要从该系统外部发起这些数据包。