sysctl
我有一个具有多个接口的系统。我使用一些选项、路由表和规则将所有这些接口相互隔离。
每个接口都有自己的路由表,定义默认路由。
每个路由表都有一组 4 条规则,定义哪些数据包应该进入哪个表。
为了简单起见,假设我有eth0 (192.168.1.1)
和eth1 (192.168.1.2)
。
来自
192.168.1.1
表格eth0
到
192.168.1.1
表eth0
如果 eth0
table eth0
oif eth0
table eth0
因为eth2
它是一样的。
选项sysctl
包括:
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1
对于我预期的 99% 用例,此方法都运行良好,但有一个用例失败了。如果从未绑定的套接字生成数据包(例如使用“sendto”回复 UDP 客户端),则调用会失败并显示“网络无法访问”。如果在调用 sendto 之前绑定了特定 IP 地址,则调用会按预期成功。
除了为这些情况设置一个捕获所有默认路由之外,是否可以使用策略路由(例如 iptables、ip 规则)来解决这个问题?
谢谢