KVM虚拟机使用桥接方式时和宿主机无法通信的解决方案

  • Post author:
  • Post category:其他


KVM虚拟机使用桥接方式时和宿主机无法通信的解决方案

应用场景

虚拟机客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。

KVM 虚拟机网络连接有两种方式:

NAT方式连接后,虚拟机和宿主可以互通,同一宿主机同一NAT下的虚拟机之间可以互通,和其他机器不互通

桥接方式连接后,虚拟机和宿主机处于同一个物理网络环境,虚拟机可以和其他机器互通

问题现象

在这里插入图片描述


使用上图的macvtap方式桥接后,虚拟机和宿主机虽然处在同一个物理网络环境下,但是网络不能互相ping通,无法通信

虚拟机之间,虚拟机和外部主机之间的网络正常,可正常通信



解决方案

在宿主机配置名为br0的网桥

配置网桥br0的具体步骤如下(此处以dhcp自动获取ip为例,如需手动设置IP,可完成此配置后使用nmtui交互界面简单配置,这里不做介绍):

以下是我配置时的情况:

在这里插入图片描述

在这里插入图片描述

图中eth1-conn 是自定义给eth1网口创建的有线连接,根据你的实际使用情况,选择对应网口连接名称。

添加名为br0的网桥
nmcli c add ifname br0 type bridge con-name br0

禁用网桥stp功能
nmcli c modify br0 bridge.stp no

修改正在使用的本地连接配置
nmcli c modify 有线连接 connection.slave-type bridge master br0

重启br0和有线连接
nmcli c up br0
nmcli c up 有线连接

此时可查看到br0已获取到ip

kvm管理界面给虚拟机配置虚拟网卡

网桥br0新建完成后,在kvm管理界面按下图配置虚拟网卡

完成配置后,启动虚拟机,可以看到如下变化

在宿主机执行ifconfig,可以发现多了一个名为vnet0的虚拟网卡

在宿主机上执行brctl show可以看到如下网桥信息,其中interfaces一列的enp4s0是宿主机物理网卡,vnet0是虚拟机的虚拟网卡,这两个网卡通过br0桥接即可直通

在这里插入图片描述

此时进入虚拟机中可以看到虚拟机已经获取到了一个和宿主机同网段的ip,且可以和宿主机直接互通,如下

宿主机ping虚拟机

此处省略

虚拟机ping宿主机

此处省略


注意事项

网桥使用期间,如果对宿主机的网卡做过更改,且重启过网络服务或网卡,使用brctl show查看网桥信息时会发现接口一列只剩一个宿主机的物理网卡,此时需要执行brctl addif br0 vnet0 ,将vnet0虚拟网卡加入到网桥中,然后重启虚拟机的网络服务或网卡

网桥不支持EAP安全认证,也就是我们当前的电脑不配置eap安全认证时,可通过此方案实现宿主机和虚拟机通过桥接互通