对于定义为的桥
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
到桥中,那么它将不再起作用。您只是从明显错误的配置中得到了稍微异常的结果。