原理:此类型的数据包传输在F5上采用的是7层的处理模式,F5维护两个TCP协议栈
①:Client发起请求,和F5建立三次握手。
②:F5和后端的服务器建立三次握手。
客户端请求过程如下:
①、客户端源地址=3.3.3.3(源),将数据包发给F5的VS=1.1.1.5:80(目)
②、F5将客户端源地址=3.3.3.3,转换为SNAT地址=1.1.1.100
③、SNAT地址=1.1.1.100(源),将数据包发给服务器RED=1.1.1.1:8080(目)
服务器回报过程如下:
①、服务器RED=1.1.1.1:8080(源), 将数据包发给SNAT地址=1.1.1.100(目)
②、F5将真实源地址1.1.1.1:8080,转换为VS地址=1.1.1.5:80
③、VS地址=1.1.1.5:80,将数据包发给客户端地址=3.3.3.3
SNAT模式的优势
SNAT模式的不足
BIG-IP可以将客户端的源地址写到HTTP包头里,以便后台服务器读取:
1、配置XFF的Pofile
2、在VS中添加XFF的Profile
3、可以通过抓包查看数据包中的客户端源IP。
抓包命令:~# tcpdump -s0 -nni 0.0:nnn host 10.128.48.147 -vw /var/tmp/text.pcap
备注:10.128.48.147为F5的SNAT地址
命令详解:(tmos)#show sys connection 后面可以加以下参数:
cs-server-addr 指定活动连接的客户端本地地址。支持子网。【VS-IP 常用】
cs-server-port 指定活动连接的客户端本地端口。
cs-client-addr 指定活动连接的客户端远程地址。支持子网。【Client-IP】
cs-client-port 指定活动连接的客户端远程端口。
max-result-limit 指定要显示的最高匹配结果的最大数量。默认 1000。
protocol 指定用于指定连接的协议(例如:tcp、udp)。
ss-server-addr 指定活动连接的服务器端远程地址。【Server-IP】
ss-server-port 指定活动连接的服务器端远程端口。
ss-client-addr 指定活动连接的服务器端本地地址。【SNAT地址】//前提是:做了snat
ss-client-port 指定活动连接的服务器端本地端口。
type 指定用于指定连接的连接类型(例如:any、mirror、self)
常用命令:(tmos)#show sys connection cs-server-addr VS_IP cs-server-port VS_Port
Note: 可以看到Pool中成员被访问的客户端源IP的log.
iRules如下:
when CLIENT_ACCEPTED {
set vip [IP::local_addr]:[TCP::local_port]
}
when SERVER_CONNECTED {
set client "[IP::client_addr]:[TCP::client_port]"
set node "[IP::server_addr]:[TCP::server_port]"
log local0.info "Client $client -> VIP: $vip -> Node: $node"
}
配置如下:
Note: 一般可以看到7天左右的日志,如果要看很早的日志,可以查看QKView(后续会写如何查看F5的QKView)
~ # cd /var/log
log # ls
log # cat ltm
备注: 在client、VIP、Node后面的%104忽略即可,这是因为这台F5配置了Partition, 104是Route Domain
在web页面查看日志:
Note:以下配置来自F5文档,未进行实测。
原文:https://www.cnblogs.com/pw1993/p/15060145.html