1、NAT分類
1.1 基礎(chǔ)型NAT
僅將內(nèi)網(wǎng)主機(jī)的私有IP地址轉(zhuǎn)換成公網(wǎng)的IP地址,并不將TCP/UDP端口信息進(jìn)行轉(zhuǎn)換,分為靜態(tài)NAT和動(dòng)態(tài)NAT。
1.2 NAPT
NAPT不但會(huì)改變經(jīng)過這個(gè)NAT設(shè)備的IP數(shù)據(jù)報(bào)的IP地址,還會(huì)改變IP數(shù)據(jù)報(bào)的TCP/UDP端口。
1.2.1錐型NAT
- 完全錐型(Full Cone NAT):在不同內(nèi)網(wǎng)的主機(jī)A和B各自連接到服務(wù)器C,服務(wù)器收到A和B的連接后知道了他們的公網(wǎng)地址和NAT分配給他們的端口號(hào),然后把這些NAT地址和端口號(hào)交叉告訴B和A。A和B給服務(wù)器所打開的“孔”可以給任何主機(jī)使用。如一私網(wǎng)主機(jī)地址是192.168.1.100:30000發(fā)至公網(wǎng)的所有請(qǐng)求都映射成一個(gè)公網(wǎng)地址172.1.20.100:20000,192.168.1.100:30000可以接收任何主機(jī)發(fā)給172.1.20.100:20000的數(shù)據(jù)報(bào)文。
- 受限制錐型(Restricted cone):主機(jī)A和B同樣需要各自連接服務(wù)器C,同時(shí)把A和B的地址告訴B和A,但一般情況下它們只能與服務(wù)器通信。要想直接通信需要發(fā)送消息給服務(wù)器C,如主機(jī)A發(fā)送一個(gè)UDP消息到主機(jī)B的公網(wǎng)地址上,與此同時(shí),A又通過服務(wù)器C中轉(zhuǎn)發(fā)送一個(gè)邀請(qǐng)信息給主機(jī)B,請(qǐng)求主機(jī)B也給主機(jī)A發(fā)送一個(gè)UDP消息到主機(jī)A的公網(wǎng)地址上。這時(shí)主機(jī)A向主機(jī)B的公網(wǎng)IP發(fā)送的信息導(dǎo)致NAT A打開一個(gè)處于主機(jī)A的和主機(jī)B之間的會(huì)話,與此同時(shí),NAT B也打開了一個(gè)處于主機(jī)B和主機(jī)A的會(huì)話。一旦這個(gè)新的UDP會(huì)話各自向?qū)Ψ酱蜷_了,主機(jī)A和主機(jī)B之間才可以直接通信。
- 端口受限錐型(Port-restricted):與受限制錐型類似,與之不同的是還要指定端口號(hào)。
1.2.2對(duì)稱NAT(Symmetric)
對(duì)不同的外網(wǎng)IP地址都會(huì)分配不同的端口號(hào)。
1.2.3 兩者區(qū)別
對(duì)稱NAT是一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)端口,非對(duì)稱NAT是多個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)端口(象錐形,所以叫Cone NAT)。
1.3 安全系數(shù)
對(duì)稱型 > 端口受限錐型 > 受限錐型 > 全錐型
2、網(wǎng)絡(luò)打洞
2.1 打洞條件
中間服務(wù)器保存信息、并能發(fā)出建立UDP隧道的命令
網(wǎng)關(guān)均要求為Cone NAT類型。Symmetric NAT不適合。
完全圓錐型網(wǎng)關(guān)可以無需建立udp隧道,但這種情況非常少,要求雙方均為這種類型網(wǎng)關(guān)的更少。
- 假如X1網(wǎng)關(guān)為Symmetric NAT, Y1為Address Restricted Cone NAT 或Full Cone NAT型網(wǎng)關(guān),各自建立隧道后,A1可通過X1發(fā)送數(shù)據(jù)報(bào)給Y1到B1(因?yàn)閅1最多只進(jìn)行IP級(jí)別的甄別),但B2發(fā)送給X1的將會(huì)被丟棄(因?yàn)榘l(fā)送來的數(shù)據(jù)報(bào)中端口與X1上存在會(huì)話的端口不一致,雖然IP地址一致),所以同樣沒有什么意義。
- 假如雙方均為Symmetric NAT的情形,新開了端口,對(duì)方可以在不知道的情況下嘗試猜解,也可以達(dá)到目的,但這種情形成功率很低,且?guī)眍~外的系統(tǒng)開支,不是個(gè)好的解決辦法。pwnat工具據(jù)說可以實(shí)現(xiàn)。
- 不同網(wǎng)關(guān)型設(shè)置的差異在于,對(duì)內(nèi)會(huì)采用替換IP的方式、使用不同端口不同會(huì)話的方式,使用相同端口不同會(huì)話的方式;對(duì)外會(huì)采用什么都不限制、限制IP地址、限制IP地址及端口。
- 這里還沒有考慮同一內(nèi)網(wǎng)不同用戶同時(shí)訪問同一服務(wù)器的情形,如果此時(shí)網(wǎng)關(guān)采用AddressRestricted Cone NAT 或Full Cone NAT型,有可能導(dǎo)致不同用戶客戶端可收到別人的數(shù)據(jù)包,這顯然是不合適的。
2.2 打洞流程
不同的網(wǎng)絡(luò)拓?fù)銷AT打洞的方法和流程有所區(qū)別。
2.2.1 同一個(gè)NAT設(shè)備下
- clinet A與Server S建立UDP連接,公共NAT(155.99.25.11)給client A分配一個(gè)公網(wǎng)端口62000;
- client B與Server S建立UDP連接,公共NAT(155.99.25.11)給client A分配一個(gè)公網(wǎng)端口62005;
- client A通過Server S發(fā)送一個(gè)消息要求連接client B,S給A回應(yīng)B的公網(wǎng)和私網(wǎng)地址,并轉(zhuǎn)發(fā)A的公網(wǎng)和私網(wǎng)地址給B;
- A和B根據(jù)獲取的地址試圖直接發(fā)送UDP數(shù)據(jù)報(bào)文;是否成功取決于NAT設(shè)備是否支持hairpin translation(端口回流)。——打開端口回流相當(dāng)于與client A的數(shù)據(jù)經(jīng)過NAT設(shè)備轉(zhuǎn)發(fā)后才到達(dá)client B,即從外網(wǎng)NAT接口繞了一圈再訪問到同一個(gè)子網(wǎng)里的client B。(優(yōu)點(diǎn)是可以防止內(nèi)部攻擊)
2.2.2 不同NAT設(shè)備下
1、A使用4321端口與S連接,NAT給回話在NAT分配外網(wǎng)62000端口(155.99.25.11:62000)與S連接;同理B以相同的方式與S連接,分配的外網(wǎng)地址端口是138.76.29.7:31000。
2、A往S注冊(cè)消息包里包含里A的私有地址10.0.0.1:4321,此時(shí)S保存了A的地址;S給A臨時(shí)分配了一個(gè)用于公網(wǎng)的地址(155.99.25.11:62000),同時(shí)用于觀察外網(wǎng)數(shù)據(jù)包。
3、同理B往S注冊(cè)的消息包里也包含里B的地址,NAT同樣給B臨時(shí)分類了一個(gè)外網(wǎng)地址(138.76.29.7:31000)。
4、Client A根據(jù)以上已知信息通過打洞的方式與B連接UDP通信:
- Client A發(fā)送請(qǐng)求消息,尋求連接B;
- S給A回應(yīng)B的外網(wǎng)和內(nèi)網(wǎng)地址,通給給B發(fā)送A的外網(wǎng)和內(nèi)網(wǎng)地址;
- A和B開始利用這些地址嘗試直接發(fā)送UDP報(bào)文給彼此,不幸的是,此時(shí)A和B都無法接收對(duì)應(yīng)的消息。因?yàn)锳和B都是在不同的私有網(wǎng)絡(luò)中,A和B之前都是與S通信回話,并沒有與對(duì)方建立回話;即A沒有為B打開一個(gè)洞,B也沒有為A打開一個(gè)洞。這個(gè)過程的第一個(gè)報(bào)文需要會(huì)被拒絕同時(shí)打開對(duì)應(yīng)的“洞”,隨后才可以直接通信,具體如下:
- A給B公網(wǎng)地址(10.0.0.1:4321 to 138.76.29.7:31000)發(fā)送的第一個(gè)報(bào)文,實(shí)際上是在A的NAT私有網(wǎng)絡(luò)上“打洞”來為新識(shí)別的地址(10.0.0.1:4321 138.76.29.7:31000) 建立UDP會(huì)話,并經(jīng)主網(wǎng)地址(155.99.25.11:62000 138.76.29.7:31000)來傳送。
- 如果A發(fā)送到B的公網(wǎng)地址的消息在B發(fā)送到A的第一個(gè)消息越過B自己的NAT之前到達(dá)B的NAT,那么B的NAT可能會(huì)將A的入站消息解釋為非請(qǐng)求的傳入通信量并丟棄它。
- 同理,B給A公網(wǎng)地址方法的第一個(gè)消息也會(huì)在B的NAT上“打洞”來為地址(10.1.1.3:4321, 155.99.25.11:62000)建立回話。
- 隨后可以正常P2P通信。
2.2.3 多層NAT下
說明:NAT C 是一個(gè)大型的工業(yè)NAT設(shè)備,由ISP(Internet Service Provider,互聯(lián)網(wǎng)服務(wù)提供商)部署,用于將許多客戶多路復(fù)用到幾個(gè)公共IP地址上。
Client A和client B無法通道NAT A和NAT A進(jìn)行P2P通信,因?yàn)樗鼈儗儆贜AT C的局域網(wǎng)地址,因此client A和client B只能通道NAT C的hairpin translation進(jìn)行P2P通信,如果NAT C不支持hairpin translation,則它們很難進(jìn)行P2P通信。
每個(gè)客戶機(jī)像前面方式一樣啟動(dòng)到服務(wù)器S的連接,引起NAT A和B各自創(chuàng)建一個(gè)單獨(dú)的公共/私有轉(zhuǎn)化——session A-S(18.181.0.31:1234 10.0.0.1:4321)和session B-S(18.181.0.31:1234 10.1.1.3:4321),并引起NAT C為每個(gè)會(huì)話建立一個(gè)公共/私有翻譯——session A-S(18.181.0.31:1234 10.0.1.1:45000)和session B-S(18.181.0.31:1234 10.0.1.2:5500)。
- 首先client A給client B的公網(wǎng)地址(155.99.25.11:62005)發(fā)送消息;
- NAT A翻譯原數(shù)據(jù)報(bào)文從10.0.0.1:4321帶10.0.0.1:45000;
- 數(shù)據(jù)報(bào)現(xiàn)在到達(dá)NAT C,它識(shí)別出數(shù)據(jù)報(bào)的目標(biāo)地址是NAT C自己翻譯的公共地址之一;
- 如果NAT C是好的,那么其能翻譯出數(shù)據(jù)報(bào)文的源地址和目標(biāo)地址(155.99.25.11:62000和10.0.1.2:55000),同時(shí)通過“回環(huán)”返回?cái)?shù)據(jù)包到私有網(wǎng)絡(luò);
- NAT B 翻譯數(shù)據(jù)報(bào)文得到NAT B私網(wǎng)地址,最終到達(dá)client B。
- Client B給client A發(fā)送數(shù)據(jù)報(bào)文與上述步驟類似。
2.3 打洞組合
不同的NAT組合打洞的方式也有所不同,有點(diǎn)可以打洞,有的則不能打洞,如兩個(gè)都是對(duì)稱型設(shè)備則無法實(shí)現(xiàn)打洞。不同組合打洞結(jié)果如下:
3、關(guān)聯(lián)技術(shù)
- ALG:即應(yīng)用程序級(jí)網(wǎng)關(guān)技術(shù):傳統(tǒng)的NAT技術(shù)只對(duì)IP層和傳輸層頭部進(jìn)行轉(zhuǎn)換處理,但是一些應(yīng)用層協(xié)議,在協(xié)議數(shù)據(jù)報(bào)文中包含了地址信息。為了使得這些應(yīng)用也能透明地完成NAT轉(zhuǎn)換,NAT使用一種稱作ALG的技術(shù),它能對(duì)這些應(yīng)用程序在通信時(shí)所包含的地址信息也進(jìn)行相應(yīng)的NAT轉(zhuǎn)換。主要類似與在網(wǎng)關(guān)上專門開辟一個(gè)通道,用于建立內(nèi)網(wǎng)與外網(wǎng)的連接,也就是說,這是一種定制的網(wǎng)關(guān)。更多只適用于使用他們的應(yīng)用群體內(nèi)部之間。
- UpnP:它是讓網(wǎng)關(guān)設(shè)備在進(jìn)行工作時(shí)尋找一個(gè)全球共享的可路由IP來作為通道,這樣避免端口造成的影響。要求設(shè)備支持且開啟upnp功能,但大部分時(shí)候,這些功能處于安全考慮,是被關(guān)閉的。即時(shí)開啟,實(shí)際應(yīng)用效果還沒經(jīng)過測(cè)試。
- STUN(Simple Traversalof UDP Through Network):這種方式即是類似于我們上面舉例中服務(wù)器C的處理方式。也是目前普遍采用的方式。但具體實(shí)現(xiàn)要比我們描述的復(fù)雜許多,光是做網(wǎng)關(guān)Nat類型判斷就由許多工作,RFC3489中詳細(xì)描述了。
- TURN(Traveral Using Relay NAT):該方式是將所有的數(shù)據(jù)交換都經(jīng)由服務(wù)器來完成,這樣NAT將沒有障礙,但服務(wù)器的負(fù)載、丟包、延遲性就是很大的問題。目前很多游戲均采用該方式避開NAT的問題。這種方式不叫p2p。
- ICE(Interactive Connectivity Establishment):是對(duì)上述各種技術(shù)的綜合,但明顯帶來了復(fù)雜性。
4、其他
4.1 對(duì)稱NAT設(shè)備常用場(chǎng)景
1)使用第三方寬帶公司提供的寬帶,這類寬帶給用戶分配的是局域網(wǎng)IP,連接公網(wǎng)的NAT是運(yùn)營商的,這類運(yùn)營商一般采用對(duì)稱NAT。
2)移動(dòng)互聯(lián)網(wǎng),如3G、4G終端設(shè)備;
3)大公司路由器一般采用對(duì)稱NAT;
4.2影響“打洞”的因素
- 許多對(duì)稱nat以一種相當(dāng)可預(yù)測(cè)的方式為連續(xù)的會(huì)話分配端口號(hào),而有時(shí)分配到的端口剛好被別的應(yīng)用使用了。
- Client有可能分到多個(gè)公網(wǎng)地址,例如:在NAT將公網(wǎng)地址155.99.25.11:62000分配給client A與S的會(huì)話之后,NAT可能會(huì)將另一個(gè)公網(wǎng)地址(如155.99.25.11:62001)分配給A試圖發(fā)起與B的P2P會(huì)話。在這種情況下,依據(jù)提供的連接打洞過程將失敗,因?yàn)楹罄m(xù)來自B的傳入消息到達(dá)NAT A的錯(cuò)誤端口號(hào)
- 其他
-
IP
+關(guān)注
關(guān)注
5文章
1712瀏覽量
149665 -
UDP
+關(guān)注
關(guān)注
0文章
327瀏覽量
33994 -
端口
+關(guān)注
關(guān)注
4文章
979瀏覽量
32104 -
NAT設(shè)備
+關(guān)注
關(guān)注
0文章
2瀏覽量
6211
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論