1. 程式人生 > >NAT-T和PAT(IPSec)

NAT-T和PAT(IPSec)

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥NAT-T技術介紹¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

 


為什麼TCP和UDP不能穿越:
TCP和UDP有一個IP頭的尾部校驗(校驗頭部和負載,IP尾部(SIP,DIP,協議號));而IP只是校驗IP頭部。
穿過NAT的時候,IP頭部的地址變了,那麼校驗結果也就改變了,這樣就不行了。資料在傳輸層就丟掉了。  
Cisco的IOS 12.3之後支援,NAT-T的解決問題的思路是:
這項技術用來將ESP資料包封裝到UDP資料包中(在原ESP頭部和外層IP頭部之間,插入一個UDP 4500的頭部),使得NAT裝置
 按照處理一個普通的UDP資料包的方式對它處理,這樣就可以穿越PAT了。

下面是NAT-T的封裝示意圖:


 


下面是NAT-T協商的介紹:
協商3步驟:
                                           

 


1、主要用於判斷IPSec雙方是否都支援NAT-T技術

,若任何一方不支援就會失敗,那IPSec VPN就會使用ESP封裝資料包。主要是通過IKE中的版本ID來看
2、判斷兩個peer之間是否有存在地址轉換(NAT,PAT)——兩個peer之間必須存在地址轉換,不管是NAT或是PAT,才會使用NAT-T技術封裝資料。NAT-D也叫做hash負載。對源地址hash,對源埠hash,目的也是如此。看是否過了NAT。                                             
3、在1中兩個peer都支援NAT-T技術,在2中peer之間確實存在地址轉換,那麼從上圖中第一階段IKE5-6包開始,後面的所有資料都會使用NAT-T技術進行封裝。
命令: crypto ISAKMP nat-traversal
靠參考文件:https://max.book118.com/html/2017/0818/128588311.shtm
接下來驗證一下PAT在中間網路的情況:


 


R1:
hostname R1
!
crypto isakmp policy 10
 authentication pre-share
crypto isakmp key cisco address 23.1.1.3//因為這裡通過R3做了PAT,所以peer地址應該是23.1.1.3
!
!
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto map cisco 10 ipsec-isakmp
 set peer 23.1.1.3
 set transform-set trans
 match address vpn
!
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.0
interface FastEthernet1/0
 ip address 12.1.1.1 255.255.255.0
 duplex auto
 speed auto
 crypto map cisco
 !
ip route 0.0.0.0 0.0.0.0 12.1.1.2
!
ip access-list extended vpn
 permit ip 1.1.1.0 0.0.0.255 4.4.4.0 0.0.0.255
R2:
hostname R2
!
interface FastEthernet1/0
 ip address 12.1.1.2 255.255.255.0
 duplex auto
 speed auto
 !
!
interface FastEthernet1/1
 ip address 23.1.1.2 255.255.255.0
 duplex auto
 speed auto
R3:
hostname R3
interface FastEthernet1/0
 ip address 23.1.1.3 255.255.255.0
 ip nat outside
 ip virtual-reassembly
 duplex auto
 speed auto
 !
!
interface FastEthernet1/1
 ip address 34.1.1.3 255.255.255.0
 ip nat inside
 ip virtual-reassembly
 duplex auto
 speed auto
ip nat inside source list PAT interface FastEthernet1/0 overload
ip route 0.0.0.0 0.0.0.0 23.1.1.2
!
ip access-list extended PAT
 permit ip any any
R4:
hostname R4
!
crypto isakmp policy 10
 authentication pre-share
crypto isakmp key cisco address 12.1.1.1
!
!
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto map cisco 10 ipsec-isakmp
 set peer 12.1.1.1
 set transform-set trans
 match address vpn
interface Loopback0
 ip address 4.4.4.4 255.255.255.0
 !
interface FastEthernet1/0
 ip address 34.1.1.4 255.255.255.0
 duplex auto
 speed auto
 crypto map cisco
 !
ip route 0.0.0.0 0.0.0.0 34.1.1.3
!
ip access-list extended vpn
 permit ip 4.4.4.0 0.0.0.255 1.1.1.0 0.0.0.255
現在可以在R3的兩個介面抓包,具體情況如下:
R3-R4:

 


R3-R2:

可以看到明顯是經過了PAT了,
R3#sho ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
udp 23.1.1.3:500       34.1.1.4:500       12.1.1.1:500       12.1.1.1:500
udp 23.1.1.3:4500      34.1.1.4:4500      12.1.1.1:4500      12.1.1.1:4500
這是PAT之前的校驗和:

 


這是PAT之後的校驗和:

 


這也就驗證前面所說的在穿越NAT裝置的時候,UDP或者TCP會校驗IP頭尾部,IP變了,那麼校驗出的結果就改變了。而這裡穿越的是PAT,那麼就需要使用源IP和源埠,然後這裡的埠是被ESP封裝的,所以不能實現通訊。



這裡也可以看到源和目的埠啟用了NAT-T技術,使用UDP 4500埠。那麼我們將NAT-T技術關閉(Cisco IOS的NAT-T技術是預設開啟的):
R3(config)#no crypto ipsec nat-transparency udp-encapsulation


觀察現在的R4—R1的IPSec VPN情況:由於實驗的IOS的問題,所以這裡還是通的,但是正確的應該是關閉NAT-T技術,就是不通的,所以,NAT-T的關鍵就是在新的IP頭部和ESP頭部之間封裝一個NAT-T使用的UDP 4500埠。來實現通訊的。