我有以下configuration:
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进行testing。
如果要重写传入数据包,则应将规则添加到PREROUTING链中; nat规则中的OUTPUT链仅用于本地生成的数据包。
更新1:
一旦在PREROUTING表中设置了它,检查目标主机(10.2.3.4)实际上是否有10.2.3.1作为它的默认网关,否则答案永远不会到达源。
在FORWARD链中添加一个日志logging规则,看看你的数据包是否被正确地重写并发送到目标主机。