¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥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端口。來實現通信的。