部署IPSec VPN網(wǎng)絡(luò)時,如果發(fā)起者位于一個私網(wǎng)內(nèi)部(也就是IPSec的一個端點接口的IP地址是私網(wǎng)IP地址,如圖1中的Router A),遠端位于公網(wǎng)側(cè)(如圖1中的Router B),而它希望與遠端響應(yīng)者直接建立一條IPSec隧道。為保證存在NAT設(shè)備的IPSec隧道能夠正常建立,就需要配置IPSec的NAT穿越功能。
圖1 IPSec的NAT穿越示意
因為AH協(xié)議會對整個封裝后的IP報文(包括IP報頭)進行認證保護,如果AH報文經(jīng)過NAT網(wǎng)關(guān),則報頭部分的IP地址肯定會發(fā)生變化,這時傳輸?shù)竭_IPSec隧道對端時,肯定不能通過AH認證,所以IPSec采用AH作為安全協(xié)議時是不支持NAT的。但是ESP協(xié)議與AH協(xié)議不同,它無論是對IP報文進行認證保護,還是進行加密保護都不會包括最外層IP報頭,所以ESP報文經(jīng)過NAT網(wǎng)關(guān)時IP報頭部分發(fā)生IP地址改變不會導(dǎo)致在對端進行ESP認證、數(shù)據(jù)解密時失敗,所以理論上來說采用ESP作為安全協(xié)議時是支持NAT的。
但是這里又涉及到一個非常現(xiàn)實的問題,無論是AH(IP協(xié)議號為51),還是ESP(IP協(xié)議號為50)協(xié)議其都是網(wǎng)絡(luò)層的協(xié)議,它們發(fā)送的報文不會經(jīng)過上面的傳輸層協(xié)議封裝。因此當NAT網(wǎng)關(guān)背后存在多個ESP應(yīng)用端時(即實現(xiàn)多對一的地址映射時),也無法只根據(jù)IP地址進行反向映射,必須依靠傳輸層的UDP或TCP端口號。此處通過借用UDP的方式,巧妙地實現(xiàn)了NAT地址復(fù)用。此時要使用UDP 500端口(IKE協(xié)商協(xié)議ISAKMP所使用端口)來插入一個新的UDP報頭。
IPSec NAT穿越簡單來說就是在原報文的IP報頭和ESP報頭間增加一個標準的UDP報頭。這樣,當ESP報文穿越NAT網(wǎng)關(guān)時,NAT對該報文的外層IP報頭和增加的UDP報頭同時進行地址和端口號轉(zhuǎn)換(把私網(wǎng)IP地址、端口號都轉(zhuǎn)換成公網(wǎng));轉(zhuǎn)換后的報文到達IPSec隧道對端后,與普通IPSec報文處理方式相同。
在IPSec NAT穿越應(yīng)用中,如果采用的是預(yù)共享密鑰或數(shù)字證書認證方法,則要同時在部署了NAT網(wǎng)關(guān)設(shè)備的這端IKE對等體配置中采用名稱類型標識ID(即配置local-id-type fqdn命令),在發(fā)起方的IKE對等體配置中采用IP地址方式標識對端ID。