隨著網(wǎng)絡(luò)的發(fā)展,公用IP地址的需求與日俱增。為了緩解公用IP地址的不足,并且保護(hù)公司內(nèi)部服務(wù)器的私網(wǎng)地址,可以使用NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù)將私網(wǎng)地址轉(zhuǎn)化成為公網(wǎng)地址,緩解IP地址的不足,并且隱藏內(nèi)部服務(wù)器的私網(wǎng)地址。
NAT的概述與現(xiàn)實(shí)方式
1. NAT概念
網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)通過將內(nèi)部網(wǎng)絡(luò)的私有IP地址翻譯成全球唯一的公網(wǎng)IP地址,使內(nèi)部網(wǎng)絡(luò)可以連接到互聯(lián)網(wǎng)等外部網(wǎng)絡(luò)上,廣泛應(yīng)用于各種類型的互聯(lián)網(wǎng)接入方式和各種類型的網(wǎng)絡(luò)中。原因很簡單,NAT不僅解決了IP地址不足的問題,而且還能夠隱藏內(nèi)部網(wǎng)絡(luò)的細(xì)節(jié),避免來自網(wǎng)絡(luò)外部的攻擊,起到一定的安全作用。
借助于NAT,私有保留地址的內(nèi)部網(wǎng)絡(luò)通過路由器發(fā)送數(shù)據(jù)包時(shí),私有地址被轉(zhuǎn)換成合法的IP地址,這樣一個(gè)局域網(wǎng)只需要少量地址(甚至是一個(gè)),即可實(shí)現(xiàn)使私有地址網(wǎng)絡(luò)中的所有計(jì)算機(jī)與互聯(lián)網(wǎng)的通信需求。
2. NAT的實(shí)現(xiàn)方式
NAT的實(shí)現(xiàn)方式有以下三種:
* 靜態(tài)轉(zhuǎn)換(Static Translation)
* 動(dòng)態(tài)轉(zhuǎn)換(Dynamic Translation)
* 端口多路復(fù)用(Port Address Translation,PAT)
靜態(tài)轉(zhuǎn)換IP地址的對(duì)應(yīng)關(guān)系是一對(duì)一且不變的,并沒有節(jié)約公用IP地址,只是隱藏了主機(jī)的真實(shí)地址。動(dòng)態(tài)轉(zhuǎn)換雖然在一定情況下節(jié)約了公用IP地址,但是當(dāng)內(nèi)部網(wǎng)絡(luò)同時(shí)訪問Internet的主機(jī)數(shù)大于合法地址池中的IP地址數(shù)時(shí)就不適用了。端口多路復(fù)用可以使所有的內(nèi)部網(wǎng)絡(luò)主機(jī)共享一個(gè)合法的外部IP地址,從而最大限度的節(jié)約IP地址資源。
由于動(dòng)態(tài)轉(zhuǎn)換形成的IP地址的對(duì)應(yīng)關(guān)系是不確定的、隨機(jī)的;端口多路復(fù)用使用的是端口號(hào)的轉(zhuǎn)換,也是不確定的,所以內(nèi)網(wǎng)服務(wù)器不能使用這兩種轉(zhuǎn)換方式,這是由于外網(wǎng)用戶無法確定服務(wù)器合法的公網(wǎng)IP地址,導(dǎo)致無法訪問服務(wù)器。這時(shí)使用靜態(tài)轉(zhuǎn)換將私有IP地址轉(zhuǎn)換為固定的合法的IP地址,這樣服務(wù)器有了固定的合法的公網(wǎng)IP地址,才能實(shí)現(xiàn)外網(wǎng)的訪問。
NAT的術(shù)語與轉(zhuǎn)換表
內(nèi)部局部IP地址(Inside Local IP Address):在內(nèi)部網(wǎng)絡(luò)中分配給主機(jī)的私有IP地址。該地址是從RFC1918(私有互聯(lián)網(wǎng)空間地址分配)所定義的私有地址空間中分配的,或者隨機(jī)挑選的。
內(nèi)部全局IP地址(Inside Global IP Address):一個(gè)合法的IP地址(由NIC或網(wǎng)絡(luò)服務(wù)提供商分配)。它對(duì)外代表一個(gè)或多個(gè)內(nèi)部局部IP地址。該地址通常是從全球統(tǒng)一可尋址的地址空間中分配的,一般由互聯(lián)網(wǎng)服務(wù)提供商(ISP)提供。
外部局部IP地址(Outside Global IP Address):由其所有者給外部網(wǎng)絡(luò)上的主機(jī)分配的IP地址。該地址通常也是從全球統(tǒng)一可尋址的地址空間中分配的。
外部局部IP地址(Outside Local IP Address):外部主機(jī)表現(xiàn)在內(nèi)部網(wǎng)絡(luò)的IP地址。這一地址是從內(nèi)部可尋址的地址空間中分配的,很可能是從諸如RFC1918中所定義的保留地址空間分配的。
簡單轉(zhuǎn)換條目(Simple Translation Entry):將一個(gè)IP地址映射到另一IP地址的轉(zhuǎn)換條目。
擴(kuò)展轉(zhuǎn)換條目(Extended Translation Entry):映射IP地址和端口到另一對(duì)IP地址和端口的條目。
NAT的特性
NAT的典型優(yōu)勢(shì)如下:
1.NAT允許企業(yè)內(nèi)部網(wǎng)使用私有地址,并通過設(shè)置合法的地址集,使內(nèi)部網(wǎng)可以與互聯(lián)網(wǎng)進(jìn)行通信,從而達(dá)到節(jié)省合法注冊(cè)地址的目的。
2.NAT可以減少規(guī)劃地址時(shí)發(fā)生的地址重疊情況。
3.NAT增強(qiáng)了內(nèi)部網(wǎng)絡(luò)與公用網(wǎng)絡(luò)連接時(shí)的靈活性。
4.NAT支持地址重疊。
當(dāng)然,NAT也不是沒有缺點(diǎn)。用于地址轉(zhuǎn)換的處理過程會(huì)帶來功能和性能上的一些損失,特別是在IP報(bào)文承載的數(shù)據(jù)中包含發(fā)送IP地址信息的情況下。
NAT的典型缺點(diǎn)如下:
1.NAT會(huì)使延遲增大。
2.NAT增加了配置和排錯(cuò)的復(fù)雜性。
3.NAT也可能會(huì)使某些需要使用內(nèi)嵌IP地址的應(yīng)用不能正常工作,因?yàn)樗[藏了端到端的IP地址。
NAT的配置
1.靜態(tài)NAT配置
一個(gè)私有地址對(duì)應(yīng)一個(gè)公有地址,向外網(wǎng)發(fā)布服務(wù)器。
(1) 在內(nèi)部局部地址和內(nèi)部全局地址之間建立靜態(tài)地址轉(zhuǎn)換。
Router(config)#ip nat inside source static local-ip global-ip [extendable]
其中,參數(shù)“extendable”(可選)表示允許同一個(gè)內(nèi)部局部地址映射到多個(gè)內(nèi)部全局地址?!癷nside”表示從inside口進(jìn)入的流量將源地址(source)進(jìn)行靜態(tài)轉(zhuǎn)換。
例如:將內(nèi)部局部地址192.168.100.2轉(zhuǎn)換為內(nèi)部全局地址61.159.62.130
Router(config)# ip nat inside source static 192.168.100.2 61.159.62.130
(2) 在內(nèi)部和外部端口上啟用NAT。
設(shè)置NAT功能的路由器需要有一個(gè)內(nèi)部端口(inside)和一個(gè)外部端口(outside)。內(nèi)部端口連接的網(wǎng)絡(luò)用戶使用的是內(nèi)部IP地址,外部端口連接的是外部的網(wǎng)絡(luò),如互聯(lián)網(wǎng)。要NAT發(fā)揮作用,必須在這兩個(gè)端口上啟用NAT。
Router(config)# int f0/0
Router(config-if)# ip nat inside
Router(config)# int f1/0
Router(config-if)# ip nat outside
NAT端口映射
需要使用NAT的端口映射功能,在內(nèi)部局部地址和內(nèi)部全局地址之間建立NAT端口映射的語法如下:
Router(config)# ip nat inside source static protocol local-ip UDP/TCP-port global-ip UDP/TCP-port [extendable]
此命令是將TCP或UDP協(xié)議中內(nèi)部局部地址需要轉(zhuǎn)換的端口號(hào)轉(zhuǎn)換成為內(nèi)部全局地址的端口號(hào)。
例如:希望外網(wǎng)通過80端口訪問公司內(nèi)部的Web服務(wù)器192.168.100.2
Router(config)# ip nat inside source static tcp 192.168.100.2 80 61.159.62.131 80 extendable
NAT端口映射還可以將不同服務(wù)器的不同服務(wù)(端口)映射到同一公網(wǎng)地址的不同端口,給人的感覺是通過一個(gè)地址訪問了所有的服務(wù)。
2.動(dòng)態(tài)NAT配置
多個(gè)私有地址對(duì)應(yīng)多個(gè)公有地址,負(fù)責(zé)上網(wǎng)。
(1) 定義內(nèi)部網(wǎng)絡(luò)中允許訪問外部網(wǎng)絡(luò)的訪問控制列表
(2) 定義合法IP地址池
Router(config)# ip nat pool pool-name start-ip end-ip { netmask netmask | prefix-length prefix-length} [type rotary]
下面是對(duì)該命令相關(guān)參數(shù)的說明:
pool-name:放置轉(zhuǎn)換后地址的地址池名稱。
start-ip/end-ip:地址池內(nèi)起始和終止ip地址。
netmask netmask:子網(wǎng)掩碼,以點(diǎn)分十進(jìn)制數(shù)表示。
prefix-length prefix-length:子網(wǎng)掩碼,以掩碼中1的數(shù)量表示(如:prefix-length 24 等同于netmask 255.255.255.0)。兩種掩碼的表示方式等價(jià),任意使用一個(gè)即可。
type rotary(可選):地址池中的地址為循環(huán)使用。
如果有多個(gè)地址池,可以重復(fù)使用此命令添加地址池。
注意:配置訪問控制列表時(shí),可以將其配置為標(biāo)準(zhǔn)訪問控制列表,也可以將其配置為擴(kuò)展訪問控制列表。
(3) 實(shí)現(xiàn)網(wǎng)絡(luò)地址轉(zhuǎn)換
在全局配置模式中,將由access-list指定的內(nèi)部局部地址與指定的內(nèi)部全局地址池進(jìn)行地址轉(zhuǎn)換。命令語法如下:
Router(config)# ip nat inside source list access-list-name pool pool-name [overload]
其中,“overload”(可選)表示使用地址復(fù)用,用于PAT。
例如:將訪問控制列表1中的局部地址轉(zhuǎn)換為test0地址池中定義為全局IP地址。
Router(config)# ip nat inside source list 1 pool test0
如果有多個(gè)地址池,可以一一添加,以增加合法地址池的數(shù)量范圍。命令如下:
Router(config)# ip nat inside source list 1 pool test1
Router(config)# ip nat inside source list 1 pool test2
4) 在內(nèi)部和外部接口上啟用NAT。
PAT
1. 使用外部全局地址
如圖所示,按以下配置說明使用外部全局地址的方法配置PAT
(1) 配置內(nèi)部訪問控制列表
Router(config)# access-list 1 permit 10.1.1.0 0.0.0.255
(2) 定義合法的IP地址池
Router(config)# ip nat pool ysf 61.159.62.131 61.159.62.131 netmask 255.255.255.0
(3) 設(shè)置復(fù)用動(dòng)態(tài)IP地址轉(zhuǎn)換
在全局配置模式中,設(shè)置在內(nèi)部局部地址與內(nèi)部全局地址之間建立動(dòng)態(tài)地址轉(zhuǎn)換。
Router(config)# ip nat inside source list access-list-name pool pool-name [overload]
例如:下面的命令表示,以端口復(fù)用方式,將訪問控制列表1中的局部地址轉(zhuǎn)換為onlyone地址中定義的全局IP地址。
Router(config)# ip nat inside source list 1 pool ysf overload
(4) 在內(nèi)部和外部端口上啟用NAT。
Router(config)# int f0/0
Router(config-if)# ip nat outside
Router(config)# int f1/0
Router(config-if)# ip nat inside
(5) 配置默認(rèn)路由,使數(shù)據(jù)包可以正常選路
Router(config)# ip route 0.0.0.0 0.0.0.0 61.159.62.129
注意:以上NAT配置使用的是一段合法IP地址。有時(shí)ISP分配的是兩端IP地址,一段子網(wǎng)掩碼為30的接口地址和一段公網(wǎng)地址,其中接口地址可以是公網(wǎng)地址也可以是私網(wǎng)地址。如果ISP分配兩端IP地址,則配置廣域網(wǎng)接口時(shí)使用接口地址,配置NAT時(shí)使用公網(wǎng)地址,其配置與上述示例相同。
2. 復(fù)用路由器外部接口地址
有時(shí),只有一個(gè)外部IP地址,并且已被路由器外部接口使用,也可以直接使用接口的IP地址作為轉(zhuǎn)接后的源地址
(1)定義內(nèi)部訪問控制列表
Router(config)# access-list 1 permit 10.1.1.0 0.0.0.255
(2)定義合法的IP地址池
由于直接使用接口IP地址,所以不需定義IP地址池
(2)設(shè)置復(fù)用動(dòng)態(tài)IP地址轉(zhuǎn)換
在全局配置模式下,設(shè)置在內(nèi)部的本地地址與內(nèi)部合法地址之間建立動(dòng)態(tài)轉(zhuǎn)換。命令如下:
Router(config)# ip nat inside source list 1 int f0/0 overload
上述命令表示,以端口復(fù)用方式,將訪問控制列表1中的私有地址轉(zhuǎn)換為路由器外部接口的合法IP地址。
(3)在內(nèi)部和外部端口上啟用NAT
Router(config)# int f0/0
Router(config-if)# ip nat outside
Router(config)# int f1/0
Router(config-if)# ip nat inside
驗(yàn)證NAT配置
可以使用show ip nat translation命令顯示當(dāng)前存在的轉(zhuǎn)換。
可以使用下面的命令對(duì)NAT進(jìn)行監(jiān)控
Router(config)# show ip nat translations [verbose]
該命令用來檢查當(dāng)前存在的轉(zhuǎn)換,關(guān)鍵字verbose與該命令一起使用能夠顯示更多的信息,包括一個(gè)動(dòng)態(tài)條目的保存時(shí)間。顯示的詳細(xì)信息中,create、use、timeout、left分別顯示NAT轉(zhuǎn)換條目的創(chuàng)建時(shí)間、使用時(shí)間、超時(shí)時(shí)間值、剩余時(shí)間,而靜態(tài)NAT形成的轉(zhuǎn)換條目的timeout為0,表示永遠(yuǎn)存在。
默認(rèn)情況下,如果在一定時(shí)間內(nèi)沒有使用動(dòng)態(tài)地址轉(zhuǎn)換條目,就會(huì)因超時(shí)而被取消。在沒有配置地址復(fù)用的情況下,簡單轉(zhuǎn)換條目的超時(shí)時(shí)間為24小時(shí)。
如果配置了地址復(fù)用,又因?yàn)槊總€(gè)條目都包含了使用它的數(shù)據(jù)流的更多內(nèi)容,那么就可以對(duì)轉(zhuǎn)換條目的超時(shí)值實(shí)施較細(xì)致的控制,下面是采用地址復(fù)用時(shí)默認(rèn)的NAT超時(shí)值。
* UDP超時(shí)值:5分鐘
* DNS超時(shí)值:1分鐘
* TCP超時(shí)值:24小時(shí)
* 結(jié)束和復(fù)位值:1小時(shí)
注意:“結(jié)束”和“復(fù)位”指的是TCP連接的結(jié)束包和復(fù)位包。
如果必要,用戶可以改變超時(shí)的默認(rèn)值,使用的命令如下:
Router(config)# ip nat translation { dns-timeout | icmp-timeout | tcp-timeout | udp-timeout | finrst-timeout | syn-timeout} {seconds | never}
可以對(duì)不同的協(xié)議設(shè)置NAT轉(zhuǎn)換超時(shí)時(shí)間,也可以設(shè)置為永遠(yuǎn)不超時(shí)。例如,命令ip nat translation icmp-timeout 120 表示,將ICMP協(xié)議的NAT轉(zhuǎn)換超時(shí)時(shí)間設(shè)置為120秒。
注意:每個(gè)NAT條目大概要占用160字節(jié)的內(nèi)存,所以,65535條條目會(huì)占用多余10MB的內(nèi)存和相當(dāng)多的CPU資源。在實(shí)際工作中,若發(fā)現(xiàn)路由器的CPU和內(nèi)存資源緊張,可以查看NAT配置和轉(zhuǎn)換條目。
有時(shí)因?yàn)镹AT轉(zhuǎn)換條目過多導(dǎo)致設(shè)備性能下降,可以使用clear ip nat translation * 命令來清除NAT轉(zhuǎn)換表中的所有條目。*是一個(gè)通配符,代表任意值。首先使用show ip nat translations查看當(dāng)前活躍的轉(zhuǎn)換條目,然后,輸入clear ip nat translation *命令來清除所有的轉(zhuǎn)換。再次輸入show ip nat translations命令進(jìn)行查看,NAT轉(zhuǎn)換條目中只剩下靜態(tài)轉(zhuǎn)換條目。
使用clear ip nat translation inside local-ip global-ip,可以清除包含一個(gè)內(nèi)部轉(zhuǎn)換的一個(gè)簡單轉(zhuǎn)換條目。
使用clear ip nat translation outside local-ip global-ip,可以清除包含一個(gè)外部轉(zhuǎn)換的一個(gè)簡單轉(zhuǎn)換條目。
聯(lián)系客服