一文詳解負載均衡和反向代理的真實區別

來自:知乎,作者:蹦蹦啪
鏈接:https://www.zhihu.com/question/20553431/answer/130698230

一、SLB產生背景

SLB(服務器負載均衡):在多個提供相同服務的服務器的情況下,負載均衡設備存在虛擬服務地址,當大量客戶端從外部訪問虛擬服務IP地址時,負載均衡設備將這些報文請求根據負載均衡算法,將流量均衡的分配給後臺服務器以平衡各個服務器的負載壓力,避免在還有服務器壓力較小情況下其他服務達到性能臨界點出現運行緩慢甚至宕機情況,從而提高服務效率和質量。因此對客戶端而言,RS(real server 實際服務器)的IP地址即是負載均衡設備VIP(虛擬服務地址IP)地址,真正的RS服務器IP地址對於客戶端是不可見的。

二、SLB 的三種傳輸模式

七層SLB和四層SLB的區別:四層SLB:配置負載均衡設備上服務類型爲tcp/udp,負載均衡設備將只解析到4層,負載均衡設備與client三次握手之後就會和RS建立連接;七層SLB:配置負載均衡設備服務類型爲 http/ftp/https 等,負載均衡設備將解析報文到7層,在負載均衡設備與client三次握手之後,只有收到對應七層報文,纔會跟RS建立連接。在負載均衡設備中,SLB主要工作在以下的三種傳輸模式中:

  • 反向代理模式
  • 透傳模式
  • 三角模式

根據不同的模式,負載均衡設備的工作方式也不盡相同,但無論在哪種模式下,客戶端發起的請求報文總是需要先到達負載均衡設備進行處理,這是負載均衡設備正常工作的前提。模擬網絡拓撲環境:

  • Client:10.8.21.40
  • 負載均衡設備:172.16.75.83
  • VIP:172.16.75.84
  • RS1IP:172.16.75.82
  • RS2IP:172.16.75.85

在整個報文交互過程中,採用 Tcpdump 和 Wireshark 分別在 RS 和 Client 處抓包,然後使用 Wireshark 進行報文解析。

三、 反向代理模式

反向代理:普通的代理設備是內網用戶通過代理設備出外網進行訪問,而工作在這種模式下的負載均衡設備,則是外網用戶通過代理設備訪問內網,因此稱之爲反向代理。在反向代理模式下:當負載均衡設備收到客戶端請求後,會記錄下此報文( 源IP地址、目的IP地址、協議號、源端口、目的端口,服務類型以及接口索引),將報文目的地址更改爲優選後的RS設備的IP地址,目的端口號不變,源地址修改爲負載均衡設備下行與對應RS設備接口的IP地址,源端口號隨機發送給RS;當RS收到報文後,會以源爲RS接口IP地址,目的IP設備地址回覆給負載均衡設備,負載均衡設備將源修改爲VIP,目的端口號修改爲客戶端的源端口號,目的IP修改爲Client的源IP回覆報文。查看報文解析結果:配置完成後,Client 訪問 RS 服務器,返回成功,整個報文交互過程如下 :

Client和負載均衡設備之間的報文交互過程

RS和負載均衡設備之間報文交互過程結果分析分析整個報文交互過程:TCP握手過程:首先Client向負載均衡設備發送TCP SYN報文請求建立連接,源IP爲Client的IP 10.8.21.40,源端口號50894,目的IP爲VIP地址172.16.75.84,目的端口號80;收到請求報文後,負載均衡設備會以源IP爲VIP地址172.16.75.84,端口號80,目的IP 10.8.21.40,目的端口號50894迴應SYN ACK報文;Client收到報文後回覆ACK報文,TCP三次握手成功。HTTP報文交互過程:當負載均衡設備與client完成三次握手後,因爲配置的七層SLB,如果收到HTTP請求,就會根據負載均衡算法和服務器健康狀態優選出對應的RS(在這次過程中選擇的RS設備爲172.16.75.82),然後與RS建立TCP連接:負載均衡設備發送 TCP SYN 報文請求連接,源IP爲負載均衡設備與RS相連接口IP 172.16.75.83,源端口號隨機4574,目的IP爲RS的IP 172.16.75.82,目的端口號80;RS 收到報文後,以源 IP 172.16.75.82,端口號80,目的IP 172.16.75.83,目的端口號4574回覆SYN ACK報文,負載均衡設備回覆ACK報文建立三次握手;之後,負載均衡設備再將收到的HTTP報文源IP修改爲與RS相連下行接口IP地址172.16.75.83,源端口號爲隨機端口號,將報文發送給RS;當RS收到報文後,使用源爲本地IP 172.16.75.82,目的IP爲172.16.75.83進行回覆,所以報文直接回復給負載均衡設備;當負載均衡設備收到RS的迴應報文後,將報文的源修改爲VIP地址172.16.75.84,目的IP爲10.8.21.40發送回 Client,再將目的端口號修改爲HTTP請求報文中的源端口號,服務器訪問成功。

由上述的過程可以看出,在RS端上,client的真實IP地址被負載設備修改成與RS相連接口的IP地址,所以RS無法記錄到Client的訪問記錄,爲了解決這個問題,可以採用在HTTP報文頭中添加X-Forwarded-For字段,本文不做贅述,可以自行查詢。

四、透傳模式

當負載均衡設備工作在透傳模式中時,RS無法感知到負載均衡設備的存在,對於Client來說,RS的IP地址就是負載均衡設備的VIP地址。在這種模式下,當負載均衡設備收到源爲 Client 的 IP,目的 IP 爲本地 VIP 地址的報文時,會將報文根據負載均衡策略和健康狀況發送給最優的 RS 設備上,繼而RS設備會收到目的爲本地IP,源爲Client實際IP的請求報文;然後RS將會直接回應此請求,報文的目的 IP 地址爲 Client 的 IP 地址,當負載均衡設備收到此報文後,將源 IP 地址修改爲 VIP 地址,然後將報文發送給 Client。報文解析結果:同樣在 RS 端和 Client 端抓取交互報文:

Client 和負載均衡設備之間的報文交互過程

RS和負載均衡設備之間的報文交互過程

結果分析:

TCP握手過程:同反向代理模式交互過程

HTTP報文交互過程:

Client向負載均衡設備的VIP地址172.16.75.84以源IP 10.8.21.40發送HTTP請求,當負載均衡設備收到報文後,與優選後的RS進行TCP三次握手,過程同反向代理模式,然後將收到的HTTP報文,不改變報文的源IP地址和源/目的端口號,只修改目的IP修改爲優選後的RS地址172.16.75.82;

當RS收到源來自IP 10.8.21.40的報文後,回覆報文給IP地址10.8.21.40,此時要注意,必須在RS上配置回覆報文經過負載均衡設備,負載均衡設備會將源IP修改爲VIP地址172.16.75.84,然後轉發給Client,否則Client將會收到源IP爲172.16.75.82的HTTP報文,服務器訪問失敗。

五、 三角模式

在三角模式下,當客戶端發送請求到負載設備上時,負載均衡設備會計算出最優RS,然後直接根據MAC地址將報文轉發給RS,在RS上配置報文的源IP爲VIP地址(一般配置在loopback口上),因此在這種情況下,RS會直接將報文發送給Client,即使回覆報文經過負載均衡設備,此設備不做任何處理。由於報文在整個過程中傳輸途徑類似於三角形,因此稱之爲三角模式。報文解析結果分別在Client端和RS端抓包,內容如下:

Client和負載均衡設備之間的報文交互過程

RS 和負載均衡設備之間的報文交互過程

結果分析

TCP握手過程:由於採用了4層SLB,所以在TCP握手過程中與上述的7層SLB有些不同,當Client和RS完成三次握手之後,此時負載均衡設備會直接選擇RS,然後跟RS建立TCP三次握手;在三角模式環境中,由於RS的Loopback口和負載均衡設備上都存在着VIP地址172.16.75.84,當負載均衡設備經過負載均衡算法選擇出對應的RS後,會根據實際配置的RS的IP地址對應的mac地址,將報文以目的mac爲RS,目的IP爲VIP的方式建立TCP連接。HTTP報文交互過程:

首先Client向負載均衡設備的VIP發送HTTP請求,源爲10.8.21.40,當負載均衡設備收到報文後,將報文直接轉發給RS,當RS收到源IP爲10.8.21.40,目的IP爲本地Loopback口IP地址172.16.75.84的報文後,直接將報文回覆給10.8.21.40,同樣源爲IP地址172.16.75.84,由此訪問服務器成功。在三角模式中,由於回覆報文負載均衡設備不做任何處理,所以非常適合於RS到Client方向流量較大或者連接數目較多的組網環境。採用三角模式時,必須注意RS有路由可以到達Client,並且在RS的Loopback接口上必須有負載均衡設備的VIP地址,否則即使RS設備收到Client的請求報文也會直接丟棄報文,不作迴應。

六、總結

由於反向代理模式中在RS側只能收到源爲負載均衡設備IP的報文,因此可以使用防火牆增加安全性,只允許源IP爲負載均衡設備的IP地址的報文通過,同時增加X-Forwarded-For字段也可以讓RS只允許有此字段的報文進行訪問,因此安全性相對較高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章