NAT與內網穿透

NAT是什麼

網絡地址轉換,就是替換IP報文頭部的地址信息.因爲IPv4地址有限,不可能爲每個上網設備分配一個ip,而NAT就是來解決這個問題的.咱們在上網時頗有可能處在一個NAT設備以後, NAT設備會在ip包經過時會修改其 源/目標IP地址,有時還會修改TCP/UDP協議的端口號,從而實現多臺設備使用同一外網IP進行互聯網通信服務器

NAT映射表.png

如上,三臺設備都使用120.131.92.21這一公網IP. 而對於這三臺設備分別從各自端口發出的TCP/UDP請求,則映射至NAT設備不一樣的端口上,記錄在NAT表上.這樣就區分了某個請求試試來自哪一個設備的哪一個端口上.網絡

NAT特色

1,網絡被分爲私網,公網兩部分,NAT網關設置私網到公網的路由出口. 2,網絡只能由私網側發起,公網沒法主動訪問私網主機(是這樣設計的,可是能夠經過打洞) 3,NAT網關在兩個訪問方向上完成兩次地址的轉換,出口替換源地址,入口替換目的地址 4,NAT網關的存在對通訊雙方保持透明 5,NAT網關爲了實現雙向翻譯,須要維持一張關聯表,將會話信息保存加密

NAT的反作用

1,NAT表的淘汰插件

當NAT表對應的記錄在一段時間內沒有通信時,網絡運營商就會將其淘汰掉,若此時外網還經過原來記錄的外網IP地址和內網設備進行通信則會不通.翻譯

2,NAT牆設計

當外界對內網的請求到達NAT設備時,若不符合NAT設備和NAT表的要求, 則會被丟棄,這樣若想實現ip地址不固定客戶端間通信則須要額外的打洞操做 (須要心跳包刷新NAT表重置時間)代理

3,端對端通訊模型的破壞cdn

NAT實現了將多個內部主機發出的連接被複用到一個ip上,這樣沒法基於ip對主機進行追蹤,這樣服務器不能簡單的將同一ip與主機掛鉤.這樣再統計信息和防止DDOS攻擊時都會變得複雜, 有時,若-個NAT設備擁有多個IP地址時,一組關聯的會話可能會被分配到不一樣公網ip裏,總之NAT隱蔽了通信的另外一端.中間件

NAT類型

1, Full Cone NAT(徹底雛形NAT)blog

設備比較少,一旦內部主機端口在NAT網關完成端口映射,則後續外網任一主機均可以經過這映射好的端口進行訪問

2, Restricted Cone NAT (限制雛形NAT)

相較與全雛形NAT,在完成端口映射後,對IP地址有限制,只有內網對外訪問過的ip地址才能夠對該端口進行鏈接

3, Port Restricted Cone NAT(端口限制雛形NAT)

相較於限制雛形NAT,在端口上也加以限制, 只有內網向該ip與端口發送過信息才能對其訪問

4, Symmetric NAT (對稱NAT)

也就是說,雖然是同一個內網主機,對不一樣的外網ip+端口訪問時,在NAT表上會映射成不一樣的端口號

注意:

事實上,這些術語的引入是不少混淆的起源。現實中的不少NAT設備是將這些轉換方式混合在一塊兒工做的,而不僅僅使用一種,因此這些術語只適合描述一種工做方式,而不是一個設備。好比,不少NAT設備對內部發出的鏈接使用對稱型NAT方式,而同時支持靜態的端口映射,後者能夠被看做是全錐型NAT方式。而有些狀況下,NAT設備的一個公網地址和端口能夠同時映射到內部幾個服務器上以實現負載分擔,好比一個對外提供WEB服務器的站點多是有成百上千個服務器在提供HTTP服務,可是對外卻表現爲一個或少數幾個IP地址。

內網穿透

應用層網管(ALG)

普通NAT實現了對UDP或TCP報文頭中的的IP地址及端口轉換功能,但對應用層數據載荷中的字段無能爲力,在許多應用層協議中,好比多媒體協議(H.32三、SIP等)、FTP、SQLNET等,TCP/UDP載荷中帶有地址或者端口信息,這些內容不能被NAT進行有效的轉換,就可能致使問題。而NAT ALG(Application Level Gateway,應用層網關)技術能對多通道協議進行應用層報文信息的解析和地址轉換,將載荷中須要進行地址轉換的IP地址和端口或者需特殊處理的字段進行相應的轉換和處理,從而保證應用層通訊的正確性。

例如,FTP應用就由數據鏈接和控制鏈接共同完成,並且數據鏈接的創建動態地由控制鏈接中的載荷字段信息決定,這就須要ALG來完成載荷字段信息的轉換,以保證後續數據鏈接的正確創建。

圖片.png

圖中私網側的主機要訪問公網的FTP服務器。NAT設備上配置了私網地址192.168.1.2到公網地址8.8.8.11的映射,實現地址的NAT轉換,以支持私網主機對公網的訪問。組網中,若沒有ALG對報文載荷的處理,私網主機發送的PORT報文到達服務器端後,服務器沒法根據私網地址進行尋址,也就沒法創建正確的數據鏈接。整個通訊過程包括以下四個階段:

(1) 私網主機和公網FTP服務器之間經過TCP三次握手成功創建控制鏈接。

(2) 控制鏈接創建後,私網主機向FTP服務器發送PORT報文,報文中攜帶私網主機指定的數據鏈接的目的地址和端口,用於通知服務器使用該地址和端口和本身進行數據鏈接。

(3) PORT報文在通過支持ALG特性的NAT設備時,報文載荷中的私網地址和端口會被轉換成對應的公網地址和端口。即設備將收到的PORT報文載荷中的私網地址192.168.1.2轉換成公網地址8.8.8.11,端口1084轉換成12487。

(4) 公網的FTP服務器收到PORT報文後,解析其內容,並向私網主機發起數據鏈接,該數據鏈接的目的地址爲8.8.8.11,目的端口爲12487(注意:通常狀況下,該報文源端口爲20,但因爲FTP協議沒有嚴格規定,有的服務器發出的數據鏈接源端口爲大於1024的隨機端口,如本例採用的是wftpd服務器,採用的源端口爲3004)。因爲該目的地址是一個公網地址,所以後續的數據鏈接就可以成功創建,從而實現私網主機對公網服務器的訪問。

總而言之,在ALG中配置的支持的協議,能夠實現逆向訪問

中間件技術

這也是一種經過開發通用方法解決NAT穿越問題的努力。與前者不一樣之處是,NAT網關是這一解決方案的參與者。與ALG的不一樣在於,客戶端會參與網關公網映射信息的維護,此時NAT網關只要理解客戶端的請求並按照要求去分配轉換表,不須要本身去分析客戶端的應用層數據。其中UPnP就是這樣一種方法。UPnP中文全稱爲通用即插即用,是一個通用的網絡終端與網關的通訊協議,具有信息發佈和管理控制的能力。其中,網關映射請求能夠爲客戶動態添加映射表項。此時,NAT再也不須要理解應用層攜帶的信息,只轉換IP地址和端口信息。而客戶端經過控制消息或信令發到公網側的信息中,直接攜帶公網映射的IP地址和端口,接收端能夠按照此信息創建數據鏈接。NAT網關在收到數據或鏈接請求時,按照UPnP創建的表項只轉換地址和端口信息,不關心內容,再將數據轉發到內網。這種方案須要網關、內部主機和應用程序都支持UPnP技術,且組網容許內部主機和NAT網關之間能夠直接交換UPnP信令才能實施。

中繼代理技術

準確說它不是NAT穿越技術,而是NAT旁路技術。簡單說,就是在NAT網關所在的位置旁邊放置一個應用服務器,這個服務器在內部網絡和外部公網分別有本身的網絡鏈接。客戶端特定的應用產生網絡請求時,將定向發送到應用代理服務器。應用代理服務器根據代理協議解析客戶端的請求,再從服務器的公網側發起一個新的請求,把客戶端請求的內容中繼到外部網絡上,返回的相應反方向中繼。這項技術和ALG有很大的類似性,它要求爲每一個應用類型部署中繼代理業務,中間服務器要理解這些請求。

特定協議的自穿越技術

在全部方法中最複雜也最可靠的就是本身解決本身的問題。好比IKE和IPsec技術,在設計時就考慮了到如何穿越NAT的問題。由於這個協議是一個自加密的協議而且具備報文防修改的鑑別能力,其餘通用方法心有餘而力不足。由於實際應用的NAT網關基本都是NAPT方式,全部經過傳輸層協議承載的報文能夠順利經過NAT。IKE和IPsec採用的方案就是用UDP在報文外面再加一層封裝,而內部的報文就再也不受到影響。IKE中還專門增長了NAT網關是否存在的檢查能力以及繞開NAT網關檢測IKE協議的方法。

探針技術STUN和TURN

所謂探針技術,是經過在全部參與通訊的實體上安裝探測插件,以檢測網絡中是否存在NAT網關,並對不一樣NAT模型實施不一樣穿越方法的一種技術。STUN服務器被部署在公網上,用於接收來自通訊實體的探測請求,服務器會記錄收到請求的報文地址和端口,並填寫到回送的響應報文中。客戶端根據接收到的響應消息中記錄的地址和端口與本地選擇的地址和端口進行比較,就能識別出是否存在NAT網關。若是存在NAT網關,客戶端會使用以前的地址和端口向服務器的另一個IP發起請求,重複前面的探測。而後再比較兩次響應返回的結果判斷出NAT工做的模式。由前述的一對多轉換模型得知,除對稱型NAT之外的模型,NAT網關對內部主機地址端口的映射都是相對固定的,因此比較容易實現NAT穿越。而對稱型NAT爲每一個鏈接提供一個映射,使得轉換後的公網地址和端口對不可預測。此時TURN能夠與STUN綁定提供穿越NAT的服務,即在公網服務器上提供一個「地址端口對」,全部此「地址端口對」接收到的數據會經由探測創建的鏈接轉發到內網主機上。TURN分配的這個映射「地址端口對」會經過STUN響應發給內部主機,後者將此信息放入創建鏈接的信令中通知通訊的對端。這種探針技術是一種通用方法,不用在NAT設備上爲每種應用協議開發功能,相對於ALG方式有必定廣泛性。可是TURN中繼服務會成爲通訊瓶頸。並且在客戶端中增長探針功能要求每一個應用都要增長代碼才能支持。

相關文章
相關標籤/搜索