張韜
摘要:網(wǎng)絡(luò)中使用NAT技術(shù)實現(xiàn)企業(yè)和Internet連接是一種非常普遍的應(yīng)用,此時通過NAT的數(shù)據(jù)包報頭都將會被改寫,而一旦企業(yè)內(nèi)又有IPSec VPN系統(tǒng)部署的需求,由于IPSec從安全性方面不允許改變數(shù)據(jù)包內(nèi)容,所以數(shù)據(jù)包在穿越NAT網(wǎng)絡(luò)時,就會存在著困難。實踐證明,在網(wǎng)絡(luò)出口設(shè)備上使用NAT穿越技術(shù)可以很好解決以上問題。
關(guān)鍵詞:NAT;IPSec VPN;NAT穿越;udp;esp
中圖分類號:TP393
文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)31-0017-02
1概述
在企業(yè)VPN網(wǎng)絡(luò)的部署實施中,NAT和IPSec兩種技術(shù)經(jīng)常存在著矛盾。主要原因是NAT進(jìn)行地址轉(zhuǎn)換的時候,需要修改數(shù)據(jù)包報頭中的源lP地址和源端口號部分,此時數(shù)據(jù)包將被改寫。而經(jīng)過IPSec保護(hù)后的數(shù)據(jù)包在中途傳輸時,如果使用傳輸模式,因為IPSec會將IP包頭進(jìn)行加密保護(hù)起來,并生成hash值,要更改IP包頭是不可行的,如果隨意改動IP包頭,將使該數(shù)據(jù)包作廢,所以普通IPSec數(shù)據(jù)包無法穿越NAT設(shè)備,這勢必就會影響到企業(yè)IPSec VPN之間的正常通信。而使用隧道模式時,可以避免這樣共存的問題,后面涉及的IPSec VPN場景都是基于隧道模式。
2解決方案
目前,為了解決NAT和IPSec VPN之間的共存問題,已形成了較為成熟的解決方案,主要有以下幾種。
(1)基于特定域IP(Realm Specific IP,RSIP)的穿越技術(shù)嘲
因為在最初設(shè)計的時候就沒有考慮到NAT與IPSec兩種技術(shù)之間的兼容性,對于IPSec可以更改其協(xié)議設(shè)計從而在根源上解決沖突或者對于NAT則可以使用替代的RSIP協(xié)議,這種解決方案雖然能夠全面解決兼容問題,但是實現(xiàn)相對復(fù)雜,需要對原有設(shè)備做較大改動。
(2)基于NAT-T的穿越技術(shù)
路由器探測網(wǎng)絡(luò)路徑中是否存在NAT的功能,稱為NATTraversal(NAT穿越),簡稱NAT-T。它使用UDP協(xié)議封裝ESP載荷,在ESP頭部之前插入8個字節(jié)的UDP報頭,由于這個新的傳輸層頭部擁有未被加密的端口信息且被存放在PAT表中,因而可以成功地進(jìn)行PAT轉(zhuǎn)換。這種方式不需要對Internet密鑰交換協(xié)議或者IPSec協(xié)議做修改,實現(xiàn)最為方便。
(3)基于NAT前置的穿越技術(shù)
對于在Site-to-Site中建立IPSec VPN的場景,可以在同一設(shè)備中實現(xiàn)IPSec和NAT,并且先進(jìn)行NAT處理,后實現(xiàn)IPSec,就可以避免它們兩者之間的矛盾。但是,這種解決方案有它的局限性,如果超出了它的適用范圍,則這種方案就不再適用了。
在上述現(xiàn)有三種主流IPSec VPN的NAT穿越技術(shù)中,NAT-T技術(shù)由于實現(xiàn)相對簡單因而得到廣泛應(yīng)用。本文基于NAT-T方式進(jìn)行網(wǎng)絡(luò)設(shè)計及實現(xiàn)。
2.1 NAT-T穿越技術(shù)原理概述
NAT-T技術(shù)首先在VPN中IKE協(xié)商的第一階段時就通過雙方發(fā)送Vendor ID載荷探測是否支持NAT穿越,通過檢測雙方地址和端口的變化探測網(wǎng)絡(luò)路徑中是否存在NAT,檢測的方法是發(fā)送測試數(shù)據(jù)包,對數(shù)據(jù)包做Hash,如果收到的數(shù)據(jù)包的Hash沒變化,就認(rèn)為路徑中沒有NAT。測試時發(fā)送的數(shù)據(jù)包稱為NAT discovery(NAT-D)包,源地址和端口與目標(biāo)地址和端口是分開的,如果有多個,那么數(shù)據(jù)包也就有多個包。
當(dāng)?shù)谝浑A段發(fā)現(xiàn)存在NAT之后,IKE的第二階段才會采用NAT-T,在ISAKMP中使用目的端口號為UDP4500來協(xié)商N(yùn)AT-T,而源端口則使用下一個可用更高的端口號,如4501,在選擇端口時,如果端口已經(jīng)被占用了,則使用4501,4502,一直到可用為止。此時IPSec的數(shù)據(jù)包會被作為數(shù)據(jù)部分,再次封裝在UDP包中進(jìn)行傳輸,NAT技術(shù)也就影響不到IPSec數(shù)據(jù)包。
NAT-T只能使用ESP協(xié)議封裝來穿越NAT,不能使用AH協(xié)議封裝,因為AH頭部不允許發(fā)生一點變化,不允許出現(xiàn)檢驗錯誤。當(dāng)NAT-T將ESP協(xié)議頭封裝到UDP包中時,在ESP協(xié)議的IP報頭外不僅會添加新的IP報頭,還要添加新的UDP頭部(源端口和目的端口均為UDP500),使之可以在NAT環(huán)境下被使用,NAT-T隧道封裝格式見圖1所示。
2.2 NAT-T技術(shù)設(shè)計與實現(xiàn)
當(dāng)企業(yè)某個分支機(jī)構(gòu)只有一個或很少的公網(wǎng)IP時,同時又要考慮安全性,會將VPN路由器放置在內(nèi)網(wǎng)中,配置內(nèi)網(wǎng)IP地址后,再通過出口路由器或防火墻等設(shè)備進(jìn)行NAT地址轉(zhuǎn)換后和總部建立VPN連接,如圖2所示。但是建立VPN必須使用公網(wǎng)IP地址才可以和遠(yuǎn)端設(shè)備建立VPN隧道,這時就需要使用到NAT-T技術(shù),使得IPSec數(shù)據(jù)包能夠穿越NAT環(huán)境。
這里在GNS3模擬器上來進(jìn)行驗證。在以上所有路由器上配置好接口地址和到達(dá)Internet的默認(rèn)路由,并在NAT路由器上開啟NAT功能,將分部內(nèi)網(wǎng)數(shù)據(jù)包源地址192.168.1.2轉(zhuǎn)換為NAT路由器公網(wǎng)fa0/0口lP地址后,此時VPN設(shè)備之間可以實現(xiàn)互連,但無法訪問對方的內(nèi)網(wǎng)環(huán)回口地址,需要在路由器上配置IPSec VPN來保證內(nèi)網(wǎng)環(huán)回口之間數(shù)據(jù)的安全傳輸,并驗證NAT-T的效果。在當(dāng)前大部分路由器中,NAT-T功能默認(rèn)自動開啟。
此時發(fā)現(xiàn)從NAT端本地路由器VPN-2的環(huán)回口可以ping通VPN-1的環(huán)回口,VPN連接建立成功。但如果首先從NAT遠(yuǎn)端路由器VPN-1上的環(huán)回口發(fā)起連接,測試到達(dá)VPN-2路由器環(huán)回口IP地址,卻發(fā)現(xiàn)無法ping通。
2.2.3 NAT穿越實現(xiàn)和驗證
當(dāng)在VPN設(shè)備支持NAT-T時,如果IPSec VPN連接是從NAT本端設(shè)備發(fā)起的,不需要做任何配置,但如果IPSec VPN連接是從NAT遠(yuǎn)端設(shè)備發(fā)起的,由于VPN使用UDP端口500在對等體之間協(xié)商交換IKE信息,在連接一個安全網(wǎng)關(guān)對等體所涉及的所有IP接口上都必須允許UDP端口500的報文通過,就需要在NAT路由器上增加相關(guān)配置,將公網(wǎng)接口lP地址的UDP500和4500端口映射到內(nèi)網(wǎng)VPN地址的500和4500端口,否則IPSec VPN無法通信,例如在上面的應(yīng)用場景中,在NAT路由器上增加如下命令:
雖然IPSec不能穿越PAT,但靜態(tài)地址NAT映射是可以的。此時可以看到路由器之間VPN連接已經(jīng)建立成功,使用UDP500和4500端口來協(xié)商IKE的建立和NAT-T,如圖3和圖4所示。NAT遠(yuǎn)端路由器VPN-1上的環(huán)回口也可以ping通VPN-2路由器環(huán)回口lP地址。
3結(jié)論
NAT穿越技術(shù)解決了IPSec和NAT技術(shù)共存的問題,可以實現(xiàn)內(nèi)網(wǎng)路由器和遠(yuǎn)端公網(wǎng)設(shè)備之間在穿越NAT的環(huán)境中建立VPN的要求,使得符合感興趣流的數(shù)據(jù)包使用IPSec機(jī)制進(jìn)行VPN隧道安全傳輸,不符合感興趣流的只做NAT,從而滿足更多的實際場景需求。