我目前正在构建我的 DIY 路由器的新版本,我以最小安装运行 Ubuntu 22.04 LTS,并firewalld
在其上运行 - 我运行的较新硬件具有不同端口速度的“混合” - 10G、2.5G至少是千兆位。
我这里有两个问题,我希望通过在所有端口之间设置虚拟交换机来解决它们。
我的“传统”构建桥接所有端口 - 据我了解,桥接器的运行速度只能与使用中最慢的端口一样快。我正在通过根据接口速度创建一个桥来解决这个问题。这很混乱,对于 DHCP 服务器来说,这意味着我需要支持每个链路速度一个子网。
我宁愿运行一个子网,但我的 DHCP 服务器对于多个子网似乎有点不稳定。降低管理 DHCP 和其他服务的复杂性并扁平化我的网络将是可取的。我的基本安装中不需要多个子网。
我的测试盒的 Netplan 配置看起来像这样 -但我认为 10 gig 端口中的一些实际上是 1 gig 端口(不同的型号有不同的端口,我忘记了我得到的型号是混合的)。如果是这样,我将不得不将千兆位端口拆分到另一个网桥
# 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,所以如果可能的话,我希望坚持使用 Netplan 进行配置。
我该怎么做?
桥梁通常不会出现这种情况。
您的描述听起来像是在谈论几十年前的旧物理以太网桥,在交换被发明之前(或双速集线器),由于它们的物理工作方式而存在这种限制。这不是 Netplan 中的网桥 - 该术语仅指转发以太网帧(通过学习的 MAC 地址)的一般功能,而不是指其实现方式的细节和限制。
(事实上,如果我没记错的话,一开始甚至不是“网桥”出现这个问题 - 网桥是人们用来解决问题的方法,通过在两个不同速率的以太网之间转发网桥。但是我不太清楚那些几乎早于我出现的术语。)
Netplan 桥接器(或更准确地说是 Linux 桥接器)实际上是一个“虚拟软件交换机”。它被称为“桥”而不是“交换机”,因为称其为“交换机”通常意味着某种硬件加速,而在大多数情况下它实际上只是通过 CPU 进行转发。(如果您有一个多端口 NIC 并且驱动程序支持它,Linux 桥将尝试启用硬件卸载,但这不会改变太多。)
因此,即使端口被桥接,每个端口仍然有自己的点对点链路,该链路以其需要的任何速率运行,独立于也有自己的速率的其他端口;桥接器从端口 A 接收帧,缓冲它们,通过端口 B 发送它们。您可以将 10G 端口桥接到 10M 端口,它们将“按预期”工作。
话虽这么说,我可以看到一些问题的出现:
如果硬件实际上是 Linux 碰巧支持硬件交换机卸载的一对多端口 NIC,那么它们可能会在您当前配置中的硬件中进行桥接,但在加入单个桥接时被迫在 CPU 中进行 10G 转发。不过,从您的“巨型帧”评论来看,情况似乎并非如此。
桥接到单个子网的所有端口——无论是在软件(CPU)还是硬件中,无论是在“桥接器”还是“交换机”中——确实应该具有相同的 MTU,否则事情只会变得更加复杂。