Citrix ADC

VXLAN

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

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

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

vxlan如何工作

VXLAN段在VXLAN隧道端点之间创建。vtep支持VXLAN协议,完成VXLAN的封装解封装。可以将VXLAN段想象为两个VTEP之间的隧道,其中一个VTEP封装了一个带有UDP报头和IP报头的二层帧,并将其发送通过隧道。另一个VTEP接收报文并解封装,得到二层帧。Citrix ADC就是VTEP的一个例子。其他示例包括第三方管理程序、支持VXLAN的虚拟机和支持VXLAN的交换机。

以VXLAN隧道连接的虚拟机和物理服务器为例进行说明。

vxlan概述

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

vxlan包

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

  • 单播模式:在Citrix ADC上配置VXLAN时指定vtep的IP地址。Citrix ADC通过Layer 3向该VXLAN的所有vtep发送广播、组播和未知单播帧。
  • 多播方式:在Citrix ADC上配置VXLAN时指定组播组IP地址。Citrix 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,因此大多数支持VLAN作为分类参数的Citrix ADC特性都支持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广播一个ARP请求给S2来解析ip到mac的映射。这个包有:
    • 源IP地址=子网IP地址SNIP-for-Servers (192.0.0.50)
    • 源MAC地址= NS-ADC发出报文的接口MAC地址= NS-MAC-1
  2. NS-ADC准备通过VXLAN 9000发送的ARP报文,报文头部封装如下:
    • VXLAN头,VNI为9000
    • 标准UDP报头,UDP校验和设置为0×0000,目的端口设置为4789。
  3. NS-ADC将封装后的报文发送给VXLAN-9000上的Dev-VTEP-1和Dev-VTEP-2。封装后的报文包含:
    • 源IP地址= SNIP-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)和SNIP-VTEP-0(203.0.100.100)的映射关系。
  6. Dev-VTEP-2将ARP报文发送给S2。S2的响应报文到达Dev-VTEP-2。Dev-VTEP-2在其VXLAN映射表中进行查找,得到与目的MAC地址NS-MAC-1匹配的MAC地址。Dev-VTEP-2现在知道NS-MAC-1可以通过VXLAN 9000上的snop - vtep -0(203.0.100.100)访问。
  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现在知道NS-MAC-1可以通过VXLAN 9000上的snop - vtep -0(203.0.100.100)访问。Dev-VTEP-2将ARP响应封装为VXLAN和UDP报头,并将生成的报文发送给NS-ADC的SNIP-VTEP-0(203.0.100.100)。
  9. NS-ADC收到报文后,通过删除VXLAN和UDP头来解封装该报文。结果报文是S2的ARP响应。NS-ADC使用Dev-VTEP-2的VXLAN 9000的IP地址(203.0.102.102)更新S2的MAC地址(MAC-S2)的VXLAN映射表。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上配置的子网IP (SNIP)地址之一。请求包有:
    • 源IP地址= NS-ADC上的子网IP地址= SNIP-for-Servers (192.0.0.50)
    • 目的IP地址= S2的IP地址(192.1.1.102)
  4. NS-ADC在其网桥表中查找S2的VXLAN映射项。表示S2在VXLAN 9000上通过Dev-VTEP-2可达。
  5. NS-ADC准备在VXLAN 9000上发送的报文,报文头封装如下:
    • VXLAN头,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.1.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设备不支持Jumbo帧。这些设备仅支持1500字节的MTU大小,并且不能调整为处理VXLAN数据包的50字节开销。如果这些设备位于VXLAN路径中或作为VXLAN VTEP,则可能导致VXLAN流量分片或性能下降。

  • 在Citrix ADC SDX设备上,对VXLAN报文不进行VLAN过滤。

  • VXLAN内不支持设置MTU。

  • 不能将接口绑定到VXLAN。

配置步骤

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

  • 添加VXLAN实体.创建一个正整数标识的VXLAN实体,也称为VNI (VXLAN Network Identifier)。该步骤还可以指定运行VXLAN协议的远端VTEP的目的UDP端口。缺省情况下,VXLAN实体的目的UDP端口参数为4789。此UDP端口设置必须与此VXLAN的所有远程vtep上的设置匹配。还可以在该VXLAN下绑定vlan。所有绑定vlan的流量(包括广播、组播、未知单播)都可以通过这个VXLAN。如果VXLAN上没有绑定vlan,则Citrix ADC允许该VXLAN上不属于任何其他VXLAN的所有vlan的流量。
  • 绑定本地VTEP IP地址和VXLAN实体.将已配置的一个SNIP地址绑定到VXLAN,用于发送VXLAN报文。
  • 添加一个可桥接的条目.添加一个桥接表项,指定VXLAN ID和用于创建VXLAN的远端VTEP IP地址。
  • (可选)将不同的特性实体绑定到已配置的VXLAN上.VXLAN的功能类似于VLAN,大多数支持VLAN作为分类参数的Citrix ADC特性也支持VXLAN。这些特性包括可选的VXLAN参数设置,用于指定VXLAN VNI。
  • (可选)显示VXLAN映射表.查看VXLAN映射表,其中包含了VXLAN的远端主机MAC地址到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程序

使用实例通过图形方式添加VXLAN实体和绑定本地VTEP IP地址。

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

使用GUI添加一个桥接表:

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

  • MAC
  • VTEP
  • VXLAN ID

使用实例GUI方式查询VXLAN转发表信息。

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

使用实例> add vxlan 9000 Done > bind vxlan 9000 -srcIP 203.0.100.100 Done > add bridgetable -mac 00:00:00:00:00:00 -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动态路由协议。通过vdyh命令行可以在vxlan上配置各种IPv6动态路由协议(如OSPFv3、RIPng、BGP)。VXLAN命令集中增加了“IPv6动态路由协议”选项,用于使能VXLAN下的IPv6动态路由协议。在VXLAN上启用IPv6动态路由协议后,需要在VXLAN上使用VTYSH命令行启动IPv6动态路由协议相关的进程。

使用实例通过CLI启用VXLAN下的IPv6动态路由协议。

  • 添加vxlan< ID > [-ipv6DynamicRouting启用|禁用)]
  • 显示vxlan
以创建VXLAN-9000为例,并启用了IPv6动态路由协议。然后在VXLAN上使用VTYSH命令行启动IPv6 OSPF协议进程。> 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连接器端点)上,您可以配置VXLAN- vlan映射,将企业的vlan链接到云中唯一的VXLAN。VXLAN支持VLAN标签,可以将一个企业的多个VLAN从CloudBridge Connector扩展到同一个VXLAN。

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

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

CLI程序

使用实例使用CLI添加VXLAN-VLAN映射。

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

使用实例使用CLI命令将VXLAN和vlan绑定到VXLAN- vlan映射上。

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

使用实例通过CLI命令将VXLAN-VLAN映射绑定到基于CloudBridge Connector隧道的网桥上。

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

如果添加新的网桥:

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

如果重新配置现有网桥:

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

使用实例使用CLI为基于策略路由的CloudBridge连接器隧道绑定VXLAN-VLAN映射。

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

如果添加一个新的策略路由:

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

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

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

使用实例使用CLI命令在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 Connector隧道。

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

使用GUI方式将VXLAN-VLAN映射绑定到基于策略路由的CloudBridge Connector隧道上。

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

使用GUI在VXLAN相关报文中添加VLAN标签。

导航到系统>网络>VXLANs,使内vlan标记添加新的VXLAN,或重新配置现有的VXLAN。

>add vxlanVlanMap VXLANVLAN-DC1 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 -CBC-DC-1-CLOUD ALLOW -ipTunnel CBC-DC-1-CLOUD -vxlanVlanMap VXLANVLAN-DC1 Done > set策略路由pbr -CBC-DC-2-CLOUD ALLOW -ipTunnel