Red Hat Training

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

18.11. 将虚拟 NIC 直接附加到物理接口

作为默认 NAT 连接的替代方案,您可以使用 macvtap 驱动程序将 guest 的 NIC 直接附加到主机的指定物理接口。这并不是与 设备分配 (也称为 passthrough)混淆。macvtap 连接具有以下模式,每种模式都有不同的优点和用例:

物理接口交付模式

VEPA
在虚拟以太网端口聚合器(VEPA)模式中,来自客户机的所有数据包都发送到外部交换机。这可让用户通过交换机强制进行客户机流量。要使 VEPA 模式正常工作,外部交换机还必须支持 hairpin 模式,这样可确保目标作为虚拟客户机在同一主机计算机上的数据包通过外部交换机发回到主机。

图 18.24. VEPA 模式

VEPA 模式
bridge
目的地在与源客户机相同的主机机器上直接传送到目标 macvtap 设备。源设备和目的地设备都需要处于网桥模式才能成功进行直接传输。如果其中任何一个设备处于 VEPA 模式,则需要使用具有功能性功能的外部交换机。

图 18.25. 网桥模式

网桥模式
private
所有数据包都发送到外部交换机,只有在通过外部路由器或网关发送时,它们才会传送到同一主机上的目标 guest,并将它们发回到主机。私有模式可用于防止单一主机上的各个客户机相互通信。如果源或目标设备处于私有模式,则执行此步骤。

图 18.26. 私有模式

私有模式
passthrough
此功能将物理接口设备或 SR-IOV 虚拟功能(VF)直接附加到客户机,而不会丢失迁移功能。所有数据包直接发送到指定的网络设备。请注意,一个网络设备只能被传递给一个客户端,因为网络设备无法在 passthrough 模式中的客户机之间共享。

图 18.27. Passthrough 模式

Passthrough 模式
通过更改域 xml 文件来配置四个模式。打开该文件后,按如下所示更改模式设置:
  <devices>
    ...
    <interface type='direct'>
      <source dev='eth0' mode='vepa'/>
    </interface>
  </devices>
直接连接的客户机虚拟机的网络访问可以由主机物理机器所连接到的物理接口来管理。
如果交换机符合 IEEE 802.1Qbg 标准,接口可以还有其他参数。virtualport 元素的参数在 IEEE 802.1Qbg 标准中更详细地阐述。值特定于网络,应当由网络管理员提供。在 802.1Qbg 术语中,虚拟工作站(VSI)代表虚拟机的虚拟接口。
请注意,IEEE 802.1Qbg 需要 VLAN ID 的非零值。另外,如果交换机符合 IEEE 802.1Qbh 标准,则该值特定于网络,并且应由网络管理员提供。

虚拟工作站类型

managerid
VSI Manager ID 标识包含 VSI 类型和实例定义的数据库。这是一个整数值,赋予值 0。
typeid
VSI Type ID 标识 VSI 类型特征,以优化网络访问。VSI 类型通常由网络管理员管理。这是一个整数值。
typeidversion
VSI Type Version 允许多个 VSI 类型版本。这是一个整数值。
InstanceID
在创建 VSI 实例(这是虚拟机虚拟接口)时,将生成 VSI 实例 ID 标识符。这是全局唯一标识符。
profileid
配置集 ID 包含要应用于此接口的端口配置集的名称。此名称由端口 profile 数据库解析为来自端口配置集的网络参数,这些网络参数将应用到此接口。
通过更改 domain xml 文件来配置这四种类型。打开该文件后,按如下所示更改模式设置:
  <devices>
    ...
    <interface type='direct'>
      <source dev='eth0.2' mode='vepa'/>
      <virtualport type="802.1Qbg">
        <parameters managerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f"/>
      </virtualport>
    </interface>
  </devices>
配置集 ID 显示在此处:
  <devices>
    ...
    <interface type='direct'>
      <source dev='eth0' mode='private'/>
      <virtualport type='802.1Qbh'>
        <parameters profileid='finance'/>
      </virtualport>
    </interface>
  </devices>
  ...