摘 要:因特網網絡層安全協議( IPSec)和網絡地址翻譯 (NAT)不兼容,這嚴重限制了IPSec的應用范圍。在分析IPSec與NAT不兼容原因、討論IPSec與NAT協同工作的一些方法及所存在的問題的基礎上,對UDP封裝IPSec數據包方法中所存在的安全隱患,以及在NAPT環境下,外出的數據根據SPD的選擇符無法正確定位SAD中的SA問題,提出了解決辦法。
關鍵詞:IPSec;網絡地址翻譯;虛擬專用網;UDP封裝
中圖分類號:TP309文獻標識碼:A文章編號:1004373X(2008)1909104
Research on the Coordination between IPSec and NAT
XU Jiexing
(Library,Anhui University of Technology,Maanshan,243002,China)
Abstract:Application range of IP security protocol(IPSec) is badly restricted due to the incompatibility of IPSec and Network Address Translator (NAT).On the basis of analyzing the cause of the incompatibility between IPSec and NAT,and discussing the methods and the problems of the coordination between IPSec and NAT,this paper puts out the solution to hidden secure trouble about UDP encapsulation IPSec packet,to the circumstance of Network Address and Port Translation(NAPT),output data is unable to locate SA probloms in Secure Association Database(SAD) correctly by selector in Secure Policy Database(SPD).
Keywords:IPSec;network address translator;virtual private network;UDP encapsulation
1 引 言
隨著各種網絡應用的快速發展,人們越來越重視網絡上數據傳輸的安全性,VPN(Virtual Private Network)技術得到了廣泛應用。VPN是近年來網絡應用中不可缺少的營運模式,VPN把數據封裝在隧道協議中,利用已有的公網建立專用隧道,實現端到端的連接。VPN技術中,又以IPSec的保密性最為完整,系VPN技術主流。
IPSec是一種由IETF設計的基于通訊的數據安全機制,極大地提高了TCP/IP協議的安全性,實現了在主機或安全網關環境中對IP傳輸的保護,但其所使用的加密技術卻造成了與NAT技術的不兼容。本文在對IPSec和NAT不兼容性分析的基礎上,討論IPSec與NAT協同工作的一些方法及所存在的問題,并提出改進辦法。
2 IPSec和NAT原理及不兼容性分析
2.1 IPSec
IPSec協議是應用于IP層上網絡數據安全的一整套體系結構,包括認證頭協議(AH)、封裝安全載荷協議(ESP)、密鑰管理協議(IKE)和用于網絡認證及加密的算法等。
IKE動態協商通信雙方的加密/認證密鑰及算法等信息,建立安全關聯(SA)。AH為IP包提供數據源認證、數據完整性和抗重放攻擊等保護,但不能保密。ESP為IP包提供數據機密性、數據完整性、數據源認證和抗重放攻擊等保護。AH和ESP都有兩種工作模式:傳輸模式和隧道模式,兩種模式的區別在于它所保護的數據內容不同,一個是IP包,一個是IP載荷。在實際應用中并不采用隧道模式中的AH,因為它所保護的數據與傳輸模式中的AH所保護的數據是一樣的。圖1是應用AH或ESP的傳輸模式所形成的數據包的格式,圖2是應用ESP的隧道模式所形成的數據包格式。

2.2 NAT
NAT是對不同地址域內的地址進行轉換的一種方法,通過在地址域邊界對不同的地址和端口進行轉換并維持這個轉換的映射關系,可以使不同地址域的主機之間透明地進行數據傳輸。NAT有3種類型:靜態NAT、動態NAT、網絡地址端口轉換NAPT[2]。靜態NAT將每一個私有IP地址固定映射到一個合法的公網IP地址;動態NAT將私有IP地址動態映射成NAT網關某個未分配的公網IP地址;NAPT將私有IP地址映射到NAT網關一個合法公網IP地址的不同端口[ 1 ]。NAT很大程度上緩解了IPv4網絡中IP地址緊張的問題,并使得內外網絡隔離,從而提供一定的網絡安全保障。
2.3 IPSec和NAT間的不兼容性分析
IPSec和NAT之間存在多個方面的不兼容性,主要包含AH、ESP分別與NAT之間的不兼容以及IKE與NAT之間的不兼容[3]。
(1) IPSec AH和NAT間的不兼容性。由于AH頭部將IP源地址和目標地址包含在完整性校驗中,NAT設備對地址域的改變將使得完整性檢查失敗。
(2) 校驗和與NAT間的不兼容性。TCP和UDP在計算校驗和時使用了偽頭部,因而校驗和與IP源和目的地址有依賴關系。但數據包通過NAT設備后,源地址或目的地址將會發生改變,在接收處將會檢驗到校驗和不一致,丟棄此數據包。
(3) 固定的IKE目標端口和NAPT間的不兼容性。IPSec的某些實現使用UDP端口500同時作為源和目標端口號。然而對于一個位于NAT之后的IPSec對話方,NAT會改變初始IKE主模式包的源端口號,所以來自500之外的其他端口的IKE數據包可能會被接收方丟棄。
(4) IKE地址標識符與NAT間的不兼容性。在IKE協商第一階段或第二階段中使用IP地址作為標識符,則NAT設備對IP源或目的地址的修改會引起IP頭中的地址和標識符不符。IKE實現會將這樣的包丟掉。
(5) 重疊的SPD(Secure Policy Database)項和NAT的不兼容性。在IKE協商的第二階段中,NAT后的主機對相同響應者IP地址協商重疊的SPD項,響應者可能在錯誤的IPSec SA下發送數據包。
(6) NAT無法多路傳輸IPSec數據包。ESP保護的IPsec數據包中的TCP或UDP報頭被加密,因此無法通過TCP或UDP端口號將數據包多路傳輸到專用網內不同的主機。
(7) 內嵌的IP地址和NAT間的不兼容性。由于載荷受到完整性保護,IPSec包中的任何IP地址不能被NAT轉換。因此某些協議,如FTP、SNMP等,在IPSec和NAT并存的環境中不能正常應用。
3 IPSec與NAT間協同工作方法討論
3.1 RSIP
用RSIP(Realm Specific IP)替代NAT。RSIP是指在不同地址域通信的主機自己能處理跨越不同地址域的地址變換問題。一般在私有網絡和公共網絡的邊界上部署一臺RSIP服務器,實現地址映射。
RSIP采取C/S模式,當RSIP客戶機要與公共網絡上主機通信的時候,它查詢RSIP服務器以便獲得一個端口號和公網IP地址。接著客戶機通過隧道將包發往RSIP服務器,RSIP服務器將隧道頭剝掉,然后將包發向互聯網。對于到達的包RSIP服務器基于端口號查找客戶機IP地址,加入隧道頭,然后將它們發往RSIP客戶機。
RSIP雖解決了IPSec和NAT的沖突問題, 但也有缺點,它要求IPSec設備實現RSIP的客戶端協議;在IKE重建密鑰時,要修改IKE源端口,可能無法與現有IPSec協同工作;要求將NAT網關升級為RSIP網關,花費較大[4]。
3.2 6 to 4
6 to 4方案的基本原理是[5]:相互通信的主機均使用IPv6協議棧,IPSec協議在IPv6協議棧中實現。在IPv6網絡邊界安裝NAT。發送時,當IPv6的數據報到達NAT時,NAT提取IPv6的地址前綴作為IPv6數據報的IPv4隧道地址,NAT把IPv6數據包封裝在IPv4數據包中發送出去;接收時,相應的NAT作IPv4隧道的解封,解封后的數據包在局部網絡中用IPv6協議進行路由。
由于6 to 4方案要求給NAT配置一個可路由的IPv4地址來產生IPv6前綴,當在客戶端和VPN網關中存在多個NAT設備時,此方案將不適用,同時,6 to 4方案雖然對已經支持IPv6的主機無需作太多的變更,但需要改變目前的NAT設備配置。
3.3 UDP封裝方案
因為NAT通過改變IP地址和傳輸端口號來使數據包從一個地址空間傳輸到另一個地址空間,但由于IPSec協議頭在IP頭之后,而傳輸層協議數據單元作為IPSec協議的有效載荷,這對純地址翻譯來說,可通過在IP頭中修改地址來完成地址翻譯,而對地址端口翻譯來說,它要修改數據包的端口,當端口在傳輸協議頭中被IPSec加密后,NAPT就不能修改傳輸協議頭來作地址端口翻譯。
用UDP協議封裝IPSec協議數據單元,是在IPSec協議頭前面加上一個UDP協議頭,在通信中間系統上看到傳輸的是UDP數據包,IPSec數據包作為UDP協議的用戶數據,其實質是在通信實體之間建立一個UDP隧道,用UDP隧道來穿越NAT設備[6]。
4 UDP協議封裝方案
4.1 UDP協議封裝方案的總體構架
UDP協議封裝方案的總體構架[7]如圖3所示:通信雙方首先通過交換Vendor ID信息來探測對方是否支持NAT穿越;如果驗證通過,則繼續互相發送NAT-D(NAT Discovery)數據包來探測通信雙方之間是否存在NAT設備;一旦探測到NAT設備存在后,通信發起方就將通信端口改為4500端口后繼續協商,并且在進行IPSec處理后協商UDP封裝模式并進行UDP模式封裝(封裝模式如圖4、圖5所示);IPSec發起協商的一方定時發送keep-alive消息判斷連接是否存在,以保證NAT網關對其UDP端口的動態映射不被刪除。

4.2 UDP封裝方案的分析
(1) UDP封裝方案只適用于ESP協議。由于AH協議要認證整個IP數據包,與NAT沖突,在UDP封裝方案中也沒有解決,但ESP協議完全可以代替AH協議完成所需的功能[8]。
(2) UDP封裝方案在總體上對IPSec與NAT的不兼容性問題有了較好的解決,方案所付出的額外代價不是很高。
(3) 安全性上存在一些隱患。在探測通信雙方是否存在NAT時,通信雙方通過發送NAT-D載荷,每個NAT-D載荷包含一個HASH值。通信雙方在主模式第3、第4個包,野蠻模式第2、第3個包中交換NAT-D載荷。實現過程如下:發送方首先利用對方IP地址和端口號(500)進行HASH運算,然后利用本機的IP地址和端口號進行HASH運算,將結果分別放在NAT-D載荷中, 發送給對方。響應方在處理時,首先利用本機的IP地址和端口號(500)進行相應HASH運算,察看結果是否與接收到的第一個NAT-D載荷中的HASH值相同,若不相同則證明自己在NAT后;然后利用收到的IP包的IP地址和端口號進行相應HASH運算,若與后面的NAT-D中的HASH值不同,則說明對方在NAT后。
攻擊者可能會修改NAT-D載荷中的HASH值,使通信雙方在沒有NAT存在的情況下使用UDP封裝,這會浪費網絡帶寬,浪費通信雙方的CPU資源。當網關與數量較多客戶端連接時,這種攻擊會使網關不能正常工作。
(4) 在NAPT環境下,當NAT后的多個主機向外網安全網關建立安全連接時,外部安全網關會產生多個地址相同(NAPT的公網地址),SPI不同的SA。對于進入的數據根據ESP頭中的SPI值可以定位SA,但是對于外出的數據根據SPD(Secure Policy Database)的選擇符無法定位SAD(Secure Association Database)中正確的SA。
4.3 UDP封裝方案中問題解決辦法
對4.2中(3)的問題,本文的解決辦法是進行2次HASH運算,即對由IP地址和端口號得出的HASH值(稱為HASH-l) 再次進行HASH運算(結果稱為HASH-2)。在這種設計下響應方首先利用(HASH-2)對HASH-1的有效性進行驗證,方法是利用接收到的HASH-1進行規定的HASH運算。若與接收到的HASH-2不相同,載荷無效丟棄;若與接收到的HASH-2相同,則利用HASH-1檢查是否存在NAT。
NAT-D載荷的格式如圖6所示。


設計中所使用的HASH運算表達式如下:
HASH-1=HASH(CKY-I︱CKY-R︱IP︱PORT)
HASH-2=HASH(CKY-I︱CKY-R︱HASH-1)
CKY-I,CKY-R分別為發起方(I)和響應方(R)IKE協商中的COOKIE值,IP為地址,PORT為本地端口號。
對4.2中(4)問題,本文的解決辦法是利用NAT后主機的私有地址作為目的地址定位SA。即通過把私有地址傳到對方,并在對方主機中維護一個映射表,映射表中包含NAT轉換后的公網地址、端口號與私有地址的對應關系,在響應數據包時查找映射表中所對應的私有地址進而定位SA進行IPSec處理。
UDP-ESP封裝模式下是通過NAT-OA(NAT Original Address)載荷來傳送地址。NAT-OA載荷在IKE協商的快速模式的第一個和第二個包發送。如果發起者選擇的是UDP封裝ESP傳輸模式那他必須發送NAT-OA載荷,同樣響應者也必須發送。
由此,不論是否ESP傳輸模式,雙方在快速模式中都要發送NAT-OA載荷,并且雙方就利用這個載荷建立映射表(NAT轉換后的公網地址、端口號與私有地址的對應關系),這樣的話雙方原始地址均安全送達對方。
另一個要考慮的問題就是映射表的維持。本文采用的方式不是每個IP數據包都攜帶原始地址信息,而是利用IKE的通知載荷定期傳送,通過在通知載荷中
增加一個通知消息類型(NOTIFY-NAT-OA)用于傳送原始地址信息。由于通知載荷是在雙方SA建立后傳送,所以載荷是加密的。
5 結 語
IPSec和NAT不兼容制約了IPSec的使用范圍。基于UDP封裝IPSec數據包方案基本消除了導致IPSec和NAT沖突的根源,較好地解決IPSec和NAT的不兼容性問題。但要注意的是,IPSec與NAT的矛盾根深蒂固,因而從根本上解決它不大可能,研究和改進的目的就是用盡可能少的代價在一定的條件下解決一些問題,為我們所用。
參考文獻
[1]Srisuresh P,Egevang K.Traditional IP Network Address Translator.RFC 3022,January 2001.http://www.ietf.org/rfc/rfc3022.txt.
[2]謝希仁.計算機網絡[M].5版.北京:電子工業出版社,2008.
[3]Aboba B,Dixon W.IPSec-NAT Compatibility Requirements.RFC3715,2004.
[4]彭近兵,龍翔,高小鵬,等.一種新的IPSec穿越NAT方法[J].北京航空航天大學學報,2007,33(1):65-66.
[5]Carpente B,Moore K.Connection of IPv6 Domains via IPv4 Cloud.RFC 3056,2001.
[6]姚志林,劉淑芬,韓正服.IPSec的NAT兼容性改進[J].吉林大學學報:理學版,2005,43(4):450-54.
[7]Huttunen A,DiBurro L.UDP Eneapsulation of IPSec Packets.IETF RFC 3948,2005.
[8]潘登,徐佩霞.一種新的IPSec穿越NAT方案[J].小型微型計算機系統,2005,26(2):196-198.
作者簡介 許杰星 男,1960年出生,副教授/計算機應用專業碩士,現任安徽工業大學圖書館館長。主要研究方向為計算機網絡安全、管理信息系統。