tft每日頭條

 > 生活

 > nat限制如何突破

nat限制如何突破

生活 更新时间:2025-03-05 01:17:11
NAT是什麼?

NAT是Net Address Translation的縮寫,即網絡地址轉換

NAT部署在網絡出口的位置,位于内網跟公網之間,是連接内網主機和公網的橋梁,雙向流量都必須經過NAT,裝有NAT軟件的路由器叫NAT路由器,NAT路由器擁有公網IP。

nat限制如何突破(深入理解NAT和NAT穿透)1

你的家庭和辦公網絡環境大多是經過NAT路由中轉的方式聯網。這也意味着你在家PC通過WIFI聯網,你在PC上通過命令行(ifconfig)查看到的IP地址(内網),跟通過baidu查看到的IP地址(公網),不一樣,這也能證明你的PC處于NAT後面。

NAT解決什麼問題?

NAT主要用來解決IPv4地址不夠用的問題。

IPv4用32位表示網絡地址,最大能表示2的32次方(2^32=40億)個IP地址,但随着各種聯網設備的快速增長,IPv4地址不夠用了,IPv6又遠水不解近渴,怎麼辦?NAT技術應運而生。

NAT是怎麼工作的?

内網地址:RFC1918規定了三個保留地址段落:

10.0.0.0-10.255.255.255;

172.16.0.0-172.31.255.255;

192.168.0.0-192.168.255.255。

這三個範圍分别處于A、B、C類的地址段,不向特定的用戶分配,被IANA作為私有地址保留。這些地址可以在任何組織或企業内部使用,和其他Internet地址的區别就是,僅能在内部使用,不能作為全球路由地址。

NAT後面的内網主機使用内網地址,也叫本地地址,是主機上内網上的标識。内網主機要跟公網通信,必須經過NAT中轉,NAT會自動為經過的網絡包做内外網地址轉換(這也是NAT的含義),公網地址是主機在互聯網上的标識

NAT原理:内網主機向外網主機發送的網絡包,在經過NAT時,IP和PORT會被替換為NAT為該主機分配的外網IP/PORT,也就是該内網主機在NAT上的出口IP/PORT,外網主機收到該網絡包後,會視該網絡包是從NAT發送的;外網主機隻能通過NAT為該内網主機分配的外網IP/PORT,向它發送網絡包,内網主機的本地地址對外界不可見,網絡包在經過NAT的時候,會被NAT做外網IP/PORT到内網IP/PORT的轉換。

可見,NAT維護内網主機内網地址和在NAT上為它分配的外網地址之間的映射關系,需要維護一張關聯表。NAT在兩個傳輸方向上做兩次地址轉化,出方向做源(Src)信息替換,入方向做目的(Dst)信息替換,内外網地址轉換是在NAT上自動完成的。NAT網關的存在對通信雙方是透明的。

那NAT是如何緩解IPv4地址枯竭問題的呢?答案是端口多路複用,通過PAT(Port Address Translation),讓NAT背後的多台内網主機共享一個外網IP,最大限度節省外網IP資源。

NAT背後的多台内網主機是如何實現共享一個外網IP的呢?它是通過修改外出數據包的源IP和端口。

假設内網主機H1和H2位于NAT之後,H1通過本地地址10.0.0.1:port1給公網主機X發送數據包,在經過NAT的時候,該數據包的IP:PORT被修改為NAT的外網地址1.2.3.4:2222。

H2通過本地地址10.0.0.2:port2向公網主機X發送數據包,在經過NAT的時候,該數據包的ip:port被修改為NAT的外網1.2.3.4:3333。

nat限制如何突破(深入理解NAT和NAT穿透)2

雖然H1和H2的IP都被映射到了相同的NAT外網IP(1.2.3.4),但NAT為它們分配了不同的端口(2222和3333),所以可以通過端口區分H1和H2。之後公網主機X向内網主機H1發送網絡包的時候,隻需要把1.2.3.4:2222作為目标地址:端口,就可以由NAT自動完成轉換,正确轉交到H1主機。

這便是基于端口複用的NAT方式(NPAT)的工作原理。通過将内網不同連接(主機到NAT)映射到同一公網IP的不同端口,從而實現公網IP的複用和解複用,這種一對多的方式也叫做端口轉換PAT或IP僞裝。

NAT的限制和約束

NAT把網絡分為公網和内網,内網主機可以給外網主機直接發送網絡包,而外網主機卻不能主動給内網主機發送網絡包,也就是說網絡通信必須由内網側主動發起,公網主機不能主動訪問内網主機,這是NAT帶來的限制和約束。

内網主機主動給外網主機發送過網絡包之後,外網主機才有可能給内網主機發送網絡包。

NAT的類型

NAT的實現方式分靜态轉換動态轉換端口多路複用三種,但目前用的最多的還是端口多路複用,是最典型的一種應用模式。

nat限制如何突破(深入理解NAT和NAT穿透)3

首先,從大的層面上,端口複用型NAT(Net Address Port Translation)可以分為對稱型NAT和非對稱型NAT。

  1. 對稱型NAT(Symmetric NAT),内網某主機向公網的不同網絡地址(或端口)發送2個不同的網絡包,對稱型NAT會為這2個不同的網絡包産生2個不同出口端口号。換言之,NAT網關會把内部主機“地址端口對”和外部主機“地址端口對”完全相同的報文看作一個連接,在NAT網關上創建一個公網“地址端口對”作為出口地址,隻有收到報文的外部主機從對應的端口對發送回應的報文,才能被轉換。對稱型NAT無法打洞,隻能通過TURN server轉發。
  2. 非對稱型NAT(也叫錐型NAT),内網某主機向外網主機發送網絡包,NAT會為該内網主機生成一個公網(出口)IP:PORT,之後,不管該内網主機會通過該出口IP:PORT跟外網所有(如果可以)主機通信,而不會被映射到其他端口(出口IP顯然也不會變)。

錐型NAT細分:

  1. Full Cone NAT(全錐型NAT):隻要内網某主機給外網地址主動發送過一個網絡包(NAT會為之生成公網出口IP:PORT),外網任何主機都可以通過該内網主機在NAT上的出口IP:PORT,向該内網主機發送網絡包,也就是對外網主機IP和PORT都不設限,這是最寬松的類型。
  2. Restricted Cone NAT(IP受限型NAT):如果内網某主機,給外網某IP發送過一個網絡包,則外網可以通過該IP向該内網主機發送網絡包,注意,隻要以該IP作為網絡包src ip就行,其他IP作為src不行,不限制端口号。
  3. 舉個例子,内網主機10.0.0.1給外網1.2.3.4:2222主動發過網絡包,外網主機可以通過1.2.3.4:3333(作為src)向内網主機10.0.0.1發送網絡包,端口号不限,但不能通過其他ip向内網主機發送網絡包。
  4. Port Restricted Cone NAT(Port受限型NAT):跟IP受限類似,但是它更嚴格,既限制IP,又限制端口号。内網主機給外網主機10.0.0.1:2222發送過網絡包,外網隻能以10.0.0.1:2222為src,向内網主機發送網絡包。
NAT類型檢測

NAT隔離内外網,外網不能主動訪問内網,但P2P項目,需要位于NAT後的主機(Peer)建立連接,所以需要檢測NAT類型,再判斷Peer之間能否直接建立連接,以及怎麼建立連接。

檢測NAT類型主要是利用上述NAT特點,通過測試連通性和比對端口号來實現目的,所以要搞清楚類型檢測,必須對照NAT類型定義來看。

另外,重複一下:NAT後的主機給外網發網絡包,網絡包在經過NAT的時候,NAT會為該主機分配出口IP:PORT,NAT會用該公網(出口)IP:PORT替換網絡包的SRC,這樣,接收端收到包之後,查閱包的src信息,會得到NAT出口IP:PORT,如同該包是直接從NAT發送過來的一樣。

NAT類型檢測的前提條件:需要有一台位于公網的服務器(server),且該server擁有2個公網IP地址,并在ip1:port1和ip2:port2做監聽

注意:檢測步驟中的server通過ip:port向client回包,是指server回包的時候,會把ip:port設置為rsp包的src ip和src port。

檢測的步驟:

【步驟1】判斷client是否位于NAT後面

很簡單,位于NAT後面的主機跟公網通信要做内外網地址轉換,兩個IP不一樣。所以,可以通過以下操作完成:

  1. client向server ip1:port1發送一個req UDP包。
  2. server收到udp包之後,從IP頭部取出src IP,從UDP頭部取出src PORT,作為rsp UDP的payload,發送給client。
  3. client收到rsp UDP,取出payload裡的IP和PORT,跟自己的IP對比,如果相同,則client位于公網,擁有公網IP,檢測完成;否則,client位于NAT背後。

【步驟2】判斷是否全錐型Full Cone NAT

client向server ip1:port1發送一個req UDP包,請求server通過ip2:port2(以ip2:port2作為rsp UDP的src)向client回UDP包。

根據全錐型NAT的定義,如果client收到了rsp UDP,那說明NAT對外網發包IP都不限制,說明client是全錐型NAT。但全錐型NAT很少,大概率收不到rsp UDP包,如果收不到,則需要繼續判斷。

【步驟3】判斷是否對稱型 Symmetirc NAT

client向server ip2:port2發送一個req udp。server收到後,把收到的req udp的src ip和src port取出來,塞進rsp UDP的payload字段,通過ip2:port2(以ip2:port2作為rsp UDP的src)向client回UDP包。

收到的rsp UDP之後,取出payload中的ip和port,跟步驟1中的ip和port對比,如果不一樣,則是對稱型NAT。

因為根據前面的定義,對稱型NAT,會為同一内網IP,根據不同的外網IP,分配不同的NAT出口PORT。

如果一樣,那麼肯定是錐型NAT,步驟2已經測試了全錐型,那剩下的就隻有ip受限錐型和port受限錐型兩種NAT類型需要繼續判斷了。

【步驟4】判斷是受限錐型Restricted Cone還是PORT受限錐型

client向server ip2:port2發送一個req udp,要求server用ip2、且不同于port2的端口向client回rsp udp。就是用ip2 不同于port2的其他port作為udp的src向client回包。

如果client能收到rsp udp,那說明隻要ip相同,哪怕port不相同,NAT也放行,所以NAT是IP受限型;如果沒收到,那就是PORT受限型,說明隻能通過port2回包。

至此,所有的NAT類型便都檢測出來了,是不是很簡單?

對稱型NAT不能直接建立P2P連接,隻能通過中轉服務器relay包。

未完待續

太長了,後面講打洞、STUN、TURN、ICE。​

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved