是否可以在不创建名称空间的情况下将本地路由表中的广播和本地路由移动到自定义路由表?

是否可以在不创建名称空间的情况下将本地路由表中的广播和本地路由移动到自定义路由表?

我有一个有两个接口的主机。 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 addressip 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

相关内容