网桥在第 3 层(iP)而不是第 2 层(以太网)转发数据

网桥在第 3 层(iP)而不是第 2 层(以太网)转发数据

我有一些与网桥和 ip netns 一起使用的脚本。以前是在layer2上转发数据包,但是升级我的内核后,内核似乎在layer3上转发数据包。在较新的内核中,它将触发 iptables 表过滤器和链 FORWARD。如果我在转发链中添加一条规则,它将匹配数据包;或者,如果我通过 sysctl 禁用 ip_forward,它将不会转发任何 IP 数据包。但是arp包好像还是有转发的。

然后我在虚拟机中构建了centos7并简化了我的脚本。我发现它在内核 5.2.14 上的第 2 层上转发 IP 数据包,但在内核 5.3.13 上的第 3 层上转发 IP 数据包。我从以下位置获得了内核 rpm193.49.22.109。我注意到内核 5.2 中发生了一些变化内核新手,但是没有提到转发的行为。我想知道发生了什么事。或者也许我应该报告一个错误?

示例脚本:

#!/bin/bash

DEVICE=enp0s8

date
uname -a
ip net del ns &> /dev/null
ip net add ns
ip l a v1 type veth peer name v2
ip l s v2 netns ns
ip l s ${DEVICE} netns ns
ip a a 192.168.56.22/24 dev v1
ip l s v1 up
ip net exec ns ip l a name br type bridge
ip net exec ns ip l s dev ${DEVICE} master br
ip net exec ns ip l s dev v2 master br
ip net exec ns ip l s dev br up
ip net exec ns ip l s dev ${DEVICE} up
ip net exec ns ip l s dev v2 up
ip net exec ns ip a a 192.168.56.23/24 dev br
ip net exec ns iptables -A FORWARD -j DROP
echo 1 | ip net exec ns tee /proc/sys/net/ipv4/ip_forward > /dev/null
ip nei flush dev v1
ping 192.168.56.1 -c1 &> /dev/null
ping 192.168.56.1 -i1 -c5 
ip net exec ns iptables -L FORWARD -nv

相关内容