智匯華云 | 負載均衡源地址可見技術
摘要
在非網關型負載均衡器中,通常使用FullNat模式。在這種模式下,客戶端訪問后端服務器的源IP在負載均衡器上會被改變,導致在后端服務器上服務不能正確確定客戶端的真實IP地址。在一些應用場景下,為了實現安全或者大數據分析等應用,需要感知客戶端的真實IP。本文介紹了一種FullNat模式下負載均衡的源地址可見方法。
概述
負載均衡有三種模式:DR,NAT,Tunnel。FullNat模式在NAT模式下增加了源IP NAT。FullNat模式的優點:解決了NAT對Director和RS要求在同一個vlan的問題,適用更復雜的部署形式不要求配置Director作為網關,Director與RS可以通過三層通訊。缺點:RS看不到客戶端真實IP。
為了解決后端服務器感知客戶端真實IP,本文介紹了如下的方法。
四層源地址可見
四層流量通常是TCP和UDP協議報文。源地址可見的通常方法是在報文中某些字段攜帶客戶端的真實IP。在后端通過內核模塊來獲取客戶端IP。
TCP源地址可見
TCP流量是TOA來實現源地址可見。TOA 名字全稱是 tcp option address,是 FullNat 模式下能夠讓后端服務器獲取客戶端IP的一種實現方式,它的基本原理比較簡單。
客戶端用戶請求數據包到達負載均衡器時,負載均衡器在數據包的 tcp option 中插入源IP信息。
數據包到達后端服務器(裝有 toa 內核模塊)后,應用程序正常調用 getpeername 系統函數來獲取連接的源端IP地址。
由于在 toa 代碼中 hook(修改)了 inet_getname 函數(getpeername 系統調用對應的內核處理函數),該函數會從 tcp option 中獲取負載均衡器填充的源IP信息。
這樣后端服務器應用程序就獲取到了真實客戶端IP,而且對應用程序來說是透明的。
TCP頭部格式如下:
在option選項部分攜帶客戶端的IP地址。
IPv4 TOA格式
opcodeopsizeport
clientIP
opcode: opcode = 254
opsize: toa 大小 8 字節
port: 客戶端端口
clientIP: 客戶端 IP(4 字節)
注:opsize 大小包含了自身opsize(2B) + port(2B) + ip(4B)
修改option的時機
負載均衡器需要對每個 tcp 數據包都要插入 toa 信息么?如果這樣會影響到 負載均衡器 整體性能的,而且后端服務器也沒必要對每個 tcp 數據包進行解析,當然也很影響服務器性能。其實只需要在第 3 次握手 ack 數據包中插入 toa 選項即可,后端服務器從 ack 數據包中解析并獲取即可。
后端服務器上獲取客戶端IP獲取。
TCP協議棧中處理三次握手的 ack 數據包的函數是tcp_v4_syn_recv_sock,完成連接的建立,并創建 newsock。在TOA內核模塊中修改
1.hook tcp_v4_syn_recv_sock_toa函數,從TCP的skb中獲取tcp option的攜帶的IP信息,保存到socket中
2. Hook inet_getname,應用程序在調用getpeername時,會使用inet_getname_toa函數處理,從socket中將保存的ip信息返回
源碼參考 https://github.com/huaweicloud/huaweicloud-tool-aad-toa
UDP源地址可見
UDP使用UOA來實現源地址可見。UDP報文頭部沒有option字段,通常在IP頭部的option中攜帶客戶端IP。另外UDP是沒有連接的,沒有三層握手,通常是在前面幾個報文中攜帶信息。
具體實現可以參考:https://github.com/bytedance/uoa
七層源地址可見
七層的負載均衡通常通過反向代理來實現,如Nginx和Haproxy。七層流量通常是HTTP,通過在HTTP頭中的X-FORWARD-FOR中攜帶客戶端真實IP,后端服務器應用從HTTP頭的該字段中獲取得到。
X-Forwarded-For 是一個 HTTP 擴展頭部。HTTP/1.1(RFC 2616)協議并沒有對它的定義,它最開始是由 Squid 這個緩存代理軟件引入,用來表示 HTTP 客戶端真實 IP。如今它已經成為事實上的標準,被各大 HTTP 代理、負載均衡等轉發服務廣泛使用,并被寫入 RFC 7239(Forwarded HTTP Extension)標準之中。
X-Forwarded-For 請求頭格式非常簡單,就這樣:
X-Forwarded-For: client, proxy1, proxy2
可以看到,XFF 的內容由「英文逗號 + 空格」隔開的多個部分組成,最開始的是離服務端最遠的設備 IP,然后是每一級代理設備的 IP。
如果一個 HTTP 請求到達服務器之前,經過了三個代理 Proxy1、Proxy2、Proxy3,IP 分別為 IP1、IP2、IP3,用戶真實 IP 為 IP0,那么按照 XFF 標準,服務端最終會收到以下信息:
X-Forwarded-For: IP0, IP1, IP2
下面以NGINX為例,說明配置方法。
在Nginx配置文件中添加:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$proxy_add_x_forwarded_for會保存X-Forwarded-For中已有的值,并且追加$remote_addr的值,使用逗號隔開。
如果之前X-Forwarded-For中沒有值,則修改后X-Forwarded-For中只有$remote_addr的值。
例子:
A(client)—>B(Nginx1)—>C(Nginx2)—>D
A為客戶端,B和C為Nginx反向代理,D為服務端
A訪問B時,X-Forwarded-For為空,$remote_addr為A的IP,故B轉發到C時附帶的Header頭X-Forwarded-For即為A的IP;
B訪問C時,X-Forwarded-For為A的IP,$remote_addr為B的IP,此時C轉發到D附帶的Header頭X-Forwarded-For即為A的IP,B的IP;
C訪問D時,D就可以拿C傳來的X-Forwarded-For Header頭來分析源IP。
免責聲明:市場有風險,選擇需謹慎!此文僅供參考,不作買賣依據。
關鍵詞:
責任編輯:孫知兵
免責聲明:本文僅代表作者個人觀點,與太平洋財富網無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
如有問題,請聯系我們!
- 熱資訊!大部地區將出現大范圍雨雪、大風、2023-01-11
- 環球快報:券商員工違規炒股 監管出手清理2023-01-11
- 【環球報資訊】2022年新能源車滲透率翻番 2023-01-11
- 政策利好頻發 房企流動性緊張趨緩2023-01-11
- 每日看點!明星私募展望2023年投資:一個值2023-01-11
- 【當前熱聞】四大證券報精華摘要:1月11日2023-01-11
- 環球即時:艾隆科技:1月10日獲融資買入27.2023-01-11
- 全球今日訊!青云科技:1月10日融券賣出金2023-01-11
- 西力科技:1月10日獲融資買入29.88萬元2023-01-11
- 空客2022年共交付661架民用飛機2023-01-11
- 寶馬去年在華純電動車銷量增長91.6%2023-01-11
- 【環球速看料】中科軟董事長左春: 穩健“2023-01-11
- 要聞:傳藝科技:已向兩輪車和儲能客戶送出2023-01-11
- 天天熱議:華龍證券IPO獲受理2023-01-11
- 要聞速遞:平安i貸貸款逾期21年多久上征信2023-01-11
- 捷報!中國長城擎天EF860雙路服務器成功斬2023-01-10
- 從香氣重新定義云南茶飲的代表作——麒麟大2023-01-10
- 微動態丨盛迅達擬出售對華立科技全部持股 2023-01-10
- 北水動向|北水成交凈賣出0.06億 內資無懼2023-01-10
- 環球新動態:田野股份:目前與匯源無合作,2023-01-10
- 新城發展:新城控股2022年累計合同銷售金額2023-01-10
- 城投“驚雷”:誰為托底者托底?2023-01-10
- 天天微資訊!特斯拉上海超級工廠2022年各車2023-01-10
- 百度李彥宏:自動駕駛率先進入商用的很可能2023-01-10
- 當前資訊!百度李彥宏:交通網絡智能化改造2023-01-10
- 杭州市委書記劉捷調研螞蟻集團等企業2023-01-10
- 焦點觀察:乘聯會秘書長崔東樹:特斯拉降價2023-01-10
- 南充冬菜(宜賓芽菜配燃面味道一絕!本溪豆2023-01-10
- 北京天寧寺(天寧寺橋下空間提升利用試點探2023-01-10
- 【環球新視野】公司前線|嶺南股份新增“數2023-01-10
精彩推薦
- 熱資訊!大部地區將出現大范圍雨雪、大...
- 要聞速遞:平安i貸貸款逾期21年多久上征...
- 北水動向|北水成交凈賣出0.06億 內資無...
- 城投“驚雷”:誰為托底者托底?
- 世界今熱點:豪宅市場冰火兩重天,透露一...
- 天天百事通!華潤置地獲授35億港元定期...
- 上市房企重組首單細節曝光 陸家嘴三年...
- 今亮點!新城控股:2022年商業運營收入10...
- 招商蛇口開年“動刀”,重倉城市重新布陣
- 天天最新:吉大正元: 招商證券股份有限...
- 【天天新要聞】禹洲集團2022年銷售額356...
- 央行:2022年住戶貸款增加3.83萬億元
- 天天觀焦點:遠洋集團2022年協議銷售額1...
- 前沿熱點:央行:引導優質房企資產負債表...
- 全球快看點丨強冷空氣來襲!多地氣溫將...