ADC

代理协议

代理协议跨 NetScaler 设备安全地将客户端详细信息从客户端传输到服务器。设备会添加包含客户端详细信息的代理协议标头,然后将其转发到后端服务器。以下是 NetScaler 设备中代理协议的一些使用场景。

  • 学习原始客户端 IP 地址
  • 为网站选择语言
  • 阻止列出选定的 IP 地址
  • 记录和收集统计信息。

以下是三种操作模式:

  • 插入。NetScaler 插入客户端详细信息并将其发送到后端服务器。
  • 向前。NetScaler 将客户端详细信息转发到后端服务器。从NetScaler 14.1-12.x版本开始,如果在虚拟服务器和服务上启用了代理协议功能,NetScaler会将通过代理协议V2发送的TLV(类型长度值)信息转发到后端服务器。
  • 剥离。NetScaler 存储客户端详细信息以用于记录目的。另外,如果后端服务器不支持代理协议,则使用重写策略配置将客户端详细信息发送到服务器

下表为您提供有关不同代理协议模式下的 LB 虚拟服务器和服务状态的信息:

代理协议模式 LB 虚拟服务器 服务
Insert 已禁用 已启用
转发 已启用 已启用
已剥离 已启用 已禁用

限制

TCP 快速开放 (TFO) 和多路径 TCP 功能不支持代理协议。仅 NetScaler 设备执行 TCP 连接终止的服务支持该功能。它不支持其他服务,例如“任何”。

代理协议如何在 NetScaler 设备中工作

以下流程图显示了如何跨 NetScaler 设备配置用于插入、转发和剥离操作的代理协议:

插入操作

插入操作

组件的交互方式如下:

  • 在 NetScaler 实例中,您必须在网络配置文件中启用代理协议并将其绑定到服务。
  • 在插入操作中,NetScaler 会添加包含客户端连接详细信息的代理标头,然后将其转发到后端服务器。
  • 在发送端,设备根据 CLI 配置决定代理协议版本。

转发操作

转发操作

组件的交互方式如下:

  • 客户端向 NetScaler 发送请求以及代理标头。设备会动态识别版本。
  • 在 NetScaler 中,它是一种向前操作。代理协议在负载平衡虚拟服务器或内容交换虚拟服务器上启用,并在服务上启用。设备在代理协议 V2 中接收代理标头和 TLV,并将标头和 TLV 转发到后端服务器。
  • 如果代理标头详细信息格式无效,设备将重置连接。
  • 在发送端,设备根据 CLI 配置决定代理协议版本。

剥离操作

剥离操作

组件的交互方式如下:

  • 客户端向 NetScaler 设备发送请求以及代理标头。
  • 在 NetScaler 设备中,如果是剥离操作,设备将转发从代理协议获取的客户端信息,并使用重写策略表达式将其插入 HTTP 标头中。
  • 使用重写策略表达式将客户端详细信息(例如源 IP 地址、目标 IP 地址、源端口和目标端口)添加到 HTTP 标头中。重写策略会评估表达式,如果为“true”,则触发相应的重写策略操作。客户端详细信息将以 HTTP 标头的形式转发到后端服务器。
  • 如果代理标头详细信息格式无效,设备将重置连接。

代理协议版本格式

Proxy 协议版本有两种格式。设备决定使用基于传入数据长度的格式。有关详细信息,请参阅 代理协议 RFP。

  1. 代理协议版本 1 格式

    PROXY TCP4/TCP6/UNKNOWN <SRC IP> <DST IP> <SRC PORT> <DST PORT>

    • PROXY-> Proxy 标头版本 -1 的唯一字符串格式。
    • 支持基于 IPv4 的 TCP 协议和基于 IPv6 的 TCP 协议。对于其余的协议,这是 UNKNOWN。
    • SRC IP — 数据包的源 IP(原始客户端 IP)地址。
    • DST IP — 数据包的目的地 IP 地址。
    • SRC 端口 — 数据包的源端口。
    • DST 端口 — 数据包的目的端口。
  2. 代理协议版本 2 格式

    0D 0A 0D 0A 00 0D 0A 51 55 49 54 0A <13th byte> <14th byte> <15-16th byte> <17th byte onwards>

    • D 0A 0D 0A 00 0D 0A 51 55 49 54 0A-> 代理标头版本 -2 的唯一二进制字符串。
    • 支持基于 IPv4 的 TCP 协议和基于 IPv6 的 TCP 协议。对于其余的协议,这是 UNKNOWN。
    • 第十三个字节 — 协议版本和命令。
    • 第十四个字节 — 地址和协议系列。
    • 第 15-16 字节 — 按网络顺序表示的地址长度。
    • 从第十七个字节开始 — 网络顺序中存在的地址信息-src IP、dst IP、src 端口、dst 端口。

响应者策略基础架构表达支持

代理协议支持以下类型为 TCP 和 HTTP 的虚拟服务器的响应器策略基础架构表达式:

  1. CLIENT.PROXY.SRCIP_STR
  2. CLIENT.PROXY.DSTIP_STR
  3. CLIENT.PROXY.SRCPORT
  4. CLIENT.PROXY.DSTPORT
  5. CLIENT.PROXY.ETHERTYPE

注意

从 NetScaler 版本 13.1-48.x 起,NetScaler 支持 TCP 类型的虚拟服务器上的代理协议的响应者策略基础架构表达式。

在 NetScaler 设备中配置代理协议

完成以下步骤以在 NetScaler 设备中配置代理协议。

  1. 将代理协议启用为全局协议。
  2. 为插入操作配置代理协议。
  3. 为转发操作配置代理协议。
  4. 为 Strip 操作配置代理协议。

将代理协议启用为全局协议

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

set ns param –proxyProtocol ENABLED

为插入操作配置代理协议

要为插入操作配置代理协议,必须在负载平衡虚拟服务器上禁用该协议并在服务上启用该协议。

添加禁用代理协议的网络配置文件以实现负载平衡虚拟

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

add netprofile <name> -proxyProtocol ENABLED/DISABLED> -proxyprotocoltxversion <V1/V2>

示例:

Add netprofile proxyprofile-1 –proxyProtocol DISABLED –proxyprotocoltxversion V1

注意:

如果在设备上禁用代理协议,则无需设置协议版本参数。

添加启用服务的代理协议的网络配置文件

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

add netprofile <name> -proxyProtocol ENABLED/DISABLED> -proxyprotocoltxversion <V1/V2>

示例:

add netprofile proxyprofile-2 –proxyProtocol ENABLED –proxyprotocoltxversion V1

在代理层中为 NetScaler 设备添加负载平衡虚拟服务器

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

add lb vserver <name>@ <serviceType> [(<IPAddress>@ <port>)]

示例:

add lb vserver lbvserver-1 http 1.1.1.1 80

在代理层中为 NetScaler 设备添加 HTTP 服务

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

add service <name>@ (<IP>@ | <serverName>@) <serviceType> <port>

示例:

Add service http-service-1 2.2.2.1 http 80

在 NetScaler 设备中使用负载平衡虚拟服务器设置净配置文件

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

set lb vserver <vserver name> -netprofile <name>

示例:

set lb vserver lbvserver-1 –netprofile proxyProfile-1

在 NetScaler 设备中使用 HTTP 服务设置网络配置文件

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

set service <service name> –netprofile <name>

示例:

set service http-service-1 –netprofile proxyProfile-2

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

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

bind lb vserver <vserver name> <service name>

示例:

bind lb vserver lbvserver-1 http-service-1

为转发操作配置代理协议

要将代理协议配置为代理层中的下一个 NetScaler 实例进行转发操作,必须启用该协议并绑定到虚拟服务器或服务。

注意:

为负载平衡虚拟服务器创建的网络配置文件也可以用于服务。

添加启用了代理协议的网络配置文件,以实现负载平衡

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

add netprofile <name> -proxyProtocol ENABLED/DISABLED> -proxyprotocoltxversion <V1/V2>

示例:

add netprofile proxyprofile-3 –proxyProtocol ENABLED –proxyprotocoltxversion V1

添加启用服务的代理协议的网络配置文件

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

add netprofile <name> -proxyProtocol ENABLED/DISABLED> -proxyprotocoltxversion <V1/V2>

示例:

add netprofile proxyprofile-4 –proxyProtocol ENABLED –proxyprotocoltxversion V1

在代理层中为 NetScaler 设备添加负载平衡虚拟服务器

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

add lb vserver <name>@ <serviceType> [(<IPAddress>@ <port>)]

示例:

add lb vserver lbvserver-2 http 2.2.2.2 80

在代理层中为 NetScaler 设备添加 HTTP 服务

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

add service <name>@ (<IP>@ | <serverName>@) <serviceType> <port>

示例:

Add service http-service-2 3.3.3.1 http 80

在 NetScaler 设备中使用负载平衡虚拟服务器设置净配置文件

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

set lb vserver <vserver name> -netprofile <name>

示例:

set lb vserver lbvserver-2 –netprofile proxyProfile-3

在 NetScaler 设备中使用 HTTP 服务设置网络配置文件

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

set service <service name> –netprofile <name>

示例:

set service http-service-2 –netprofile proxyProfile-4

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

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

bind lb vserver <vserver name> <service name>

示例:

bind lb vserver lbvserver-2 http-service-2

为剥离操作配置代理协议

要为剥离操作配置代理协议,必须在负载平衡虚拟服务器上启用代理协议,然后在服务上禁用代理协议。

添加虚拟服务器启用代理协议的网络配置文件

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

add netprofile <name> -proxyProtocol ENABLED> -proxyprotocoltxversion <V1/V2>

示例:

add netprofile proxyprofile-5 –proxyProtocol ENABLED –proxyprotocoltxversion V1

在代理层中为 NetScaler 设备添加负载平衡或内容交换虚拟服务器

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

add lb vserver <name>@ <serviceType> [(<IPAddress>@ <port>)]

示例:

add lb vserver lbvserver-3 http 2.2.2.2 80

在代理层中为 NetScaler 设备添加 HTTP 服务

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

add service <name>@ (<IP>@ | <serverName>@) <serviceType> <port>

示例:

Add service http-service-3 3.3.3.1 http 80

在 NetScaler 设备中使用负载平衡或内容交换虚拟服务器设置网络配置文件

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

set lb vserver <vserver name> -netprofile <name>

示例: set lb vserver lbvserver-3 –netprofile proxyProfile-5

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

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

bind lb vserver <vserver name> <service name>

示例:

bind lb vserver lbvserver-3 http-service-3

使用 CLI 为代理协议配置响应器策略基础架构表达式

要配置响应器策略,请在命令提示符下键入:

add responder policy <name> <expression> <action>

示例:

> add responder policy resppol_proxy_srcip "CLIENT.PROXY.SRCIP_STR.EQ("10.106.26.83")" RESET
Done
<!--NeedCopy-->

要将响应器策略与负载平衡虚拟服务器绑定,请在命令提示符下键入:

bind lb vserver <name> -policyname <string> -priority <positive_integer> -gotoPriorityExpression <expression> -type <type>

示例:

> bind lb vserver lb_tcp1 -policyName resppol_proxy_srcip -priority 10 -gotoPriorityExpression END -type REQUEST
Done
<!--NeedCopy-->

端到端配置示例

> add ns tcpProfile tcp-proxy-profile -tcpmode ENDPOINT

> add netprofile net_proxyv1 -MBF DISABLED -proxyProtocol
ENABLED

> enable ns mode l2

> enable ns mode l3 usnip

> add ns ip 10.106.26.146 255.255.255.0 -type SNIP
Done
> add ns ip 10.106.26.144 255.255.255.0 -type SNIP
Done

> add lb vserver lb_tcp1 TCP 10.106.26.141 80
> add service s1 10.106.26.82 TCP 8080

> bind lb vserver lb_tcp1 s1

> set lb vserver lb_tcp1 -tcpProfileName tcp_proxy -netProfile net_proxyv1

> set ns param -proxyProtocol ENABLED

> add responder policy resppol_proxy_srcip "CLIENT.PROXY.SRCIP_STR.EQ("10.106.26.83")" RESET

> bind lb vserver lb_tcp1 -policyName resppol_proxy_srcip -priority 10 -gotoPriorityExpression END -type REQUEST
Done
<!--NeedCopy-->

使用 NetScaler GUI 配置代理协议

  1. 导航到 系统 > 设置 > 更改全局系统设置
  2. 在“配置全局系统设置参数”页中,选中“代理协议”复选框。
  3. 单击“确定”关闭
  4. 导航到 系统 > 网络 > 网络配置文件
  5. 在详细信息窗格中,单击 添加 为负载平衡虚拟服务器创建网络配置文件。
  6. 在“网络配置文件”页中,设置以下参数:
    1. 名称 :网络配置文件的名称。
    2. 代理协议:启用或禁用负载平衡虚拟服务器的代理协议。
    3. 代理协议 TX 版本:根据传入数据格式将代理协议版本设置为 V1 或 V2。
  7. 单击确定
  8. 导航到流量管理 > 负载平衡 > 虚拟服务器
  9. 在详细信息窗格中,单击“添加”。
  10. 负载平衡虚拟服务器 页面中,设置基本参数。
  11. 在“高级设置”部分中,选择 配置文件
  12. 配置文件 部分中,单击铅笔图标。
  13. 选择网络配置文件,然后单击 确定
  14. 单击 Done(完成)。
  15. 导航到 流量管理 > 负载平衡 > 服
  16. 在详细信息窗格中,单击“添加”。
  17. 负载平衡服务 页面中,设置基本参数。
  18. 在“高级设置”部分中,选择 配置文件
  19. 配置文件 部分中,单击铅笔图标。
  20. 选择网络配置文件,然后单击 确定
  21. 单击 Done(完成)。

注意:

如果您有多个 NetScaler 设备作为代理层的一部分,则必须在每个设备上为转发操作设置代理协议配置。