網絡地址轉換NAT與端口地址轉換PAT
一、網絡地址轉換 NAT (Network Address Translation)
1.1.網絡地址轉換簡介
- 需要在專用網(內網)連接到因特網的路由器上安裝 NAT 軟件。裝有 NAT 軟件的路由器叫做 NAT路由器,它至少有一個有效的外部全球地址 IPG。
- 所有使用本地地址的主機在和外界通信時都要在 NAT 路由器上將其本地地址轉換成 IPG 才能和因特網連接。
1.2.網絡地址轉換的過程
- 內部主機 X 用本地地址 IPX 和因特網上主機 Y 通信所發送的數據報必須經過 NAT 路由器。
- NAT 路由器將數據報的源地址 IPX 轉換成全球地址 IPG,但目的地址 IPY 保持不變,然后發送到因特網。
- NAT 路由器收到主機 Y 發回的數據報時,知道數據報中的源地址是 IPY 而目的地址是 IPG。
- 根據 NAT 轉換表,NAT 路由器將目的地址 IPG 轉換為 IPX,轉發給最終的內部主機 X。
舉例
如圖:
如圖,當位於內網10網段的用戶A想要訪問Internet上的網站時,數據包可以出去,但是數據包返回時目標地址為內網地址,Internet中的路由器無法中轉,所以內網的用戶A無法訪問Interner,並且可能存在多個相同的內網10網段。
那么我們平時是如何順利訪問Internet的呢?
- 連接內網的路由器至少有一個公網地址,如圖中路由器X的公網地址111.24.0.1。用戶A訪問Internet上的網站時,數據包在內網傳輸時源地址為10.12.4.2目標地址為168.12.4.202,當數據包傳輸到路由器X處時,路由器將數據包的源地址改為了公網地址111.24.0.1 。
- 這樣數據包的目標地址和源地址都是公網地址能去能回,當目標地址為111.24.0.1的返回數據包到達路由器X時,路由器再將數據包的目標地址改為10.12.4.2,最后轉發給用戶A。由此用戶A能夠順利訪問Intenet。
- 也就是說,連接內網與外網的路由器上的一個公網地址可以代表整個內網用戶。比如一公網地址代表某學院內網的全部用戶,該學院有人在網上干了壞事,根據公網IP地址查到的源頭就是整個學院,學院內網里的全部用戶都是嫌疑人。
1.3.注意
嚴格意義上的NAT不會進行端口地址轉換,因此並不節省公網IP地址。而通過端口地址轉換PAT,能夠節省公網IP地址。
如圖,內網中有5位用戶,但是只在路由器上配置了3個公網IP地址,那么只有先訪問公網的3位用戶能夠替換到公網地址。由於沒有公網地址替換,剩下的2位用戶無法訪問公網。
即:使用NAT內網的用戶可以主動訪問公網,但是公網用戶不能主動訪問內網。利用此特點有以下應用(包含NAT和PAT):
應用舉例
場景一:
某公司有這樣的需求,由於技術部有不能泄露的機密資料,現要求:技術部可以訪問市場部網段,但市場部不能訪問技術部網段,兩個網段網管都可以訪問。
解決方法為:
-
在網管的計算機上安裝兩個網卡A和B,網卡A連接及技術部網段,網卡B連接市場部網段。當技術部的用戶訪問市場部時先經過網管的計算機,使用網卡B地址做替換。這樣一來,在市場部用戶看來,來訪的只是網管的計算機,而實際上是技術部的用戶來訪。
-
計算機間能夠通信要求數據包有去有回,當技術部的用戶向市場部發出的數據包經網管計算機的網卡B地址替換發向市場部后,網管的計算機上會留下這樣的記錄:哪個端口對應着技術部的哪個用戶。當市場部的數據包返回時,網管的計算機就會按照之前保留的對應關系把數據包轉給技術部的對應用戶。由此實現數據包的有去有回。
-
另一方面,當市場部用戶想要主動訪問技術部時,由於網管計算機上沒有相關的端口對應關系(端口映射),所以無法將數據包中轉給技術部用戶。可以這樣想:網管相當於小區保安,小區的住戶相當於技術部用戶發出的數據包。由於保安處有每位住戶對應的門牌信息,所以住戶可以自由出入。但是,小區外的人保安不認識,所以不讓進。
由此實現了:技術部能主動訪問市場部,而市場部不能主動訪問技術部。
場景二:
學校網管分配給教師一個IP地址,滿足教師上課時的上網需求。如果學生也要上網那該怎么辦呢?
解決方案為:在教師計算機上配置NAT和PAT,學生上網經過教師的計算機進行地址和端口轉換。在網管看來只有教師在上網,其實教師和學生都在上網。
二、端口地址轉換 PAT
2.1.簡介
當我們上網打開網頁的時候,可以在命令行窗口通過以下命令查看建立的會話:
netstat -n
如圖所示,紅色框內為建立的TCP連接的源地址及其使用的端口,藍色框為TCP連接的目標地址和端口。可以看到建立的每一個連接中源地址使用的端口都是不同的。
那么內網用戶訪問Internet是會不會出現以下情況呢?
如圖,內網用戶1和2訪問公網網站時使用路由器的公網地址111.10.0.1替換,數據包可以順利發出去,等到數據包返回時,源地址和端口為168.20.1.202:80,目標地址和端口為111.10.0.1:1234。但是,內網用戶1和2可能都使用了1234端口,數據包可能是用戶1發出的,也有可能是用戶2發出的,此時路由器就不知道要把返回數據包轉發給誰了。
解決該問題的方法為,當內網用戶訪問公網時,不僅要進行地址替換(NAT)也要進行端口替換(PAT),如下圖所示:
如圖,用戶1或2訪問公網網站時,無論源地址和端口是什么都統一替換為路由器分配的地址和端口。即用戶1使用地址:111.10.0.1,端口:4000;用戶2使用地址:111.10.0.1,端口:4001;
這樣,如果返回的數據包目標端口為4000,那么路由器就知道要轉給用戶1;目標端口為4001,路由器就轉給用戶2;即使用戶1和2原來使用的端口號一樣路由器也知道該把數據包轉給誰。
也就是說:端口地址轉換就是由路由器為內網用戶統一分配端口。
2.2.端口地址轉換的好處
能夠大量節省公網IP地址。只需要一個公網IP地址就可以供整個內網的用戶使用,內網中配置了公網地址的路由器負責給內網的所有用戶統一分配端口,這樣便能區分不同的內網用戶。
2.3.NAT的端口映射
什么是端口映射?
如圖,內網中有個地址為10.0.2.1的Web站點服務器,它的80端口提供Web服務,內網路由器上的公網地址為111.0.2.1,能讓外網用戶也能訪問內網Web站點服務器的技術就是端口映射。
端口映射的作用
可以配置內網路由器公網地址的80端口映射內網Web站點服務器的80端口,當公網用戶A訪問路由器公網地址的80端口服務時,路由器自動映射到內網的Web站點服務器的80端口上,這樣公網用戶就能訪問內網Web站點服務器80端口提供的Web服務了。
如果,公網用戶A想要通過遠程桌面管理內網的計算機B和C,那么用戶A就需要訪問計算機B和C的3389端口(遠程桌面使用3389端口)。但是內網路由器只有一個3389端口,只能映射一台計算機的3389端口,那該怎么辦呢?其實並不要求內網路由器上的端口與所映射端口相同,只要不重復即可。即可以使用內網路由器的4000端口映射計算機B的3389端口,使用內網路由器的4001端口映射計算機C的3389端口。由此,用戶A可以通過遠程桌面管理內網的計算機B和C了。
解決公網訪問私網的問題,使用端口映射是一種解決方案,前面講到的VPN技術同樣是一種可行的解決方案。