当 KVM 的网络是桥接且绑定接口为从属接口时,我无法通过网络访问 KVM。以下是我创建绑定接口的方法bond0
:
sudo nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=802.3ad"
sudo nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname eno1np0 master bond0
sudo nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname eno2np1 master bond0
展示内容如下/proc/net/bonding/bond0
:
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
802.3ad info
LACP active: on
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: xx:xx:xx:xx:xx:01
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 2
Actor Key: 15
Partner Key: 3
Partner Mac Address: xx:xx:xx:xx:xx:03
Slave Interface: eno1np0
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:01
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: xx:xx:xx:xx:xx:01
port key: 15
port priority: 255
port number: 1
port state: 61
details partner lacp pdu:
system priority: 127
system mac address: xx:xx:xx:xx:xx:03
oper key: 3
port priority: 127
port number: 1
port state: 63
Slave Interface: eno2np1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:02
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: xx:xx:xx:xx:xx:01
port key: 15
port priority: 255
port number: 2
port state: 61
details partner lacp pdu:
system priority: 127
system mac address: xx:xx:xx:xx:xx:03
oper key: 3
port priority: 127
port number: 17
port state: 63
交换机上的 LAG 上的端口配置如下:
> show lacp interfaces ae2
Aggregated interface: ae2
LACP state: Role Exp Def Dist Col Syn Aggr Timeout Activity
xe-0/0/2 FUP Actor No No Yes Yes Yes Yes Fast Active
xe-0/0/2 FUP Partner No No Yes Yes Yes Yes Slow Active
xe-1/0/2 Actor No No Yes Yes Yes Yes Fast Active
xe-1/0/2 Partner No No Yes Yes Yes Yes Slow Active
LACP protocol: Receive State Transmit State Mux State
xe-0/0/2 Current Slow periodic Collecting distributing
xe-1/0/2 Current Slow periodic Collecting distributing
以下是我创建桥梁的方法kvbr0
:
sudo nmcli con add ifname kvbr0 type bridge con-name kvbr0
sudo nmcli con add type bridge-slave ifname bond0 master kvbr0
sudo nmcli con mod kvbr0 ipv4.addresses 10.192.161.200/24
sudo nmcli con mod kvbr0 ipv4.gateway 10.192.161.1
sudo nmcli con mod kvbr0 ipv4.dns "10.250.0.26 10.122.64.26 10.194.0.26"
sudo nmcli con mod kvbr0 ipv4.method manual
以下是我创建虚拟机的方法:
sudo virt-install
--virt-type kvm --name kvm1 --ram 4096 --vcpus 2 --disk size=20
--os-variant rocky9 --network network=bridged-network --graphics none
--location /tmp/Rocky-9.4-x86_64-minimal.iso --check all=off
--initrd-inject /tmp/kvm1.cfg --extra-args="inst.ks=file:/kvm1.cfg console=tty0 console=ttyS0,115200"
--noautoconsole --autostart --wait -1
bridged-network
由 桥梁 组成kvbr0
。
我可以 pingbond0
和kvbr0
,但我没有收到 KVM 接口的 ping 响应。以下是 VM 上接口的设置:
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:5a:01:ed brd ff:ff:ff:ff:ff:ff
inet 10.192.161.201/24 brd 10.192.161.255 scope global noprefixroute enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe5a:1ed/64 scope link noprefixroute
valid_lft forever preferred_lft forever
如果我在虚拟机上执行tcpdump
此操作enp1s0
,我会看到它正在获取 ARP 请求:ARP, Request who-has 10.192.161.1 tell 10.192.161.201, length 28
但没有回复
当桥接器上的底层接口是常规以太网端口时,我没有遇到任何问题。
主机运行的是 Rocky9.3,虚拟机运行的是 Rocky9.4。两者都运行内核 5.14。
2
最佳答案
1
我不能 100% 确定这里所有信息是否正确,但我有 80% 的确定:
bond.options "mode=active-backup"
这是一种静态 LAG 模式,可能与需要 LACP 的交换机不兼容。
您需要使用mode=802.3ad
LACP 绑定。
是的,LAG 在交换机上配置为主动/被动
不是。LACP LAG 始终是“主动/主动”的(具有自动故障转移功能)。
在 LACP 上下文中,该Activity
设置定义对等角色,而不是端口角色 – “主动”对等将启动 LACP 协商,而“被动”对等则不会。因此,如果端口在两侧都设置为“被动”,则 LAG 根本不会在该端口上启动(因为两侧都会等待其他人启动 LACP 握手),并且它将仅保留为独立端口。
(换句话说,如果我正确读取了交换机输出,则您可能处于xe-0/0/2
非操作状态,因为它设置为“主动”并永远尝试协商 LACP – 服务器没有响应,因为其绑定不在 LACP 模式 – 而由于xe-1/0/2
是“被动”的,则作为独立端口运行,只是等待服务器首先说 LACP。)
LAG 的所有端口都应设置为相同模式。
5
-
设置
mode=802.3ad
没有帮助。我会检查交换机设置。考虑到我可以 ping 通网桥但不能 ping 通网桥上的虚拟机,这是否意味着交换机设置不会导致我看到的问题?虚拟机正在接收 ARP 请求,但没有回复。
–
-
/proc/net/bonding/bond0
我猜是它通过不同的端口回复了…在 Linux 上设置绑定模式后,交换机的输出是否有任何变化?你能检查服务器上的内容并将其添加到你的帖子中吗?
–
-
谢谢,我更新了问题。虚拟机只有
enp1s0
和lo
。我应该看到 的回复吗enp1s0
?
– -
我的意思是,由于与交换机的模式不匹配,服务器的 bond0 通过不同的端口发送帧,因此帧丢失了。不过,现在 802.3ad(LACP) 处于活动状态,这种情况应该不再存在。
– -
另外…我仔细查看了您在帖子中引用的 ARP 请求 – 那不是虚拟机收到的 ARP 请求;而是虚拟机发送的 ARP 请求。您是否可以在 tcpdump(最好使用
-e
)中看到任何实际上从外部进入虚拟机的流量?
–
|
–
mode=active-backup
似乎是 Linux 方面最合适的选择。–
|