较新版本的Linux内核不再能够路由到网桥

时间:2018-12-18 05:07:29

标签: linux routing

问题陈述

我有一个名为cni0的网桥,它连接到它们自己的网络名称空间中的容器。

当我尝试创建到这些容器之一的静态路由时, Linux内核的较旧版本将路由流量并将其桥接到该容器(通过ping和tcpdump测试)。新版本则没有。

复制步骤

我在cni0上有一个桥接接口,该接口正在网络命名空间内的10.5.2.19上监听。同一接口也在10.233.1.18上监听。我也有一个外部接口eth1,上面没有任何内容或无关的地址。 cni0上有10.233.64.1/24个地址,上面有通常的本地路由以及指向该地址的路由10.233.64.0/24

在主机名称空间中,我创建一条路由,如下所示: ip route add 10.5.2.19 via 10.233.1.18

我可以从主机名称空间ping 10.5.2.19,并且数据包到达我测试过的所有内核版本的网络名称空间。

使用静态ARP,我无法从某些较新版本的内核上的远程主机ping。 ICMP数据包从eth1接口进入,然后无路可走。我能够找到的任何柜台上都没有下落。我看不到试图找到10.5.2.19的任何ARP,如果我尝试路由到eth3这样的普通接口,就会发生这种情况。

我为所有接口设置了rp_filter=0log_martians=1accept_local=1。 (以及alldefault)没有道者被记录。

我检查了一下,ebtablesiptables中没有任何干扰。 ip route show table 0 | grep 10.5.2.19仅显示我在上面添加的路线。

工作和不工作的内核版本

有效的内核版本: 3.10.0-862.14.4.el7.x86_64 # Centos 7.5.1804

此行内核中的先前版本也可以使用。

无效的内核版本:
3.10.0-957.1.3.el7.x86.64 #CENTOS 7.6.1810

也无法正常工作:Fedora行中的4.11.x经测试无法正常工作

(考虑到RedHat的樱桃小贴士最近从4.x带回来的东西,这不会令我感到惊讶)。

所以要 重申我的问题 :为什么路由到网桥会起作用,而不再适用于较新的内核版本?是否因为Linux不支持此功能而我才很幸运?

0 个答案:

没有答案