我已经创建了一个 Linux 桥接器br0
并创建了 1023veth
对,这样一端连接到桥接器,另一端连接到netns
具有 IP 的。现在我尝试 ping 连接到的所有接口br0
,但我只能 ping 1001 个接口。STP 处于关闭状态,br0
并且 IP 地址br0
为172.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 限制。只需创建第二个桥并将两个桥连接在一起即可。请参阅这里更多细节。