Citrix ADC

VXLAN

思杰ADC设备支持虚拟可扩展局域网(vxlan)。VXLAN通过UDP报文封装二层帧,将二层网络覆盖到三层基础设施上。每个覆盖网络称为一个VXLAN网段,由一个唯一的24位标识符VXLAN网络标识符(VNI)来标识。只有同一VXLAN内的网络设备才能相互通信。

vxlan提供与vlan相同的以太网第二层网络服务,但具有更大的可扩展性和灵活性。使用vxlan的两个主要好处如下:

  • 更高的可伸缩性。服务器虚拟化和云计算架构极大地增加了对数据中心中隔离的第2层网络的需求。VLAN规范使用12位的VLAN ID来标识二层网络,因此不能扩展超过4094个VLAN。当需要数千个隔离的第二层网络时,这个数字可能是不够的。在同一个管理域中,24位VNI最多可容纳1600万个VXLAN段。
  • 更高的灵活性。由于VXLAN在第三层数据包上承载第二层数据帧,因此VXLAN可以跨数据中心的不同部分和跨地理上分离的数据中心扩展L2网络。托管在数据中心的不同部分和不同数据中心但属于同一VXLAN一部分的应用程序显示为一个连续的网络。

vxlan是如何工作的

VXLAN段是在vtep (Tunnel End Points)之间创建的。vtep支持VXLAN协议,可以进行VXLAN的封装和解封装。您可以将VXLAN段视为两个VTEP之间的隧道,其中一个VTEP封装了带有UDP头和IP头的Layer2帧,并通过隧道发送。另一个VTEP接收并解封装以获得第二层帧。Citrix ADC就是VTEP的一个例子。其他示例包括第三方虚拟化环境、支持VXLAN的虚拟机和支持VXLAN的交换机。

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

vxlan概述

VXLAN报文的格式如下图所示。

vxlan包

Citrix ADC上的vxlan使用二层机制发送广播、组播和未知单播帧。VXLAN支持以下两种发送L2帧的方式。

  • 单播模式:在Citrix ADC上配置VXLAN时,指定vtep的IP地址。Citrix ADC通过三层向VXLAN的所有vtep发送广播、组播和未知单播帧。
  • 多播方式:在Citrix ADC上配置VXLAN时,指定组播组的IP地址。思杰adc不支持IGMP (Internet Group Management Protocol)协议。Citrix adc依靠上游路由器加入组播组,组播组共用一个组播组IP地址。Citrix ADC通过三层向VXLAN的组播组IP地址发送广播帧、组播帧和未知单播帧。

类似于二层桥接表,Citrix adc根据接收到的VXLAN报文的内外报头维护VXLAN映射表。该表将远端主机MAC地址映射到特定VXLAN的VTEP IP地址。Citrix ADC使用VXLAN映射表查找二层帧的目的MAC地址。如果VXLAN表中有对应的MAC地址表项,则Citrix ADC使用VXLAN协议,将二层帧通过三层发送到VXLAN映射表项中指定的VTEP的IP地址。

由于VXLAN的功能与VLAN类似,所以Citrix ADC中支持VLAN作为分类参数的特性,大部分都支持VXLAN。这些特性包括可选的VXLAN参数设置,用于指定VXLAN VNI。

在HA (high availability)配置中,VXLAN配置被复制或同步到备节点。

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

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

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

S0、S1和S2属于同一个私有子网192.0.1.0/24。S0、S1和S2属于同一个广播域,在NS-ADC、Dev-VTEP-1和Dev-VTEP-2上分别配置VXLAN 9000。服务器S1和服务器S2分别在Dev-VTEP-1和Dev-VTEP-2上作为VXLAN9000的一部分。

vxlan是如何工作的

本例中使用的设置如下表所示:VXLAN设置

NS-ADC上的业务SVC-S0、SVC-S1和SVC-S2分别代表S0、S1和S2。这些业务配置完成后,NS-ADC会向S0、S1和S2广播ARP请求,解析ip - mac映射关系。这些ARP请求也通过VXLAN 9000发送给Dev-VTEP-1和Dev-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报文,报文头封装如下:
    • VXLAN头ID (VNI)为9000
    • 标准UDP报头,UDP校验和设置为0×0000,目的端口设置为4789。
  3. NS-ADC将封装后的报文发送给VXLAN-9000上的Dev-VTEP-1和Dev-VTEP-2。封装的数据包具有:
    • 源IP地址= snipp - vtep -0(203.0.100.100)。
  4. Dev-VTEP-2接收到UDP报文,并对UDP报文头进行解封装,从中得知报文是与VXLAN相关的报文。然后,Dev-VTEP-2对报文的VXLAN头进行解封装,并学习报文的VXLAN ID。结果报文是S2的ARP请求报文,与步骤1相同。
  5. Dev-VTEP-2根据VXLAN报文的内外报头,在VXLAN映射表中创建一个表项,显示VXLAN9000的MAC地址(NS-MAC-1)和snipp -0(203.0.100.100)的映射关系。
  6. Dev-VTEP-2向S2发送ARP报文。S2的响应报文到达Dev-VTEP-2。Dev-VTEP-2在自己的VXLAN映射表中进行查找,找到与目的MAC地址NS-MAC-1匹配的MAC地址。此时,Dev-VTEP-2知道通过VXLAN 9000上的snipp - vtep -0(203.0.100.100)可以访问NS-MAC-1。
  7. S2返回自己的MAC地址(MAC-S2)。ARP响应报文有:
    • 目的IP地址=子网IP地址。
    • 目的MAC地址= NS-MAC-1
  8. S2的响应报文到达Dev-VTEP-2。Dev-VTEP-2在自己的VXLAN映射表中进行查找,找到与目的MAC地址NS-MAC-1匹配的MAC地址。此时,Dev-VTEP-2知道通过VXLAN 9000上的snipp - vtep -0(203.0.100.100)可以访问NS-MAC-1。Dev-VTEP-2将ARP响应封装成VXLAN和UDP头,发送给NS-ADC的snipp - vtep -0(203.0.100.100)。
  9. NS-ADC接收到报文后,对报文进行解封装,去掉VXLAN头和UDP头。生成的数据包是S2的ARP响应。NS-ADC将S2的MAC地址(MAC-S2)的VXLAN映射表更新为Dev-VTEP-2的VXLAN 9000的IP地址(203.0.102.102)。NS-ADC也用S2的MAC地址(MAC-S2)更新S2的IP地址(192.0.1.102)的ARP表。

本例中负载均衡虚拟服务器LBVS的流量流程如下:

  1. Client CL向NS-ADC的LBVS发送请求报文。请求包有:
    • 源IP地址=客户端CL的IP地址(198.51.100.90)
    • 目的地址= LBVS的IP地址(VIP) = 198.51.110.100
  2. NS-ADC的LBVS接收请求报文,其负载均衡算法选择数据中心DC2的服务器S2。
  3. NS-ADC处理请求报文,将其目的IP地址修改为S2的IP地址,源IP地址修改为NS-ADC配置的SNIP (Subnet IP)地址之一。请求包有:
    • 源IP地址= NS-ADC上的子网IP地址= SNIP-for-Servers (192.0.1.50)
    • 目的IP地址= S2的IP地址(192.0.1.102)
  4. NS-ADC在桥表中找到S2的VXLAN映射项。该表项表示S2通过VXLAN 9000上的Dev-VTEP-2可达。
  5. NS-ADC准备通过VXLAN 9000发送的报文,将报文封装为以下报头:
    • VXLAN头ID (VNI)为9000
    • 标准UDP报头,UDP校验和设置为0×0000,目的端口设置为4789。
  6. NS-ADC将封装后的数据包发送给Dev-VTEP-2。请求包有:
    • 源IP地址= SNIP地址= SNIP- vtep -0 (203.0.100.100)
    • 目的IP地址= Dev-VTEP-2的IP地址(203.0.102.102)
  7. Dev-VTEP-2接收到UDP报文,并对UDP报文头进行解封装,从中得知报文是与VXLAN相关的报文。然后,Dev-VTEP-2对报文的VXLAN头进行解封装,并学习报文的VXLAN ID。生成的数据包与步骤3中的数据包相同。
  8. Dev-VTEP-2将报文转发给S2。
  9. S2处理请求报文,将响应报文发送到NS-ADC的SNIP地址。响应包包含:
    • 源IP地址= S2的IP地址(192.0.1.102)
    • 目的IP地址= NS-ADC上的子网IP地址= SNIP-for-Servers (192.0.1.50)
  10. Dev-VTEP-2封装响应报文的方式与NS-ADC在步骤4和5中封装请求报文的方式相同。Dev-VTEP-2将封装后的UDP报文发送到NS-ADC的SNIP地址SNIP-for- servers(192.0.1.50)。
  11. NS-ADC接收到封装好的UDP报文后,按照步骤7中Dev-VTEP-2的解封装方式,对报文进行去UDP和VXLAN头的解封装。生成的数据包与步骤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不支持IGMP (Internet Group Management Protocol)协议组成组播组。Citrix adc依靠上游路由器的IGMP协议加入组播组,共享一个通用的组播组IP地址。创建VXLAN网桥表项时可以指定组播组的IP地址,但组播组必须在上行路由器上配置。Citrix ADC通过三层向VXLAN的组播组IP地址发送广播帧、组播帧和未知单播帧。然后,上游路由器将数据包转发给属于多播组的所有vtep。

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

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

    为了避免产生碎片和降低性能,需要调整VXLAN路径中所有网络设备(包括VXLAN VTEP)的MTU设置,以处理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 (Network Identifier)。该步骤还可以指定运行VXLAN协议的远端VTEP的目的UDP端口。VXLAN实体的目的UDP端口默认为4789。此UDP端口的设置必须与该VXLAN的所有远端vtep的设置相匹配。VXLAN也可以绑定vlan。所有绑定的vlan的流量(包括广播、组播、未知单播)都允许通过该VXLAN。如果没有vlan绑定到VXLAN,则Citrix ADC允许该VXLAN上的所有vlan的流量,而不属于任何其他VXLAN。
  • 将本端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映射表查找二层帧的目的MAC地址。如果VXLAN表中有对应的MAC地址表项,则Citrix ADC使用VXLAN协议,将二层帧通过三层发送到VXLAN映射表项中指定的VTEP的IP地址。

CLI程序

使用CLI添加VXLAN实体。

在命令提示符下,输入

  • 添加vxlan<标识>
  • 显示vxlan<标识>

使用CLI将VTEP的IP地址与VXLAN绑定。

在命令提示符下,输入

  • 绑定vxlan<标识> - - -SrcIP< IPaddress >
  • 显示vxlan<标识>

使用CLI添加桥接表。

在命令提示符下,输入

  • 添加bridgetable-mac< macaddress > - - -vxlan<标识> - - -vtep< IPaddress >
  • 显示bridgetable

使用命令行查询VXLAN转发表信息。

在命令提示符下,输入:

  • 显示bridgetable

GUI程序

使用GUI方式添加VXLAN实体和绑定本地VTEP IP地址。

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

使用GUI添加桥接表:

导航到系统>网络>桥接表,在添加或修改VXLAN桥表项时,需要设置以下参数:

  • MAC
  • VTEP
  • VXLAN ID

使用GUI界面显示VXLAN转发表。

导航到系统>网络>桥接表

示例> add vxlan 9000完成> bind vxlan 9000 -srcIP 203.0.100.100完成> add bridgetable -mac 00:00:00:00:00:00 -vxlan 9000 -vtep 203.0.101.101完成> add bridgetable -mac 00:00:00:00:00:00 -vxlan 9000 -vtep 203.0.102.102完成

vxlan支持IPv6动态路由协议

Citrix ADC设备支持vxlan的IPv6动态路由协议。通过VTYSH命令行可以在vxlan上配置各种IPv6动态路由协议(如OSPFv3、RIPng、BGP等)。VXLAN命令集中新增“IPv6动态路由协议”选项,用于开启或关闭VXLAN的IPv6动态路由协议。在VXLAN上启用IPv6动态路由协议后,需要在VXLAN上通过VTYSH命令行启动与IPv6动态路由协议相关的进程。

在VXLAN上启用IPv6动态路由协议。

  • 添加vxlan< ID > [-ipv6DynamicRouting启用|禁用)]
  • 显示vxlan
下面以创建VXLAN-9000并启用IPv6动态路由协议为例进行配置。然后使用vvtysh命令行在VXLAN上启动IPv6 OSPF协议进程。> add vxlan 9000 -ipv6DynamicRouting ENABLED完成> bind vxlan 9000 -srcIP 203.0.100.100完成> add bridgetable -mac 00:00:00:00: 00:00:00:00:00 -vxlan 9000 -vtep 203.0.101.101完成> vvxlan NS# configure terminal NS(config)# NS ipv6 -routing NS(config)# interface vxlan -9000 NS(config-if)# ipv6 router OSPF区域3

通过VXLAN-VLAN映射将多个企业的vlan扩展到云中

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

为了将多个企业的vlan扩展到云,需要完成以下任务:

  1. 创建VXLAN-VLAN映射。
  2. 将VXLAN-VLAN映射绑定到云上Citrix ADC设备上基于网桥或基于策略路由的CloudBridge连接器隧道配置。
  3. (可选)在VXLAN配置中启用VLAN标签功能。

CLI程序

使用CLI添加VXLAN-VLAN映射。

  • 添加vxlanVlanMap<名称>
  • 显示vxlanVlanMap<名称>

VXLAN和vlan通过CLI绑定VXLAN- vlan映射。

  • 绑定vxlanVlanMap<名称> [-vxlan< positive_integer > - - -vlan< int (int) >…]
  • 显示vxlanVlanMap<名称>

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

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

如果添加新的网桥:

  • 添加netbridge<名称> [-vxlanVlanMap<字符串>)
  • 显示netbridge<名称>

如果重新配置现有网桥:

  • 设置netbridge<名称> [-vxlanVlanMap<字符串>)
  • 显示netbridge<名称>

在基于策略路由的CloudBridge Connector隧道中绑定VXLAN-VLAN映射。

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

如果添加新的PBR:

  • 添加pbr<名称>允许(-ipTunnel< ipTunnelName > [-vxlanVlanMap<名称>)
  • 显示pbr<名称>

如果重新配置现有的策略路由:

  • 设置pbr<名称>允许(-ipTunnel< ipTunnelName > [-vxlanVlanMap<名称>)
  • 显示pbr<名称>

在VXLAN相关报文中加入VLAN标签。

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

添加VXLAN时:

  • 添加vxlan< vnid > - - -vlanTag启用|禁用
  • 显示vxlan< vnid >

重新配置现有VXLAN:

  • 设置vxlan< vnid > - - -vlanTag启用|禁用
  • 显示vxlan< vnid >

GUI程序

使用GUI界面添加VXLAN-VLAN映射。

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

使用GUI将VXLAN-VLAN映射绑定到基于netbridge的CloudBridge连接器隧道。

导航到系统>CloudBridge连接器>网络桥,选择VXLAN-VLAN映射VXLAN VLAN添加新网桥或重新配置现有网桥时的下拉列表。

使用GUI将VXLAN-VLAN映射绑定到基于策略路由的CloudBridge连接器隧道。

导航到系统>网络>为PBRs,在“策略路由”页签中,选择“a”VXLAN-VLAN地图来自VXLAN VLAN在下拉列表中添加新的策略路由,或者重新配置现有的策略路由。

使用GUI将VLAN标签包含在与VXLAN相关的数据包中。

导航到系统>网络>VXLANs,使内部VLAN标签添加新的VXLAN或重新配置已有的VXLAN。

完成> bind vxlanVlanMap VXLANVLAN-DC1 -vxlan 3000 -vlan 3完成> bind vxlanVlanMap VXLANVLAN-DC1 -vxlan 3500 -vlan 4完成>add vxlanVlanMap VXLANVLAN-DC2完成> bind vxlanVlanMap VXLANVLAN-DC1 -vxlan 8000 -vlan 3 4完成> set pbr pbr -CBC-DC-1-CLOUD ALLOW -ipTunnel CBC-DC-2-CLOUD ALLOW -ipTunnel CBC-DC-2-CLOUD -vxlanVlanMap VXLANVLAN-DC2 Done