NAT與內網穿透

dearmiku發表於2017-12-12

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,端對端通訊模型的破壞

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

NAT型別

1, Full Cone NAT(完全雛形NAT)

裝置比較少,一旦內部主機埠在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.323、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中繼服務會成為通訊瓶頸。而且在客戶端中增加探針功能要求每個應用都要增加程式碼才能支援。

相關文章