实验目的
在一些互联网环境中,不可避免的需要做源地址NAT,但是NAT之后,原本来自公网IP的访问,均变成了一个或者是多个内网地址的访问,在负载上无法做基于源地址的会话保持,当然也可以通过cookie的方式做,但是有些业务需求则需要做基于源地址的会话保持,那么则通过对于XFF字段的抓取,做相应的会话保持,则完美地解决了这个问题。
实验拓扑
实验配置
配置XFF见Radware负载均衡-X-Forwarded-For
XFF会话保持
XFF为HTTP Header字段内容,radware官网有相关的示例脚本,如下:
when HTTP_REQUEST
{
persist usid [HTTP::header value <header-name>] <timeout>
}
-----END
通过抓包发现XFF字段详细:
调整脚本字段:
when HTTP_REQUEST {
persist usid [HTTP::header value X-Forwarded-For] 3600
}
-----END
注:3600为会话保持时间,单位为秒
Web配置
1、点击Configuration>Application Delivery>AppShape++ Scripts
2、点击import的图标
1、启用该脚本
2、输入脚本ID
3、调整导入方式为Text
4、将上方脚本粘贴到文本框中
5、点击Import导入
命令行配置
/c/slb/appshape/script XFF_persist/ena/import text
when HTTP_REQUEST {
persist usid [HTTP::header value X-Forwarded-For] 3600
}
-----END
关联脚本
Web配置
1、到需要关联的Virtual Services下,选择AppShape++
2、点击+
1、输入脚本优先级
2、选择刚才创建的脚本
3、点击Submit提交配置,Apply应用配置,Save保存配置。
命令行配置
/c/slb/virt 1/service 80 http/appshape/add 1 XFF_persist
实验结果
客户端访问192.168.136.100后,SLB上抓取会话如下:
通过命令/info/slb/ddstore/persist/dump,抓取持久性条目
根据源地址192.168.136.1,age为存活时间,测试完成。
实验后续
Alteon可以通过X-Forwarded-For进行会话保持,但因为会话保持为4层功能,XFF为7层内容,而且需要Alteon对每个数据包进行分析,会造成设备性能增加且容易导致设备不稳定,不建议通过这种方式来进行会话保持。建议通过Cookie的形式来实现会话保持功能,具体操作可参考Radware Alteon负载均衡-Cookie(Passive/Rewrite)会话保持和Radware Alteon负载均衡-Cookie(Insert)会话保持