XenServer

管理网络

本节中的网络配置过程因您配置的是独立主机还是资源池中的主机而异。

在独立主机中创建网络

由于在主机安装期间会为每个 PIF 创建外部网络,因此通常仅在以下情况下才需要创建额外网络:

  • 使用私有网络

  • 支持 VLAN 或 NIC 绑定等高级操作

有关如何使用 XenCenter 添加或删除网络的信息,请参阅 XenCenter 文档中的添加新网络

打开 XenServer® 主机文本控制台。

使用 network-create 命令创建网络,该命令返回新创建网络的 UUID:

xe network-create name-label=mynetwork
<!--NeedCopy-->

此时,网络未连接到 PIF,因此是内部网络。

在资源池中创建网络

资源池中的所有 XenServer 主机必须具有相同数量的物理网卡。当主机加入池时,此要求并未严格执行。其中一个网卡始终被指定为管理接口,用于 XenServer 管理流量。

由于池中的所有主机共享一组共同的网络,因此在池中为 XenServer 主机配置相同的物理网络非常重要。 各个主机上的 PIF 根据设备名称连接到池范围的网络。 网络 X 对应于 Dom0 网络命名模型下位置 X 中的网络接口。

如果一个 XenServer 主机的网卡数量与池中其他主机不同,则可能会出现复杂情况。出现复杂情况的原因是并非所有池网络都对所有池主机有效。例如,如果主机 host1host2 位于同一池中,并且 host1 有四个网卡而 host2 只有两个,则只有连接到与 host1 的前两个网络接口对应的 PIF 的网络才在 host2 上有效。host1 上连接到与其余网络接口对应的网络的 VIF 的虚拟机无法迁移到主机 host2

创建 VLAN

对于资源池中的主机,您可以使用 pool-vlan-create 命令。此命令会创建 VLAN,并自动在池中的主机上创建并插入所需的 PIF。有关详细信息,请参阅 pool-vlan-create

打开 XenServer 主机控制台。

创建一个用于 VLAN 的网络。将返回新网络的 UUID:

xe network-create name-label=network5
<!--NeedCopy-->

使用 pif-list 命令查找与支持所需 VLAN 标记的物理 NIC 对应的 PIF 的 UUID。将返回所有 PIF 的 UUID 和设备名称,包括任何现有 VLAN:

xe pif-list
<!--NeedCopy-->

创建一个 VLAN 对象,指定所有要连接到新 VLAN 的 VM 上的所需物理 PIF 和 VLAN 标记。将创建一个新的 PIF 并将其插入到指定网络。将返回新 PIF 对象的 UUID。

xe vlan-create network-uuid=network_uuid pif-uuid=pif_uuid vlan=5
<!--NeedCopy-->

将 VM VIF 附加到新网络。有关详细信息,请参阅 在独立主机中创建网络

在独立主机上创建 NIC 绑定

我们建议使用 XenCenter 创建 NIC 绑定。有关详细信息,请参阅 配置 NIC

本节介绍如何使用 xe CLI 在不在池中的 XenServer 主机上绑定 NIC 接口。有关使用 xe CLI 在构成资源池的 XenServer 主机上创建 NIC 绑定的信息,请参阅 在资源池中创建 NIC 绑定

创建 NIC 绑定

绑定 NIC 时,绑定会吸收用作管理接口的 PIF/NIC。管理接口会自动移动到绑定 PIF。

  1. 使用 network-create 命令创建一个用于绑定 NIC 的网络。将返回新网络的 UUID:

    xe network-create name-label=bond0
    <!--NeedCopy-->
    
  2. 使用 pif-list 命令确定要在绑定中使用的 PIF 的 UUID:

    xe pif-list
    <!--NeedCopy-->
    
  3. 执行以下操作之一:

    • 要在主动-主动模式(默认)下配置绑定,请使用 bond-create 命令创建绑定。使用逗号分隔参数,指定新创建的网络 UUID 和要绑定的 PIF 的 UUID:

       xe bond-create network-uuid=network_uuid /
            pif-uuids=pif_uuid_1,pif_uuid_2,pif_uuid_3,pif_uuid_4
       <!--NeedCopy-->
      

      当绑定两个网卡时输入两个 UUID,当绑定四个网卡时输入四个 UUID。运行命令后将返回绑定的 UUID。

    • 要在主动-被动或 LACP 绑定模式下配置绑定,请使用相同的语法,添加可选的 mode 参数,并指定 lacpactive-backup

       xe bond-create network-uuid=network_uuid pif-uuids=pif_uuid_1, /
            pif_uuid_2,pif_uuid_3,pif_uuid_4 /
            mode=balance-slb | active-backup | lacp
       <!--NeedCopy-->
      

控制绑定的 MAC 地址

当您绑定管理接口时,它会包含用作管理接口的 PIF/NIC。如果主机使用 DHCP,则绑定的 MAC 地址与正在使用的 PIF/NIC 相同。管理接口的 IP 地址可以保持不变。

您可以更改绑定的 MAC 地址,使其与(当前)管理接口网卡的 MAC 地址不同。但是,当启用绑定并且正在使用的 MAC/IP 地址发生变化时,到主机的现有网络会话将被中断。

您可以通过两种方式控制绑定的 MAC 地址:

  • 可以在 bond-create 命令中指定可选的 mac 参数。您可以使用此参数将绑定的 MAC 地址设置为任意地址。

  • 如果未指定 mac 参数,则如果管理接口是绑定中的一个接口,XenServer 将使用该管理接口的 MAC 地址。如果管理接口不是绑定的一部分,但存在另一个管理接口,则绑定将使用该管理接口的 MAC 地址(以及 IP 地址)。如果绑定中的所有网卡都不是管理接口,则绑定将使用第一个指定网卡的 MAC 地址。

还原网卡绑定

将 XenServer 主机还原为非绑定配置时,bond-destroy 命令会自动将主网卡配置为管理接口的接口。因此,所有 VIF 都将移动到管理接口。如果主机的管理接口位于标记的 VLAN 绑定接口上,则在执行 bond-destroy 时,管理 VLAN 将移动到主网卡。

术语“主网卡”是指在创建绑定时复制 MAC 和 IP 配置的 PIF。当绑定两个网卡时,主网卡是:

  1. 管理接口网卡(如果管理接口是绑定的网卡之一)。

  2. 任何其他具有 IP 地址的网卡(如果管理接口不是绑定的一部分)。

  3. 第一个指定的网卡。您可以通过运行以下命令来找出它是哪一个:

    xe bond-list params=all
    <!--NeedCopy-->
    

在资源池中创建网卡绑定

尽可能地,在将更多主机加入池或创建虚拟机之前,作为初始资源池创建的一部分来创建 NIC 绑定。这样做可以使绑定配置在主机加入池时自动复制到主机,并减少所需的步骤数。

将 NIC 绑定添加到现有池需要以下之一:

  • 使用 CLI 在池协调器上配置绑定,然后对池的每个成员进行配置。

  • 使用 CLI 在池协调器上配置绑定,然后重新启动每个池成员,使其从池协调器继承设置。

  • 使用 XenCenter® 在池协调器上配置绑定。XenCenter 会自动将成员主机上的网络设置与池协调器同步,因此您无需重新启动成员主机。

为简化操作并防止配置错误,我们建议使用 XenCenter 创建 NIC 绑定。有关更多信息,请参阅配置 NIC

本节介绍如何使用 xe CLI 在组成资源池的 XenServer 主机上创建绑定的 NIC 接口。有关使用 xe CLI 在独立主机上创建 NIC 绑定的信息,请参阅 在独立主机上创建 NIC 绑定

警告:

启用高可用性时,请勿尝试创建网络绑定。绑定创建过程会干扰正在进行的高可用性心跳,并导致主机自我隔离(关闭自身)。主机可能无法正常重新启动,并且可能需要 host-emergency-ha-disable 命令才能恢复。

选择您希望作为池协调器的主机。池协调器默认属于一个未命名的池。要使用 CLI 创建资源池,请重命名现有的无名池:

xe pool-param-set name-label="New Pool" uuid=pool_uuid
<!--NeedCopy-->

按照创建 NIC 绑定中所述创建 NIC 绑定。

在您要加入池的主机上打开控制台并运行命令:

xe pool-join master-address=host1 master-username=root master-password=password
<!--NeedCopy-->

网络和绑定信息会自动复制到新主机。管理接口会自动从最初配置它的主机 NIC 移动到绑定的 PIF。也就是说,管理接口现在被吸收到绑定中,以便整个绑定充当管理接口。

使用 host-list 命令查找正在配置的主机的 UUID:

xe host-list
<!--NeedCopy-->

警告:

高可用性启用时,请勿尝试创建网络绑定。绑定创建过程会干扰正在进行的高可用性心跳,并导致主机自隔离(自行关机)。主机可能无法正常重启,您可能需要运行 host-emergency-ha-disable 命令进行恢复。

配置专用存储网卡

您可以使用 XenCenter 或 xe CLI 为网卡分配 IP 地址,并将其专用于特定功能,例如存储流量。当您为网卡配置 IP 地址时,您是通过创建辅助接口来完成的。(XenServer 用于管理的启用 IP 的网卡称为管理接口。)

当您希望将辅助接口专用于特定用途时,请确保已配置适当的网络。这是为了确保网卡仅用于所需的流量。要将网卡专用于存储流量,请配置网卡、存储目标、交换机和 VLAN,以便只能通过分配的网卡访问目标。如果您的物理和 IP 配置未限制通过存储网卡发送的流量,则可以通过辅助接口发送流量,例如管理流量。

当您为存储流量创建新的辅助接口时,必须为其分配一个满足以下条件的 IP 地址:

  • 如果适用,与存储控制器位于同一子网,并且

  • 不与任何其他辅助接口或管理接口位于同一子网。

配置辅助接口时,每个辅助接口必须位于单独的子网中。例如,如果您想为存储配置另外两个辅助接口,则需要三个不同子网上的 IP 地址——一个用于管理接口的子网,一个用于辅助接口 1 的子网,以及一个用于辅助接口 2 的子网。

注意:

选择要配置为用于 iSCSI 或 NFS SR 的辅助接口的网卡时,请确保专用网卡使用与管理接口不可路由的单独 IP 子网。如果未强制执行此操作,则在主机重启后,存储流量可能会通过主管理接口定向,因为网络接口的初始化顺序。

确保 PIF 位于单独的子网中,或者配置路由以适应您的网络拓扑,从而强制所需的流量通过选定的 PIF。

为 PIF 设置 IP 配置,为 mode 参数添加适当的值。如果使用静态 IP 地址,请添加 IP、netmask、gateway 和 DNS 参数:

xe pif-reconfigure-ip mode=DHCP | Static uuid=pif-uuid
<!--NeedCopy-->

将 PIF 的 disallow-unplug 参数设置为 true:

xe pif-param-set disallow-unplug=true uuid=pif-uuid
<!--NeedCopy-->
xe pif-param-set other-config:management_purpose="Storage" uuid=pif-uuid
<!--NeedCopy-->

如果您想使用一个也可以从管理接口路由的辅助接口进行存储(请记住,此配置并非最佳实践),您有两种选择:

  • 主机重启后,请确保辅助接口已正确配置。使用 xe pbd-unplugxe pbd-plug 命令重新初始化主机上的存储连接。此命令会重启存储连接并将其通过正确的接口路由。

  • 或者,您可以使用 xe pif-forget 从 XenServer 数据库中删除接口,并在控制域中手动配置它。xe pif-forget 是一个高级选项,需要您熟悉如何手动配置 Linux 网络。

使用启用 SR-IOV 的网卡

单根 I/O 虚拟化 (SR-IOV) 是一种虚拟化技术,它允许单个 PCI 设备在物理系统上显示为多个 PCI 设备。实际的物理设备称为物理功能 (PF),而其他设备称为虚拟功能 (VF)。管理程序可以将一个或多个 VF 分配给虚拟机 (VM):然后客户机可以使用该设备,就像它被直接分配一样。

将一个或多个网卡 VF 分配给虚拟机,可以使其网络流量绕过虚拟交换机。配置后,每个虚拟机都表现得像直接使用网卡一样,从而减少处理开销并提高性能。

SR-IOV 的优势

SR-IOV VF 具有比 VIF 更好的性能。它可以通过同一网卡确保来自不同虚拟机的流量之间基于硬件的隔离(绕过 XenServer 网络堆栈)。

使用此功能,您可以:

  • 在支持 SR-IOV 的网卡上启用 SR-IOV。

  • 在支持 SR-IOV 的网卡上禁用 SR-IOV。

  • 将 SR-IOV VF 作为 VF 资源池进行管理。

  • 将 SR-IOV VF 分配给虚拟机。

  • 配置 SR-IOV VF(例如,MAC 地址、VLAN、速率)。

  • 运行测试以确认 SR-IOV 是否作为自动化认证套件的一部分受支持。

系统配置

正确配置硬件平台以支持 SR-IOV。需要以下技术:

  • I/O MMU 虚拟化 (AMD-Vi 和 Intel VT-d)

  • 备用路由 ID 解释 (ARI)

  • 地址转换服务 (ATS)

  • 访问控制服务 (ACS)

请查阅系统随附的文档,以了解如何配置系统固件以启用上述技术。

在网卡上启用 SR-IOV 网络

在 XenCenter 中,使用“新建网络”向导在“网络”选项卡中在网卡上创建并启用 SR-IOV 网络。

将 SR-IOV 网络分配到虚拟接口 (VM 级别)

在 XenCenter 中,在 VM 级别,使用“添加虚拟接口”向导在“网络”选项卡中将 SR-IOV 启用的网络添加为该 VM 的虚拟接口。有关详细信息,请参阅添加新网络

支持的网卡和来宾

有关支持的硬件平台和网卡列表,请参阅硬件兼容性列表。请查阅特定来宾的供应商提供的文档,以确定其是否支持 SR-IOV。

限制

  • 对于使用旧版驱动程序的某些网卡(例如,Intel I350 系列),必须重新启动主机才能在这些设备上启用或禁用 SR-IOV。

  • 不支持具有不同类型网卡的池级别 SR-IOV 网络。

  • 来自同一网卡的 SR-IOV VF 和普通 VIF 可能因网卡硬件限制而无法相互通信。要使这些 VM 能够通信,请确保通信使用 VF 到 VF 或 VIF 到 VIF 的模式,而不是 VF 到 VIF。

  • 某些 SR-IOV VF 的服务质量设置不生效,因为它们不支持网络速率限制。

  • 使用 SR-IOV VF 的虚拟机不支持执行实时迁移、挂起和检查点。

  • SR-IOV VF 不支持热插拔。

  • SR-IOV VF 不支持网络启动。

  • 对于某些使用旧版网卡驱动程序的网卡,即使在主机重新启动后也可能需要重新启动,这表明该网卡无法启用 SR-IOV。

  • 如果您的虚拟机具有 SR-IOV VF,则需要实时迁移的功能将无法实现。这是因为虚拟机直接绑定到启用了 SR-IOV 的物理网卡 VF。

  • SR-IOV 可以在使用高可用性的环境中部署。但是,容量规划中不考虑 SR-IOV。当池中存在具有适当资源的主机时,分配了 SR-IOV VF 的虚拟机将尽力重启。这些资源包括在正确网络上启用的 SR-IOV 和一个空闲的 VF。

  • SR-IOV VF 不支持 PVS-Accelerator。

为旧版驱动程序配置 SR-IOV VF

通常,网卡支持的最大 VF 数量可以自动确定。对于使用旧版驱动程序(例如 Intel I350 系列)的网卡,此限制在驱动程序模块配置文件中定义。可能需要手动调整此限制。要将其设置为最大值,请使用编辑器打开文件并更改以以下内容开头的行:

## VFs-maxvfs-by-user:
<!--NeedCopy-->

例如,要将 igb 驱动程序的最大 VF 数设置为 4,请将 /etc/modprobe.d/igb.conf 编辑为:

## VFs-param: max_vfs
## VFs-maxvfs-by-default: 7
## VFs-maxvfs-by-user: 4
options igb max_vfs=0
<!--NeedCopy-->

注意:

  • 该值必须小于或等于 VFs-maxvfs-by-default 行中的值。

  • 请勿更改这些文件中的任何其他行。

  • 在启用 SR-IOV 之前进行更改。

CLI

有关创建、删除、显示 SR-IOV 网络以及将 SR-IOV VF 分配给 VM 的 CLI 说明,请参阅 (/zh-cn/xenserver/9/command-line-interface.html#sr-iov-commands)。

控制出站数据速率 (QoS)

要限制 VM 每秒可发送的出站数据量,请在 VM 虚拟接口 (VIF) 上设置可选的服务质量 (QoS) 值。此设置允许您指定每秒千字节的出站数据包的最大传输速率。

服务质量值限制VM 传输的速率。服务质量设置不限制 VM 可以接收的数据量。如果需要此类限制,我们建议在网络中更高层(例如,在交换机级别)限制入站数据包的速率。

根据池中配置的网络堆栈,您可以在两个位置之一设置 VM 虚拟接口 (VIF) 上的服务质量值。您可以使用 xe CLI 或在 XenCenter 中设置此值。

  • XenCenter 您可以在虚拟接口的属性对话框中设置服务质量传输速率限制值。
  • xe 命令 您可以使用 CLI,通过以下部分中的命令设置服务质量传输速率。

QoS 的 CLI 命令示例

要使用 CLI 将 VIF 的最大传输速率限制为每秒 100 千字节,请使用 vif-param-set 命令:

xe vif-param-set uuid=vif_uuid qos_algorithm_type=ratelimit
xe vif-param-set uuid=vif_uuid qos_algorithm_params:kbps=100
<!--NeedCopy-->

注意:

kbps 参数表示每秒千字节 (kBps),而不是每秒千比特 (kbps)。

更改网络配置选项

本节讨论如何更改 XenServer 主机的网络配置。其中包括:

  • 更改主机名(即域名系统 (DNS) 名称)

  • 添加或删除 DNS 服务器

  • 更改 IP 地址

  • 更改用作管理接口的网卡

  • 向服务器添加新的物理网卡

  • 为网络添加用途

  • 启用 ARP 过滤(交换机端口锁定)

主机名

系统主机名(也称为域或 DNS 名称)在池范围数据库中定义,并使用 xe host-set-hostname-live CLI 命令进行更改,如下所示:

xe host-set-hostname-live host-uuid=host_uuid host-name=host-name
<!--NeedCopy-->

底层控制域主机名会动态更改以反映新的主机名。

DNS 服务器

要在 XenServer 主机的 IP 地址配置中添加或删除 DNS 服务器,请使用 pif-reconfigure-ip 命令。例如,对于具有静态 IP 的 PIF:

xe pif-reconfigure-ip uuid=pif_uuid mode=static DNS=new_dns_ip IP=IP netmask=netmask
<!--NeedCopy-->

更改独立主机的 IP 地址配置

您可以使用 xe CLI 更改网络接口配置。请勿直接更改底层网络配置脚本。

要更改 PIF 的 IP 地址配置,请使用 pif-reconfigure-ip CLI 命令。有关 pif-reconfigure-ip 命令参数的详细信息,请参阅 pif-reconfigure-ip。有关在资源池中更改主机 IP 地址的信息,请参阅以下部分。

更改资源池中的 IP 地址配置

资源池中的 XenServer 主机具有一个管理 IP 地址,用于管理以及与池中其他主机进行通信。更改主机管理接口 IP 地址所需的步骤对于池协调器和其他主机有所不同。

注意:

更改主机的 IP 地址以及其他网络参数时必须小心。根据网络拓扑和所做的更改,与网络存储的连接可能会丢失。发生这种情况时,必须使用 XenCenter 中的修复存储功能或使用 pbd-plug CLI 命令重新连接存储。因此,我们建议您在更改主机的 IP 配置之前,将虚拟机从主机迁移走。

使用 pif-reconfigure-ip CLI 命令根据需要设置 IP 地址。有关 pif-reconfigure-ip 命令参数的详细信息,请参阅 pif-reconfigure-ip

xe pif-reconfigure-ip uuid=pif_uuid mode=DHCP
<!--NeedCopy-->

使用 host-list CLI 命令通过检查池中所有其他 XenServer 主机是否可见来确认成员主机已成功重新连接到池协调器:

xe host-list
<!--NeedCopy-->

更改池协调器 XenServer 主机的 IP 地址需要额外的步骤。这是因为每个池成员都使用池协调器公告的 IP 地址进行通信。当池协调器的 IP 地址更改时,池成员不知道如何联系池协调器。

在可能的情况下,为池协调器使用一个专用 IP 地址,该地址在池的生命周期内不太可能更改。

使用 pif-reconfigure-ip CLI 命令根据需要设置 IP 地址:

xe pif-reconfigure-ip uuid=pif_uuid mode=DHCP
<!--NeedCopy-->

当池协调器的 IP 地址更改时,所有成员主机在无法联系池协调器时都会进入紧急模式。

在池协调器上,使用 pool-recover-slaves 命令强制池协调器联系每个池成员并通知他们新的池协调器 IP 地址:

xe pool-recover-slaves
<!--NeedCopy-->

管理接口

在主机上安装 XenServer 时,其一个网卡被指定为管理接口:用于 XenServer 管理流量的网卡。管理接口用于 XenCenter 与主机的连接(例如,Citrix Virtual Apps and Desktops™)以及主机到主机通信。

使用 pif-list 命令确定哪个 PIF 对应于要用作管理接口的网卡。将返回每个 PIF 的 UUID。

xe pif-list
<!--NeedCopy-->

使用 pif-param-list 命令验证用于管理接口的 PIF 的 IP 地址配置。如有必要,使用 pif-reconfigure-ip 命令配置要使用的 PIF 的 IP 地址。

xe pif-param-list uuid=pif_uuid
<!--NeedCopy-->

使用 host-management-reconfigure CLI 命令更改用于管理接口的 PIF。如果此主机是资源池的一部分,此命令必须在成员主机控制台上发出

xe host-management-reconfigure pif-uuid=pif_uuid
<!--NeedCopy-->

使用 network-list 命令确定哪个 PIF 对应于将用作池中所有主机的管理接口的网卡。将返回池范围网络的 UUID。

xe network-list
<!--NeedCopy-->

使用 network-param-list 命令获取池中所有主机的 PIF UUID。使用 pif-param-list 命令验证管理接口的 PIF 的 IP 地址配置。如有必要,使用 pif-reconfigure-ip 命令配置要使用的 PIF 的 IP 地址。

xe pif-param-list uuid=pif_uuid
<!--NeedCopy-->

使用 pool-management-reconfigure CLI 命令更改“网络”列表中列出的用于管理接口的 PIF。

xe pool-management-reconfigure network-uuid=network_uuid
<!--NeedCopy-->

限制端口 80 的使用

您可以使用端口 443 上的 HTTPS 或端口 80 上的 HTTP 与 XenServer 通信。出于安全原因,新安装默认关闭端口 80。升级会保留现有的端口设置。

要打开或关闭端口 80,请参阅 XenCenter 文档中的 https-only xe CLI 命令或更改池属性

禁用管理访问

要完全禁用对管理控制台的远程访问,请使用 host-management-disable CLI 命令。

警告:

禁用管理接口后,您必须登录物理主机控制台才能执行管理任务。禁用管理接口后,XenCenter 等外部接口将无法工作。

添加新的物理网卡

  1. 以常规方式在 XenServer 主机上安装新的物理网卡。
  2. 重启 XenServer 主机。
  3. 使用以下命令列出该 XenServer 主机的所有物理网卡:

    xe pif-list host-uuid=<host_uuid>
    
  4. 如果您没有看到额外的网卡,请使用以下命令扫描新的物理接口:

    xe pif-scan host-uuid=<host_uuid>
    

    此命令为新 NIC 创建一个新的 PIF 对象。

  5. 再次列出 XenServer 主机上的物理 NIC,以验证新 NIC 是否可见:

    xe pif-list host-uuid=<host_uuid>
    
  6. 新 PIF 最初列为已断开连接 (currently-attached ( RO): false)。要将其启动,请使用以下命令:

    xe pif-plug uuid=<uuid_of_pif>
    

或者,您可以使用 XenCenter 重新扫描新 NIC。有关详细信息,请参阅 XenCenter 文档中的配置 NIC

移除物理 NIC

在移除 NIC 之前,请确保您知道相应 PIF 的 UUID。以常规方式从 XenServer 主机中移除物理 NIC。重新启动主机后,运行 xe CLI 命令 pif-forget uuid=<UUID> 以销毁 PIF 对象。

为网络添加用途

网络用途可用于为网络添加额外功能。例如,使用网络建立 NBD 连接的能力。

要添加网络用途,请使用 xe network-param-add 命令:

xe network-param-add param-name=purpose param-key=purpose uuid=network-uuid
<!--NeedCopy-->

要删除网络用途,请使用 xe network-param-remove 命令:

xe network-param-remove param-name=purpose param-key=purpose uuid=network-uuid
<!--NeedCopy-->

目前,网络用途的可用值为 nbdinsecure_nbd。有关详细信息,请参阅 XenServer 更改块跟踪指南

使用交换机端口锁定

XenServer 交换机端口锁定功能允许您通过限制未知、不受信任或潜在恶意 VM 伪装拥有未分配给它们的 MAC 或 IP 地址的能力来控制它们发送的流量。您可以使用端口锁定命令默认阻止网络上的所有流量,或者定义允许单个 VM 发送流量的特定 IP 地址。

使用交换机端口锁定功能,您可以让所有租户或来宾使用相同的第 2 层网络,从而简化网络配置。

端口锁定命令最重要的功能之一是它们可以限制不受信任的来宾发送的流量。这限制了来宾伪装拥有其不实际拥有的 MAC 或 IP 地址的能力。具体来说,您可以使用这些命令来防止来宾执行以下操作:

  • 声明 XenServer 管理员未指定其可使用的 IP 或 MAC 地址

  • 拦截、欺骗或中断其他 VM 的流量

要求

  • 在您的环境中启用基于角色的访问控制 (RBAC) 时,配置交换机端口锁定的用户必须使用至少具有池操作员或池管理员角色的帐户登录。如果您的环境中未启用 RBAC,则用户必须使用池协调器的 root 帐户登录。

  • 运行交换机端口锁定命令时,网络可以处于联机或脱机状态。

  • 在 Windows 虚拟机中,仅当虚拟机中安装了 XenServer VM Tools 时,才会显示断开连接的网络图标。

注意

如果没有交换机端口锁定配置,VIF 将设置为“network_default”,网络将设置为“unlocked”。

如果环境中使用了任何第三方控制器,则不支持配置交换机端口锁定。

交换机端口锁定不会阻止云租户执行以下操作:

  • 对其他租户/用户执行 IP 级攻击。但是,如果他们尝试使用以下方式执行 IP 级攻击并且已配置交换机端口锁定,则交换机端口锁定会阻止他们这样做:a) 冒充云中的其他租户或用户,或 b) 启动对其他用户流量的拦截。

  • 耗尽网络资源。

  • 通过正常的交换机泛洪行为(针对广播 MAC 地址或未知目标 MAC 地址)接收发往其他虚拟机的某些流量。

同样,交换机端口锁定不会限制虚拟机可以向何处发送流量。

实施说明

您可以通过命令行或 XenServer API 实现端口锁定功能。但是,在自动化是主要考虑因素的大型环境中,最典型的实现方法可能是使用 API。

示例

本节提供端口锁定如何防止某些类型攻击的示例。在这些示例中,VM-c 是一台虚拟机,由恶意租户(租户 C)租用并用于攻击。VM-a 和 VM-b 是由非攻击性租户租用的虚拟机。

示例 1:端口锁定如何防止 ARP 欺骗:

ARP 欺骗用于表示攻击者试图将其 MAC 地址与另一个节点的 IP 地址关联。ARP 欺骗可能导致节点的流量被发送给攻击者。为实现此目标,攻击者会向以太网 LAN 发送伪造的 (欺骗性) ARP 消息。

场景

虚拟机 A (VM-a) 希望通过寻址到 VM-b 的 IP 地址,将 IP 流量从 VM-a 发送到虚拟机 B (VM-b)。虚拟机 C 的所有者希望使用 ARP 欺骗来假装他们的虚拟机 VM-c 实际上是 VM-b。

  1. VM-c 向 VM-a 发送推测性 ARP 响应流。ARP 响应声称响应中的 MAC 地址 (c_MAC) 与 IP 地址 b_IP 相关联

    结果:由于管理员启用了端口锁定,这些数据包都被丢弃,因为启用端口锁定可防止冒充。

  2. VM-b 向 VM-a 发送 ARP 响应,声称响应中的 MAC 地址 (b_MAC) 与 IP 地址 b_IP 相关联。

    结果:VM-a 收到 VM-b 的 ARP 响应。

示例 2:IP 欺骗防护:

IP 地址欺骗是一种通过创建具有伪造源 IP 地址的 Internet 协议 (IP) 数据包来隐藏数据包身份的过程。

场景

租户 C 试图使用其主机 Host-C 在远程系统上执行拒绝服务攻击,以掩盖其身份。

尝试 1:

租户 C 将主机 C 的 IP 地址和 MAC 地址设置为虚拟机 a 的 IP 地址和 MAC 地址(a_IP 和 a_MAC)。租户 C 指示主机 C 将 IP 流量发送到远程系统。

结果:主机 C 的数据包被丢弃。这是因为管理员启用了交换机端口锁定。主机 C 的数据包被丢弃,因为启用交换机端口锁定可以防止冒充。

尝试 2:

租户 C 将主机 C 的 IP 地址设置为虚拟机 a 的 IP 地址 (a_IP) 并保留其原始的 c_MAC。

租户 C 指示主机 C 将 IP 流量发送到远程系统。

结果:主机 C 的数据包被丢弃。这是因为管理员启用了交换机端口锁定,从而防止了冒充。

示例 3:Web 托管:

场景:

Alice 是一名基础设施管理员。

她的租户之一,租户 B,正在其虚拟机 VM-b 上托管多个网站。每个网站都需要一个托管在同一虚拟网络接口 (VIF) 上的独立 IP 地址。

Alice 重新配置了主机 B 的 VIF,以将其锁定到一个 MAC 地址但允许使用多个 IP 地址。

交换机端口锁定如何工作

交换机端口锁定功能允许您在一个或多个级别(共两个级别)上控制数据包过滤:

  • VIF 级别。您在 VIF 上配置的设置决定了数据包的过滤方式。您可以将 VIF 设置为阻止虚拟机发送任何流量,限制 VIF 只能使用其分配的 IP 地址发送流量,或者允许虚拟机向连接到 VIF 的网络上的任何 IP 地址发送流量。

  • 网络级别。XenServer 网络决定数据包的过滤方式。当 VIF 的锁定模式设置为 network_default 时,它会参考网络级别的锁定设置来确定允许哪些流量。

VIF 锁定模式状态

XenServer 交换机端口锁定功能提供了一种锁定模式,允许您以四种不同的状态配置 VIF。这些状态仅在 VIF 连接到正在运行的虚拟机时适用。

此图显示了当网络锁定模式设置为“未锁定”且 VIF 状态已配置时,三种不同的 VIF 锁定模式状态的行为方式。在第一张图中,VIF 状态设置为默认,因此不会过滤来自虚拟机的任何流量。在第二张图中,VIF 不发送或接收任何数据包,因为锁定模式设置为 `disabled`。在第三张图中,VIF 状态设置为“已锁定”。这意味着 VIF 只能在数据包包含正确的 MAC 和 IP 地址时发送数据包。

  • Network_default。当 VIF 的状态设置为 network_default 时,XenServer 使用网络的 default-locking-mode 参数来确定是否以及如何过滤通过 VIF 的数据包。行为因关联网络是否将网络默认锁定模式参数设置为“禁用”或“未锁定”而异:

    -default-locking-mode=disabled,XenServer 应用过滤规则,使 VIF 丢弃所有流量。

    -default-locking-mode=unlocked,XenServer 删除与 VIF 关联的所有过滤规则。默认情况下,默认锁定模式参数设置为 unlocked

    有关 default-locking-mode 参数的信息,请参阅 网络命令

    网络的默认锁定模式对锁定状态不是 network_default 的附加 VIF 没有影响。

    注意:

    您无法更改已连接活动 VIF 的网络的 default-locking-mode

  • 已锁定。XenServer 应用过滤规则,以便只允许通过 VIF 发送/接收到指定 MAC 和 IP 地址的流量。在此模式下,如果未指定 IP 地址,则虚拟机无法通过该 VIF 在该网络上发送任何流量。

    要指定 VIF 接受流量的 IP 地址,请使用 ipv4_allowedipv6_allowed 参数来使用 IPv4 或 IPv6 IP 地址。

  • 未锁定。所有网络流量都可以通过 VIF。也就是说,不会对进出 VIF 的任何流量应用任何过滤器。

  • 已禁用。不允许任何流量通过 VIF。(即,XenServer 应用过滤规则,使 VIF 丢弃所有流量。)

配置交换机端口锁定

本节提供了三种不同的操作步骤:

  • 限制 VIF 使用特定的 IP 地址

  • 将 IP 地址添加到现有受限列表。例如,当 VM 正在运行并连接到网络时(例如,如果您暂时使网络脱机),将 IP 地址添加到 VIF。

  • 从现有受限列表中删除 IP 地址

如果 VIF 的锁定模式设置为 locked,则它只能使用 ipv4-allowedipv6-allowed 参数中指定的地址。

因为在某些相对罕见的情况下,VIF 可能有多个 IP 地址,所以可以为一个 VIF 指定多个 IP 地址。

您可以在 VIF 插入(或 VM 启动)之前或之后执行这些操作。

如果默认锁定模式尚未设置为锁定,请通过运行以下命令将其更改为锁定:

xe vif-param-set uuid=vif-uuid locking-mode=locked
<!--NeedCopy-->

vif-uuid 表示您要允许发送流量的 VIF 的 UUID。要获取 UUID,请在主机上运行 xe vif-list 命令。vm-uuid 指示显示信息的虚拟机。设备 ID 指示 VIF 的设备编号。

运行 vif-param-set 命令以指定虚拟机可以从中发送流量的 IP 地址。执行以下一项或多项操作:

  • 指定一个或多个 IPv4 IP 地址目标。例如:

     xe vif-param-set uuid=vif-uuid ipv4-allowed=comma separated list of ipv4-addresses
     <!--NeedCopy-->
    
  • 指定一个或多个 IPv6 IP 地址目标。例如:

     xe vif-param-set uuid=vif-uuid ipv6-allowed=comma separated list of ipv6-addresses
     <!--NeedCopy-->
    

您可以通过用逗号分隔来指定多个 IP 地址,如前面的示例所示。

在执行将 VIF 限制为使用特定 IP 地址的操作后,您可以添加 VIF 可以使用的一个或多个 IP 地址。

运行 vif-param-add 命令将 IP 地址添加到现有列表。执行以下一项或多项操作:

  • 指定 IPv4 IP 地址。例如:

     xe vif-param-add uuid=vif-uuid ipv4-allowed=comma separated list of ipv4-addresses
     <!--NeedCopy-->
    
  • 指定 IPv6 IP 地址。例如:

     xe vif-param-add uuid=vif-uuid ipv6-allowed=comma separated list of ipv6-addresses
     <!--NeedCopy-->
    

如果您将 VIF 限制为使用两个或更多 IP 地址,则可以从列表中删除其中一个 IP 地址。

运行 vif-param-remove 命令从现有列表中删除 IP 地址。执行以下一项或多项操作:

  • 指定要删除的 IPv4 IP 地址。例如:

     xe vif-param-remove uuid=vif-uuid ipv4-allowed=comma separated list of ipv4-addresses
     <!--NeedCopy-->
    
  • 指定要删除的 IPv6 IP 地址。例如:

     xe vif-param-remove uuid=vif-uuid ipv6-allowed=comma separated list of ipv6-addresses
     <!--NeedCopy-->
    

阻止虚拟机从特定网络发送或接收流量

以下过程可阻止虚拟机通过特定 VIF 进行通信。由于 VIF 连接到特定的 XenServer 网络,因此您可以使用此过程来阻止虚拟机从特定网络发送或接收任何流量。这提供了比禁用整个网络更精细的控制级别。

如果您使用 CLI 命令,则无需拔下 VIF 即可设置 VIF 的锁定模式。该命令在 VIF 运行时更改过滤规则。在这种情况下,网络连接似乎仍然存在,但是 VIF 会丢弃 VM 尝试发送的任何数据包。

提示:

要查找 VIF 的 UUID,请在主机上运行 xe vif-list 命令。设备 ID 指示 VIF 的设备编号。

要阻止 VIF 接收流量,请禁用连接到您要阻止 VM 从中接收流量的网络的 VIF:

xe vif-param-set uuid=vif-uuid locking-mode=disabled
<!--NeedCopy-->

您还可以在 XenCenter 中禁用 VIF,方法是在 VM 的“网络”选项卡中选择虚拟网络接口,然后单击“停用”。

移除 VIF 对 IP 地址的限制

要恢复到默认(原始)锁定模式状态,请使用以下过程。默认情况下,当您创建 VIF 时,XenServer 会将其配置为不限制使用特定的 IP 地址。

要将 VIF 恢复到未锁定状态,请将 VIF 的默认锁定模式更改为“未锁定”。如果它尚未处于该模式,请运行以下命令:

xe vif-param-set uuid=vif_uuid locking-mode=unlocked
<!--NeedCopy-->

简化云中的 VIF 锁定模式配置

您无需为每个 VIF 运行 VIF 锁定模式命令,而是可以确保所有 VIF 默认处于禁用状态。为此,您必须在网络级别更改数据包过滤。更改数据包过滤会导致 XenServer 网络确定如何过滤数据包,如上一节 交换机端口锁定工作原理 中所述。

具体来说,网络的 default-locking-mode 设置决定了具有默认设置的新 VIF 的行为方式。每当 VIF 的 locking-mode 设置为 default 时,VIF 都会参考网络锁定模式 (default-locking-mode) 来确定是否以及如何过滤通过 VIF 的数据包:

  • 未锁定。当网络 default-locking-mode 参数设置为 unlocked 时,XenServer 允许 VM 将流量发送到 VIF 连接到的网络上的任何 IP 地址。

  • 已禁用。当 default-locking-mode 参数设置为 disabled 时,XenServer 会应用过滤规则,使 VIF 丢弃所有流量。

默认情况下,在 XenCenter 中创建并使用 CLI 的所有网络的 default-locking-mode 都设置为 unlocked

通过将 VIF 的锁定模式设置为其默认值 (network_default),您可以为连接到特定网络的所有新创建的 VIF 创建一个基本的默认配置(在网络级别)。

此图说明了当 VIF 的 locking-mode 设置为其默认设置 (network_default) 时,VIF 如何使用网络 default-locking-mode 来确定其行为。

 此图说明了 VIF 在配置为默认设置 (locking-mode=network_default) 时,如何检查与 default-locking-mode 关联的设置。在此图中,网络设置为 default-locking-mode=disabled,因此没有流量可以通过 VIF。

例如,默认情况下,创建 VIF 时,其 locking-mode 设置为 network_default。如果您将网络的 default-locking-mode=disabled,则所有未配置锁定模式的新 VIF 都将被禁用。VIF 将保持禁用状态,直到您 (a) 更改单个 VIF 的 locking-mode 参数,或 (b) 明确将 VIF 的 locking-mode 设置为 `unlocked。当您足够信任某个特定 VM,以至于根本不想过滤其流量时,这会很有帮助。

要更改网络的默认锁定模式设置:

创建网络后,通过运行以下命令更改默认锁定模式:

xe network-param-set uuid=network-uuid default-locking-mode=[unlocked|disabled]
<!--NeedCopy-->

注意:

要获取网络的 UUID,请运行 xe network-list 命令。此命令显示运行该命令的主机上所有网络的 UUID。

检查网络的默认锁定模式设置:

运行以下命令之一:

xe network-param-get uuid=network-uuid param-name=default-locking-mode
<!--NeedCopy-->

xe network-list uuid=network-uuid params=default-locking-mode
<!--NeedCopy-->

使用网络设置进行 VIF 流量过滤

以下过程指示虚拟机上的 VIF 使用网络本身的 XenServer 网络 default-locking-mode 设置来确定如何过滤流量。

  1. 如果 VIF 锁定状态尚未处于 network_default 模式,请通过运行以下命令将其更改为该模式:

    xe vif-param-set uuid=vif_uuid locking-mode=network_default
    <!--NeedCopy-->
    
  2. 如果默认锁定模式尚未处于 unlocked 模式,请通过运行以下命令将其更改为该模式:

    xe network-param-set uuid=network-uuid default-locking-mode=unlocked
    <!--NeedCopy-->