我目前正在构建我的 DIY 路由器的新版本,我运行 Ubuntu 22.04 LTS 并进行最小安装,并firewalld
在其上运行 - 而且我运行的新硬件具有不同端口速度的“混合” - 至少是 10G、2.5G 和千兆位。
我这里有两个问题,我希望通过在所有端口之间设置虚拟交换机来解决它们。
我的“传统”版本桥接所有端口 - 据我所知,桥接器的运行速度只能与使用速度最慢的端口一样快。我通过创建桥接器来解决这个问题每接口速度。这很麻烦,对于 DHCP 服务器来说,这意味着我需要支持每个链路速度的一个子网。
我宁愿跑一子网,而我的 DHCP 服务器似乎在多个子网中有点不稳定。降低管理 DHCP 和其他服务的复杂性并扁平化我的网络将是可取的。我不需要我的基础安装中有多个子网。
我的测试箱的 Netplan 配置如下 -但我认为有些 10 千兆端口实际上是 1 千兆端口(不同型号有不同的端口,我忘了我买的型号是混合的)。如果是这样,我必须将千兆端口拆分到另一个网桥
# This is the network config written by 'subiquity'
network:
ethernets:
#10G ports Jumbo frames give slightly better speed
eno1:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:X1
set-name: SFP4
mtu: "9000"
# Top Left SFP cage
eno2:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:X2
set-name: SFP2
mtu: "9000"
# Bottom Left SFP cage
eno3:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:X3
set-name: SFP3
mtu: "9000"
# Top Right SFP cage
eno4:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:X4
set-name: SFP1
mtu: "9000"
# Bottom Right SFP cage
#2.5 gig ports follow physical labels
enp4s0:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:Xa
set-name: LAN1
enp5s0:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:Xb
set-name: LAN2
enp6s0:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:Xc
set-name: LAN3
enp7s0:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:Xd
set-name: LAN4
#wan port
enp8s0:
dhcp4: true
match:
macaddress: 20:7c:14:f3:XX:Xe
set-name: WAN
#bridges - Apparently bridges are only as fast as the slowest port,
#and I can only host one subnet a bridge. Will be splitting up 10G and 2.5G ports
bridges:
SFPBR:
dhcp4: no
addresses: [10.0.0.1/24]
interfaces:
- eno1
- eno2
- eno3
- eno4
LANBR:
dhcp4: no
addresses: [10.0.1.1/24]
interfaces:
- enp4s0
- enp5s0
- enp6s0
- enp7s0
我想做的是用单个虚拟交换机(实际上是单个虚拟接口)替换 SFPBR 和 LANBR,并公开单个 IP/接口与“交换机”通信。我确实喜欢 Netplan,所以理想情况下,如果可能的话,我希望坚持使用它进行配置。
我该如何做呢?
答案1
据我所知,桥的运行速度只能与使用中最慢的端口一样快
那是不是通常桥梁的情况就是如此。
您的描述听起来像是在谈论几十年前的旧物理以太网桥,那时交换机还没有发明(或者说双速集线器),由于其工作方式而存在这种限制身体上这不是 Netplan 中的桥接器 – 该术语仅指转发以太网帧(通过学习的 MAC 地址)的一般功能,而不是指如何完成了。
(事实上,如果我没记错的话,这个问题一开始甚至不是“桥梁”的问题——桥梁是人们用来解决通过在两个不同速率的以太网之间建立转发桥来解决这个问题。但我对几乎在我之前出现的术语并不是很清楚。)
Netplan 桥接器(或者更准确地说是 Linux 桥接器)字面上地“虚拟软件交换机”。它被称为“桥接器”而不是“交换机”,因为称其为“交换机”通常意味着某种硬件加速,而在大多数情况下,它实际上只是通过 CPU 进行转发。(如果您有多端口 NIC 并且驱动程序支持它,则 Linux 桥接器将尝试以启用硬件卸载,但这不会改变太多。)
因此,即使端口被桥接,每个端口仍然有自己的点对点链路,该链路以其所需的速率运行,独立于也有自己速率的其他端口;桥接器从端口 A 接收帧,缓冲它们,并通过端口 B 发送它们。您可以将 10G 端口桥接到 10M 端口,它们将“按预期”工作。
话虽如此,我发现一些问题正在出现:
如果硬件实际上是一对多端口 NIC,而 Linux 恰好支持硬件交换机卸载,那么它们可能在当前配置中以硬件方式进行桥接,但在加入单个桥接时被迫在 CPU 中进行 10G 转发。不过,从您的“巨型帧”评论来看,情况似乎并非如此。
所有桥接到单个子网的端口 - 无论是在软件(CPU)还是硬件中,无论是在“桥接器”还是“交换机”中 - 实际上都应该具有相同的 MTU,否则事情只会变得更加复杂。