楊 林, 楊 勇
目前,隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,在IPv4上使用的公網(wǎng)IP地址越來(lái)越緊缺,各網(wǎng)絡(luò)使用單位分配到的IP地址資源越來(lái)越有限,IP地址資源的短缺已經(jīng)對(duì)網(wǎng)絡(luò)應(yīng)用造成相當(dāng)嚴(yán)重的影響。
從技術(shù)方案上來(lái)說(shuō),為解決這個(gè)問(wèn)題,出現(xiàn)了多種解決辦法,如從根本上將網(wǎng)絡(luò)協(xié)議技術(shù)從 IPv4更新、升級(jí)到IPv6,徹底拋棄過(guò)去使用的32位IP地址,而采用長(zhǎng)達(dá)128位的IP地址來(lái)緩解。但具體實(shí)現(xiàn)起來(lái),卻存在很多問(wèn)題,原因是由于當(dāng)前網(wǎng)絡(luò)上的絕大多數(shù)設(shè)備仍是 IPv4設(shè)備,若把這些設(shè)備全部取代更換為IPv6設(shè)備,網(wǎng)絡(luò)運(yùn)營(yíng)商及網(wǎng)絡(luò)使用單位耗費(fèi)的成本巨大。同時(shí),網(wǎng)絡(luò)的升級(jí)換代必須得保證不中斷現(xiàn)有的網(wǎng)絡(luò)應(yīng)用服務(wù)業(yè)務(wù),實(shí)現(xiàn)平滑過(guò)渡,其難度相對(duì)較大。
可以這樣認(rèn)為,是IP地址的耗盡才促成了無(wú)類型域間選路(CIDR,Classless Inter-Domain Routing)的開發(fā),但CIDR開發(fā)的主要目的是為了有效地使用現(xiàn)有的Internet地址。而同時(shí)根據(jù)基本的互聯(lián)網(wǎng)通信協(xié)議開發(fā)的地址轉(zhuǎn)換技術(shù)卻可以在多重的 Internet子網(wǎng)中使用相同的 IP,用來(lái)減少注冊(cè)IP地址的使用[1]。
從IPv4過(guò)渡到IPv6是一個(gè)漸進(jìn)的過(guò)程,而且這一過(guò)程要持續(xù)相當(dāng)長(zhǎng)的時(shí)間。根據(jù)網(wǎng)絡(luò)發(fā)展的現(xiàn)實(shí)情況來(lái)看,要在不同時(shí)期采用不同的規(guī)劃策略,在不中斷現(xiàn)有業(yè)務(wù)的基礎(chǔ)上來(lái)實(shí)現(xiàn)平滑過(guò)渡。而根除此矛盾的一個(gè)根本方法,即在當(dāng)前現(xiàn)有的路由器上實(shí)行不同種類的網(wǎng)絡(luò)地址轉(zhuǎn)換技術(shù)(NAT,Network Address Translation),以此解決當(dāng)前IPv4過(guò)渡時(shí)期時(shí)IP地址資源嚴(yán)重不足的問(wèn)題。
NAT技術(shù)使得一個(gè)私有網(wǎng)絡(luò)可以通過(guò)Internet注冊(cè)IP連接到外界,位于Inside網(wǎng)絡(luò)和Outside網(wǎng)絡(luò)中的NAT路由器在發(fā)送數(shù)據(jù)包之前,負(fù)責(zé)把內(nèi)部IP地址轉(zhuǎn)換成外部合法公網(wǎng)地址[2]。
NAT的轉(zhuǎn)換可以采取靜態(tài)轉(zhuǎn)換(Static Translation)和動(dòng)態(tài)轉(zhuǎn)換(Dynamic Translation)兩種方式。靜態(tài)轉(zhuǎn)換將內(nèi)部地址和外部地址一對(duì)一映射。當(dāng)NAT需要確認(rèn)哪個(gè)地址需要轉(zhuǎn)換,轉(zhuǎn)換時(shí)采用哪個(gè)地址Pool時(shí),就使用動(dòng)態(tài)翻譯。采用端口多路復(fù)用技術(shù),或改變外出數(shù)據(jù)的源Port技術(shù)可以將多個(gè)內(nèi)部IP地址影射到同一個(gè)外部地址,這就是端口地址轉(zhuǎn)換(PAT,Port Address Translator)[3]。
反過(guò)來(lái),要影射一個(gè)外部IP到內(nèi)部地址時(shí),則可以利用TCP的負(fù)荷分布技術(shù)。當(dāng)使用這個(gè)特征時(shí),內(nèi)部主機(jī)基于輪叫調(diào)度機(jī)制,將外部提交訪問(wèn)的新鏈接地址不斷定位到內(nèi)網(wǎng)的相應(yīng)主機(jī)上去。
使用NAT大大節(jié)省了公網(wǎng)IP地址的用量。一個(gè)網(wǎng)絡(luò)使用單位申請(qǐng)到的合法IP地址往往很少,而內(nèi)部網(wǎng)絡(luò)用戶相對(duì)卻很多,通過(guò)NAT功能就能實(shí)現(xiàn)多個(gè)用戶共同使用一個(gè)合法的 IP地址與外部網(wǎng)絡(luò)進(jìn)行通信。
配置NAT的方式有靜態(tài)NAT、動(dòng)態(tài)NAT、NAT超載等方式。NAT超載是使用最多的一種地址轉(zhuǎn)換方式,采用的工作原理是當(dāng)多個(gè)用戶同時(shí)使用一個(gè)IP地址時(shí),路由器利用上層的TCP或UDP端口號(hào)唯一標(biāo)識(shí)某臺(tái)計(jì)算機(jī),允許多個(gè)內(nèi)部私有IP地址共用一個(gè)外部合法公網(wǎng)IP地址[4]。這對(duì)于只申請(qǐng)到少量IP地址,但卻經(jīng)常同時(shí)有多個(gè)內(nèi)部用戶訪問(wèn)外部網(wǎng)絡(luò)的時(shí)候,這種轉(zhuǎn)換極為有用。
當(dāng)位于 NAT設(shè)備內(nèi)側(cè)的內(nèi)部網(wǎng)絡(luò)用戶連接Internet時(shí),NAT將用戶的內(nèi)部網(wǎng)絡(luò)IP地址轉(zhuǎn)換成一個(gè)存儲(chǔ)在NAT地址池里的外部公共IP地址,將它交換出去,并在NAT地址轉(zhuǎn)換表中記錄下這個(gè)轉(zhuǎn)換項(xiàng)。當(dāng)外部網(wǎng)絡(luò)數(shù)據(jù)返回時(shí),NAT技術(shù)查詢 NAT地址轉(zhuǎn)換表項(xiàng),將目標(biāo)IP地址替換成初始的內(nèi)部用戶IP地址,從而將數(shù)據(jù)包轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)用戶[5]。
從工作方式上看,NAT確實(shí)提高了內(nèi)部網(wǎng)絡(luò)的安全。一個(gè)單位不想讓外部網(wǎng)絡(luò)用戶知道自己內(nèi)部網(wǎng)絡(luò)的結(jié)構(gòu),可以依賴 NAT將內(nèi)部網(wǎng)絡(luò)與外部Internet隔離開來(lái),外部網(wǎng)絡(luò)用戶就無(wú)法識(shí)別使用NAT技術(shù)的內(nèi)部用戶,也就無(wú)法直接對(duì)內(nèi)部用戶進(jìn)行控制,從而達(dá)到保護(hù)內(nèi)網(wǎng)的目的。
NAT功能的設(shè)備大多安放在網(wǎng)絡(luò)的邊緣,路由部署在網(wǎng)絡(luò)的邊界,當(dāng)網(wǎng)絡(luò)內(nèi)的計(jì)算機(jī)要訪問(wèn)本網(wǎng)絡(luò)內(nèi)的服務(wù)器時(shí),直接使用私有IP地址,當(dāng)訪問(wèn)外部服務(wù)器時(shí),數(shù)據(jù)包被轉(zhuǎn)發(fā)給路由器,路由器執(zhí)行NAT操作,把內(nèi)部的私有地址轉(zhuǎn)換成外部的、可路由的公共IP地址后,再轉(zhuǎn)發(fā)出去[6]。
某網(wǎng)絡(luò)使用單位申請(qǐng)到一個(gè)合法IP地址,即路由器Fa0/0接口的IP地址222.56.127.137,此時(shí)要提供給全單位的計(jì)算機(jī)都可以訪問(wèn)Internet。Web服務(wù)器內(nèi)部地址 192.168.2.2,子網(wǎng)掩碼255.255.255.0, 網(wǎng) 關(guān) 192.168.2.220,DNS 211.98.72.8。外部的一臺(tái)計(jì)算機(jī) IP地址192.168.3.3,子網(wǎng)掩碼 255.255.255.0,網(wǎng)關(guān)192.168.3.1,DNS 211.98.72.8。網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖如圖1所示。
圖1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
第1步:對(duì)路由器R1做基本配置。(斜體加粗字部分為鍵入命令)
Router>en
Router#conf t
Router(config)#host R1 R1(config)#int fa 0/0
R1(config-if)#ip add 222.56.127.137 255.255.255.0 路由器連接Internet的接口,配置合法IP地址
R1(config-if)#no shut
R1(config-if)#int fa 2/0
R1(config-if)#ip add 192.168.2.220 255.255.255.0 路由器連接內(nèi)網(wǎng)接口,配置內(nèi)網(wǎng)私有地址
R1(config-if)#no shut
R1(config-if)#no cdp run關(guān)閉CDP協(xié)議
R1(config-if)#ip route 0.0.0.0 0.0.0.0 192.168.1.1 配置路由器的默認(rèn)路由
第2步:對(duì)路由器R1做配置,指定對(duì)外接口。
R1(config)#int fa 0/0
R1(config-if)#ip nat outside指明接口是對(duì)外的接口第3步:對(duì)路由器R1做配置,指定對(duì)內(nèi)接口。R1(config)#int fa 2/0
R1(config-if)#ip nat inside指明接口是對(duì)內(nèi)的接口
第4步:對(duì)路由器R1做配置,創(chuàng)建地址池。
R1(config)#ip nat pool out-pool 222.56.127.137 222.56.127.137 netmask 255.255.255.0創(chuàng)建地址池 Out-pool,起始至結(jié)束地址是222.56.127.137 ,使用掩碼為255.255.255.0。如申請(qǐng)到多個(gè)合法IP地址,則開始至結(jié)束地址分別改為IP地址段即可。
第5步:對(duì)路由器R1做配置,允許被NAT轉(zhuǎn)換。
R1(config)#access-list 1 permit 192.168.2.0 0.0.0.255 配置允許被NAT的條件,這里只允許一部分IP地址被NAT。
第6步:對(duì)路由器R1做配置,關(guān)聯(lián)允許被NAT的列表和地址池。
R1(config)#ip nat inside source list 1 pool out-pool overload 把允許被NAT的ACL 1和前面創(chuàng)建的地址池 Out-pool關(guān)聯(lián)起來(lái),Overload允許使用上層的UDP和TCP端口標(biāo)識(shí)會(huì)話,尤其是在內(nèi)網(wǎng)上網(wǎng)主機(jī)多于地址池中合法IP地址的情況下,這個(gè)關(guān)鍵字必不可少。
在實(shí)際的網(wǎng)絡(luò)組建中,若單位不對(duì)外提供 Web服務(wù),選擇的網(wǎng)絡(luò)接入方式可以是動(dòng)態(tài)IP接入(即寬帶拔號(hào)方式,這種方式比使用固定 IP接入費(fèi)用低),也就是路由器的對(duì)外接口使用DHCP動(dòng)態(tài)獲取公網(wǎng)IP地址,因獲得的這個(gè)IP地址不固定,故無(wú)法創(chuàng)建地址池。此時(shí)可以把配置第4步和第6步變成一步,即將上述配置的第4步省略,把第6步更換成如下配置:
R1(config)#ip nat inside source list 1 interface fa 0/0 overload 把允許被 NAT和ACL和路由器對(duì)外接口關(guān)聯(lián)起來(lái),無(wú)論路由器對(duì)外接口獲取到什么IP地址,路由器都使用對(duì)外接口的IP地址進(jìn)行NAT。
若在內(nèi)網(wǎng)中還需對(duì)外提供Web服務(wù),則在路由器R1上配置端口映射,配置內(nèi)容如下:
R1(config)#ip nat inside source static tcp 192.168.2.2 80 int fa 0/0 80 配置端口映射,外界對(duì) Fa0/0接口 80端口的訪問(wèn),被轉(zhuǎn)換到內(nèi)網(wǎng)192.168.2.2的80端口,
第7步:測(cè)試配置是否成功。在筆記本IE地址欄中鍵入 http://222.56.127.137,可以成功訪問(wèn)到Web服務(wù)器上的Web主頁(yè)。
首先,NAT違反了 IP地址結(jié)構(gòu)模型的設(shè)計(jì)原則[7-8]。IP地址結(jié)構(gòu)模型的基礎(chǔ)是每個(gè)IP地址均標(biāo)識(shí)了一個(gè)網(wǎng)絡(luò)的連接。Internet的軟件設(shè)計(jì)就是建立在這個(gè)前提之上,而NAT使得有很多主機(jī)可能使用相同的地址[9]。
其次,NAT使得IP協(xié)議從面向無(wú)連接變成面向連接。NAT必須維護(hù)專用IP地址與公用IP地址以及端口號(hào)的映射關(guān)系。在TCP/IP協(xié)議體系中,如果一個(gè)路由器出現(xiàn)故障,不會(huì)影響到TCP協(xié)議的執(zhí)行。因?yàn)橹灰獛酌胧詹坏綉?yīng)答,發(fā)送進(jìn)程就會(huì)進(jìn)入超時(shí)重傳處理。而當(dāng)存在 NAT時(shí),最初設(shè)計(jì)的 TCP/IP協(xié)議過(guò)程將發(fā)生變化,Internet將變得非常脆弱[10]。
另外,NAT違反了基本的網(wǎng)絡(luò)分層結(jié)構(gòu)模型的設(shè)計(jì)原則。因?yàn)樵趥鹘y(tǒng)的網(wǎng)絡(luò)分層結(jié)構(gòu)模型中,第N層是不能修改第N+1層的報(bào)頭內(nèi)容的。NAT破壞了這種各層獨(dú)立的原則。
NAT技術(shù)在當(dāng)前IPv4過(guò)渡時(shí)期,對(duì)信息化、網(wǎng)絡(luò)化建設(shè)方面仍起著很大的作用,對(duì)緩解IP地址資源不足提供了良好的解決方案,同時(shí)也在一定范圍內(nèi)避免了外界硬件資源條件不足而對(duì)網(wǎng)絡(luò)服務(wù)造成的影響,一定程度上突破了網(wǎng)絡(luò)地址空間不夠?qū)е略诰W(wǎng)絡(luò)應(yīng)用上的障礙,相應(yīng)地解決了NAT與網(wǎng)絡(luò)性能問(wèn)題。盡管它本身還存在一系列的弊端,這有待于在IPv6時(shí)代來(lái)臨之前繼續(xù)加強(qiáng)打破該限制與不利的研究,進(jìn)而讓NAT技術(shù)能夠繼續(xù)發(fā)揮它相應(yīng)的作用。
[1] 邵澤云.網(wǎng)絡(luò)地址轉(zhuǎn)換和策略路由在校園網(wǎng)中的應(yīng)用[J].隴東學(xué)院學(xué)報(bào),2010(05):30-32.
[2] 劉風(fēng)華,丁賀龍,張永平.關(guān)于NAT技術(shù)的研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2006(10):1814-1817.
[3] 周利利,張平,梁祖華.IPv4/IPv6過(guò)渡技術(shù)在校園網(wǎng)中的應(yīng)用[J].通信技術(shù),2009,42(02):212-214.
[4] 李文琴.NAT技術(shù)在校園內(nèi)部網(wǎng)絡(luò)中的應(yīng)用[J].重慶工商大學(xué)學(xué)報(bào):自然科學(xué)版,2007(04):353-356.
[5] 張建偉,賀蕾,郭云飛,等.基于路由器的 NAT系統(tǒng)的擴(kuò)展與實(shí)現(xiàn)[J].通信技術(shù),2008,41(06):36-37.
[6] 孫衛(wèi)喜,茍紅玲.NAT技術(shù)在高校多校區(qū)資源共享中的應(yīng)用[J].微型電腦應(yīng)用,2009(10):59-60.
[7] 馬義濤,薛質(zhì),王軼駿.關(guān)于TCP穿越 NAT技術(shù)的研究與分析[J].信息安全與通信保密,2008(04):47-49.
[8] 阮宜龍.NAT和IPSec相容性研究[J].信息安全與通信保密,2007(02):108-110.
[9] 吳紹興,劉德春,尹應(yīng)鵬.路由器下NAT技術(shù)的實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2004(02):50-53.
[10] 王瑾,吳啟山.基于IPv6過(guò)渡技術(shù)在校園網(wǎng)中的應(yīng)用研究[J].通信技術(shù),2008,41(09):142-144.