我們知道IPSEC在工作的時候,如果遇到了NAT,就會帶來麻煩,什麼麻煩呢?(IPSEC的基礎需要清晰)
主要有2種麻煩
1 如果IPSEC和NAT在同一台裝置上的時候,是先進行路由查找,然後進行進行IPSEC的,最後是NAT,這個時候如果IPSEC對原本的内網資料實施保護,則NAT轉換,無法解析需要轉換的私有IP頭無法實施轉換,此時解決的辦法很簡單,就是将IPSEC所保護的内網資料從NAT的通路控制清單内剔除掉,使得内網資料能夠進行正常的IPSEC加密服務。(NAT與IPSEC先天就沖突都是連通内網用的,但是IPSEC總是優先級别搞些)
2 如果IPSEC和NAT不在同一台裝置上,即内網存在一台IPSEC的PEER,而此時必須經過NAT才能與公網聯系,這個時候麻煩就大了。因為先是路由查找,然後在内網的IPSEC的PEER上進行了安全封裝服務。此時再送出給NAT網關,而NAT網關對于TUNNEL模式的IPSEC頭不認可,或者認可,即進行NAT轉換服務,此時到了對方的IPSECPEER處,會驗證失敗,因為IPSEC的外部頭被NAT轉換了。而IPSEC自身是無法穿越NAT的因為它沒有端口号,無法标示會話。此時需要做特殊處理,利用IPSEC的NAT穿越技術,讓IPSEC封裝在IKE内使用UDP的500端口号,(使用UDP是因為效率高,其實TCP也可以)然後穿越NAT,此時需要改變2端的封裝方式是以,2邊都必須配置NAT穿越。此時會有3層封裝。内網資料UDP封裝-----IKE的IPtunnel。因為配置時有較多地方需要注意。

1 在peer的2端必須開啟nat穿越功能以及野蠻模式,注意必須是雙方開啟,否則即使是所有的SA都建立起來了,但資料不會通,因為NAT的穿越是一種特殊的IPSEC封包結構,需要将IPSEC封裝在IKE内發送出去,在此之前還需要發送一系列的探尋封包看是否雙方都支援NAT穿越,以及是否有NAT裝置存在。一但确定即可改變封裝格式。
2.H3C的野蠻模式配合基于ID的源端身份認證機制,可以很好的解決NAT穿越所帶來的問題,有2個優勢,1客戶這邊可以非固定IP,很多ADSL撥入的就是這樣。 2 可以忽略源端的IP認證跨越NAT改為利用名稱方式,配置要點切記必須2端都互相配置ID-TYPE NAME,否則IKE的SA建立不成功,因為有一端無法使用名字的ID。切記必須由用戶端發起請求,且客戶必須指向對方公網IP,以及對方的IDNAME。、
3 如果是使用IP作為ID-type,則需要配置NAT SERVER映射IPSEC的服務。這樣IKE的SA可以建立,同時2方都可以發起IPSEC,但是如果不配置NAT SERVER,則在公網裝置上需要配置一條到達對方的IPSEC PEER私有IP的路由,主要是因為IKE互動的時候攜帶有IP資訊是它自己始發的時候的IP,但後來經過NAT網關被改變了,很遺憾,對方雖然認識IKE的隧道起止,但是依然無法倒達内網理由是沒有路由,是以隻要加上該路由便通了。當然如果使用名字的方法則無這麼麻煩,因為源是一個名字,公網的PEER,隻需要認識對方的名字即可。
原文連結:http://hi.baidu.com/lvshujian1984/blog/item/863ebc43f97d361173f05d80.html