一、Standard + SNAT+DNAT 模式
原理:此类型的数据包传输在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进行额外的配置
SNAT模式的不足
- 服务器上看到的源地址都是BIG-IP的地址
- 排错的难度相对较高
- 外部网段可以直接访问到服务器,降低了安全性
BIG-IP可以将客户端的源地址写到HTTP包头里,以便后台服务器读取:
- 插入一个 x-forward 字段在HTTP包头里(RFC 标准格式)
- 客户通过iRules定义的HTTP包头字段
三、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地址
四、命令行查看http会话
命令详解:(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
五、配置记录Log的iRules
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"
}
配置如下:
六、后台查看Log日志
Note: 一般可以看到7天左右的日志,如果要看很早的日志,可以查看QKView(后续会写如何查看F5的QKView)
~ # cd /var/log
log # ls
log # cat ltm
备注: 在client、VIP、Node后面的%104忽略即可,这是因为这台F5配置了Partition, 104是Route Domain
在web页面查看日志:
七、服务器端查看源IP
Note:以下配置来自F5文档,未进行实测。