![路由表是否应该仅应用于传出数据包(而不是转发)?](https://linux22.com/image/224293/%E8%B7%AF%E7%94%B1%E8%A1%A8%E6%98%AF%E5%90%A6%E5%BA%94%E8%AF%A5%E4%BB%85%E5%BA%94%E7%94%A8%E4%BA%8E%E4%BC%A0%E5%87%BA%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%88%E8%80%8C%E4%B8%8D%E6%98%AF%E8%BD%AC%E5%8F%91%EF%BC%89%EF%BC%9F.png)
我试图将数据包通过设备 B 从设备 A 转发到设备 C。我认为我所要做的就是在设备 A 上说:C 的数据包必须发送到 B,然后 B 知道 C 在哪里,所以一切都应该乖一点...
然而,这不起作用。我已经检查过了,net.ipv4.ip_forward=1
并且/proc/sys/net/ipv4/ip_forward = 1
.我也定了sysctl -w net.ipv4.conf.all.rp_filter=0
。我还以防万一为特定设备设置相同的值。
举个例子:
设备 A = 192.168.10.1/24
设备 B eth0 = 192.168.10.2/24
设备 B eth1 = 192.168.11.1/24
设备 C = 192.168.11.2/24
现在所有设备都有它们所需的基本子网的路由,例如设备B:
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.2
192.168.11.0/24 dev eth1 proto kernel scope link src 192.168.11.1
理论上,我认为我需要做的就是在设备 A 上说:
sudo ip route add 192.168.11.0/24 via 192.168.10.2
但它不起作用
现在最奇怪的是我可以从 A ping 到 192.168.11.1 是的。但不是192.168.11.2?它怎么可能可以到达子网上的某个设备,但不能到达子网上的其他地址?
路由表不适用于传入数据包?
https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks 在此图中,它显示了 2 个路由决策,一个在输入链之前,一个在输出链之前。看起来路由表(用命令 ip route 显示)仅适用于输出链之前的决策。因为如果我从设备 B ping 192.168.11.2,它就能找到它。
我的主要问题是,这是预期的吗?
答案1
在电路板的新图像上复制设置可以按预期方式进行。尽管net.ipv4.ip_forward=1,数据包并未被转发。
仍然不知道确切的原因,但图像在正在使用的开发板上不是很稳定。