IPSec NAT-T穿越技術

IPSec NAT-T穿越技術安全

NAT技術和IPsec技術的應用都很是普遍。但從本質上來講,二者是存在着矛盾的。網絡

 

1.IPsec的角度上說,IPsec要保證數據的安全,所以它會加密和校驗數據。tcp

2.NAT的觀點來看,爲了完成地址轉換,勢必會修改IP地址。ide

 

        IPSec提供了端到端的IP通訊的安全性,但在NAT環境下對IPSec的支持有限,AH協議是確定不能進行NAT的了,這和AH設計的理念是相違背的;ESP協議在NAT環境下最多隻能有一個×××主機能創建×××通道,沒法實現多臺機器同時在NAT環境下進行ESP通訊(緣由以下圖:)加密

spacer.gif

 

關於IPSecNAT環境下的需求問題在RFC3715中進行了描述。url

      NAT穿越(NATTraversalNAT-T)就是爲解決這個問題而提出的,RFC39473948中定義,在RFC4306中也加入了NAT-T的說明,但並沒廢除RFC39473948,只是不區分階段1和階段2該方法將ESP協議包封裝到UDP包中(在原ESP協議的IP包頭外添加新的IP頭和UDP頭,也被稱爲NAT-T頭部)spa

使之能夠在NAT環境下使用的一種方法,這樣在NAT的內部網中能夠有多個IPSec主機創建×××通道進行通訊(緣由是以下圖,由於有了UDP報文的封裝ESP加密的報文後,PAT模式下使用UDP端口號能夠區分不一樣的ESP PAYLOAD:)。設計

 

spacer.gif

 

 

    AH封裝:AH封裝的校驗從IP頭開始,若是NATIP的頭部改動,AH的校驗就會失敗,所以咱們得出結論,AH是沒法與NAT共存的。ip

spacer.gif

 

 

spacer.gif

ESP封裝的傳輸模式:對於NAT來講,ESP封裝比AH的優點在於,不管是加密仍是完整性的校驗,IP頭部都沒有被包括進去。以下圖:ci

 

可是仍是有新的問題,對於ESP的傳輸模式,NAT 沒法更新上層校驗和。由於TCP  UDP 報頭包含一個校驗和,它整合了源和目標 IP 地址和端口號的值,而源和目的IP地址和端口號在作NAT時會發生改變。

 

   NAT 改變了某個包的 IP 地址和(或)端口號時,它一般要更新 TCP  UDP 校驗和。當 TCP  UDP 校驗和使用了 ESP 來加密時,它就沒法更新這個校驗和。因爲地址或端口已經被 NAT 更改,目的地的校驗和檢驗就會失敗。雖然 UDP 校驗和是可選的,可是 TCP 校驗和倒是必需的。因此ESP的傳輸模式也不支持NAT穿越。

spacer.gif

     ESP封裝的隧道模式:ESP隧道模式的封裝中,咱們能夠發現,ESP隧道模式將整個原始的IP整個進行了加密,且在ESP的頭部外面新加了一層IP頭部,因此NAT若是隻改變最前面的新的IP地址對後面受到保護的部分是不會有影響的。所以,IPsec只有採用ESP的隧道模式來封裝數據時才能與NAT共存。

 

AH模式的IPSec ×××由於完整性校驗牽涉到IP頭部,因此NAT沒法對其修改,不兼容。

ESP的傳輸模式,由於TCP部分被加密,NAT沒法對TCP校驗和進行修改,不兼容。

ESP的隧道模式,因爲NAT改動外部的IP而不能改動被加密的原始IP,使得只有這種狀況下才能與NAT共存。

 

 

NAT穿越(NAT TraversalNAT-T)

      Cisco IOS的版本在12.2(13)T之後,能夠支持NAT-T技術。之前NATIPsec只能以11的形式共存(非PAT的狀況),NAT-T打破了這種形式(由於使用了NAT-T包頭作的UDP端口區分)並且NAT-T支持ESP的傳輸模式NAT-T的基本思想:ESP協議包封裝到UDP包中(在原ESP協議的IP包頭外添加新的IP頭和UDP頭)使得NAT對待它就像對待一個普通的UDP包同樣。並且支持ESP的傳輸模式NAT-T的基本原理和執行步驟

1. 檢測通訊中是否存在NAT設備和對方是否支持NAT-T

2.檢測對方是否支持NAT-T是經過交換vendor ID載荷來實現的,若是自身支持NAT-T,在IKE開始交互就要發送這種載荷,載荷內容是「RFC 3947」的MD5值,也就是十六進制的「4a131c81070358455c5728f20e95452f

spacer.gif

 

 

spacer.gif

 

spacer.gif

 

spacer.gif

上面的NAT-D數據就是源IP和源端口(或者目的IP和目的端口)的組合分別計算的hash值,用於驗證peer之間是否存在NAT設備,可是沒法區分是PAT仍是一對一的NAT

若是有NAT存在且雙方都支持NAT-T,則:

spacer.gif

 

上面IKE1-2個包相互發送VID來聲明本身是否支持NAT-TIKE3-4個包(MM主模式)或者2-3個包(AM主動模式)發送由源IP和源端口號,以及目的IP和目的端口組合分別計算的NAT-D負載。

若是雙方判斷後確實須要NAT-T技術,則在IKE5-6個包開始後面全部ISKAMP包,以及全部的ESP包,都被封裝到中目的UDP4500的包中。

斷定CISCO路由器是否啓用NAT-T技術,能夠經過show crypto ipsec sa

查看in use setting是否爲Tunnel(未啓用NAT-T

spacer.gif

 

若是CISCO路由器啓用了NAT-T技術,則顯示以下(Tunnel UDP-Encaps):

spacer.gif

斷定cisco ASA防火牆是否啓用了NAT-T技術,也能夠經過show crypto ipsec sa:查看in use setting是否爲L2L tunnel(未啓用NAT-T

spacer.gif

 

若是CISCO ASA防火牆啓用了NAT-T技術,則顯示以下:L2L tunnel NAT-T-Encaps

spacer.gif

 

NAT-T的兩端peer之間的設備(如ASA設備)的connection會顯示以下:UDP 500UDP 4500兩個會話(源目端口號同樣),其中UDP 500IKE1-44個包,從IKE5個包開始,一直到ESP封裝的數據包均封裝在UDP4500中。

spacer.gif

 

拓撲圖以下(SITE1SITE2之間創建了L2L ×××,Internet模擬被穿越的中間NAT網絡):

spacer.gif

ASA/IOS NAT-T技術對比表(IOS只支持公有的NAT-T技術)

spacer.gif

配置方法

1.ipsec over tcp

該方法致使雙方使用TCP端口通訊,缺省端口是10000只支持client方式(遠程撥號×××),該技術牛B的地方是整個工做過程的ISAMPESP包均封裝在TCP的某個任意端口號內,包括isakmp的前1-4UDP 500的包也被封裝在TCP中,網絡的穿越效果最好。缺省被禁用,打開方法:

crypto isakmp ipsec-over-tcp

以下實例,能夠同時在ASA端設置多個端口號:

spacer.gif

client端的設置方式以下:

spacer.gif

 

spacer.gif

當實際環境中不常規×××通訊或NAT-T,IPSEC OVER UDP的時候使用。

2.NAT-T

該方法致使雙方最終使用udp 4500端口通訊,支持client(遠程撥號×××,L2L 兩種方式。缺省是被禁用的。NAT-T的打開方法:

crypto isakmp nat-traversal 20 ,缺省keepalives時間20秒,isakmpNAT keeplive包的發送是爲了不在通過的PAT時候,在NAT會話表(xlate)超時(PAT類型的NAT會話表超時時間很短但大於20s)以前維持住該NAT會話表。

3.ipsec over udp

致使雙方使用UDP通訊,缺省端口10000只支持client方式(遠程撥號×××缺省被禁用,該技術的前4個包依然是UDP 500的封裝,5-6個包開始包含ESP包均封裝在任意的UDP端口中(默認是UDP 1000)。

打開方法:

在組策略中配置

hostname(config-group-policy)#ipsec-udp {enable | disable}

hostname(config-group-policy)#ipsec-udp-port10000 //端口號能夠任意配置

以下實例:

spacer.gif

 

spacer.gif

client端貌似很差設置UDP12345端口,只要ASA服務端設置UDP 12345端口就能夠。

spacer.gif

上述三種方法都啓用時候的優先級別 over tcp>NAT-T>over udp

相關文章
相關標籤/搜索