为什么我只能 ping 通连接到 Linux 桥接器的 1023 个接口中的 1001 个接口?

为什么我只能 ping 通连接到 Linux 桥接器的 1023 个接口中的 1001 个接口?

我已经创建了一个 Linux 桥接器br0并创建了 1023veth对,这样一端连接到桥接器,另一端连接到netns具有 IP 的。现在我尝试 ping 连接到的所有接口br0,但我只能 ping 1001 个接口。STP 处于关闭状态,br0并且 IP 地址br0172.17.0.1

number=1
total_veth=1023
a=2
b=0
while [ $number -le $total_veth ]
do
  name="test${number}"
  if [ $a -gt 255 ]
  then
    a=0
    b=$(($b + 1))
  fi
  IP=172.17.$b.$a
  ip link add dev veth_b$number type veth peer name veth_e$number
  brctl addif br0 veth_b$number
  ip link set veth_b$number up
  ip netns add test$number
  ip link set veth_e$number netns test$number
  ip netns exec test$number ifconfig veth_e$number $IP/16 up 
  ip netns exec test$number route add default gw 172.17.0.1 veth_e$number
  a=$((a+1))
  echo "$number:$IP"
  number=$(($number+1))
done

当我从网桥上移除 22 个接口时,我可以 ping 所有 1001 个接口。这表明网桥存在某种限制,有人能帮我了解这里发生了什么吗?谢谢。

答案1

增加入口队列大小echo 'net.core.netdev_max_backlog = 1024' >> /etc/sysctl.conf可以解决问题,因为内核默认入口队列大小是 1000,这就是为什么我只能达到 1001 个容器而不是全部。

答案2

您已达到 BR_MAX_PORTS 限制。只需创建第二个桥并将两个桥连接在一起即可。请参阅这里更多细节。

相关内容