在PVE中实现宿主机与虚拟机同网段通信的配置方案
本文内容由笔者根据遇到的问题口述,并通过ai整理而成供,遇到同样问题的同学参考。
问题背景
在配置PVE服务器的过程中发现,当网络环境使用VLAN时,如果PVE宿主机的管理IP和虚拟机的IP地址被设置在同一个网段,虚拟机将无法正常联网。即使服务器的多个网口(例如4个)在交换机端和服务器端都配置了动态链路聚合(LACP),并且聚合链路被设置为允许所有VLAN通过的Trunk模式,在这种标准配置下,无论如何尝试,都无法实现宿主机管理口与虚拟机在同网段的网络互通。网上相关资料也证实了此方法是行不通的。
根本原因分析
这个问题的核心在于PVE网络模型的设计。当宿主机自身的管理接口(
vmbr0)绑定在一个启用了VLAN的物理接口或聚合接口(bond)上时,宿主机与虚拟机对网络流量的处理方式存在冲突,导致同网段通信失败。因此,需要将宿主机的管理流量与虚拟机的业务流量在物理层面上分离开。解决方案:物理隔离管理流量与虚拟机流量
为了满足虚拟机与宿主机同网段通信的需求(例如,使用虚拟机作为跳板机来管理宿主机),可以采用以下物理隔离方案:
-
专用管理网口:指定服务器的一个物理网口(例如
eno1)专门用于宿主机管理。在交换机端,将此接口配置为Access模式,并指定一个特定的VLAN(例如VLAN 50)。此接口不承载任何其他VLAN流量。 -
聚合业务网口:将服务器剩余的几个物理网口(例如
eno2,eno3,eno4)进行动态链路聚合。在交换机端,对应的接口也配置为LACP聚合组,并将聚合口设置为允许所需VLAN通过的Trunk模式。 -
网络桥接隔离:在PVE中创建两个独立的虚拟网桥(Linux Bridge),分别承载管理流量和虚拟机业务流量。
通过实际测试,此方案可以稳定实现宿主机和虚拟机在同一网段的互通访问。
具体配置示例
以下是一个详细的连接与配置示例:
1. 物理连接与交换机配置
-
服务器网口1(管理口):
-
用途:专用于PVE宿主机管理。
-
交换机配置:对应接口模式设置为
Access,并指定VLAN ID为50。
-
-
服务器网口2-4(业务口):
-
用途:用于虚拟机网络通信。
-
交换机配置:将这三个接口加入同一个LACP动态聚合组(如
port-channel 1),并将该聚合口模式设置为Trunk,允许所有必要VLAN(包括VLAN 50)通过。
-
2. PVE宿主机的网络配置
登录PVE的Web管理界面,在“系统” -> “网络”中进行如下设置:
-
第一步:创建管理网桥(
vmbr0)-
新建一个Linux Bridge,名称如
vmbr0。 -
在“桥接端口”下拉菜单中选择物理网口
eno1。 -
为
vmbr0分配一个静态IPv4地址(例如192.168.50.10/24),该地址属于VLAN 50的网段。 -
关键:
vmbr0本身的VLAN标签保持为空(不设置),因为交换机口是Access模式,流量已经属于VLAN 50。
-
-
第二步:创建链路聚合接口(
bond0)与业务网桥(vmbr1)-
创建Bond接口:新建一个Bond接口,名称如
bond0。-
“从属端口”选择物理网口
eno2,eno3,eno4。 -
绑定模式选择“LACP(动态聚合)”。
-
-
创建业务网桥:新建一个Linux Bridge,名称如
vmbr1。-
在“桥接端口”下拉菜单中选择刚刚创建的聚合接口
bond0。 -
关键:务必勾选下方的 “VLAN感知” 选项。此设置允许该网桥处理带VLAN标签的流量。
-
-
3. 虚拟机的网络配置
在PVE中创建虚拟机时,将其虚拟网卡连接到业务网桥
vmbr1上。-
在虚拟机的网络设备设置中,手动指定VLAN标签为
50。 -
为虚拟机分配一个与宿主机管理IP(
192.168.50.10)同网段的IP地址(例如192.168.50.20/24)。
完成以上配置后,宿主机(通过
vmbr0)和虚拟机(通过vmbr1上的VLAN 50)即可在同一IP网段内正常通信。
浙公网安备 33010602011771号