kvm已经设置桥接网卡的虚拟机无法连接宿主机?

问题描述:
我在一台centos的系统中安装了kvm虚拟机。
现在所有的虚拟机都使用了桥接模式连接网络,并且都可以正常连接外网,相互之间也能正常通信。但是使用过程中发现宿主机无法连接虚拟机。

假定宿主机是A,里面的虚拟机是B、C、D
现在A连接BCD均不通,BCD之间正常通信。

想知道是什么原因导致的的宿主机不能连接虚拟机?


宿主机环境:
防火墙已经关闭
CentOS Linux release 7.5.1804 (Core)
libvirtd (libvirt) 4.5.0

[root@localhost ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 enp1s0f0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-ddf29c2d2cf2
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 enp1s0f0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr1
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

虚拟机环境:
防火墙已经关闭
设置网络均为桥接:

    <interface type='direct'>
      <mac address='52:54:00:bb:dd:dd'/>
      <source dev='enp1s0f0' mode='bridge'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
阅读 7.9k
1 个回答

这个问题到现在已经解决了

问题出在interface的配置上,我这里的type是direct,字面意思是直通的接口,而不是桥接的接口。

最后,我觉得正确的网络配置不应该是直接写在虚拟机配置文件中,应该是单独创建一个虚拟机网络,然后再在虚拟机机中指定一个netwrok。

具体netwrok的配置说明,可以看官方的文档,有详细的例子。

==========
20220726 补充

  1. 我当时提的这个问题其实不算是一个问题,只是当时弄错了这个配置

     <interface type='direct'>
       <mac address='52:54:00:bb:dd:dd'/>
       <source dev='enp1s0f0' mode='bridge'/>
       <model type='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </interface>

    虚拟机的interface网络接口,type 为 direct
    这里我误以为这个配置是我理解的“桥接”,实际上并不是一般意义上的“桥接”。
    Direct attachment to physical interface
    如果要配置kvm的网络,应该这么配置
    需要参考libvirt的文档
    libvirt关于网络配置的说明
    openEuler管理员指南里面关于KVM的配置说明

===
如果要创建桥接网络的话,讲一下大致流程,有些也记不太清楚了,因为已经有好一段时间没接触kvm了。

  1. 首先用brctl在本机创建一个桥接,我把它名命为br0。
  2. 把需要桥接的网络加入到这个网桥里,配置好了之后可以通过这个网桥访问到网关。
  3. 在kvm里面添加一个网络,指定这个网络使用br0这个网桥。
  4. 创建虚拟机的时候,interface 里面指定上一步创建好的网络,这个时候只要配置了网络的虚拟机都会连接到br0这个网桥上,可以通过brctl看到每个虚拟机的网卡连接在br0上。

===
network的配置如下:
说明

<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

===

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进