什么是STUN?


什么是STUN?

轉載於:https://info.support.huawei.com/info-finder/encyclopedia/zh/STUN.html

P2P網絡要求通信雙方都能主動發起訪問,但是NAT設備的存在,卻阻斷了這種主動訪問,導致P2P應用無法正常運行。STUN是一種解決P2P應用NAT穿越問題的常用技術。它允許網絡設備找出通信端點經NAT設備后的IP地址和端口號,並利用這些信息在通信雙方之間建立一條可以穿越NAT設備的數據通道,實現P2P通信。

為什么需要STUN?

隨着IPv4地址的枯竭,NAT功能部署越來越廣泛。為了避免來自外部網絡的攻擊,保護網絡內部的主機,NAT會過濾掉一些外網主動發送到內網的報文。因此,NAT技術雖然在一定程度上解決了IPv4地址短缺的問題,卻破壞了點到點P2P(Point to Point)網絡的通信。因為在P2P網絡中要求通信雙方都能主動發起訪問,而NAT設備的存在卻阻斷了這種主動訪問。

為了解決NAT設備給P2P網絡帶來的問題,出現了一些適用於P2P網絡的NAT穿越技術。例如反向鏈接技術、應用層網關ALG(Application Level Gateway)技術、打洞技術(Hole Punching)、中間件技術等。

NAT會話穿越應用程序STUN(Session Traversal Utilities for NAT)是一種由RFC定義的網絡協議,用於檢測網絡中是否存在NAT設備,並獲取兩個通信端點經NAT設備分配的IP地址和端口號。然后在兩個通信端點之間建立一條可穿越NAT的P2P鏈接,實現P2P通信,這一過程也被形象的稱為“打洞”。STUN無需現有NAT設備做任何改動,只需在組網中部署一台STUN服務器,操作起來比較簡單,因此得到廣泛應用。

什么是STUN服務器?

STUN采用客戶端/服務器通信模式,由STUN服務器(STUN Server)組成和STUN客戶端(STUN Client)組成,其中:

  • STUN服務器:是一個發送STUN綁定響應和接受STUN綁定請求的實體,例如路由器,STUN服務器通常部署在公網上。
  • STUN客戶端:是一個發送STUN綁定請求和接受STUN綁定響應的實體,例如路由器。
STUN典型組網

STUN典型組網

在STUN標准中,根據私網IP地址和端口到NAT出口的公網IP地址和端口的映射方式,把NAT分為完全錐型NAT、限制錐型NAT、端口限制錐型NAT及對稱NAT四種類型。為了方便用戶理解這4種NAT類型,我們把這4種NAT類型的介紹放在了NAT里,詳細信息請參見相關詞條NAT。

STUN如何工作?

通過STUN客戶端與STUN服務器之間的報文交互,STUN服務器可以發現NAT設備的存在,並獲取NAT設備分配給STUN客戶端的IP地址和端口號,在STUN客戶端之間建立一條數據通道。STUN客戶端之間建立好數據通道之后,客戶端之間可以相互訪問。STUN的報文交互流程包含NAT探測和打洞兩個階段,詳細的交互過程如下圖所示。

STUN報文交互過程
STUN報文交互過程

NAT探測階段

  1. STUN客戶端向STUN服務器發送STUN綁定請求報文(Binding Request)。
  2. STUN服務器收到綁定請求報文后,獲取請求報文中的源IP地址和源端口,並構建STUN綁定響應報文(Binding Response)發送給客戶端。報文中攜帶MAPPED-ADDRESS、XOR-MAPPED-ADDRESS、RESPONSE-ORIGIN屬性。
  3. STUN客戶端收到STUN綁定響應報文后,根據該報文中的MAPPED-ADDRESS或XOR-MAPPED-ADDRESS屬性,獲取IP地址和端口,與之前發送的STUN綁定請求報文中的源IP地址和源端口比較,如果不一致,則STUN客戶端前面存在NAT設備。確定探測結果后,STUN客戶端將結果返回給有需要的業務模塊。

打洞階段

打洞是指通過中間設備(如路由反射器)的協助在各自的NAT網關上建立相關表項,使P2P連接雙方發送的報文能夠直接穿透NAT網關的過程。NAT STUN的打洞流程如下:

  1. STUN客戶端通過BGP從路由反射器處獲得其他STUN客戶端的接口信息(包括NAT前后的IP地址和端口信息)。當Client1需要與Client2進行通信時,Client1會通過BGP通知Client2,它們之間需要通過打洞建立數據通道。
  2. Client1與Client2互相發送STUN綁定請求進行打洞。Client1使用本端NAT前的IP地址和端口分別與Client2 NAT前和NAT后的IP地址和端口構建STUN綁定請求報文A和B發送給Client2。同時,Client2也同樣進行相應的操作。
  3. Client2收到報文A和B后,處理流程如下,Client1也類似:
    1. 對於報文A,若Client1與Client2在同一個私網中,也就是同一個NAT設備后側,則報文A可以成功發送至Client2,否則報文A被丟棄。
    2. 對於Client1發出的報文B,經Client1前面的NAT設備1時會生成表項,記錄Client1到Client2的會話,但是由於Client2前的NAT設備2上沒有相關表項,報文B將會被丟棄。
    3. 同樣的,對於Client2發出的報文B,經Client2前面的NAT設備2上將會生成表項,記錄Client2到Client1的會話,但是由於Client1前的NAT設備1上沒有相關表項,報文B也會被丟棄。
    4. Client1和Client2持續向對方發送綁定請求報文,當NAT設備1與NAT設備2上的會話表項都生成后,綁定請求報文就可以成功發送至對端Client。
  4. Client2收到STUN綁定請求報文后,向Client1發送STUN綁定響應報文,Client1也同樣進行相應的操作。

完成以上報文交互后,STUN客戶端之間成功建立可穿越NAT的數據通道。

STUN如何在SD-WAN網絡中應用?

SD-WAN解決方案中,為了節省IP地址資源,分支站點的用戶經常會使用私網IP地址,通過NAT轉換后訪問總部。因此,分支的網關CPE經常會和NAT設備一起部署。網關CPE發出的報文在經過NAT設備后,IP地址會發生變化,如果無法獲取報文轉換后的IP地址,則CPE之間的數據通道會建立失敗。因此,為了實現分支之間業務流量穿越NAT,需要在SD-WAN場景中部署NAT STUN功能。

SD-WAN的NAT穿越場景
SD-WAN的NAT穿越場景

在SD-WAN 的NAT穿越組網中,路由反射器RR(Route Reflector)及分支CPE通過管理通道,向網絡控制器iMaster NCE發起注冊信息。注冊成功后,RR和CPE被iMaster NCE納管。CPE通過管理通道,向RR發布站點、路由、隧道、NAT轉換前后的IP地址和端口號等信息,統稱為TNP(Transport Network Port)。分支CPE1與分支CPE2之間通過數據通道,傳輸它們之間的業務流量。

由於CPE1和CPE2前面都部署了NAT設備,為了實現CPE1和CPE2之間的業務互通,需要在RR和CPE上部署NAT STUN功能,探測CPE之間是否有NAT設備。並獲取CPE1、CPE2設備經NAT轉換后的IP地址和端口號,建立數據通道,轉發它們之間的業務流量。

分支CPE作為STUN客戶端,RR作為STUN服務器,它們之間的交互過程如下:

    1. 分支CPE向RR發起STUN探測請求,發送STUN綁定請求報文。
    2. RR給分支CPE回應STUN探測請求,發送STUN綁定響應報文。
    3. CPE收到RR的STUN綁定響應報文后,判斷CPE設備前是否有NAT設備。
    4. 探測成功后,CPE將自己的TNP信息通過BGP協議發送給RR,並通過RR獲取其他CPE的TNP信息。TNP信息里包含了CPE設備經NAT轉換前和轉換后的IP地址及端口號。
    5. 獲取到TNP信息后,CPE之間使用各自NAT轉換后的IP地址和端口號建立數據通道,傳輸分支之間的業務流量。    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM