我有一台带有 2 个网卡的 Ubuntu 20.04 服务器,这两个网卡都是(独立)网桥的一部分,其中一个还处理 VLAN。它连接到托管交换机,最后连接到我的防火墙(OPNsense)上的中继端口。br0
刚好桥接到我的主 LAN(无 VLAN),并且br1
是带有标签 13 的 VLAN 的一部分。我还有另一个 VLAN(标签 2),它直接通过 使用的物理接口br1
。
现在,当我通过不同的界面运行速度测试(Ookla)时,会发生以下情况:
$ (speedtest -s 43267 -I br0; speedtest -s 43267 -I br1; speedtest -s 43267 -I vlan2) | grep -E '(Latency|Download|Upload|Packet Loss)'
Latency: 10.83 ms (2.03 ms jitter)
Download: 136.67 Mbps (data used: 160.7 MB )
Upload: 30.44 Mbps (data used: 15.2 MB )
Packet Loss: 0.0%
Latency: 11.32 ms (3.09 ms jitter)
Download: 155.42 Mbps (data used: 183.3 MB )
Upload: 30.37 Mbps (data used: 14.5 MB )
Packet Loss: 0.0%
Latency: 11.91 ms (9.06 ms jitter)
Download: 294.56 Mbps (data used: 393.4 MB )
Upload: 29.76 Mbps (data used: 13.4 MB )
Packet Loss: 0.0%
我之所以选择这个特定的服务器,是因为我一直能够从中获得一致的结果。我的 ISP 给我 300/30,而当使用接口时,vlan2
我始终获得 290+ 的下载速度。但正如你所看到的,通过桥接的任何东西都只能获得一半。我知道 Ookla 的速度测试可能不算“好”的测试,但有时确实感觉 NIC 很慢,因为 SSH 进入盒子(通过br0
)有时不是即时的。即便如此,为什么 Ookla 的测试会始终如一达到可用带宽的一半左右?这让我相信实际上是网桥出了问题。另外别忘了,最后两个结果使用了相同的物理接口,所以这不是布线/硬件问题。
此外,iptables
和ebtables
都设置为ACCEPT
所有内容。我不确定是否ebtables
正在使用,因为应该有 3 个默认表,但我只有filter
。lsmod
也没有显示任何内容eb
(我认为模块被调用了ebt
还是什么?)。
相关部分来自lshw
:
*-network
description: Ethernet interface
product: I211 Gigabit Network Connection
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:06:00.0
logical name: enp6s0
version: 03
serial: 70:85:c2:31:6d:b1
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.6.0-k duplex=full firmware=0. 4-1 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
resources: irq:17 memory:dc200000-dc21ffff ioport:e000(size=32) memory:dc220000-dc223fff
*-network
description: Ethernet interface
product: Ethernet Connection (2) I219-V
vendor: Intel Corporation
physical id: 1f.6
bus info: pci@0000:00:1f.6
logical name: enp0s31f6
version: 00
serial: 70:85:c2:31:6d:b3
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.2-4 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
resources: irq:144 memory:dc500000-dc51ffff
接口enp0s31f6
由 所使用br0
,因此enp6s0
和br1
也是vlan13
。vlan2
有一件事可能会进一步复杂化:NIC 使用完全不同的驱动程序(igb
vs e1000e
)和两个都有同样的问题。驱动程序固件似乎也正确加载了。当我检查时sysctl -a | grep -F .br1
,... | grep -F .vlan2
所有值都是确切地一样。无论如何,我只做了一些 sysctl 调整:
# Reverse path fltering (0 = disabled, 1 = strict, 2 = loose)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.enp0s31f6.rp_filter = 1
net.ipv4.conf.br0.rp_filter = 1
# VLAN interfaces should do loose checking
net.ipv4.conf.enp6s0.rp_filter = 2
net.ipv4.conf.vlan2.rp_filter = 2
net.ipv4.conf.vlan13.rp_filter = 2
net.ipv4.conf.br1.rp_filter = 2
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.enp0s31f6.disable_ipv6 = 1
net.ipv6.conf.enp6s0.disable_ipv6 = 1
net.ipv6.conf.br0.disable_ipv6 = 1
net.ipv6.conf.br1.disable_ipv6 = 1
net.ipv6.conf.vlan2.disable_ipv6 = 1
net.ipv6.conf.vlan13.disable_ipv6 = 1
最后,uname -pr
:5.4.0-113-generic x86_64
。
我确实注意到在使用时enp6s0
使用了mq
调度程序/规则。不过,切换它们并没有改变任何事情,而且由于它们是不同的驱动程序,我想看到不同的调度程序并不意外。我还发现了一些关于桥梁和enp0s31f6
fq_codel
e1000e驱动程序,但由于我也遇到了伊格拜尔我认为这些与这里的问题无关。当此服务器在 Ubuntu 18.04 上使用相同的网络设置时,我绝对可以饱和我的 ISP,当时他们只给我 250/25,而测试通常会显示 240+。所以我想要么是桥接处理方式发生了变化,要么是某些系统参数的默认设置发生了变化,并且与我的设置不兼容,要么是驱动程序中确实存在(另一个)错误。
顺便说一下,我的接口由 networkd(通过 netplan)管理。我会添加 YAML 文件,但我认为描述非常清楚,而且已经很长了。:> 当然,如果需要,我可以随时编辑它们。
我的桥梁性能相对较差的原因可能是什么?
答案1
我遇到了类似的问题,我发现在进行速度测试等时,通过桥接的 ping 会失败。
将 mtu 提升到 9000 对我来说解决了问题,现在 ping 延迟几乎没有变化,而 speedtest 以 500mbps 的速度下载,请注意,在我的情况下,我只修改了 mtu br1,这是我的内部接口,br0 连接到的路由器仅使用 1500 的 mtu,提高接口 mtu 会导致性能下降。
查看桥接接口的 mtu
bridge link
我的 netplan /etc/netplan/xxxxx.yml
# This is the network config written by 'subiquity'
network:
ethernets:
ens160:
mtu: 9000
dhcp4: no
ens192:
mtu: 1500
dhcp4: no
ens224:
mtu: 1500
dhcp4: no
ens256:
mtu: 9000
dhcp4: no
bridges:
br0:
dhcp4: true
interfaces:
- ens192
- ens224
br1:
dhcp4: true
interfaces:
- ens160
- ens256
version: 2
我希望这有帮助