我有以下 NAT 设置:
+--------------+ +-----------------------+ +-------------------+
| | | | | |
| | | | | |
| PC 1 | | PC 2 (NAT) | | PC 3 |
| 10.0.0.3 +-------+ +-----+ 10.0.0.4 |
| | | | | (NAT 172.24.4.2) |
| | | | | |
+--------------+ +-----------------------+ +-------------------+
而 PC2 将执行 NAT,以便 10.0.0.4 在预路由期间转换为 172.24.4.2:
-A PREROUTING -d 172.24.4.2/32 -j DNAT --to-destination 10.0.0.4
当我尝试从 PC1 ping 到目标 IP 为 172.24.4.2 的 PC3 时。不知为何,数据包没有为我执行任何 DNAT。
以下是我在 PC3 上捕获的内容:
10:15:41.017632 IP 10.0.0.3 > 172.24.4.2: ICMP echo request, id 8705, seq 0, length 64
如果我将 PC3 IP 更改为不同的子网,它就可以正常工作。
有人知道为什么吗?
答案1
10.0.0.4 将在预路由期间转换为 172.24.4.2
您指定的规则恰恰相反。它应该将172.24.4.2
数据包中的目标地址转换为10.0.0.4
。
这是您应该在 PC2 上面向 PC1 的接口上看到的捕获内容,因为它tcpdump
显示了在 TCP 堆栈进行任何处理之前线路上的数据包。
您应该检查面向 PC3 的接口上的捕获。您还需要检查 PC2 上的路由,以确保172.24.4.2
地址路由正确。