我有一个有两个接口的主机。 ens4 是 mgmnt,ens3 是另一个网络。
# ip -br a | sort
ens1 DOWN
ens2 DOWN
ens3 UP 172.16.10.1
ens4 UP 192.168.1.100
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.100 0.0.0.0 UG 0 0 0 ens4
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens4
172.16.10.1 0.0.0.0 255.255.255.0 U 0 0 0 ens3
我想将所有流向 ens3 的流量放入其自己的路由表中,这样到达该接口的流量就不会触及本地路由表。
我尝试了以下方法:
- 创建了一个新表
echo "100 custom" > /etc/iproute2/rt_table
- 添加路由和规则以匹配流量:
# ip route add 172.16.10.0/24 dev ens3 table custom
# ip rule add from 172.16.10.0/24 table custom
# ip route show table custom
172.16.10.0/24 dev ens3 scope link
# ip rule list
0: from all lookup local
32765: from 172.16.10.0/24 lookup custom
32766: from all lookup main
32767: from all lookup default
但是,我注意到广播和本地流量仍然在主表中
# ip route show table all | grep 172.16.10
172.16.10.0/24 dev ens3 scope link
broadcast 172.16.10.0 dev ens3 table local proto kernel scope link src 172.16.10.1
local 172.16.10.1 dev ens3 table local proto kernel scope host src 172.16.10.1
broadcast 172.16.10.255 dev ens3 table local proto kernel scope link src 172.16.10.1
因此我无法路由这些直接连接的路由。解决方法是将接口和路由表放入我们的名称空间中。是否可以将广播和本地路由移至不同的路由表?我认为问题在于我如何添加ip address
和ip rule
语句,但不确定。
有人知道我想做的事情是否可能吗?
答案1
弄清楚了。我需要删除添加的路由规则,然后使用 via 路由重新添加:
#ip route del 172.16.10.0/24 dev ens3 table custom
#ip route add 172.16.10.0/24 dev ens3 table custom via 172.16.10.1
# ip route show table custom
172.16.10.0/24 dev ens3 scope link
172.16.10.0/24 via 172.16.1 dev ens3