通过不同接口到达同一网络的两条路由

通过不同接口到达同一网络的两条路由

对于定义为的桥

auto br0
iface br0 inet dhcp
        bridge-ifaces enp0s8
        bridge-ports enp0s8
        up ifconfig enp0s8 up

iface enp0s8 inet manual

操作系统在接口上设置了 2 条路由up

192.168.1.0/24 dev enp0s8  proto kernel  scope link  src 192.168.1.134
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.134

但如果有人尝试用以下方法手动进行相同的操作:

ip route add 192.168.1.0/24 dev br0 proto kernel src 192.168.1.134
ip route add 192.168.1.0/24 dev enp0s8 proto kernel src 192.168.1.134

那么第二个命令失败并显示RTNETLINK answers: File exists

问题:

内核是否作弊或者我的ip route add命令中遗漏了一些键?

这不是关于这个配置是否有意义,而是关于“内核如何做到这一点”。

答案1

你应该检查一下官方文档其中表示(在第一个示例之后):

您会注意到 auto eth0 和 iface eth0 inet Manual 不在文件中。这是因为 br0 将调出分配给它的组件。

配置连接到网桥的以太网适配器是没有意义的,因为它们只是共享网桥的 IP 地址。

您无法手动添加路由的原因是您没有重现初始化脚本中的步骤。如果您设置了IP enp0s8,那么系统将允许您添加路由。再次注意,这是错误的,并且会使路由变得更加复杂(特别是如果您执行高级路由、转发或 NAT)。

要重现系统的初始化脚本,请在删除所有相关路由并删除桥接器(如果已存在)后:

brctl addbr br0
ifconfig enp0s8 192.168.1.0/24
ifconfig br0 192.168.1.0/24

这将ip route输出两条路线。如果您添加enp0s8到桥中,那么它将不再起作用。您只是从明显错误的配置中得到了稍微异常的结果。

相关内容