跨设备的 iproute 和 nat

跨设备的 iproute 和 nat

我有以下配置:

vlan123@eth0 - range 1.2.3.0/24, with 1.2.3.4 assigned to it
br2000 - range 10.2.3.0/24

ip route我看来:

10.2.3.0/24 dev br2000 proto kernel scope link src 10.2.3.1

在 iptables 中,我重写了传入数据包的目的地(表nat):

-A PREROUTING -d 1.2.3.4/32 -j DNAT --to-destination 10.2.3.4

如果我现在尝试 ping 该地址1.2.3.4,不幸的是,我无法获得我期望的转发。ip route get 10.2.3.4 from 2.3.4.5 iif vlan123返回:

RTNETLINK answers: Invalid cross-device link

这似乎证实了没有正确的路由。问题可能出在哪里?

IP 转发在 sysctl 中启用,并且我还禁用了 rp_filter 以进行测试。

答案1

如果要重写传入的数据包,则应向PREROUTING链添加规则;nat规则中的OUTPUT链仅用于本地生成的数据包。

更新 1:

在 PREROUTING 表中设置该选项后,请检查目标主机 (10.2.3.4) 是否确实以 10.2.3.1 作为其默认网关,否则答案将永远不会到达源。

还要在 FORWARD 链中添加一条日志记录规则,以查看您的数据包是否确实被正确重写并发送到目标主机。

相关内容