CONE NAT 和 Symmetric NAT


CONE NAT 和 Symmetric NAT

1. NAT 的划分

  • RFC3489 中將 NAT 的實現分為四大類:
  1. Full Cone NAT 完全錐形 NAT
  2. Restricted Cone NAT 限制錐形 NAT (可以理解為 IP 限制)
  3. Port Restricted Cone NAT 端口限制錐形 NAT ( IP+Port 限制)
  4. Symmetric NAT 對稱 NAT

其中完全錐形的穿透性最好,而對稱形的安全性最高

1.1 錐形NAT與對稱NAT的區別

所謂錐形NAT 是指:只要是從同一個內部地址和端口出來的包,無論目的地址是否相同,NAT 都將它轉換成同一個外部地址和端口。

“同一個外部地址和端口”與“無論目的地址是否相同”形成了一個類似錐形的網絡結構,也是這一名稱的由來。反過來,不滿足這一條件的即為對稱NAT 。

1.2 舉例說明

假設:

NAT 內的主機 A : IP 記為 A ,使用端口 1000
NAT 網關 : IP 記為 NAT ,用於 NAT 的端口池假設為( 5001-5999 )
公網上的主機 B : IP 記為B ,開放端口 2000
公網上的主機 C : IP 記為C ,開放端口 3000
假設主機 A 先后訪問主機 B 和 C

1 )如果是錐形 NAT :

那么成功連接后,狀態必然如下:

  • A ( 1000 ) —— > NAT ( 5001 )—— > B ( 2000 )
  • A ( 1000 ) —— > NAT ( 5001 )—— > C ( 3000 )

也就是說,只要是從 A 主機的 1000 端口發出的包,經過地址轉換后的源端口一定相同。

2 )如果是對稱形 NAT :

連接后,狀態有可能(注意是可能,不是一定)如下:

  • A ( 1000 ) —— > NAT ( 5001 )—— > B ( 2000 )
  • A ( 1000 ) —— > NAT ( 5002 )—— > C ( 3000 )

兩者的區別顯而易見。

1.3 三種CONE NAT之間的區別

仍然以上面的網絡環境為例, 假設 A 先與 B 建立了連接:

A ( 1000 ) —— > NAT ( 5001 )——— > B ( 2000 )

1) Port Restricted Cone NAT:

只有 B ( 2000 )發往 NAT ( 5001 )的數據包可以到達 A ( 1000 )

B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

B ( 3000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )

C ( 2000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )

2) Restricted Cone NAT

只要是從 B 主機發往 NAT ( 5001 )的數據包都可以到達 A ( 1000 )

B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

B ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

C ( 2000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )

3) Full Cone NAT

任意地址發往 NAT ( 5001 )的數據包都可以到達 A ( 1000 )

B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

B ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

C ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

2. Linux的NAT

Linux的NAT“MASQUERADE”屬於對稱形NAT。說明這一點只需要否定 MASQUERADE 為錐形 NAT 即可。

linux 在進行地址轉換時,會遵循兩個原則:

  • 盡量不去修改源端口,也就是說,ip 偽裝后的源端口盡可能保持不變。
  • 更為重要的是,ip 偽裝后必須 保證偽裝后的源地址/ 端口與目標地址/ 端口(即所謂的socket )唯一。

假設如下的情況( 內網有主機 A 和 D ,公網有主機 B 和 C ):
先后 建立如下三條連接:

A ( 1000 ) —— >  NAT ( 1000 )—— >  B ( 2000 )
D ( 1000 ) —— >  NAT ( 1000 )—— >  C ( 2000 )
A ( 1000 ) —— >  NAT ( 1001 )—— >  C ( 2000 )

可以看到,前兩條連接遵循了原則 1 ,並且不違背原則 2 而第三條連接為了避免與第二條產生相同的 socket 而改變了源端口比較第一和第三條連接,同樣來自 A(1000) 的數據包在經過 NAT 后源端口分別變為了 1000 和1001 。說明 Linux 的 NAT 是對稱 NAT 。

3. 對協議的支持

CONENAT 要求原始源地址端口相同的數據包經過地址轉換后,新源地址和端口也相同,換句話說,原始源地址端口不同的數據包,轉換后的源地址和端口也一定不同。

那么,是不是 Full Cone NAT 的可穿透性一定比 Symmetric NAT 要好呢,或者說,通過 Symmetric NAT 可以建立的連接,如果換成 Full Cone NAT 是不是也一定能成功呢?

假設如下的情況:

(內網有主機A和D,公網有主機B和C,某 UDP 協議服務端口為 2000 ,並且要求客戶端的源端口一定為 1000 。 )

1)如果A使用該協議訪問B:

A ( 1000 ) —— > NAT ( 1000 )——— > B ( 2000 )

由於 Linux 有盡量不改變源端口的規則,因此在 1000 端口未被占用時,連接是可以正常建立的如果此時D也需要訪問B:

D ( 1000 ) —— > NAT ( 1001 )—X— > B ( 2000 )

端口必須要改變了,否則將出現兩個相同的 socket ,后續由 B(2000) 發往NAT( 1000 )的包將不知道是轉發給A還是D。於是B將因為客戶端的源端口錯誤而拒絕連接。在這種情況下, MASQUERADE 與 CONENAT 的表現相同。

2)如果A連接B后,D也像C發起連接,而在此之后,A又向C發起連接

① A ( 1000 ) —— > NAT ( 1000 )——— > B ( 2000 )

如果是 MASQUERADE :

② D ( 1000 ) —— > NAT ( 1000 )——— > C ( 2000 )

③ A ( 1000 ) —— > NAT ( 1001 )—X— > C ( 2000 )

如果是 CONENAT :

② D ( 1000 ) —— > NAT ( 1001 )—X— > C ( 2000 )

③ A ( 1000 ) —— > NAT ( 1000 )——— > C ( 2000 )

對於 MASQUERADE 來說,只要在沒有重復的 socket 的情況下,總是堅持盡量不改變源端口的原則,因此第二條連接仍然采用源端口 1000 ,而第三條連接為了避免重復的 socket 而改變了端口。

對於 CONENAT ,為了保證所有來自 A(1000) 的數據包均被轉換為 NAT(1000) ,因此 D 在向 C 發起連接時,即使不會產生重復的 socket ,但因為 NAT 的 1000 端口已經被 A(1000) “占用”了,只好使用新的端口。

可以看出,不同的 target 產生不同的結果。我們也不能絕對的說,在任何時候,全錐形 NAT 的可穿透性都比對稱 NAT 要好,比如上面的例子,如果只存在連接①和②,顯然是對稱形 NAT 要更適用。因此,選擇哪種 NAT ,除了對網絡安全和普遍的可穿透性的考慮外,有時還需要根據具體應用來決定。

原文出處:http://blog.csdn.net/ojhsky/article/details/6011232

Nat的類型——Cone Nat、Symmetic Nat

Nat共分為四種類型:

  • 1.Full Cone Nat
  • 2.Restriced Cone Nat
  • 3.Port Restriced Cone Nat
  • 4.Symmetric Nat

Symmetric Nat 與 Cone Nat的區別

  • 1.三種Cone Nat同一主機,同一端口會被映射為相同的公網IP和端口
  • 2.Symmetric Nat只有來自同一主機,同一端口發送到同一目的主機、端口,映射的公網IP和端口才會一致

一、Full Cone Nat

該nat 將內網中一台主機的IP和端口映射到公網IP和一個指定端口,外網的任何主機都可以通過映射后的IP和端口發送消息

例如:主機A(192.168.0.123:4000)訪問主機B,A的IP將會被映射為(222.123.12.23:50000);

當主機A使用4000端口訪問主機C時,同樣會被映射為(222.123.12.23:50000);而且此時任何主機C 、D·····(包含主機A未訪問過的主機)都可以使用(222.123.12.23:50000)訪問到主機A(192.168.0.123:4000)。

二、Restriced Cone Nat

該nat 將內網中一台主機的IP和端口映射到公網IP和一個指定端口,只有訪問過的IP可以通過映射后的IP和端口連接主機A

例如:主機A(192.168.0.123:4000)訪問主機B(223.124.34.23:9000),A的IP將會被映射為(222.123.12.23:50000);

此時只有Ip為(223.124.34.23)才能通過(222.123.12.23:50000)連接主機A。

三、Port Restriced Cone Nat

該nat 將內網中一台主機的IP和端口映射到公網IP和一個指定端口,只有訪問過的IP和端口可以通過映射后的IP和端口連接主機A

例如:主機A(192.168.0.123:4000)訪問主機B(223.124.34.23:9000),A的IP將會被映射為(222.123.12.23:50000);

此時只有Ip為(223.124.34.23:9000)才能通過(222.123.12.23:50000)連接主機A。

四、Symmetric Nat

當主機A(192.168.0.123:4000)訪問主機B(223.124.34.23:9000),A的IP被映射為(222.123.12.23:50000)后,並將這三個IP、端口進行綁定;

等到主機A(192.168.0.123:4000)訪問主機C時,可能(注意是可能,也有可能會不變)會被映射為(222.123.12.23:60010),然后又會將這三個IP、端口綁定;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM