Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

A.19.4. Guest Can Reach Outside Network,但在使用 macvtap 界面时可能会重新访问主机

症状
客户机虚拟机可以与其他虚拟客户机通信,但在配置为使用 macvtap(也称为 type='direct 的)网络接口后无法连接到主机。
正在调查
即使没有连接到虚拟以太网端口聚合器(VEPA)或 VN-Link 功能切换,但 macvtap 接口也很有用。将此类接口的模式设置为 网桥 可让客户机以非常简单的方式直接连接到物理网络,而无需设置问题(或 NetworkManager 不兼容),这些模式可以同时使用传统主机桥接设备。
但是,当 guest 虚拟机配置为使用 type='direct' 网络接口(如 macvtap)时,尽管能够与网络上的其他客户机和其他外部主机通信,但客户机无法与其自己的主机通信。
这种情况实际上不是 error - 它是 macvtap 的定义行为。由于主机物理以太网连接到 macvtap 网桥的方式,从客户机的流量传输到物理接口,无法退回到主机的 IP 堆栈。另外,发送到物理接口的主机 IP 堆栈的流量无法退回到 macvtap 网桥,以转发到客户机。
解决方案
使用 libvirt 创建隔离网络,并为连接到此网络的每个客户机虚拟机创建第二个接口。然后,主机和客户机可以通过这个隔离网络直接进行通信,同时还可保持与 NetworkManager 的兼容性。

过程 A.8. 使用 libvirt创建隔离网络

  1. /tmp/isolated.xml 文件中添加并保存以下 XML。如果 192.168.254.0/24 网络已在您的网络其他位置使用,您可以选择不同的网络。

    图 A.3. 隔离网络 XML

    
    ...
    <network>
      <name>isolated</name>
      <ip address='192.168.254.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.254.2' end='192.168.254.254'/>
        </dhcp>
      </ip>
    </network>
    ...
    
  2. 使用此选项创建网络: virsh net-define /tmp/isolated.xml
  3. 使用 virsh net-autostart 隔离 命令将网络设置为 autostart。
  4. 使用 virsh net-start isolated 命令启动网络。
  5. 使用 virsh edit name_of_guest,编辑每个使用 macvtap 进行网络连接的客户机配置,并在 <devices> 部分中添加新接口,类似于以下内容(请注意 <模型 type='virtio'/> 行为 include 可选): <>

    图 A.4. 接口设备 XML

    
    ...
    <interface type='network' trustGuestRxFilters='yes'>
      <source network='isolated'/>
      <model type='virtio'/>
    </interface>
    
  6. 关闭,然后重启每个虚拟机。
现在,客户机可以通过地址 192.168.254.1 访问主机,主机则能够通过从 DHCP 获取的 IP 地址(此外,您可以手动配置客户机的 IP 地址)。由于此新网络仅隔离到主机和客户机,来自客户机的所有其他通信都将使用 macvtap 界面。如需更多信息,请参阅 第 23.17.8 节 “网络接口”