管理网络

Last published : Oct 07, 2026
本节中的网络配置过程因您配置的是独立主机还是资源池中的主机而异。

在独立主机中创建网络

由于在主机安装期间会为每个 PIF 创建外部网络,因此通常仅在以下情况下才需要创建额外的网络:
  • 使用专用网络
  • 支持高级操作,例如 VLAN 或 NIC 绑定
有关如何使用 XenCenter 添加或删除网络的信息,请参阅 XenCenter 文档中的 添加新网络。
打开 XenServer® 主机文本控制台。
使用 network-create 命令创建网络,该命令将返回新创建网络的 UUID:
xe network-create name-label=mynetwork
此时,网络未连接到 PIF,因此是内部网络。

在资源池中创建网络

资源池中的所有 XenServer 主机必须具有相同数量的物理 NIC。当主机加入池时,此要求并未严格执行。其中一个 NIC 始终被指定为 管理接口,用于 XenServer 管理流量。
由于池中的所有主机共享一组公共网络。因此,池中的 XenServer 主机拥有相同的物理网络配置非常重要。各个主机上的 PIF 根据设备名称连接到池范围的网络。例如,池中所有具有 eth0 NIC 的 XenServer 主机都有一个相应的 PIF 连接到池范围的 Network 0 网络。对于具有 eth1 NIC 和 Network 1 的主机,以及池中至少一个 XenServer 主机中存在的其他 NIC 也是如此。
如果一个 XenServer 主机的 NIC 数量与池中其他主机不同,则可能会出现复杂情况。出现复杂情况的原因是并非所有池网络都对所有池主机有效。例如,如果主机 host1 和 host2 位于同一池中,并且 host1 有四个 NIC 而 host2 只有两个,则只有连接到与 eth0 和 eth1 对应的 PIF 的网络在 host2 上有效。host1 上连接到与 eth2 和 eth3 对应的网络的 VIF 的虚拟机无法迁移到主机 host2。

创建 VLAN

对于资源池中的主机,您可以使用 pool-vlan-create 命令。此命令会创建 VLAN,并自动在池中的主机上创建并插入所需的 PIF。有关详细信息,请参阅 pool-vlan-create。
打开 XenServer 主机控制台。
创建一个用于 VLAN 的网络。将返回新网络的 UUID:
xe network-create name-label=network5
使用 pif-list 命令查找与支持所需 VLAN 标记的物理网卡对应的 PIF 的 UUID。将返回所有 PIF 的 UUID 和设备名称,包括任何现有 VLAN:
xe pif-list
创建一个 VLAN 对象,指定所有要连接到新 VLAN 的 VM 上的所需物理 PIF 和 VLAN 标记。将创建一个新的 PIF 并将其插入到指定的网络中。将返回新 PIF 对象的 UUID。
xe vlan-create network-uuid=network_uuid pif-uuid=pif_uuid vlan=5
将 VM VIF 附加到新网络。有关详细信息,请参阅 在独立主机中创建网络。

在独立主机上创建网卡绑定

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

创建网卡绑定

绑定网卡时,绑定会吸收用作管理接口的 PIF/网卡。管理接口会自动移动到绑定 PIF。
  1. 使用 network-create 命令创建一个用于绑定网卡的网络。将返回新网络的 UUID:
    xe network-create name-label=bond0
  2. 使用 pif-list 命令确定要在绑定中使用的 PIF 的 UUID:
    xe pif-list
  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
      绑定两个网卡时输入两个 UUID,绑定四个网卡时输入四个 UUID。运行命令后将返回绑定网卡的 UUID。
    • 要在主动-被动或 LACP 绑定模式下配置绑定,请使用相同的语法,添加可选的 mode 参数,并指定 lacp 或 active-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

控制绑定网卡的 MAC 地址

绑定管理接口时,它会取代用作管理接口的 PIF/NIC。如果主机使用 DHCP,则绑定网卡的 MAC 地址与正在使用的 PIF/NIC 相同。管理接口的 IP 地址可以保持不变。
您可以更改绑定网卡的 MAC 地址,使其与(当前)管理接口网卡的 MAC 地址不同。但是,当启用绑定网卡并且正在使用的 MAC/IP 地址发生更改时,到主机的现有网络会话将断开。
您可以通过两种方式控制绑定网卡的 MAC 地址:
  • 可以在 bond-create 命令中指定可选的 mac 参数。您可以使用此参数将绑定网卡的 MAC 地址设置为任意地址。
  • 如果未指定 mac 参数,则如果管理接口是绑定网卡中的一个接口,XenServer 将使用管理接口的 MAC 地址。如果管理接口不是绑定网卡的一部分,但存在另一个管理接口,则绑定网卡将使用该管理接口的 MAC 地址(以及 IP 地址)。如果绑定网卡中的任何 NIC 都不是管理接口,则绑定网卡将使用第一个指定 NIC 的 MAC 地址。

还原 NIC 绑定

将 XenServer 主机还原为非绑定配置时,bond-destroy 命令会自动将主 NIC 配置为管理接口的接口。因此,所有 VIF 都将移动到管理接口。如果主机的管理接口位于标记的 VLAN 绑定接口上,则在执行 bond-destroy 时,管理 VLAN 将移动到主 NIC。
术语“主 NIC”是指在创建绑定网卡时复制 MAC 和 IP 配置的 PIF。绑定两个 NIC 时,主 NIC 是:
  1. 管理接口 NIC(如果管理接口是绑定 NIC 之一)。
  2. 任何其他具有 IP 地址的 NIC(如果管理接口不是绑定网卡的一部分)。
  3. 第一个指定的 NIC。您可以通过运行以下命令来找出它是哪个:
    xe bond-list params=all

在资源池中创建 NIC 绑定

尽可能地,在将更多主机加入池或创建虚拟机之前,作为初始资源池创建的一部分来创建 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
按照创建 NIC 绑定中所述创建 NIC 绑定。
在您要加入池的主机上打开控制台并运行以下命令:
xe pool-join master-address=host1 master-username=root master-password=password
网络和绑定信息会自动复制到新主机。管理接口会自动从最初配置它的主机 NIC 移动到绑定的 PIF。也就是说,管理接口现在被吸收到绑定中,以便整个绑定充当管理接口。
使用 host-list 命令查找正在配置的主机的 UUID:
xe host-list
警告:
不要尝试在高可用性启用时创建网络绑定。绑定创建过程会干扰正在进行的高可用性心跳,并导致主机自隔离(自行关闭)。主机可能无法正常重启,您可能需要运行 host-emergency-ha-disable 命令进行恢复。

配置专用存储网卡

您可以使用 XenCenter 或 xe CLI 为网卡分配 IP 地址,并将其专用于特定功能,例如存储流量。当您为网卡配置 IP 地址时,您是通过创建辅助接口来完成的。(XenServer 用于管理的启用 IP 的网卡称为管理接口。)
当您希望将辅助接口专用于特定目的时,请确保已配置适当的网络。这是为了确保网卡仅用于所需的流量。要将网卡专用于存储流量,请配置网卡、存储目标、交换机和 VLAN,以便目标只能通过分配的网卡访问。如果您的物理和 IP 配置不限制通过存储网卡发送的流量,则可以通过辅助接口发送流量,例如管理流量。
当您为存储流量创建新的辅助接口时,必须为其分配一个满足以下条件的 IP 地址:
  • 如果适用,与存储控制器位于同一子网,并且
  • 不与任何其他辅助接口或管理接口位于同一子网。
当您配置辅助接口时,每个辅助接口必须位于单独的子网中。例如,如果您想为存储配置另外两个辅助接口,则需要三个不同子网上的 IP 地址——一个用于管理接口的子网,一个用于辅助接口 1 的子网,以及一个用于辅助接口 2 的子网。
如果您正在使用绑定来提高存储流量的弹性,请考虑使用 LACP 而不是 Linux 桥接(已弃用)绑定。要使用 LACP 绑定,您必须将 vSwitch 配置为您的网络堆栈。有关更多信息,请参阅网络堆栈选择。
注意:
选择要配置为用于 iSCSI 或 NFS SR 的辅助接口的网卡时,请确保专用网卡使用与管理接口不可路由的单独 IP 子网。如果未强制执行此操作,则在主机重启后,由于网络接口的初始化顺序,存储流量可能会通过主管理接口进行传输。
确保 PIF 位于单独的子网中,或者配置路由以适应您的网络拓扑,从而强制所需的流量通过选定的 PIF。
为 PIF 设置 IP 配置,为模式参数添加适当的值。如果使用静态 IP 地址,请添加 IP、子网掩码、网关和 DNS 参数:
xe pif-reconfigure-ip mode=DHCP | Static uuid=pif-uuid
将 PIF 的 disallow-unplug 参数设置为 true:
xe pif-param-set disallow-unplug=true uuid=pif-uuid
xe pif-param-set other-config:management_purpose="Storage" uuid=pif-uuid
如果您想使用一个辅助接口进行存储,并且该接口也可以从管理接口路由(请记住,此配置并非最佳实践),您有两种选择:
  • 主机重启后,请确保辅助接口已正确配置。使用 xe pbd-unplug 和 xe pbd-plug 命令重新初始化主机上的存储连接。此命令将重新启动存储连接并将其通过正确的接口路由。
  • 另外,您可以使用 xe pif-forget 从 XenServer 数据库中删除接口,并在控制域中手动配置它。xe pif-forget 是一个高级选项,要求您熟悉如何手动配置 Linux 网络。

使用启用 SR-IOV 的网卡

单根 I/O 虚拟化 (SR-IOV) 是一种虚拟化技术,它允许单个 PCI 设备在物理系统上显示为多个 PCI 设备。实际的物理设备称为物理功能 (PF),而其他设备称为虚拟功能 (VF)。管理程序可以将一个或多个 VF 分配给虚拟机 (VM):然后,来宾可以像直接分配一样使用该设备。
将一个或多个网卡 VF 分配给 VM 允许其网络流量绕过虚拟交换机。配置后,每个 VM 的行为就像直接使用网卡一样,从而减少处理开销并提高性能。

SR-IOV 的优势

SR-IOV VF 具有比 VIF 更好的性能。它可以通过同一网卡(绕过 XenServer 网络堆栈)确保来自不同 VM 的流量之间的基于硬件的隔离。
使用此功能,您可以:
  • 在支持 SR-IOV 的网卡上启用 SR-IOV。
  • 在支持 SR-IOV 的网卡上禁用 SR-IOV。
  • 将 SR-IOV VF 作为 VF 资源池进行管理。
  • 将 SR-IOV VF 分配给 VM。
  • 配置 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 可能无法相互通信,因为存在网卡硬件限制。要使这些虚拟机能够通信,请确保通信模式为 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:
例如,要将 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
注意:
  • 该值必须小于或等于 VFs-maxvfs-by-default 行中的值。
  • 请勿更改这些文件中的任何其他行。
  • 在启用 SR-IOV 之前进行更改。

命令行界面

有关创建、删除、显示 SR-IOV 网络以及将 SR-IOV VF 分配给 VM 的 CLI 说明,请参阅 SR-IOV 命令。

控制出站数据速率 (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
注意:
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
底层控制域主机名会动态更改以反映新的主机名。

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

更改独立主机的 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
使用 host-list CLI 命令通过检查池中所有其他 XenServer 主机是否可见来确认成员主机已成功重新连接到池协调器:
xe host-list
更改池协调器 XenServer 主机的 IP 地址需要额外的步骤。这是因为每个池成员都使用池协调器公布的 IP 地址进行通信。当池协调器的 IP 地址更改时,池成员不知道如何联系池协调器。
在可能的情况下,为池协调器使用一个在池生命周期内不太可能更改的专用 IP 地址。
使用 pif-reconfigure-ip CLI 命令按需设置 IP 地址:
xe pif-reconfigure-ip uuid=pif_uuid mode=DHCP
当池协调器的 IP 地址更改时,所有成员主机在无法联系池协调器时会进入紧急模式。
在池协调器上,使用 pool-recover-slaves 命令强制池协调器联系每个池成员并告知他们新的池协调器 IP 地址:
xe pool-recover-slaves

管理接口

当您在主机上安装 XenServer 时,其一个网卡被指定为管理接口:用于 XenServer 管理流量的网卡。管理接口用于 XenCenter 与主机的连接(例如,Citrix Virtual Apps and Desktops™)以及主机到主机的通信。
使用 pif-list 命令确定哪个 PIF 对应于将用作管理接口的网卡。将返回每个 PIF 的 UUID。
xe pif-list
使用 pif-param-list 命令验证用于管理接口的 PIF 的 IP 地址配置。如有必要,使用 pif-reconfigure-ip 命令配置要使用的 PIF 的 IP 地址。
xe pif-param-list uuid=pif_uuid
使用 host-management-reconfigure CLI 命令更改用于管理接口的 PIF。如果此主机是资源池的一部分,则必须在成员主机控制台上发出此命令:
xe host-management-reconfigure pif-uuid=pif_uuid
使用 network-list 命令确定哪个 PIF 对应于将用作池中所有主机的管理接口的网卡。将返回池范围网络的 UUID。
xe network-list
使用 network-param-list 命令获取池中所有主机的 PIF UUID。使用 pif-param-list 命令验证管理接口的 PIF 的 IP 地址配置。如有必要,使用 pif-reconfigure-ip 命令配置要使用的 PIF 的 IP 地址。
xe pif-param-list uuid=pif_uuid
使用 pool-management-reconfigure CLI 命令更改“网络”列表中列出的用于管理接口的 PIF。
xe pool-management-reconfigure network-uuid=network_uuid

限制端口 80 的使用

您可以使用端口 443 上的 HTTPS 或端口 80 上的 HTTP 与 XenServer 通信。出于安全原因,您可以关闭管理接口上的 TCP 端口 80。默认情况下,端口 80 仍然打开。如果关闭它,任何使用管理接口的外部客户端都必须使用端口 443 上的 HTTPS 连接到 XenServer。但是,在关闭端口 80 之前,请检查您的所有 API 客户端(特别是 Citrix Virtual Apps and Desktops)是否可以使用端口 443 上的 HTTPS。
要关闭端口 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>
    此命令为新网卡创建一个新的 PIF 对象。
  5. 再次列出 XenServer 主机上的物理网卡,以验证新网卡是否可见:
    xe pif-list host-uuid=<host_uuid>
  6. 新的 PIF 最初显示为已断开连接 (currently-attached ( RO): false)。要将其启用,请使用以下命令:
    xe pif-plug uuid=<uuid_of_pif>
另外,您可以使用 XenCenter 重新扫描新的网卡。有关详细信息,请参阅 XenCenter 文档中的配置网卡。

移除物理网卡

在移除网卡之前,请确保您知道相应 PIF 的 UUID。以常规方式从 XenServer 主机中移除物理网卡。重启主机后,运行 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
要删除网络用途,请使用 xe network-param-remove 命令:
xe network-param-remove param-name=purpose param-key=purpose uuid=network-uuid
目前,网络用途的可用值为 nbd 和 insecure_nbd。有关详细信息,请参阅 XenServer 更改块跟踪指南。

使用交换机端口锁定

XenServer 交换机端口锁定功能允许您通过限制未知、不受信任或潜在恶意虚拟机伪装其未分配的 MAC 或 IP 地址的能力来控制它们发送的流量。您可以使用端口锁定命令默认阻止网络上的所有流量,或者定义允许单个虚拟机发送流量的特定 IP 地址。
使用交换机端口锁定功能,您可以让所有租户或访客使用相同的第 2 层网络,从而简化网络配置。
端口锁定命令最重要的功能之一是它们可以限制不受信任的访客发送的流量。这限制了访客假装拥有其不实际拥有的 MAC 或 IP 地址的能力。具体来说,您可以使用这些命令来防止访客执行以下操作:
  • 声明 XenServer 管理员未指定其可使用的 IP 或 MAC 地址
  • 拦截、欺骗或干扰其他虚拟机的流量

要求

  • XenServer 交换机端口锁定功能在 Linux 网桥(已弃用)和 vSwitch 网络堆栈上受支持。
  • 当您在环境中启用基于角色的访问控制 (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 地址的互联网协议 (IP) 数据包来隐藏数据包身份的过程。
场景:
租户 C 正试图使用其主机 Host-C 对远程系统发起拒绝服务攻击,以掩盖其身份。
尝试 1:
租户 C 将 Host-C 的 IP 地址和 MAC 地址设置为 VM-a 的 IP 和 MAC 地址(a_IP 和 a_MAC)。租户 C 指示 Host-C 向远程系统发送 IP 流量。
结果:Host-C 数据包被丢弃。这是因为管理员启用了交换机端口锁定。Host-C 数据包被丢弃,因为启用交换机端口锁定可防止冒充。
尝试 2:
租户 C 将 Host-C 的 IP 地址设置为 VM-a 的 IP 地址 (a_IP),并保留其原始 c_MAC。
租户 C 指示 Host-C 向远程系统发送 IP 流量。
结果:Host-C 数据包被丢弃。这是因为管理员启用了交换机端口锁定,从而防止了冒充。
示例 3:Web 托管:
场景:
Alice 是一名基础设施管理员。
她的租户之一,租户 B,正在其虚拟机 VM-b 上托管多个网站。每个网站都需要一个托管在同一虚拟网络接口 (VIF) 上的独立 IP 地址。
Alice 将 Host-B 的 VIF 重新配置为锁定到单个 MAC 地址但允许多个 IP 地址。

交换机端口锁定工作原理

交换机端口锁定功能允许您在一个或两个级别上控制数据包过滤:
  • VIF 级别。您在 VIF 上配置的设置决定了数据包的过滤方式。您可以将 VIF 设置为阻止 VM 发送任何流量,限制 VIF 只能使用其分配的 IP 地址发送流量,或允许 VM 向连接到 VIF 的网络上的任何 IP 地址发送流量。
  • 网络级别。XenServer 网络决定了数据包的过滤方式。当 VIF 的锁定模式设置为 network_default 时,它会参考网络级别的锁定设置来确定允许哪些流量。
无论您使用哪种网络堆栈,此功能的操作方式都相同。但是,正如后续章节中更详细描述的那样,Linux 网桥(已弃用)不完全支持 IPv6 中的交换机端口锁定。

VIF 锁定模式状态

XenServer 交换机端口锁定功能提供了一种锁定模式,允许您以四种不同的状态配置 VIF。这些状态仅在 VIF 连接到正在运行的虚拟机时适用。
  • 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 参数的信息,请参阅 网络命令。
    网络的默认锁定模式对已连接的 VIF 没有影响,其锁定状态不是 network_default 的 VIF。
    注意:
    您无法更改具有活动 VIF 的网络的 default-locking-mode。
  • 锁定。XenServer 应用过滤规则,以便只允许通过 VIF 发送/接收到指定 MAC 和 IP 地址的流量。在此模式下,如果未指定 IP 地址,则 VM 无法通过该 VIF 在该网络上发送任何流量。
    要指定 VIF 接受流量的 IP 地址,请使用 IPv4 或 IPv6 IP 地址,通过 ipv4_allowed 或 ipv6_allowed 参数。但是,如果配置了 Linux 网桥(已弃用),请勿键入 IPv6 地址。
    当 Linux 网桥处于活动状态时,XenServer 允许您键入 IPv6 地址。但是,XenServer 无法根据键入的 IPv6 地址进行过滤。原因是 Linux 网桥没有用于过滤邻居发现协议 (NDP) 数据包的模块。因此,无法实现完全保护,并且来宾可以通过伪造 NDP 数据包来冒充其他来宾。结果是,如果您指定了哪怕一个 IPv6 地址,XenServer 也会让所有 IPv6 流量通过 VIF。如果您未指定任何 IPv6 地址,XenServer 将不允许任何 IPv6 流量通过 VIF。
    注意:
    Linux 网桥网络堆栈已弃用,并将在未来版本中移除。
  • 未锁定。所有网络流量都可以通过 VIF。也就是说,不会对进出 VIF 的任何流量应用任何过滤器。
  • 已禁用。不允许任何流量通过 VIF。(也就是说,XenServer 应用了一个过滤规则,使 VIF 丢弃所有流量。)

配置交换机端口锁定

本节提供三种不同的过程:
  • 限制 VIF 使用特定的 IP 地址
  • 将 IP 地址添加到现有受限列表。例如,当 VM 正在运行并连接到网络时(例如,如果您暂时将网络脱机),将 IP 地址添加到 VIF。
  • 从现有受限列表中移除 IP 地址
如果 VIF 的锁定模式设置为 locked,则它只能使用 ipv4-allowed 或 ipv6-allowed 参数中指定的地址。
因为在某些相对罕见的情况下,VIF 可能有多个 IP 地址,所以可以为一个 VIF 指定多个 IP 地址。
您可以在 VIF 插入(或 VM 启动)之前或之后执行这些过程。
如果默认锁定模式尚未设置为锁定,请通过运行以下命令将其更改为锁定:
xe vif-param-set uuid=vif-uuid locking-mode=locked
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
  • 指定一个或多个 IPv6 IP 地址目标。例如:
    xe vif-param-set uuid=vif-uuid ipv6-allowed=comma separated list of ipv6-addresses
您可以通过用逗号分隔来指定多个 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
  • 指定 IPv6 IP 地址。例如:
    xe vif-param-add uuid=vif-uuid ipv6-allowed=comma separated list of ipv6-addresses
如果您将 VIF 限制为使用两个或更多 IP 地址,则可以从列表中删除其中一个 IP 地址。
运行 vif-param-remove 命令从现有列表中删除 IP 地址。执行以下一项或多项操作:
  • 指定要删除的 IPv4 IP 地址。例如:
    xe vif-param-remove uuid=vif-uuid ipv4-allowed=comma separated list of ipv4-addresses
  • 指定要删除的 IPv6 IP 地址。例如:
    xe vif-param-remove uuid=vif-uuid ipv6-allowed=comma separated list of ipv6-addresses

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

以下过程可阻止虚拟机通过特定的 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
您还可以在 XenCenter 中禁用 VIF,方法是在 VM 的“网络”选项卡中选择虚拟网络接口,然后单击“停用”。

移除 VIF 对 IP 地址的限制

要恢复到默认(原始)锁定模式状态,请使用以下过程。默认情况下,当您创建 VIF 时,XenServer 会将其配置为不受限于使用特定的 IP 地址。
要将 VIF 恢复到未锁定状态,请将 VIF 默认锁定模式更改为未锁定。如果它尚未处于该模式,请运行以下命令:
xe vif-param-set uuid=vif_uuid locking-mode=unlocked

简化云中的 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=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]
注意:
要获取网络的 UUID,请运行 xe network-list 命令。此命令将显示您运行该命令的主机上所有网络的 UUID。
检查网络的默认锁定模式设置:
运行以下命令之一:
xe network-param-get uuid=network-uuid param-name=default-locking-mode
或
xe network-list uuid=network-uuid params=default-locking-mode

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

以下过程指示虚拟机上的 VIF 使用网络本身的 XenServer 网络 default-locking-mode 设置来确定如何过滤流量。
  1. 如果 VIF 尚未处于该模式,请通过运行以下命令将其锁定状态更改为 network_default:
    xe vif-param-set uuid=vif_uuid locking-mode=network_default
  2. 如果默认锁定模式尚未处于该模式,请通过运行以下命令将其更改为 unlocked:
    xe network-param-set uuid=network-uuid default-locking-mode=unlocked