Citrix ADC

用例 7:使用 IP Over IP 在 DSR 模式下配置负载平衡

您可以通 使用 IP 隧道(也称为 IP over IP 配置),将 Citrix ADC 设备配置为在第 3 层网络中使用直接服务器返回 (DSR) 模式。与 DSR 模式的标准负载平衡配置一样,这允许服务器直接响应客户端,而不是使用通过 Citrix ADC 设备的返回路径。这可以缩短响应时间和吞吐量。与标准 DSR 模式一样,Citrix ADC 设备监视服务器并对应用程序端口执行运行状况检查。

通过 IP 配置,Citrix ADC 设备和服务器不需要位于同一层 2 子网中。相反,Citrix ADC 设备在将数据包发送到目标服务器之前封装这些数据包。目标服务器收到数据包后,它会解压包,然后将其响应直接发送到客户端。这通常被称为 L3DSR。

要在 Citrix ADC 设备上配置 L3-DSR 模式:

  • 创建负载平衡虚拟服务器。将模式设置为 IPTENDLE 并启用无会话跟踪。
  • 创建服务。为每个后端应用程序创建服务并将服务绑定到虚拟服务器。
  • 配置解封。为配置 Citrix ADC 设备或后端服务器。

    注意:

    当您使用 Citrix ADC 设备时,解封设置是 ADC 设备之间的 IP 隧道,后端对真实服务器执行 L2DSR 操作。

配置负载平衡虚拟服务器

配置虚拟服务器以处理对应用程序的请求。分配与服务匹配的服务类型,或者对多个服务使用 ANY 类型。 将转发方法设置为 IP隧道,并使虚拟服务器能够在无会话模式下运行。配置要使用的任何负载均衡方法。

使用命令行界面创建和配置 IP DSR 的负载平衡虚拟服务器

在命令提示符处,键入以下命令以配置 IP DSR 的负载平衡虚拟服务器并验证配置:

add lb vserver <name> serviceType <serviceType> IPAddress <ip> Port <port> -lbMethod <method> -m <ipTunnelTag> -sessionless [ENABLED | DISABLED]

show lb vserver <name>
<!--NeedCopy-->

示例:

在以下示例中,我们选择了负载平衡方法作为 Sourcephash 并配置了无会话负载平衡。

add lb vserver Vserver-LB-1 ANY 1.1.1.80 * -lbMethod SourceIPHash -m IPTUNNEL -sessionless ENABLED
<!--NeedCopy-->

使用 GUI 为 IP 上 DSR 创建和配置负载平衡虚拟服务器

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 创建虚拟服务器,然后将重定向模式指定为基于 IP 隧道

为 IP DSR 配置服务

创建负载均衡服务器后,为每个应用程序配置一项服务。该服务处理从 Citrix ADC 设备到这些应用程序的流量,并允许 Citrix ADC 设备监视每个应用程序的运行状况。

将服务分配为使用 USIP 模式,然后将 IPTUND 类型的监视器绑定到服务以进行基于隧道的监视。

使用命令行界面创建和配置 IP DSR 服务

在命令提示符下,键入以下命令以创建服务,并可选择创建监视器并将其绑定到服务:

add service <serviceName> <serverName> <serviceType> <port> -usip <usip>

add monitor <monitorName> <monitorType> -destip <ip> -iptunnel <iptunnel>

bind service <serviceName> -monitorName <monitorName>
<!--NeedCopy-->

示例:

在以下示例中,创建了 IPTUNUN 类型的监视器。

add monitor mon_DSR PING -destip 1.1.1.80 -iptunnel yes
add service svc_DSR01 2.2.2.100 ANY * -usip yes
bind service svc_DSR01 -monitorName mon_DSR
<!--NeedCopy-->

简化服务器和 ADC 设备路由的另一种方法是将 ADC 和服务器设置为使用来自同一子网的 IP。这样可以确保任何具有隧道终端点目标的流量都通过隧道发送。在该示例中,使用了 10.0.1.0/30。

注意 : 监视器的目的是通过 IP 隧道到达每台服务器的环回来确保隧道处于活动状态。如果服务未启动,请验证 ADC 和服务器之间的外部 IP 路由是否良好。还要验证内部 IP 地址是否可以通过 IP 隧道访问。服务器上可能需要路由,或者根据所选的实现将 PBR 添加到 ADC 中。

示例:

add ns ip 10.0.1.2 255.255.255.252 -vServer DISABLED
add netProfile netProfile_DSR -srcIP 10.0.1.2
add lb monitor mon_DSR PING -LRTM DISABLED -destIP 1.1.1.80 -ipTunnel YES -netProfile netProfile_DSR
<!--NeedCopy-->

使用 GUI 配置监视器

  1. 导航到流量管理 > 负载平衡 > 监视器
  2. 创建监视器,然后选择 IP 隧道

使用 GUI 创建和配置 IP IP DSR 服务

  1. 导航到流量管理 > 负载平衡 > 服务
  2. 创建服务,然后在设置选项卡中选择使用源 IP 地址

使用命令行界面将服务绑定到负载平衡虚拟服务器

在命令提示符处键入以下命令:

bind lb vserver <name> <serviceName>
<!--NeedCopy-->

示例:

bind lb vserver Vserver-LB-1 Service-DSR-1
<!--NeedCopy-->

使用 GUI 将服务绑定到负载平衡虚拟服务器

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 打开虚拟服务器,然后单击服务部分以将服务绑定到虚拟服务器。

在隧道数据包的 Outer 标头中使用客户端 IP 地址

Citrix ADC 支持使用 IP 隧道使用客户端源 IP 地址作为与直接服务器返回模式相关的隧道数据包外部标头中的源 IP 地址。使用 IPv4 的 DSR 和具有 IPv6 隧道模式的 DSR 支持此功能。要启用此功能,请为 IPv4 或 IPv6 启 用使用客户端源 IP 地址 参数。此设置将全局应用于所有使用 IP 隧道的 DSR 配置。

使用 CLI 使用客户端-源 IP 地址作为源 IP 地址

在命令提示符下,键入:

  • set iptunnelparam -useclientsourceip [YES | NO]
  • show iptunnelparam

使用 GUI 使用客户端源 IP 地址作为源 IP 地址

  1. 导航到系统 > 网络
  2. 设置选项卡中,单击 IPv4 隧道全局设置
  3. 配置 IPv4 隧道全局参数页中,选中使用客户端源 IP 复选框。
  4. 单击 OK(确定)。

使用 CLI 使用客户端源 IP 地址作为源 IP 地址

在命令提示符下,键入:

  • set ip6tunnelparam -useclientsourceip [YES | NO]
  • show ip6tunnelparam

使用 GUI 使用客户端源 IP 地址作为源 IP 地址

  1. 导航到系统 > 网络
  2. 设置 选项卡中,单击 IPv6 隧道全局设置
  3. 配置 IPv6 隧道全局参数页中,选中使用客户端源 IP 复选框。
  4. 单击 OK(确定)。

解封配置

您可以将 Citrix ADC 设备或后端服务器配置为解封装。

Citrix ADC 解封

当 Citrix ADC 设备用作解封装时,必须在 Citrix ADC 设备中创建 IP 隧道。有关更多详细信息,请参阅 配置 IP 隧道

Citrix ADC 解封设置包括以下两个虚拟服务器:

  • 第一个虚拟服务器接收封装的数据包并删除外部 IP 封装。
  • 第二个虚拟服务器在前端 ADC 上具有原始服务的 IP,并使用 MAC 转换使用绑定服务的 MAC 地址将数据包转发到后端。此设置通常称为 L2DSR。确保在此虚拟服务器上禁用 ARP。

示例设置:

下图显示了使用 ADC 设备的解封设置。

ADC 解封设置

设置所需的完整配置如下。

前端 ADC 配置:

add service svc_DSR01 2.2.2.80 ANY * -usip YES -useproxyport NO
add lb vserver vip_DSR_ENCAP ANY 1.1.1.80 * -lbMethod SOURCEIPHASH -m IPTUNNEL -sessionless ENABLED
bind lb vserver vip_DSR_ENCAP svc_DSR01
<!--NeedCopy-->

后端 ADC 配置:

add ipTunnel DSR-IPIP 1.1.1.100 255.255.255.255 *

add service svc_DSR01_01 2.2.2.101 ANY * -usip YES -useproxyport NO
add service svc_DSR01_02 2.2.2.102 ANY * -usip YES -useproxyport NO
add service svc_DSR01_03 2.2.2.103 ANY * -usip YES -useproxyport NO

add lb vserver vs_DSR_DECAP ANY 2.2.2.80 * -lbMethod SOURCEIPHASH -m IPTUNNEL -sessionless ENABLED -netProfile netProf_DSR_MBF_noIP

add ns ip 1.1.1.80 255.255.255.255 -type VIP -arp DISABLED -snmp DISABLED
add lb vserver vs_DSR_Relay ANY 1.1.1.80 * -lbMethod SOURCEIPHASH -m MAC -sessionless ENABLED

bind lb vserver vs_DSR_DECAP svc_DSR01_01
bind lb vserver vs_DSR_DECAP svc_DSR01_02
bind lb vserver vs_DSR_DECAP svc_DSR01_03

bind lb vserver vip_DSR_Relay svc_DSR01_01
bind lb vserver vip_DSR_Relay svc_DSR01_02
bind lb vserver vip_DSR_Relay svc_DSR01_03

add netProfile netProf_DSR_MBF_noIP -MBF ENABLED
add lb monitor mon_DSR_MAC PING -netProfile netProf_DSR_MBF_noIP
bind service svc_DSR01_01 -monitorName mon_DSR_MAC
bind service svc_DSR01_02 -monitorName mon_DSR_MAC
bind service svc_DSR01_03 -monitorName mon_DSR_MAC
<!--NeedCopy-->

以下示例显示了使用运行 apache2 的 Ubuntu 和红帽服务器的测试设置。这些命令在每个后端服务器上设置。

sudo ip addr add 1.1.1.80 255.255.255.255 dev lo
sudo sysctl net.ipv4.conf.all.arp_ignore=1
sudo sysctl net.ipv4.conf.all.arp_announce=2
sudo sysctl net.ipv4.conf.eth4.rp_filter=2 (The interface has the external IP with route towards the ADC)
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo ip link set dev lo arp on
<!--NeedCopy-->

后端服务器解封

使用后端服务器作为解封时,后端配置因服务器操作系统类型而异。您可以按照以下步骤将后端服务器配置为解封:

  1. 为服务 IP 配置一个带 IP 的环回接口。
  2. 创建隧道接口。
  3. 通过隧道界面添加路径。
  4. 根据流量的需要配置接口设置。

注意:

Windows 操作系统服务器不能本地进行 IP 隧道传输,因此提供了这些命令作为基于 Linux 的系统的示例。但是,第三方插件可用于 Windows 操作系统服务器,这不在本示例的范围之内。

下图显示了使用后端服务器的解封设置。

服务器解封设置

示例配置:

在此示例中,1.1.1.80 是 Citrix ADC 虚拟 IP (VIP) 地址,2.2.2.10-2.2.2.12 是后端服务器 IP 地址。VIP 地址在环回接口中配置,并通过隧道接口添加路由。监视器使用服务器 IP,并使用隧道端点将监视数据包通过 IP 隧道隧道隧道。

设置所需的完整配置如下。

前端 ADC 配置:

以下配置创建了使用隧道终端节点作为源的监视器。然后,通过隧道发送 ping 到服务 IP 地址。

add ns ip 10.0.1.2 255.255.255.252 -vServer DISABLED
add netProfile netProfile_DSR -srcIP 10.0.1.2
add lb monitor mon_DSR PING -LRTM DISABLED -destIP 1.1.1.80 -ipTunnel YES -netProfile netProfile_DSR
<!--NeedCopy-->

以下配置为使用原始源 IP 地址的服务创建 VIP。然后,通过 IP 隧道将流量转发到后端服务器。

add service svc_DSR01 2.2.2.10 ANY * -usip YES -useproxyport NO
bind service svc_DSR01 -monitorName mon_DSR

add service svc_DSR02 2.2.2.11 ANY * -usip YES -useproxyport NO
bind service svc_DSR02 -monitorName mon_DSR

add service svc_DSR03 2.2.2.12 ANY * -usip YES -useproxyport NO
bind service svc_DSR03 -monitorName mon_DSR

add lb vserver vip_DSR_ENCAP ANY 1.1.1.80 * -lbMethod SOURCEIPHASH -m IPTUNNEL -sessionless ENABLED
bind lb vserver vip_DSR_ENCAP svc_DSR01
bind lb vserver vip_DSR_ENCAP svc_DSR02
bind lb vserver vip_DSR_ENCAP svc_DSR03
<!--NeedCopy-->

每台服务器的后端服务器配置:

后端服务器需要以下命令才能接收 IPIP 数据包、删除外部封装,然后从环回响应到原始客户端 IP。这样可以确保客户端收到的数据包中的 IP 地址与原始请求中的 IP 地址匹配。

modprobe ipip
sudo ip addr add 1.1.1.80 255.255.255.255 dev lo
nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0
ifname tun0 remote 198.51.100.5 local 203.0.113.10
nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30'
nmcli connection up tun0
sudo sysctl net.ipv4.conf.all.arp_ignore=1
sudo sysctl net.ipv4.conf.all.arp_announce=2
sudo sysctl net.ipv4.conf.tun0.rp_filter=2
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo ip link set dev lo arp off
<!--NeedCopy-->
用例 7:使用 IP Over IP 在 DSR 模式下配置负载平衡