TR111與STUN


TR111的實現是基於STUN協議(Simple Traversal of UDP over NATs),由RFC3489制定,現已由RFC5389替代。STUN是通過client 和公網里的STUN server發送binding request/response來確定client的具體NAT類型。
 
 
STUN是一個簡單的客戶端 - 服務器協議。客戶端發送一個請求到一台服務器,而服務器返回一個響應。
有兩種類型的請求:
綁定請求(通過UDP發送)和共享密鑰請求(發送TLS (通過TCP)) 。
共享秘密請求服務器返回一個臨時的用戶名和密碼。此用戶名和密碼用於在隨后的綁定請求和綁定響應,身份驗證和消息完整性的目的。
准備工作:1台STUN client 在內網, 1台STUN server在公網,但它有兩個IP地址sever_IP1和server_IP2。
Test I
1.客戶端發送一個STUN綁定請求到服務器地址server_IP1,在STUN數據包屬性CHANGE-REQUEST中在不設置任何標志,並且沒有 RESPONSE-ADDRESS屬性。這會導致服務器會從接收請求的的地址和端口發送響應返回給客戶端。
2.如果這個測試沒有response,那只有兩種可能:1、STUN服務器不存在,或者你弄錯了port。2、你的NAT設備拒絕一切UDP包從外部向內部通過(不支持cone NAT)。如果測試產生了一個response,client檢查收到的UDP響應包的MAPPED-ADDRESS屬性 。如果這個地址、端口和本地IP地址、端口是相同的,客戶端知道它不是在NAT后面了。就繼續進行Test II(請跳到Test II部分看)去偵測防火牆的類型,如果IP地址不同的話,就知道自己是在NAT的后面,繼續進行第3步
3.client發送一個帶有同時設置“change IP”和“change port” 的CHANGE-REQUEST屬性的綁定請求到STUN server_IP1, 請求STUN server 用不同於第1步中的地址和端口來響應該請求(所以STUN server要准備兩個不同的IP地址)。如果client  收到了STUN server用server_IP2地址和port2端口發送來的UDP數據包,那說明什么?說明NAT來着不拒,不對數據包進行任何過濾,這也就是STUN標准中的full cone NAT。遺憾的是,full cone nat太少了,這也意味着你能收到這個數據包的可能性不大。如果沒收到,那么系統進行STEP4的操作。
4.client向STUN server的server_IP2地和port2端口發送一個數據包,server收到數據包后,把它收到包的源IP和port寫到UDP包中,然后通過自己的server_IP2和port2把此包發還給client。和step1一樣,client肯定能收到這個回應UDP包。此包中的port是我們最關心的數據,下面我們來分析:
如果這個port和step1中的port一樣,那么可以肯定這個NAT是個CONE NAT,否則是對稱NAT。道理很簡單:根據對稱NAT的規則,當目的地址的IP和port有任何一個改變,那么NAT都會重新分配一個port使用,而在step4中,和step1對應,我們改變了IP和port。因此,如果是對稱NAT,那這兩個port肯定是不同的。
如果在你的應用中,到此步的時候PORT是不同的,恭喜你,你的STUN已經死了。如果相同,那么只剩下了address restricted cone 和port restricted cone。進入step5。
STEP5:client向server的server_IP2地址的一個端口PD發送設置“change port” 的CHANGE-REQUEST屬性的綁定請求,要求server用server_IP2地址和不同於PD的port返回一個數據包給client。
我們來分析結果:如果client收到了,那也就意味着只要IP相同,即使port不同,NAT也允許UDP包通過。顯然這是address restricted cone NAT。如果沒收到,沒別的好說,port restricted  NAT.
Test II
client發送一個帶有同時設置“change IP”和“change port” 的CHANGE-REQUEST屬性的綁定請求到STUN server_IP1, 請求STUN server 用不同於第1步中的地址和端口來響應該請求。如果client  收到了STUN server用server_IP2地址和port2端口發送來的UDP數據包,那說明什么?說明NAT來着不拒,不對數據包進行任何過濾,客戶端知道它是開放互聯網(或者,至少在一個有一個防火牆其行為像全錐型NAT ,但是沒有轉發)。如果client沒有收到響應,就知道它是在對稱的UDP防火牆后面(主機出口處沒有NAT設備,但有防火牆,且防火牆規則如下:從主機UDP端口A發出的數據包保持源地址,但只有從之前該主機發出包的目的IP/PORT發出到該主機端口A的包才能通過防火牆)。
 
 
 


免責聲明!

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



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