網(wǎng)絡(luò)地址轉(zhuǎn)換協(xié)議(NAT)及其應(yīng)用實(shí)例
1. NAT的含義
當(dāng)在專用網(wǎng)內(nèi)部的一些主機(jī)本來已經(jīng)分配到了本地IP地址(即僅在本專用網(wǎng)內(nèi)使用的專用地址),但現(xiàn)在又想和因特網(wǎng)上的主機(jī)通信(并不需要加密)時,可使用NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)方法。
這種方法需要在專用網(wǎng)連接到因特網(wǎng)的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址。這樣,所有使用本地地址的主機(jī)在和外界通信時,都要在NAT路由器上將其本地地址轉(zhuǎn)換成全球IP地址,才能和因特網(wǎng)連接。
另外,這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助于減緩可用的IP地址空間的枯竭。
2. NAT協(xié)議的作用
隱藏內(nèi)部客戶端的身份、隱蔽私有網(wǎng)絡(luò)設(shè)計以及使公共IP地址租用成本最低,這些功能都可以通過使用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)方便地實(shí)現(xiàn)。NAT是一種將包頭中的內(nèi)部IP地址轉(zhuǎn)換為公共IP地址,從而在互聯(lián)網(wǎng)上進(jìn)行傳輸?shù)臋C(jī)制。
人們開發(fā)NAT是為了允許專用網(wǎng)絡(luò)使用任何IP地址集,并且不會與具有相同IP地址的公共互聯(lián)網(wǎng)主機(jī)發(fā)生沖突或抵觸。事實(shí)上,NAT將內(nèi)部客戶端的IP地址轉(zhuǎn)換為外部環(huán)境中的租用地址。
NAT提供了很多優(yōu)點(diǎn),包括:
- 能夠只使用一個(或幾個)租用的公共IP地址將整個網(wǎng)絡(luò)連接到互聯(lián)網(wǎng);
- 終能夠在與互聯(lián)網(wǎng)通信的情況下, 將RCF1918中定義的私有IP地址用于私有網(wǎng)絡(luò);
- NAT通過互聯(lián)網(wǎng)隱藏IP地址方案和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);
- NAT還通過限制連接提供了保護(hù),從而使只有來自于內(nèi)部受保護(hù)網(wǎng)絡(luò)的連接才被準(zhǔn)許從互聯(lián)網(wǎng)返回網(wǎng)絡(luò)。因此,大多數(shù)入侵攻擊會被自動擊退。
3. IP地址分類
IP被分為A、B、C、D、E五類,如表所示。其中D類子網(wǎng)被用于多播,E類子網(wǎng)被保留將來使用。IP地址由四段組成,每段一個字節(jié)八位。
(1) A類:(1.0.0.0-126.0.0.0)第一個字節(jié)為網(wǎng)絡(luò)號,后三個字節(jié)為主機(jī)號。該類IP地址的最前面為“0”,所以地址的網(wǎng)絡(luò)號取值于1~126之間。一般用于大型網(wǎng)絡(luò)。
默認(rèn)子網(wǎng)掩碼:255.0.0.0或 0xFF000000
其中私有地址范圍是:10.0.0.0~10.255.255.255
(2) B類:(128.0.0.0-191.255.0.0)前兩個字節(jié)為網(wǎng)絡(luò)號,后兩個字節(jié)為主機(jī)號。該類IP地址的最前面為“10”,所以地址的網(wǎng)絡(luò)號取值于128~191之間。一般用于中等規(guī)模網(wǎng)絡(luò)。
默認(rèn)子網(wǎng)掩碼:255.255.0.0或0xFFFF0000
其中私有地址范圍是:172.16.0.0~172.31.255.255
(3) C類:(192.0.0.0-223.255.255.0)前三個字節(jié)為網(wǎng)絡(luò)號,最后一個字節(jié)為主機(jī)號。該類IP地址的最前面為“110”,所以地址的網(wǎng)絡(luò)號取值于192~223之間。一般用于小型網(wǎng)絡(luò)。
子網(wǎng)掩碼:255.255.255.0或 0xFFFFFF00
其中私有地址范圍是:192.168.0.0~192.168.255.255
(4) D類:是多播地址。該類IP地址的最前面為“1110”,所以地址的網(wǎng)絡(luò)號取值于224~239之間。一般用于多路廣播用戶。
(5) E類:是保留地址。該類IP地址的最前面為“1111”,所以地址的網(wǎng)絡(luò)號取值于240~255之間。
IP地址總個數(shù)為2^32=4 294 967 296,約為43億個。其中各類地址的占比如圖1所示。
圖1. IP各類地址占比
4. NAT模式
從定義上看,NAT將一個內(nèi)部的IP地址映射為一個外部的IP地址。但是,端口地址轉(zhuǎn)換PAT將一個內(nèi)部的IP地址映射為一個外部IP地址和端口號的組合。因此,PAT理論上在單個外部租用IP地址上可以支持65536(2^16)個來自內(nèi)部客戶端的同時發(fā)生的通信。如果使用NAT,那么租用的公共IP地址數(shù)必須與期望同時發(fā)生的通信數(shù)相同;如果使用PAT,那 么可以租用較少的公共IP地址,內(nèi)部客戶端數(shù)量與外部租用IP地址數(shù)量的適當(dāng)比率為100:1。在很多硬件設(shè)備和軟件產(chǎn)品中都可以找到NAT,這些設(shè)備和產(chǎn)品包括防火墻、路由器、網(wǎng)關(guān)和代理。NAT只能用在IP網(wǎng)絡(luò)中,并且在OSI模型的網(wǎng)絡(luò)層(第3層)上工作。
所有的路由器和通信控制設(shè)備被配置為在默認(rèn)情況下不轉(zhuǎn)發(fā)來自或到達(dá)這些私有IP地址的通信。換句話說,私有IP地址在默認(rèn)情況下不進(jìn)行路由。因此,它們不能直接用于互聯(lián)網(wǎng)上的通信。然而,它們可以被輕松地用在私有網(wǎng)絡(luò)中,相應(yīng)的私有網(wǎng)絡(luò)可能沒有使用路由器,或者可能只對路由器的配置進(jìn)行了少許改動。通過允許從ISP處租用較少的公共IP地址,結(jié)合使用私有IP地址與NAT能夠大大減少連接互聯(lián)網(wǎng)的成本。
可以使用的NAT有兩種模式:靜態(tài)NAT和動態(tài)NAT:
- 靜態(tài)NAT:將特定的內(nèi)部客戶端的IP地址永久地映射到特定的外部公共IP地址時,就會使用靜態(tài)模式的NAT;
- 動態(tài)NAT:動態(tài)模式的NAT允許多個內(nèi)部客戶端使用較少的租用公共IP地址。因此,即使租用的公共IP地址較少,較大的內(nèi)部網(wǎng)絡(luò)也仍然能夠訪問互聯(lián)網(wǎng)。這種模式使出現(xiàn)公共IP地址濫用的情況最少,并且將互聯(lián)網(wǎng)訪問成本降至最低。
在動態(tài)模式的NAT實(shí)現(xiàn)中,NAT系統(tǒng)維護(hù)了一個映射數(shù)據(jù)庫,從而使來自互聯(lián)網(wǎng)服務(wù)的所有響應(yīng)信息正確地路由至最初的內(nèi)部請求客戶端。NAT常常與代理服務(wù)器或代理防火墻相結(jié)合,從而提供額外的互聯(lián)網(wǎng)訪問和內(nèi)容緩存功能。
因為NAT更改了數(shù)據(jù)包頭,而IPSec依賴數(shù)據(jù)包頭來阻止安全違規(guī),所以NAT并不直接與 IPSec相容。不過,某些版本的NAT代理被設(shè)計為在NAT上支持IPSec。IPSec是一種基于標(biāo)準(zhǔn)的機(jī)制,這種機(jī)制為點(diǎn)對點(diǎn)TCP/IP通信提供了加密保護(hù)。
5. NAT應(yīng)用實(shí)例
下面我們采用仿真軟件Cisco Packet Tracer來演示實(shí)際的網(wǎng)絡(luò)部署,軟件的下載地址及仿真的工程文件下載地址如下:
鏈接:https://pan.baidu.com/s/1DLJVuXu5kRmpgCCr7Czfpg
提取碼:w5og
網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)和IP地址配置如圖2.所示,內(nèi)網(wǎng)地址為192.168.1.*, 外網(wǎng)服務(wù)器的地址配置為2.2.2.2
圖2. 網(wǎng)絡(luò)拓?fù)浼暗刂?/p>
為了便于說明,我們首先明確四類地址的范圍來定義企業(yè)內(nèi)部、外部:
- 內(nèi)部本地地址:企業(yè)內(nèi)部的私有地址
- 內(nèi)部全局地址:私有地址轉(zhuǎn)換成為的公有地址
- 外部全局地址:internet上的公有地址
- 外部本地地址:internet上的公有地址轉(zhuǎn)換成為的企業(yè)內(nèi)部私有地址
(1) 配置IP地址
配置路由器R1的地址,f0/0的地址為192.168.1.200,255.255.255.0,f0/1的地址為 12.1.1.1 255.255.255.0。配置命令如下:
- R1>en
- R1#conf t
- Enter configuration commands, one perline. End with CNTL/Z.
- R1(config)#int f0/0
- R1(config-if)#ip add 192.168.1.200 255.255.255.0
- R1(config-if)#no sh
- R1(config-if)#
- R1(config-if)#int f0/1
- R1(config-if)#ip add 12.1.1.1 255.255.255.0
- R1(config-if)#no sh
配置路由器R2的地址,f0/0的地址為12.1.1.2 255.255.255.0,f0/1的地址為2.2.2.200 255.255.255.0。
- R2>en
- R2#conf t
- Enter configuration commands, one perline. End with CNTL/Z.
- R2(config)#int f0/0
- R2(config-if)#ip add 12.1.1.2 255.255.255.0
- R2(config-if)#no sh
- R2(config-if)#
- R2(config-if)#int f0/1
- R2(config-if)#ip add 2.2.2.200 255.255.255.0
- R2(config-if)#no sh
配置結(jié)果如圖3所示,
圖3. IP配置結(jié)果
配置路由器R1,配置內(nèi)容是接口f0/0連接的是企業(yè)內(nèi)部私有地址,f0/1連接的是internet上的公有地址。配置命令如下:
- R1>en
- R1#conf t
- Enter configuration commands, one perline. End with CNTL/Z.
- R1(config)#int f0/0
- R1(config-if)#ip nat inside
- R1(config-if)#exit
- R1(config)#int f0/1
- R1(config-if)#ip nat outside
- R1(config-if)#exit
(2) 創(chuàng)建NAT轉(zhuǎn)換表
a. 靜態(tài)NAT
- R1(config)#ip nat inside source static ?
- A.B.C.D Inside local IP address
- tcp Transmission ControlProtocol
- udp User Datagram Protocol
- R1(config)#ip nat inside source static192.168.1.1 ?
- A.B.C.D Inside global IP address
- R1(config)#ip nat inside source static192.168.1.1 12.1.1.11
- R1(config)#ip nat inside source static192.168.1.2 12.1.1.12
- R1(config)#end
- R1#
- %SYS-5-CONFIG_I: Configured from console byconsole
- R1#show ip nat tr
- R1#show ip nat translations
- Pro Inside global Insidelocal Outside local Outside global
- --- 12.1.1.11 192.168.1.1 --- ---
- --- 12.1.1.12 192.168.1.2
靜態(tài)NAT特點(diǎn):一對一的對應(yīng)關(guān)系,可以由外界主動訪問內(nèi)部做地址轉(zhuǎn)換
b. 動態(tài)NAT
第一步:刪除已建立的靜態(tài)NAT
- R1#conf t
- Enter configuration commands, one perline. End with CNTL/Z.
- R1(config)#no ip nat inside source static192.168.1.2 12.1.1.12
- R1(config)#no ip nat inside source static192.168.1.1 12.1.1.11
- R1(config)#end
- R1#
- %SYS-5-CONFIG_I: Configured from console byconsole
- R1#show ip nat translations
第二步:匹配需要轉(zhuǎn)換的數(shù)據(jù)包;
- R1(config)#access-list 1 permit 192.168.1.00.0.0.255
第三步:定義轉(zhuǎn)換成為的地址池;
- R1(config)#ip nat pool BB 12.1.1.1112.1.1.12 netmask 255.255.255.0
第四步:關(guān)聯(lián)數(shù)據(jù)包和地址池;
- R1(config)#ip nat inside source list 1 poolBB
- R1#show ip nat translations
- Pro Inside global Insidelocal Outside local Outside global
- icmp 12.1.1.11:10 192.168.1.1:10 2.2.2.2:10 2.2.2.2:10
- icmp 12.1.1.11:11 192.168.1.1:11 2.2.2.2:11 2.2.2.2:11
- icmp 12.1.1.11:12 192.168.1.1:12 2.2.2.2:12 2.2.2.2:12
- icmp 12.1.1.11:9 192.168.1.1:9 2.2.2.2:9 2.2.2.2:9
動態(tài)NAT特點(diǎn):一對一的對應(yīng),由客戶端觸發(fā)NAT,不能由外部主動訪問客戶端
c. PAT 地址復(fù)用
- R1(config)#ip nat inside source list 1 poolBB overload
- R1#show ip nat translations
- Pro Inside global Insidelocal Outside local Outside global
- icmp 12.1.1.11:13 192.168.1.1:13 2.2.2.2:13 2.2.2.2:13
- icmp 12.1.1.11:14 192.168.1.1:14 2.2.2.2:14 2.2.2.2:14
- icmp 12.1.1.11:15 192.168.1.1:15 2.2.2.2:15 2.2.2.2:15
- icmp 12.1.1.11:16 192.168.1.1:16 2.2.2.2:16 2.2.2.2:16
我們以靜態(tài)的NAT為例,驗證從PC1是否可以ping通Server
通過上圖可以看出,PC1到Server之間是通的。下面我們挨個的看一下整個發(fā)包測試的流程:
第一步:PC1發(fā)包,Src.IP=192.168.1.1, Dest.IP=2.2.2.2
第二步:交換機(jī)轉(zhuǎn)發(fā),按照MAC地址轉(zhuǎn)發(fā)
第三步:路由器R1的NAT轉(zhuǎn)換,地址由原來的:Src.IP=192.168.1.1, Dest.IP=2.2.2.2,變?yōu)榱? Src.IP=12.1.1.11, Dest.IP=2.2.2.2。其中192.168.1.1與12.1.1.11為NAT表定義的靜態(tài)地址轉(zhuǎn)換協(xié)議。
第四步:路由器路由轉(zhuǎn)發(fā) Src.IP=12.1.1.11, Dest.IP=2.2.2.2
第五步:Server接收包,并回復(fù)確認(rèn),目的地址和源地址互換。Src.IP=2.2.2.2, Dest.IP=12.1.1.11。
第六步:路由器R2路由轉(zhuǎn)發(fā),Src.IP=2.2.2.2, Dest.IP=12.1.1.11
第七步:路由器R1地址轉(zhuǎn)化,流程是第三步逆過程。
第八步:交換機(jī)轉(zhuǎn)發(fā),根據(jù)MAC地址
第九步:PC機(jī)接收確認(rèn),Src.IP=2.2.2.2, Dest.IP=192.168.1.1