複製鏈接
請複製以下鏈接發送給好友

內網穿透

鎖定
內網穿透,也即 NAT 穿透,進行 NAT 穿透是為了使具有某一個特定源 IP 地址和源端口號的數據包不被 NAT 設備屏蔽而正確路由到內網主機。下面就相互通信的主機在網絡中與 NAT 設備的相對位置介紹內網穿透方法。 [1] 
UDP 內網穿透的實質是利用路由器上的NAT 系統。NAT 是一種將私有(保留)地址轉化為合法IP地址的轉換技術,它被廣泛應用於各種類型 Internet 接入方式和各種類型的網絡中。NAT可以完成重用地址,並且對於內部的網絡結構可以實現對外隱蔽。 [2] 
中文名
內網穿透 [1] 
外文名
Intranet penetration [1] 
學    科
計算機網絡 [3] 
如何進行
端口映射 [1] 
相關技術
UDP 內網穿透等 [2] 
釋    義
內部建立的局域網絡或辦公網絡

內網穿透工作原理

在整個音頻共享模塊中,UDP內網穿透技術是實現多個不同內網節點之間的UDP音頻流互相轉發的技術重點。音頻對講過程可分解為音頻壓縮、發送的輸出過程和音頻接收、解壓、播放的輸入過程。而多人音頻對講的過程實際上就是多個節點的系統中,兩兩節點之間的音頻流收發過程。在這裏無法直接處理的環節是每個參與音頻對講的節點作為服務器端接收其他節點發送過來的音頻流數據的輸入過程,因為大部分參與者都沒有自己的公網IP,這樣的內網節點直接在本地啓動一個接收音頻流的服務器線程,不在同一內網之內的其他節點無法直接連接到這個服務器。雖然可以通過在每個局域網和公網之間的路由器上添加端口映射將內網服務端口呈現在公網上,但這樣做涉及到要修改每個節點對應的路由器配的置以及權限等問題,不是理想可用的實現方法。使用UDP內網穿透技術,可以使一個普通的內網節點在需要時將自己的服務器端口自動的呈現在公網上,並且能夠讓系統內其他節點正確獲取這個音頻接收服務器的地址,以便其他節點能夠將自己的音頻流發送到這個音頻接收端口。 [2] 
內網穿透可以理解為一個專用信道,這個信道是由內網機器(Client)發起向外網服務器(Server)的連接,目的是使處於外網的客户端可以通過外網服務器訪問到內網的服務。 [4] 

內網穿透工作方式

網絡地址轉換(Network Address Translation,NAT)機制的問題在於,NAT設備自動屏蔽了非內網主機主動發起的連接,也就是説,從外網發往內網的數據包將被NAT設備丟棄,這使得位於不同NAT設備之後的主機之間無法直接交換信息。這一方面保護了內網主機免於來自外部網絡的攻擊,另一方面也為P2P通信帶來了一定困難。Internet上的NAT設備大多是地址限制圓錐形NAT或端口限制圓錐形 NAT,外部主機要與內網主機相互通信,必須由內網主機主動發起連接,使 NAT設備產生一個映射條目,這就有必要研究一下內網穿透技術。 [1] 
通信雙方一台位於 NAT 之後
圖1 圖1
一台主機有一個公網 IP,另一台主機有一個內網 IP。如圖1所示,Client A 位於 NAT 之後,並擁有[IP 地址:端口]對[10.0.0.1:1234],Client B位於 NAT 之前,並擁有[IP 地址:端口]對[138.76.29.7:1234],NAT 擁有公網 IP 155.99.25.11。由於 Client B 有一個公網 IP,Client A 可以直接通過 TCP 連接到[138.76.29.7:1234],然而,如果 Client B 向 Client A 發起主動連接,則不會成功。此時,需要一個公有的服務器輔助進行內網穿透。Client A 和 Client B 向服務器發起登陸請求,並保持一個 TCP 或 UDP 連接,服務器記錄其 IP 地址和端口號,這裏服務器對 Client A 是記錄其經過 NAT 映射之後的 IP 和端口號。當 Client B 想連接 Client A 時,首先向服務器提出請求,服務器在收到請求後向 Client A 發出打洞命令,並將 Client B 的[IP 地址:端口]對發給 Client A,Client A 根據接收到的 IP地址和端口號向 Client B 發起 TCP 連接或發送 UDP 數據包。接下來 Client A 和Client B 之間便可以建立數據傳輸通道。 [1] 
通信雙方主機均位於NAT設備之後
圖2 圖2
兩台主機都處於內網中,如圖2所示。服務器記錄的[IP 地址:端口]對是 Client A 和 Client B 經過 NAT 映射之後的IP 地址和端口號,此時,Client A 和 Client B 之間任意方向的連接請求都會被對方的 NAT 設備屏蔽。Client A 首先向服務器提出連接請求,服務器將 Client A 的 IP地址和端口號對[155.99.25.11:51200]發給 Client B,並向 Client B 發出打洞命令;Client B 收到服務器的打洞命令後首先向[155.99.25.11:51200]發送一定數目的 UDP探測包或 TCP 連接請求,在 NAT B 上打一個方向為[155.99.25.11:51200]的洞,Client B 隨後向服務器報告打洞完成;服務器在收到 Client B 的報告後將 Client B 的公網IP 地址和端口號對[110.10.33.10:5000],此時由於 NAT B 上已經留下了對應於[155.99.25.11:51200]方向的洞,Client A 向[110.10.33.10:5000]發出的數據包或連接請求將不會被丟棄。 [1] 

內網穿透穿透方法

傳統的NAT技術是通過將專用的網絡地址(如企業內部網Internet)轉換為公用地址(如互聯網Internet),從而對外隱藏了內部管理的IP地址。這樣,通過在內部使用非註冊的IP地址,並將它們轉換為一小部分外部註冊的IP地址,從而減少了IP地址註冊的費用以及節省了越來越缺乏的地址空間。同時,這也隱藏了內部網絡結構,從而降低了內部網絡受到攻擊的風險。 [3] 
NAT穿透的原理
圖3 圖3
圖3表示了NAT技術的穿透過程。NAT設備(或軟件)維護一個狀態表,用來把內部網絡的私有IP地址映射到外部網絡的合法IP地址上去。每個包頭中的IP地址和端口信息在NAT設備(或軟件)中都被修改並翻譯成一正確的IP地址發往下一級。當一個內網主機通過NAT打開一個“外出”的TCP或UDP會話時,NAPT分配給這個會話一個公網IP和端口,用來接收外網的響應的數據包,並經過轉換通知內部網的主機。這樣,NAPT在[私有IP:私有端口]和[公網IP:公網端口]之間建立了一個端口綁定。 [3] 

內網穿透實現流程

巧妙地利用NAT原理實現NAT內網穿透技術,就可以使內網服務器接收到外網數據包。內網穿透流程如下: [2] 
圖4 註冊收發接口 圖4 註冊收發接口
(1) 兩個需要通過內網穿透進行通訊的內網客户端,分別將自己的外網收發接口註冊給一個具有公網ip的中轉服務器,如圖4所示。 [2] 
圖5 告知對端的收發接口 圖5 告知對端的收發接口
(2) 中轉服務器將兩個客户端註冊的收發接口分別告知給對端,如圖5所示。 [2] 
圖6 發送打洞包 圖6 發送打洞包
(3) 一個內網客户端使自己的接收端口作為源地址,向對端的發送端口發送一個udp數據包,這個數據包稱為打洞包。發送過這個打洞包後,可以在這個內網的出口路由器上產生一條NAT記錄,令後續從對端發送端口發來的數據包都不被丟棄, 而是轉發給相應的內網客户端的指定端口,如圖6所示。 [2] 
圖7 對端發送來的音頻流數據包轉發至本端內網服務器端口 圖7 對端發送來的音頻流數據包轉發至本端內網服務器端口
(4) 發送過打洞包後,對端發送至本端路由器指定接收端口的數據包,就會根據NAT記錄轉發至本端的內網服務器接收端口,從而實現了內網服務器接收外網數據包的功能,如圖7所示。 [2] 
(5) 另一個內網服務器同樣執行上述步驟 (3) 、 (4), 即可實現兩端內網服務器相互收發音頻數據包的功能。 [2] 

內網穿透應用場景

內網穿透技術在很多場景下都有着廣泛的應用。下面介紹其中的一些常見的應用場景。 [5] 
1.遠程辦公
隨着互聯網的發展,越來越多的人選擇在家裏工作,但是在家裏工作時,常常需要訪問公司內部網絡中的資源,比如説文件服務器、郵件服務器等。這時,內網穿透技術就可以幫助在家裏訪問公司內部網絡中的資源,從而實現遠程辦公。
2.雲服務器訪問
在雲計算時代,很多應用都運行在雲服務器上。但是,在某些情況下,需要從本地訪問雲服務器上的應用。這時,內網穿透技術就可以幫助在本地訪問雲服務器上的應用,從而提高應用的可訪問性。
3.IoT設備訪問
在物聯網時代,越來越多的設備都連接到了互聯網上,比如説智能家居設備、智能車輛等。但是,在某些情況下,需要從外部網絡訪問這些設備。這時,內網穿透技術就可以協助在外部網絡訪問這些設備,從而提高設備的可訪問性。
4.遊戲服務端訪問
在遊戲開發中,遊戲服務端通常都運行在內部網絡中,但是,玩家需要從外部網絡訪問遊戲服務端。這時,內網穿透技術就可以幫助在外部網絡訪問遊戲服務端,從而提高遊戲的可訪問性。
參考資料