Red Hat Training

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

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

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

物理接口交付模式

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

图 17.23. VEPA 模式

VEPA 模式
bridge
其目的地位于与其源客户机相同的主机中,直接传送到目标 macvtap 设备。源设备和目标设备都需要处于网桥模式,才能成功发送。如果其中任何一个设备处于 VEPA 模式,则需要支持 hairpin 的外部交换机。

图 17.24. 网桥模式

网桥模式
私有
所有数据包都发送到外部交换机,并且仅发送到同一主机计算机上的目标 guest(如果通过外部路由器或网关发送它们),并将这些数据包发回到主机。私有模式可用于防止单一主机上的各个客户机相互通信。如果源或者目标设备处于私有模式,则会显示这个过程。

图 17.25. 私有模式

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

图 17.26. Passthrough 模式

Passthrough 模式
可以通过更改域 XML 文件或使用 virt-manager 接口来配置 macvtap。

17.12.1. 使用域 XML 配置 macvtap

打开客户机的域 XML 文件,并按如下所示修改 <devices> 元素:
<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 的非零值。

虚拟工作站接口类型

managerid
VSI Manager ID 标识包含 VSI 类型和实例定义的数据库。这是一个整数值,值 0 为保留。
typeid
VSI 类型 ID 标识了 VSI 类型字符化网络访问。VSI 类型通常由网络管理员管理。这是一个整数值。
typeidversion
VSI Type Version 允许多个 VSI 类型版本。这是一个整数值。
InstanceID
当创建 VSI 实例(虚拟机的虚拟接口)时,将生成 VSI 实例 ID。这是一个全局唯一标识符。
profileid
配置集 ID 包含要应用到此接口的端口配置文件的名称。此名称由 port profile 数据库解析为网络参数,这些网络参数将应用到这个接口。
通过更改域 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>
...