1. 程式人生 > >IPSec V.P.N與NAT穿越(基於思科設備)

IPSec V.P.N與NAT穿越(基於思科設備)

操作 思科 完整性 計算 來看 傳輸 服務 這一 pro

IPSec V.P.N與NAT穿越(基於思科設備)

技術分享圖片

  IPSec是基於網絡層的,不能穿越通常的NAT、防火墻,這篇文章就是要討論,在需要NAT網絡的環境中,如果使用IPsec ××× 隧道技術。
IPsec 協議有兩種運行模式:
  IPSec隧道模式
  IPSec傳輸模式
  隧道模式通常是建立在雙方的網關之間的。傳輸模式下,IPSec主要對上層的傳輸進行封裝保護,通常情況下,傳輸模式只用於兩臺主機之間的通信。
  因為我們討論的是NAT環境下的×××傳輸,所以我們就只是關註隧道模式下IPSec是如何動作的。
  不過我們先來看一看兩種模式的區別,下面給出包頭的結構,就一目了然。
  一、封裝AH認證頭的兩種方式的不同

  1、傳輸模式:
   AH協議(IP協議號為51)提供數據源認證、數據完整性校驗和防報文重放功能,它能保護通信免受篡改,但不能防止竊聽,適合用於傳輸非機密數據。AH的工作原理是在每一個數據包上添加一個身份驗證報文頭,此報文頭插在標準IP包頭後面,對數據提供完整性保護。可選擇的認證算法有MD5(Message Digest)、SHA-1(Secure Hash Algorithm)等。MD5算法的計算速度比SHA-1算法快,而SHA-1算法的安全強度比MD5算法高。
  設計AH認證協議的目的是用來增加IP數據報的安全性。AH協議提供無連接的完整性、數據源認證和抗重放保護服務,但是AH不提供任何保密性服務。IPSec驗證報頭AH是個用於提供IP數據報完整性、身份認證和可選的抗重傳***的機制,但是不提供數據機密性保護。驗證報頭的認證算法有兩種:一種是基於對稱加密算法(如DES),另一種是基於單向哈希算法(如MD5或SHA-1)。 傳輸模式只對上層協議數據(傳輸層數據)和IP頭中的固定字段提供認證保護,把AH插在IP報頭的後面,主要適合於主機實現。

 2、隧道模式:
  隧道模式把需要保護的IP包封裝在新的IP包中,作為新報文的載荷, 然後把AH插在新的IP報頭的後面。隧道模式對整個IP數據報提供認證保護。

二、ESP認證加密方法
傳輸模式:
隧道模式:
  ESP(Encapsulate Security Payload,封裝安全載荷)協議:封裝安全載荷(ESP)用於提高Internet協議(IP)協議的安全性。它可為IP提供機密性、數據源驗證、抗重放以及數據完整性等安全服務。ESP屬於IPSec的機密性服務。其中,數據機密性是ESP的基本功能,而數據源身份認證、數據完整性檢驗以及抗重傳保護都是可選的。ESP主要支持IP數據包的機密性,它將需要保護的用戶數據進行加密後再重新封裝到新的IP數據包中。

  上面看過了AH和ESP認證頭的結構,與兩種模式下的不同。下面討論的是,為什麽在NAT環境中,ipsec *** 不能使用AH認證方法?
  IPSec協議的主要目標是保護IP數據包的完整性,這意味著IPSec會禁止任何對數據包的修改。但是NAT處理過程是需要修改IP數據包的IP包頭、端口號才能正常工作的。所以,如果從我們的網關出去的數據包經過了ipsec的處理,當這些數據包經過NAT設備時,包內容被NAT設備所改動,修改後的數據包到達目的地主機後其解密或完整性認證處理就會失敗,於是這個數據包被認為是非法數據而丟棄。無論傳輸模式還是隧道模式,AH都會認證整個包頭,不同於ESP 的是,AH 還會認證位於AH頭前的新IP頭,當NAT修改了IP 頭之後,IPSec就會認為這是對數據包完整性的破壞,從而丟棄數據包。因此,AH是不可能與NAT一起工作的。
  意思就是說,AH處理數據時,所使用的數據是整個數據包,甚至是IP包頭的IP地址,也是處理數據的一部分,對這些數據作整合,計算出一個值,這個值是唯一的,即只有相同的數據,才可能計算出相同的值。當NAT設備修改了IP地址時,就不符合這個值了。這時,這個數據包就被破壞了。
  而ESP並不保護IP包頭,ESP保護的內容是ESP字段到ESP跟蹤字段之間的內容,因此,如果NAT只是轉換IP的話,那就不會影響ESP的計算。但是如果是使用PAT的話,這個數據包仍然會受到破壞。
  所以,在NAT網絡中,只能使用IPSec的ESP認證加密方法,不能用AH。
  但是也是有辦法解決這個缺陷的,不能修改受ESP保護的TCP/UDP,那就再加一個UDP報頭。
解決方案:NAT穿越
  NAT-T的基本思路是IPSec封裝好的數據包外再進行一次UDP數據封裝。這樣,當此數據包穿過NAT網關時,被修改的只是最外層的IP/udp數據報。
NAT-T的操作步驟:
  一、判斷雙方是否支持NAT-T,這是IKE協商的第一階段,雙方通過發送一個VENDOR ID來識別是否支持NAT-T,等一下做實驗會看到這個。
  二、判斷通信鏈路上是否存在NAT設備,這一步是NAT 發現,NAT發現的原理是判斷通信方的IP地址和端口是否發生了改變,判斷的方法是,使用IP地址和端口號進行HASH運算,送往對方進行校驗。一旦發現NAT,則立即進行端口浮動,也就是在IKE協議的第二階段將IKE的UDP 500浮動到UDP 4500端口。
  三、進行ESP處理

實驗步驟

一:IP地址的設置
asa的ip地址

ciscoasa#
ciscoasa# conf t
ciscoasa(config)# int e0/1
ciscoasa(config-if)# ip add 172.16.10.1 255.255.255.0
ciscoasa(config-if)# no shut
ciscoasa(config-if)# nameif inside
ciscoasa(config-if)# int e0/0
ciscoasa(config-if)# ip add 192.168.1.1 255.255.255.252
ciscoasa(config-if)# no shut
ciscoasa(config-if)# nameif outside
ciscoasa(config-if)#exit

nat的ip地址:

R1#conf t
R1(config)#int f0/0
R1(config-if)#ip address 192.168.1.2 255.255.255.252
R1(config-if)#no shut
R1(config-if)#int f0/1
R1(config-if)#ip add 100.0.0.1 255.255.255.252
R1(config-if)#no shut
R1(config-if)#exit

isp的ip地址:

R2#conf t
R2(config)#int f0/1
R2(config-if)#ip add 100.0.0.2 255.255.255.252
R2(config-if)#no shut
R2(config-if)#int f0/0
R2(config-if)#ip add 200.0.0.1 255.255.255.252
R2(config-if)#no shut

R3的IP地址

R3(config)#int f0/0
R3(config-if)#ip add 200.0.0.2 255.255.255.252
R3(config-if)#no shut
R3(config-if)#int f0/1
R3(config-if)#ip add 10.0.0.1 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit

二:路由的設置

asa的路由
ciscoasa(config)# route outside 0 0 192.168.1.2

nat的路由:
R1(config)#ip route 172.16.10.0 255.255.255.0 192.168.1.1
R1(config)#ip route 0.0.0.0 0.0.0.0 100.0.0.2

ISP不設置路由

R3的路由
R3(config)#ip route 0.0.0.0 0.0.0.0 200.0.0.1

三:***的配置

asa的***

ciscoasa(config)# crypto isakmp enable outside
ciscoasa(config)# crypto isakmp policy 1
ciscoasa(config-isakmp-policy)# encryption aes
ciscoasa(config-isakmp-policy)# hash sha
ciscoasa(config-isakmp-policy)# group 2
ciscoasa(config-isakmp-policy)# authentication pre-share
ciscoasa(config-isakmp-policy)# exit
ciscoasa(config)# crypto isakmp key benet address 200.0.0.2
ciscoasa(config)# access-list 200 extended permit ip 172.16.10.0 255.255.255.0 10.0.0.0 255.255.255.0
ciscoasa(config)# crypto ipsec transform-set benet-set esp-aes esp-sha-hmac
ciscoasa(config)# crypto map benet-map 1 match address 200
ciscoasa(config)# crypto map benet-map 1 set peer 200.0.0.2
ciscoasa(config)# crypto map benet-map 1 set transform-set benet-set
ciscoasa(config)# crypto map benet-map interface outside
ciscoasa(config)# crypto isakmp nat-traversal

R3的***:

R3(config)#crypto isakmp policy 1
R3(config-isakmp)#hash sha
R3(config-isakmp)#encryption aes
R3(config-isakmp)#authentication pre-share
R3(config-isakmp)#group 2
R3(config-isakmp)#exit
R3(config)#crypto isakmp key 6 benet address 100.0.0.1
R3(config)#access-list 100 permit ip 10.0.0.0 0.0.0.255 172.16.10.0 0.0.0.255
R3(config)#crypto ipsec transform-set benet-set esp-aes esp-sha-hmac
R3(cfg-crypto-trans)#exit
R3(config)#crypto map benet-map 1 ipsec-isakmp
R3(config-crypto-map)#set peer 100.0.0.1
R3(config-crypto-map)#match address 100
R3(config-crypto-map)#set transform-set benet-set
R3(config-crypto-map)#exit
R3(config)#int f0/0
R3(config-if)#crypto map benet-map
R3(config-if)#end
R3#debug crypto isakmp

nat穿越:
R1(config)#access-list 101 deny ip 172.16.10.0 0.0.0.255 10.0.0.0 0.0.0.255
R1(config)#access-list 101 permit ip 172.16.10.0 0.0.0.255 any
R1(config)#access-list 101 permit ip 192.168.1.0 0.0.0.3 any
R1(config)#ip nat inside source list 101 interface f0/1 overload
R1(config)#ip nat inside source static udp 192.168.1.1 4500 interface f0/1 4500
R1(config)#ip nat inside source static udp 192.168.1.1 500 interface f0/1 500

R1(config)#int f0/0
R1(config-if)#ip nat inside
R1(config-if)#int f0/1
R1(config-if)#ip nat outside

為了測試,允許icmp報文穿越防火墻
ciscoasa(config)# access-list 1 permit icmp any any
ciscoasa(config)# access-group 1 in interface outside

測試1:用ping測試***的連通性(pc1和pc2的連通性,能通)
測試2:用pc1測試與isp的連通性(能通),
測試3:用pc2測試與ISP的連通性(不通)

IPSec V.P.N與NAT穿越(基於思科設備)