Citrix ADC

VXLAN

Citrix ADC 设备支持虚拟可扩展局域网 (VXLAN)。VXLAN 通过在 UDP 数据包中封装 2 层帧,将第 2 层网络叠加到第 3 层基础结构上。每个叠加网络称为 VXLAN 段,并由称为 VXLAN 网络标识符 (VNI) 的唯一 24 位标识符进行标识。只有同一 VXLAN 中的网络设备才能相互通信。

VXLAN 提供与 VLAN 相同的以太网第 2 层网络服务,但具有更高的可扩展性和灵活性。使用 VXLAN 的两个主要优点如下:

  • 更高的可扩展性。服务器虚拟化和云计算架构大大增加了对数据中心中隔离的第 2 层网络的需求。VLAN 规范使用 12 位 VLAN ID 来标识第 2 层网络,因此无法扩展到 4094 VLAN 以外。当需要数千个隔离的第 2 层网络时,该数字可能不足。24 位 VNI 可在同一管理域中容纳多达 1600 万个 VXLAN 段。
  • 更高的灵活性。由于 VXLAN 在第 3 层数据包上传送第 2 层数据框,因此 VXLAN 将 L2 网络扩展到数据中心的不同部分和地理上分离的数据中心。托管在数据中心的不同部分和不同数据中心但属于同一 VXLAN 的应用程序将显示为一个连续网络。

VXLAN 的工作原理

VXLAN 区段是在 VXLAN 隧道端点点 (VTEP) 之间创建的。VTEP 支持 VXLAN 协议,并执行 VXLAN 封装和去胶囊。您可以将 VXLAN 段视为两个 VTEP 之间的隧道,其中一个 VTEP 用 UDP 标头和 IP 标头封装了一个 Layer2 帧,并通过隧道发送它。另一个 VTEP 接收并解除数据包以获得第 2 层帧。Citrix ADC 是 VTEP 的一个示例。其他示例包括第三方虚拟机管理程序、VXLAN 感知虚拟机和支持 VXLAN 的交换机。

下图显示了通过 VXLAN 隧道连接的虚拟机和物理服务器。

Vxlan 概述

下图显示了 VXLAN 数据包的格式。

Vxlan 数据包

Citrix ADC 上的 VXLAN 使用第 2 层机制发送广播、多播和未知单播帧。VXLAN 支持以下模式来发送这些 L2 帧。

  • 单播模式:在此模式下,您可以在 Citrix ADC 上配置 VXLAN 时指定 VTEP 的 IP 地址。Citrix ADC 通过第 3 层向此 VXLAN 的所有 VTEP 发送广播、多播和未知单播帧。
  • 多播模式:在此模式下,您可以在 Citrix ADC 上配置 VXLAN 时指定多播组 IP 地址。Citrix ADC 不支持 Internet 组管理协议 (IGMP) 协议。Citrix ADC 依靠上游路由器加入共享公用多播组 IP 地址的多播组。Citrix ADC 通过第 3 层向此 VXLAN 的多播组 IP 地址发送广播、多播和未知单播帧。

与第 2 层桥接表类似,Citrix ADC 基于接收到的 VXLAN 数据包的内部和外部标头来维护 VXLAN 映射表。此表将远程主机 MAC 地址映射到特定 VXLAN 的 VTEP IP 地址。Citrix ADC 使用 VXLAN 映射表查找第 2 层帧的目标 MAC 地址。如果 VXLAN 表中存在此 MAC 地址的条目,Citrix ADC 会使用 VXLAN 协议将第 3 层上的第 2 帧发送到 VXLAN 映射条目中指定的映射 VTEP IP 地址。

由于 VXLAN 的功能与 VLAN 类似,因此支持 VLAN 作为分类参数的大多数 Citrix ADC 功能都支持 VXLAN。这些功能包括一个可选的 VXLAN 参数设置,该设置指定 VXLAN VNI。

在高可用性 (HA) 配置中,VXLAN 配置将传播或同步到辅助节点。

VXLAN 用例:跨数据中心的负载平衡

要了解 Citrix ADC 的 VXLAN 功能,请考虑示例公司在 www.example.com 上托管站点的示例。为确保应用程序的可用性,站点托管在三台服务器上:S0、S1 和 S2。Citrix ADC NS-ADC 上的负载平衡虚拟服务器 LBVS 用于对这些服务器进行负载平衡。S0、S1 和 S2 分别位于数据中心 DC0、DC1 和 DC2 中。在 DC0 中,服务器 S0 连接到 NS-ADC。

S0 是物理服务器,S1 和 S2 是虚拟机 (VM)。S1 在数据中心 DC1 中的虚拟化主机设备开发-VTEP-1 上运行,S2 在 DC2 中的主机设备开发-VTEP-2 上运行。NS-ADC、开发-VTEP-1 和开发-VTEP-2 支持 VXLAN 协议。

S0、S1 和 S2 是同一私有子网 192.0.1.0/24 的一部分。S0, S1, 和 S2 是一个公共广播域的一部分, VXLAN 9000 配置在 NSS ADC, 开发-VTEP-1 和开发-VTEP-2. 服务器 S1 和 S2 是由 VXLAN9000 的一部分在开发-VTEP-1 和开发-VTEP-2,分别。

vxlan 如何工作

下表列出了此示例中使用的设置: VXLAN 设置

NSS ADC 上的服务 SVC-S0、SVC-S1 和 SVC-S2 代表 S0、S1 和 S2。一旦配置了这些服务,NS-ADC 就会广播 S0、S1 和 S2 的 ARP 请求,以解决 IP 到 Mac 映射问题。这些 ARP 请求也通过 VXLAN 9000 发送到开发人员 VTEP-1 和开发人员 VTEP-2。

以下是用于解决 S2 ARP 请求的流量:

  1. NS-ADC 广播 S2 的 ARP 请求,以解决 IP 到 Mac 映射问题。此数据包包含:
    • 源 IP 地址 = 针对服务器的子网 IP 地址片段 (192.0.1.50)
    • 源 MAC 地址 = 从中发出数据包的 NS-ADC 接口的 MAC 地址 = NS-MAC-1
  2. NS-ADC 通过使用以下标头封装数据包来准备要通过 VXLAN 9000 发送的 ARP 数据包:
    • ID(VNI)为 9000 的 VXLAN 标头
    • 标准 UDP 标头,UDP 校验和设置为 0×0000,目标端口设置为 4789。
  3. NS-ADC 将生成的封装数据包发送到 VXLAN-9000 上的开发-VTEP-1 和开发-VTEP-2。封装的数据包具有:
    • 源 IP 地址 = SNIP-VTEP-0 (203.0.100.100)。
  4. 开发-VTEP-2 接收 UDP 数据包并解压 UDP 标头,从中开发-VTEP-2 得知该数据包是与 VXLAN 相关的数据包。然后,Dev-VTEP-2 解压缩 VXLAN 标头并学习数据包的 VXLAN ID。生成的数据包是 S2 的 ARP 请求数据包,与步骤 1 相同。
  5. 从 VXLAN 数据包的内部和外部标头中,Dev-VTEP-2 在其 VXLAN 映射表中创建一个条目,显示了 VXLAN9000 的 MAC 地址 (NS-MAC-1) 和 SNIP-VTEP-0 (203.0.100.100) 的映射。
  6. 开发-VTEP-2 将 ARP 数据包发送到 S2。S2 的响应数据包达到开发-VTEP-2。Dev-VTEP-2 在其 VXLAN 映射表中执行查找,并获取目标 MAC 地址 NS-MAC-1 的匹配项。开发计划署-VTEP-2 现在知道,使用 XLAN 9000 可以通过 SNIP-VTEP-0 (203.0.100.100) 访问 NS-MAC-1。
  7. S2 响应其 MAC 地址 (MAC-S2)。ARP 响应数据包具有:
    • 目标 IP 地址 = 针对服务器的子网 IP 地址片段 (192.0.1.50)
    • 目的地 MAC 地址 = NS-MAC-1
  8. S2 的响应数据包达到开发-VTEP-2。Dev-VTEP-2 在其 VXLAN 映射表中执行查找,并获取目标 MAC 地址 NS-MAC-1 的匹配项。开发计划署-VTEP-2 现在知道,使用 XLAN 9000 可以通过 SNIP-VTEP-0 (203.0.100.100) 访问 NS-MAC-1。开发-VTEP-2 将 ARP 响应与 VXLAN 和 UDP 标头封装,并将生成的数据包发送到 NS-VTEP-0 (203.0.100.100) 的 NSS ADC。
  9. NS-ADC 在接收数据包时,通过删除 VXLAN 和 UDP 标头来解压数据包。生成的数据包是 S2 的 ARP 响应。NS-ADC 更新它的 VXLAN 映射表为 S2 的 MAC 地址 (MAC-S2) 与开发-VTEP-2 的 IP 地址 (203.0.102.102) 为 VXLAN 9000。NS-ADC 还将其 ARP 表更新为 S2 的 IP 地址 (192.0.1.102) 与 S2 的 MAC 地址 (MAP-S2)。

以下是本示例中负载平衡虚拟服务器 LBVS 的流量:

  1. 客户端 CL 向 NS-ADC 的 LBVS 发送请求数据包。请求数据包具有:
    • 源 IP 地址 = 客户端 CL 的 IP 地址 (198.51.100.90)
    • 目的地 IP 地址 = 地址的 LBVS 的 IP 地址 (VIP) = 198.51.110.100
  2. NS-ADC 的 LBVS 接收请求数据包,其负载均衡算法选择数据中心 DC2 的服务器 S2。
  3. NS-ADC 处理请求数据包,将其目标 IP 地址更改为 S2 的 IP 地址,并将其源 IP 地址更改为在 NS-ADC 上配置的子网 IP (SNIP) 地址之一。请求数据包具有:
    • 源 IP 地址 = NS-ADC 上的子网 IP 地址 = 服务器的代码段 (192.0.1.50)
    • 目标 IP 地址 = 的 IP 地址为 S2 (192.0.1.102)
  4. NS-ADC 在其桥接表中找到 S2 的 VXLAN 映射条目。此条目表明 S2 可以通过 VXLAN 9000 通过开发-VTEP-2 访问。
  5. NS-ADC 通过使用以下标头封装数据包来准备要通过 VXLAN 9000 发送的数据包:
    • ID(VNI)为 9000 的 VXLAN 标头
    • 标准 UDP 标头,UDP 校验和设置为 0×0000,目标端口设置为 4789。
  6. NS-ADC 将生成的封装数据包发送到开发-VTEP-2。请求数据包具有:
    • 源 IP 地址 = 剪断地址 = SNIP-VTEP-0 (203.0.100.100)
    • 目标 IP 地址 = 开发人员 VTEP-2 的 IP 地址 (203.0.102.102)
  7. 开发-VTEP-2 接收 UDP 数据包并解压 UDP 标头,从中开发-VTEP-2 得知该数据包是与 VXLAN 相关的数据包。然后,Dev-VTEP-2 解压缩 VXLAN 标头并学习数据包的 VXLAN ID。生成的数据包与步骤 3 中的数据包相同。
  8. 开发-VTEP-2 然后将数据包转发到 S2。
  9. S2 处理请求数据包并将响应发送到 NS-ADC 的 SNIP 地址。响应数据包具有:
    • 源 IP 地址 = 的 IP 地址为 S2 (192.0.1.102)
    • 目标 IP 地址 = NS-ADC 上的子网 IP 地址 = 服务器的代码段 (192.0.1.50)
  10. Dev-VTEP-2 封装响应数据包的方式与 NS-ADC 在步骤 4 和 5 中封装请求数据包的方式相同。然后,开发-VTEP-2 将封装的 UDP 数据包发送到 NS-ADC 的服务器 SNIP 地址片段 (192.0.1.50)。
  11. NS-ADC 收到封装的 UDP 数据包后,通过删除 UDP 和 VXLAN 标头来解除数据包的方式与 Dev-VTEP-2 在步骤 7 中解除数据包的方式相同。生成的数据包与步骤 9 相同的响应数据包。
  12. 然后,NS-ADC 使用会话表进行负载平衡虚拟服务器 LBVS,并将响应数据包转发到客户端 CL。响应数据包具有:
    • 源 IP 地址 = 客户端 CL 的 IP 地址 (198.51.100.90)
    • 目的地 IP 地址 = LBVS 的 IP 地址 (VIP) (198.51.110.100)

配置 VXLAN 时要注意的事项

在 Citrix ADC 上配置 VXLAN 之前,请考虑以下几点:

  • 在 Citrix ADC 上最多可配置 2048 VXLAN。

  • 群集中不支持 VXLAN。

  • 无法为每个 VXLAN 配置链接本地 IPv6 地址。

  • Citrix ADC 不支持形成多播组的 Internet 组管理协议 (IGMP) 协议。Citrix ADC 依靠其上游路由器的 IGMP 协议来加入共享公用多播组 IP 地址的多播组广播组。您可以在创建 VXLAN 网桥表条目时指定多播组 IP 地址,但必须在上游路由器上配置多播组。Citrix ADC 通过第 3 层向此 VXLAN 的多播组 IP 地址发送广播、多播和未知单播帧。然后,上游路由器将数据包转发到多播组中的所有 VTEP。

  • VXLAN 封装为每个数据包增加了 50 字节的开销:

    外部以太网头 (14) + UDP 头 (8) + IP 头 (20) + VXLAN 头 (8) = 50 字节

    为避免碎片和性能降低,必须调整 VXLAN 通路中所有网络设备的 MTU 设置,包括 VXLAN VTEP 设备,以处理 VXLAN 数据包中的 50 字节开销。

    重要提示:Citrix ADC VPX 虚拟设备、Citrix ADC SDX 设备和 Citrix ADC MPX 15000/17000 设备不支持巨型帧。这些设备支持仅 1500 字节的 MTU 大小,无法进行调整以处理 VXLAN 数据包的 50 字节开销。如果其中一个设备位于 VXLAN 通路中或充当 VXLAN VTEP 设备,则 VXLAN 通信可能会分散或性能下降。

  • 在 Citrix ADC SDX 设备上,VLAN 筛选不适用于 VXLAN 数据包。

  • 无法在 VXLAN 上设置 MTU 值。

  • 您不能将接口绑定到 VXLAN。

配置步骤

在 Citrix ADC 设备上配置 VXLAN 包含以下任务。

  • 添加 VXLAN 实体。创建由正整数(也称为 VXLAN 网络标识符 (VNI) 唯一标识的 VXLAN 实体。在此步骤中,您还可以指定运行 VXLAN 协议的远程 VTEP 的目标 UDP 端口。默认情况下,VXLAN 实体的目标 UDP 端口参数设置为 4789。此 UDP 端口设置必须与此 VXLAN 的所有远程 VTEP 上的设置相匹配。您还可以将 VLAN 绑定到此 VXLAN。所有绑定 VLAN 的流量(包括广播、多播、未知的单个动态)都允许通过此 VXLAN 进行。如果没有 VLAN 绑定到 VXLAN,Citrix ADC 将允许此 VXLAN 上不属于任何其他 VLAN 的所有 VLAN 的流量。
  • 将本地 VTEP IP 地址绑定 到 VXLAN 实体。将配置的 SNIP 地址之一绑定到 VXLAN 以获取传出 VXLAN 数据包。
  • 添加可桥接条目。添加一个桥接条目,指定要创建的 VXLAN 的 VXLAN ID 和远程 VTEP IP 地址。
  • (可选)将不同的要素实体绑定到配置的 VXLAN。VXLAN 的功能与 VLAN 类似,支持 VLAN 作为分类参数的大多数 Citrix ADC 功能也支持 VXLAN。这些功能包括一个可选的 VXLAN 参数设置,该设置指定 VXLAN VNI。
  • (可选)显示 VXLAN 映射表。显示 VXLAN 映射表,其中包括远程主机 MAC 地址到特定 VXLAN 的 VTEP IP 地址的映射条目。换句话说,VXLAN 映射指出可以通过特定 VXLAN 上的 VTEP 访问主机。Citrix ADC 从接收到的 VXLAN 数据包中学习 VXLAN 映射并更新其映射表。Citrix ADC 使用 VXLAN 映射表查找第 2 层帧的目标 MAC 地址。如果 VXLAN 表中存在此 MAC 地址的条目,Citrix ADC 会使用 VXLAN 协议将第 3 层上的第 2 帧发送到 VXLAN 映射条目中指定的映射 VTEP IP 地址。

CLI 过程

要使用 CLI 添加 VXLAN 实体,请执行以下操作:

在命令提示符下键入

  • 添加 Vxlan <id>
  • 显示 Vxlan<id>

要使用 CLI 将本地 VTEP IP 地址绑定到 VXLAN,请执行以下操作:

在命令提示符下键入

  • bind vxlan <id> -SrcIP <IPaddress>
  • 显示 Vxlan <id>

使用 CLI 添加可桥接 的方法是:

在命令提示符下键入

  • add bridgetable -mac <macaddress> -vxlan <ID> -vtep <IPaddress>
  • show bridgetable

要使用命令行显示 VXLAN 转发表,请执行以下操作:

在命令提示窗口中,键入:

  • show bridgetable

GUI 程序

要使用 GUI 添加 VXLAN 实体并绑定本地 VTEP IP 地址,请执行以下操作:

导航到系统 > 网络 > VXLAN,然后添加新的 VXLAN 实体或修改现有的 VXLAN 实体。

要使用 GUI 添加可桥 接:

导航到系统 > 网络”>“网桥表,在添加或修改 VXLAN 网桥表条目时设置以下参数:

  • MAC
  • VTEP
  • VXLAN 编号

要使用 GUI 显示 VXLAN 转发表,请执行以下操作:

导航到系统 > 网络”>“网桥表

示例
> add vxlan 9000
Done
> bind vxlan 9000 -srcIP 203.0.100.100

Done
> add bridgetable -mac 00:00:00:00:00:00 -vxlan 9000 -vtep 203.0.101.101

Done
> add bridgetable -mac 00:00:00:00:00:00 -vxlan 9000 -vtep 203.0.102.102

Done

VXLAN 上 IPv6 动态路由协议的支持

Citrix ADC 设备支持 VXLAN 的 IPv6 动态路由协议。您可以通过 VTYSH 命令行在 VXLAN 上配置各种 IPv6 动态路由协议(例如 OSPFv3、RIPng、BGP)。VXLAN 命令集中添加了一个选项 IPv6 动态路由协议,用于启用或禁用 VXLAN 上的 IPv6 动态路由协议。在 VXLAN 上启用 IPv6 动态路由协议后,需要使用 VTYSH 命令行在 VXLAN 上启动与 IPv6 动态路由协议相关的进程。

要使用 CLI 在 VXLAN 上启用 IPv6 动态路由协议,请执行以下操作:

  • add vxlan <ID> [-ipv6DynamicRouting ( ENABLED | DISABLED )]
  • show vxlan
在以下示例配置中,将创建 VXLAN-9000 并启用 IPv6 动态路由协议。然后,使用 VTYSH 命令行,IPv6 OSPF 协议的进程在 VXLAN 上启动。

> add vxlan 9000 -ipv6DynamicRouting ENABLED

Done
> bind vxlan 9000 -srcIP 203.0.100.100

Done
> add bridgetable -mac 00:00:00:00:00:00 -vxlan 9000 -vtep 203.0.101.101

Done
> VTYSH
NS# configure terminal
NS(config)# ns IPv6-routing
NS(config)# interface VXLAN-9000
NS(config-if)# ipv6 router OSPF area 3

使用 VXLAN-VLAN 映射将 VLAN 从多个企业扩展到云

CloudBridge Connector 隧道用于将企业的 VLAN 扩展到云。从多个企业扩展的 VLAN 可能具有重叠的 VLAN ID。您可以通过将每个企业的 VLAN 映射到云中的唯一 VXLAN 来隔离它们。在 Citrix ADC 设备(即云中的 CloudBridge Connector 端点)上,您可以配置 VXLAN-VLAN 映射,将企业的 VLAN 链接到云中的唯一 VXLAN。VXLAN 支持 VLAN 标记,用于将企业的多个 VLAN 从 CloudBridge Connector 扩展到同一 VXLAN。

执行以下任务将多个企业的 VLAN 扩展到云:

  1. 创建 VXLAN-VLAN 映射。
  2. 将 VXLAN-VLAN 映射绑定到云上 Citrix ADC 设备上基于网桥或基于 PBR 的 CloudBridge Connector 隧道配置。
  3. (可选)在 VXLAN 配置中启用 VLAN 标记。

CLI 过程

要使用 CLI 添加 VXLAN-VLAN 映射,请执行以下操作:

  • add vxlanVlanMap <name>
  • show vxlanVlanMap <name>

要使用 CLI 将 VXLAN 和 VLAN 绑定到 VXLAN-VLAN 映射,请执行以下操作:

  • bind vxlanVlanMap <name> [-vxlan <positive_integer> -vlan <int[-int]> …]
  • show vxlanVlanMap <name>

使用 CLI 将 VXLAN-VLAN 映射绑定到基于网桥的 CloudBridge Connector 隧道:

在命令提示符下,键入以下命令集之一。

如果添加新的网桥:

  • add netbridge <name> [-vxlanVlanMap <string>]
  • show netbridge <name>

如果重新配置现有网桥:

  • set netbridge <name> [-vxlanVlanMap <string>]
  • show netbridge <name>

使用 CLI 将 VXLAN-VLAN 映射绑定到基于 PBR 的 CloudBridge Connector 隧道:

在命令提示符下,键入以下命令集之一。

如果添加一个新的 PBR:

  • add pbr <name> ALLOW (-ipTunnel <ipTunnelName> [-vxlanVlanMap <name>])
  • show pbr <name>

如果重新配置现有 PBR:

  • set pbr <name> ALLOW (-ipTunnel <ipTunnelName> [-vxlanVlanMap <name>])
  • show pbr <name>

使用 CLI 将 VLAN 标记包含在与 VXLAN 相关的数据包中:

在命令提示符下,键入以下命令集之一。

如果添加新的 VXLAN:

  • add vxlan <vnid> -vlanTag (ENABLED | DISABLED)
  • show vxlan <vnid>

如果重新配置现有 VXLAN:

  • set vxlan <vnid> -vlanTag (ENABLED | DISABLED)
  • show vxlan <vnid>

GUI 程序

要使用 GUI 添加 VXLAN-VLAN 映射,请执行以下操作:

导航到系统 > 网络 > VXLAN VLAN 映射,添加 VXLAN VLAN 映射。

使用 GUI 将 VXLAN-VLAN 映射绑定到基于网桥的 CloudBridge Connector 隧道:

导航到系统 > CloudBridge Connector > 网桥桥,在添加新网桥或重新配置现有网桥时,从 VXLAN VLAN 下拉列表中选择 VXLAN-VLAN 映射。

使用 GUI 将 VXLAN-VLAN 映射绑定到基于 PBR 的 CloudBridge Connector 隧道:

导航到系统 > 网络 > PBRs,在“基于策略的路由 (PBRs)” 选项卡上,在添加新 PBR 或重新配置现有 PBR 时,从 VXLAN VLAN VLAN 下拉列表中选择 VX LAN- VLAN 映射。

要使用 GUI 将 VLAN 标记包含在与 VXLAN 相关的数据包中:

导航到系统 > 网络 > VXLAN,在添加新 VXLAN 时启用内部VLAN 标记,或重新配置现有 VXLAN。

> add vxlanVlanMap VXLANVLAN-DC1

Done

> bind vxlanvlanmap VXLANVLAN-DC1 -vxlan 3000 -vlan 3

Done

> bind vxlanvlanmap VXLANVLAN-DC1 -vxlan 3500 -vlan 4

Done

>add vxlanVlanMap VXLANVLAN-DC2

Done

> bind vxlanvlanmap VXLANVLAN-DC1 -vxlan 8000 -vlan 3 4

Done

> set pbr PBR-CBC-DC-1-CLOUD ALLOW  -ipTunnel  CBC-DC-1-CLOUD -vxlanVlanMap VXLANVLAN-DC1

Done

> set pbr PBR-CBC-DC-2-CLOUD ALLOW  -ipTunnel  CBC-DC-2-CLOUD -vxlanVlanMap VXLANVLAN-DC2

Done