我正在尝试在 Linux 上进行配置绑定主动-备份(2个物理接口eth2和eth3,使用一个)而且还带有两个VLAN,然后将其连接到内部桥。我看到两个连接选项,都有效,
- 第一种方法工作正常且看起来很简单,但所有 VLAN 均通过单个物理接口路由(带宽较低)
- 第二个是有问题的(对我来说),但我更喜欢第二个,因为它允许通过 eth2 路由一个 VLAN,通过 eth3 路由第二个 VLAN(具有容错功能的更大带宽)。
- 我不想要
bond-mode 4 = 802.3ad
AKA LACP(服务器连接到不同的 Cisco 交换机,我听说过并看到过此类配置的一些问题),因此bond-mode active-backup
需要足够。
# 1. Two NICs agregated to one bonding, and then separate VLANS from bonding interface:
eth2 bond1.10 - xenbr10
> bond1 <
eth3 bond1.15 - xenbr15
# 2. VLANs separated form physical NIC, then aggregate to separate binding interfaces.
eth2.15 ...
eth2 <
eth2.10
> bond10 - xenbr10
eth3.10
eth3 <
eth3.15 ...
我有一个带有 Debian 11 的服务器,2 个网络接口,安装了软件包vlan
,bridge-utils
并且ifenslave
(在测试存储库的 2.13 版本中,由于这个问题从 2.12 开始)。模块8021q
和bonding
被加载到系统中。
问题一:这里的第一个连接选项是最佳实践吗?为什么?我问,因为在互联网上找到的大多数(或可能全部)教程都是关于第一次连接的(甚至Debian 维基)
选项1
这工作正常,我可以通过控制台或配置文件来完成它。这样做的缺点是:两个 VLAN 始终使用单个接口发送。我当前的/etc/network/interfaces
(删除了不重要的元素)
iface eth2 inet manual
iface eth3 inet manual
auto bond1
iface bond1 inet manual
bond-slaves eth2 eth3
bond-mode active-backup
bond-miimon 100
bond-downdelay 200
bond-updelay 200
iface bond1.10 inet manual
vlan-raw-device bond1
iface bond1.15 inet manual
vlan-raw-device bond1
auto xenbr10
iface xenbr10 inet static
address 1.2.3.4/24
bridge_ports bond1.10
重新启动系统后,此配置工作正常,但我想配置并使用第二个选项。
选项 2:从 shell 运行,无法从配置文件运行
我可以从命令行进行此配置:
ifconfig eth2 up
ifconfig eth3 up
#setting up VLANs
ip link add link eth2 name eth2.10 type vlan id 10
ip link add link eth3 name eth3.10 type vlan id 10
#creating bonding interface with 2 slaves NIC
ip link add name bond1 type bond mode active-backup
ip link set dev eth2.10 down
ip link set dev eth3.10 down
ip link set master bond10 dev eth2.10
ip link set master bond10 dev eth3.10
ip link set up dev bond10
ip link set dev eth2.10 up
ip link set dev eth3.10 up
### Bridge + bonding
brctl addbr xenbr10
brctl addif xenbr10 bond10
ip addr add 1.2.3.4/24 dev xenbr10
ip link set dev xenbr10 up
并且网络已启动:
cat /proc/net/bonding/bond10
Ethernet Channel Bonding Driver: v5.10.0-12-amd64
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth2.10
MII Status: up
(..)
Slave Interface: eth2.10
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: (..)
Slave Interface: eth3.10
MII Status: up
(..)
但我无法创建配置文件来使其永久化。我尝试了很多这样的选择,但没有运气。如果我eth2.10
直接将接口连接到某些接口,xenbr10
它就可以工作。
iface eth2.10 inet manual
vlan-raw-device eth2
iface eth3.10 inet manual
vlan-raw-device eth3
bond-master bond10 #It doesn't change nothing, for testing
auto bond10
iface bond10 inet manual
bond-slaves eth2.10 eth3.10
#bond-slaves none
bond-mode active-backup
bond-miimon 100
bond-downdelay 200
bond-updelay 200
auto xenbr10
iface xenbr10 inet static
address 1.2.3.4/24
bridge_ports bond1.10
重新启动系统后,通常会出现如下错误:
ifup[686]:无法将 eth2.10 奴役到 bond10。 bond10 准备好并且有绑定接口吗?
问题2:这个配置有什么问题?我试过了
- 将 eth2.10 配置设置为高于或低于 bond10 配置,
- 使用
bond-master bond10
eth2.10 和bond-slaves none
bond10 配置部分的条目 - 部分使用
bond-slaves eth2.10 eth3.10
条目bond10
- 使用
auto eth2.10
答案1
经过一天的搜索和测试,我找到了两个解决方案。第一个配置可能不优雅,但有效:
# Using default ifupdown on Debian 11:
# Set up NIC and NIC's alias with VLAN:
auto eth2
iface eth2 inet manual
post-up ip link add link eth2 name eth2.10 type vlan id 10
post-up ip link add link eth2 name eth2.15 type vlan id 15
auto eth3
iface eth3 inet manual
post-up ip link add link eth3 name eth3.10 type vlan id 10
post-up ip link add link eth3 name eth3.15 type vlan id 15
auto bond533
iface bond533 inet manual
bond-slaves eth2.533 eth3.533
bond-mode active-backup
# (...)
感谢AB的评论(关联)我发现使用更好的解决方案ifupdown2
。请注意:在安装此软件包期间(它会删除旧版本ifupdown
),我失去了网络,直到重新启动为止(也许重新启动网络就足够了,未经测试)。
# After installing ifupdown2:
# No need to set up physical NIC or VLAN interface!
#iface eth2.10 inet manual
# vlan-raw-device eth2
#iface eth2.533 inet manual
# vlan-raw-device eth2
#Set up bonding and brige (the same as with ifupdown)
auto bond533
iface bond533 inet manual
bond-slaves eth2.533 eth3.533
bond-mode active-backup
# (...)
对我来说有点奇怪的是,如此简单的配置却能正确工作。看起来ifupdown2
可以设置必要的绑定从属网络接口(甚至 VLAN),而无需提前配置它们。