我有以下配置:
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 链中添加一条日志记录规则,以查看您的数据包是否确实被正确重写并发送到目标主机。