![路由和数据包修改](https://linux22.com/image/752599/%E8%B7%AF%E7%94%B1%E5%92%8C%E6%95%B0%E6%8D%AE%E5%8C%85%E4%BF%AE%E6%94%B9.png)
我希望将数据包从一个子网传输到另一个子网,距离不止一跳;例如:
[192.168.0.4]--->[192.168.10.11]--->[172.23.100.13]
我想让 192.168.0.4 连接到 172.23.100.13,但是问题是:
# ip route add 172.23.100.13/32 via 192.168.10.11
Error: Nexthop has invalid gateway.
据我理解,Error: Nexthop has invalid gateway.
意思是“你不能这样做,因为 192.168.10.11 不在 192.168.0.0/24 网络上,而这正是你所在的网络。”
我的问题是,使用 iptables 规则是否可以实现这一点;我推测这是可能的,但我还没有能够让它正常工作。阅读了一些资料后,我尝试设置 PREROUTING nat 规则,将发往 172.23.100.13 的数据包发送到 192.168.10.11:
# iptables -t nat -A PREROUTING -d 172.23.100.13 -j DNAT --to-destination 192.168.10.11
不幸的是,什么都没发生。我甚至不知道如何进行调试。我试过:
# iptables -t nat -A PREROUTING -d 172.23.100.13 -j LOG
但日志中没有显示任何内容
我也尝试过 tcpdump:
tcpdump -i <interface> -vv | egrep '(172.23.109.13|192.168.10.11)’ &
但只得到以下重复的一行:
192.168.0.4.43898 > 172.23.100.13.8000: Flags [S], cksum 0x2374 (incorrect -> 0xa00f), seq 573960788, win 62727, options [mss 8961,sackOK,TS val 1537225626 ecr 0,nop,wscale 7], length 0
这是正确的方法吗?有什么线索可以说明要检查什么吗?
谢谢你!
答案1
我找到了这个谜题中缺失的一块。机器192.168.10.11
能够发送数据包,172.23.100.13
因为网络似乎有一个 VXLAN 接口172.23.100.0/24
;因此又回到了基本要求,即两个网络必须在一台机器上连接才能路由到它们。