張韜


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