1.背景後端
F5負載均衡設備,不少場景下須要採用旁掛的方式部署。爲了保證訪問到源站的數據流的request和response的TCP路徑一致,f5採用了snat機制。可是這樣致使源站上看到的來源IP都是snat地址,而看不到真實的訪問源地址。服務器
2.http訪問網絡
對於HTTP應用能夠直接在VS中開啓X-Forwarded規則負載均衡
3.https訪問 tcp
因爲HTTPS應用到達F5的數據都是密文,F5只能看到網絡層的地址,4—7層的內容沒法看到,因此F5也沒法像http應用同樣將客戶端地址插入到X_forward_for字段;測試
目前HTTPS應用的加解密工做都是由服務器自身完成的,爲了保證F5可以看到4—7層的數據,須要將加解密工做交給F5來作:加密
1)根證書和KEY文件導入F5設備,F5代替服務器同用戶端創建SSL通道;spa
2)F5將加密數據解密後經過X_forward_for功能插入用戶端源IP命令行
3)業務部門將服務器上的443端口更改成80端口即取消證書加解密工做code
此過程在原有服務器上進行證書撤銷操做,會影響到應用中斷,建議從新搭建2臺提供相同業務的80端口服務器;
4)F5設備上配置一個測試VS關聯新搭建的80服務器及SSL策略,驗證F5是否能夠成功發佈HTTPS業務、HTTPS業務插入源地址等功能。即新建測試的vip,訪問端口爲443,關聯SSL加解密策略,後端關聯80的POOL。
VS中
4.非http/https
對於TCP協議則須要經過TCP OPTION來實現客戶需求
TCP Options須要配合IRULSE+TCP Profile來實現。
Irulse(當服務創建起鏈接時,轉換客戶端的ip地址並以點」.」劃分爲四個部分,在TCP報頭中插入kind爲29類型的字段。設置變量,輸出log信息。
當服務創建起鏈接時,轉換客戶端的ip地址並以點」.」劃分爲四個部分,在TCP報頭中插入kind爲29類型的字段。設置變量,輸出log信息):
1)irule
when SERVER_CONNECTED { scan [IP::client_addr] {%d.%d.%d.%d} a b c d TCP::option set 29 [binary format cccc $a $b $c $d] all set a [binary format cccc $a $b $c $d] log "insert ip to tcp option $a" }
2)Tcp Profile案例(須要在tmsh下運行,其中tcplh3爲手動建立的tcp profile名稱):
create ltm profile tcp tcplh3 tcp-options 「{8 first} {28 last}」
步驟:
1)模擬業務環境,在F5中創建Pool,創建VS,VS關聯特定的pool,關聯上述指定的iRule腳本和profile;
3)用SshClient登陸F5的命令行,運行tcpdump抓取數據包,同時用客戶端屢次訪問VS地址。
抓包命令:tcpdump -s0 -ni 0.0:nnnp host 10.160.100.49 and port 25 -w /var/tmp/test_0907.pcap
即,須要抓10.160.100.49的25端口,保存目錄爲/var/tmp/,保存文件爲test.pcap。
抓包結果以下:
其中1d=29,表示tcp類型爲29;06表示字節數
後邊的十六進制轉換爲十進制後即爲真實源地址
此時即代表f5已經成功將真實源地址插入到option字段,具體如何讀取需服務器端配置。
TCP三次握手
注:option是在傳輸層,業務服務器默認只讀網絡層