Citrix ADC

VXLAN

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

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

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

vxlan是如何工作的

VXLAN段在vtep (VXLAN Tunnel End point)之间创建。vtep支持VXLAN协议,实现VXLAN的封装和解封装。您可以将VXLAN网段想象成两个VTEP之间的隧道,其中一个VTEP封装了一个二层帧,包含一个UDP报头和一个IP报头,并将其通过隧道发送出去。另一个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地址。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广播给S2一个ARP请求来解析ip到mac的映射。此包包含:
    • 源IP地址=子网IP地址snippet -for servers (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地址= 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)和snp - vtep -0(203.0.100.100)的映射关系。
  6. Dev-VTEP-2向S2发送ARP报文。S2的响应报文到达Dev-VTEP-2。Dev-VTEP-2在自己的VXLAN映射表中查找,得到一个匹配的目的MAC地址NS-MAC-1。Dev-VTEP-2现在知道NS-MAC-1可以在VXLAN 9000上通过snp - vtep -0(203.0.100.100)访问。
  7. S2响应它的MAC地址(MAC-S2)。ARP响应报文中包含:
    • 目的IP地址=子网IP地址snippet -for servers (192.0.1.50)
    • 目的MAC地址= NS-MAC-1
  8. S2的响应报文到达Dev-VTEP-2。Dev-VTEP-2在自己的VXLAN映射表中查找,得到一个匹配的目的MAC地址NS-MAC-1。Dev-VTEP-2现在知道NS-MAC-1可以在VXLAN 9000上通过snp - 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将用于VXLAN 9000的Dev-VTEP-2的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地址= client 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上配置的一个SNIP地址。请求包包含:
    • 源IP地址= NS-ADC上的子网IP地址=服务器的snippet (192.0.1.50)
    • 目的IP地址= S2的IP地址(192.0.0.102)
  4. NS-ADC在它的桥接表中为S2找到一个VXLAN映射项。说明在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.192.168.1.102)
    • 目的IP地址= NS-ADC上的子网IP地址=服务器的snippet (192.0.1.50)
  10. Dev-VTEP-2封装响应报文的方式与NS-ADC在步骤4和步骤5中封装请求报文的方式相同。Dev-VTEP-2将封装后的UDP报文发送到NS-ADC的SNIP地址snippet -for- servers(192.0.1.50)。
  11. NS-ADC在接收到UDP封装报文后,按照第7步Dev-VTEP-2解封装的方法,将报文的UDP和VXLAN头去掉。结果数据包与步骤9中的响应数据包相同。
  12. NS-ADC使用会话表对虚拟服务器LBVS进行负载均衡,并将响应报文转发给客户端CL。响应报文包含:
    • 源IP地址= client 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,不能调整为处理50字节的VXLAN报文开销。如果其中一台设备位于VXLAN路径中,或者作为VXLAN VTEP设备,则可能导致VXLAN流量分片或性能下降。

  • 在Citrix ADC SDX设备上,VLAN过滤对VXLAN报文不起作用。

  • VXLAN中不能设置MTU值。

  • 不能将接口绑定到VXLAN。

配置步骤

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

  • 添加VXLAN实体.创建一个以正整数唯一标识的VXLAN实体,也称为VNI (VXLAN Network Identifier)。此处也可以指定运行VXLAN协议的远端VTEP的UDP目的端口。缺省情况下,VXLAN实体的UDP目的端口号为4789。此UDP端口设置必须与该VXLAN的所有远端vtep上的设置匹配。也可以将vlan绑定到该VXLAN上。所有绑定vlan的流量(包括广播、组播、未知单播)都可以通过该VXLAN。如果没有vlan绑定到VXLAN,则Citrix ADC允许该VXLAN上不属于其他任何VXLAN的所有vlan的流量。
  • 将本地VTEP IP地址与VXLAN实体绑定.将一个已配置的SNIP地址与VXLAN绑定,用于源VXLAN出方向的报文。
  • 添加一个可桥接的条目.添加可桥接表项,指定创建VXLAN的VXLAN ID和远端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:00 -vxlan 9000 -vtep 203.0.101.101 Done > add bridgetable -mac 00:00:00:00:00 00:00 -vxlan 9000 -vtep 203.0.102.102 Done

vxlan支持IPv6动态路由协议

Citrix ADC设备支持vxlan的IPv6动态路由协议。vtyh命令行可以在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 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连接器隧道用于将企业的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 Connector隧道配置。
  3. (可选)在VXLAN配置中开启VLAN标签功能。

CLI程序

使用CLI方式添加VXLAN-VLAN映射。

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

使用CLI命令,将VXLAN和vlan绑定到VXLAN- vlan映射中。

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

使用实例使用CLI命令,为基于网桥的CloudBridge Connector隧道绑定VXLAN-VLAN映射。

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

如果添加新的网桥:

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

如果重新配置现有网桥:

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

使用CLI命令为基于策略路由的CloudBridge Connector隧道绑定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映射。

使用实例为基于网桥的CloudBridge Connector隧道绑定VXLAN-VLAN映射。

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

使用实例在基于策略路由的CloudBridge Connector隧道上绑定VXLAN-VLAN映射。

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

使用GUI在VXLAN相关的报文中包含VLAN标签。

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

>add 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-DC2 - cloud 8000 -vlan 3 4 Done > set pbr pbr -CBC-DC-1-CLOUD -vxlanVlanMap VXLANVLAN-DC1 Done > set pbr pbr - cbr - dc -2- cloud ALLOW -ipTunnel CBC-DC-2-CLOUD -vxlanVlanMap VXLANVLAN-DC2 Done