1. 程式人生 > >NAT-T技術原理簡單分析及應用實驗解析

NAT-T技術原理簡單分析及應用實驗解析

1.首先我們就IPSEC VPN的部署場景來做簡要分析:
在這裡插入圖片描述
場景1:如圖所示,企業的總部與分支機構分別架設了VPN裝置,分支機構的需求是同步企業內部的業務資料(屬企業內部的機密資訊),那麼就必須確保資料在公網上是安全包密傳遞的。這種情況下我們可以直接用IPSEC VPN的隧道工作模式或傳輸工作模式(用傳輸工作模式的前提是底層要有隧道),使用IPSEC VPN的ESP(封裝安全載荷)協議(使用ESP協議是因為ESP可以同時完成對資料的加密及校驗)來保障資料在公網上是安全、加密傳輸的。
在這裡插入圖片描述
場景2:如圖所示,企業一般為了自己內網的安全考慮,在自己內部區域網的出口上是會架設防火牆的,並且會要求內部的所有裝置通過防火牆的代理來上公網

,那麼這就必然要使用NAT技術,但是使用了NAT技術就會帶來一個新的問題,我們對這個問題來從兩個方面入手分析:
1) 企業總部與分支機構都只架設一臺VPN裝置的情況下,並且企業總部方面是通過防火牆的代理來與分支構建VPN通道,那麼NAT技術此時是沒有問題的,資料包出內網時經過改頭換面可以到達對端VPN裝置上,而分支機構給總部回包的話資料包是可以正常回到總部邊界的防火牆上的,因為資料包在出內網時經過了NAT的轉換,所以會在防火牆上形成一張地址轉換列表,當分支回給總部的包到了防火牆上時,防火牆可以根據地址轉換表將資料包轉到VPN裝置之上
技術方面:總部這邊應用了防火牆來代理上網的話,總部與分支之間的VPN裝置對接就可以直接應用IPSEC的隧道工作模式,並且選用IPSEC VPN的野蠻模式來進行對接,因為經過NAT,資料包的IP地址發生了轉換(對於主模式來說IP地址發生改變,會導致協商失敗的,因為主模式預設是以IP地址來做身份ID標識來進行協商的;具體情況要根據不同廠商的裝置來看,如果廠商的裝置支援主模式的身份ID可以自由配置的話,選用主模式也是可以的)。
2) 多VPN的情況下
(企業總部內有多臺VPN裝置並且都是通過防火牆代理來上公網的情況下同分支內的VPN裝置構建VPN通道):標準的IPSEC VPN只能同時進行一個VPN的連線。對於多VPN的連線存在著
兩個嚴重的問題

問題一:總部這邊,多臺VPN裝置都通過一臺防火牆的代理來與分支構建IPSEC VPN通道,多臺VPN裝置將使用相同的源目埠號發起請求,再經過了代理裝置的NAT轉換後,所有想要構建VPN通道的裝置都只擁有了相同的源IP地址和埠號;分部這邊,總部那麼多臺VPN裝置發來的請求IP地址和埠號都是相同的,那麼該如何構建通道呢?
問題二:假設IPSEC VPN的通道構建完成,那麼分支回給總部某臺VPN裝置的資料包來到了總部這邊的防火牆裝置上,防火牆裝置如何區分該轉發給哪臺VPN裝置呢?

解決方案(NAT-T協議):
NAT-T協議運用在IPSec VPN中,在IKE協商和VPN連線時,允許源埠為非UDP 500埠,使用目的埠是UDP4500埠。
NAT-T協議為ESP增加了UDP頭部,從而解決了資料傳輸過程經過防火牆後無法進行埠複用的問題。
NAT-T協議運用:
1)一旦運用到NAT-T技術,各大廠商的裝置一定是讓VPN裝置,變換目標埠號或者是不檢查源埠號
深信服裝置是將目標埠號改為4500,源埠號任意;
CISCO 依然是udp的埠號500,但是應用了NAT-T技術將不檢查源埠號。
2)NAT-T技術為ESP增加UDP頭部(即增加埠號);Sangfor and Cisco 用源目埠號4500,到達NAT,NAT將自動為你更改源埠,也不用檢查源埠號。(廠商可以自行修改,可以改為非UDP的非4500)。(實際上用TCP來為ESP增加一個頭部也是可以的,但是TCP做的封裝大,會增加傳輸的負荷。)經過NAT-T轉換的資料包結構如下圖所示:
在這裡插入圖片描述
使用NAT的時候,IPSEC VPN在做動態NAT的時候是無法做連線的,因為動態NAT的原理是要先出去才能回來,所以至少得一方做靜態的NAT。
2.NAT-T技術實驗解析:
在這裡插入圖片描述
如圖所示為部署拓撲圖,要求:
R3、R4為企業分支機構,R1、R5為企業總部,現要在總部的邊界R1與分支的邊界R3上開啟代理功能,做NAT,企業分支內部R4與企業總部內部R5構建DMVPN環境,同時應用IPSEC對資料流量實施安全保護。
需要使用的技術:IPV4、靜態路由、NAT(NAT-T協議在配置完NAT是預設開啟的)、DMVPN、IPSEC。
1.拓撲具體的IPV4地址規劃:
R1的 Loopback0的IPV4地址100.1.1.1/32;
R1-R2相連的Ethernet0/0的IPV4地址10.100.12.1/24;
R1-R5相連的Ethernet0/1的IPV4地址10.100.15.1/24;
R2的 Loopback0的IPV4地址100.2.2.2/32;
R2-R1相連的Ethernet0/0的IPV4地址10.100.12.2/24;
R2-R3相連的Ethernet0/1的IPV4地址10.100.23.2/24;
R3的 Loopback0的IPV4地址100.3.3.3/32;
R3-R2相連的Ethernet0/1的IPV4地址10.100.23.3/24;
R3-R4相連的Ethernet0/0的IPV4地址10.100.34.3/24;
R4的 Loopback0的IPV4地址100.4.4.4/32;
R4-R3相連的Ethernet0/0的IPV4地址10.100.34.4/24;
R5的 Loopback0的IPV4地址100.5.5.5/32;
R5-R1相連的Ethernet0/0的IPV4地址10.100.15.5/24;
總部R5與分支R4之間構建DMVPN環境:
R4的 Tunnel0的IPV4地址200.1.1.4/24;
R5的 Tunnel0的IPV4地址200.1.1.5/24;
2.底層路由的配置(公網可通,用靜態路由的寫法):

R3->R2/R3(config)# ip route 0.0.0.0 0.0.0.0 10.100.23.2   
R1->R2/R1(config)# ip route 0.0.0.0 0.0.0.0 10.100.12.2

3.在企業邊界上啟用NAT(總部的邊界R1和分支的邊界R3分別啟用):
先抓取允許通過NAT轉換的使用者的IP地址

R3(config)# access-list 100 permit ip any any

R3上做NAT

R3(config)# ip nat inside source list 100 interface Ethernet0/1 overload
R3(config)# inter ethernet 0/0
R3(config)# ip nat inside
R3(config)#interface Ethernet0/1
R3(config)#ip nat outside

總部的邊界R1上做同分支邊界相同的操作。
4.內網底層路由的配置(靜態路由寫法):

R4->R3/R4(config)# ip route 0.0.0.0 0.0.0.0 10.100.34.3
R5->R1/R5(config)# ip route 0.0.0.0 0.0.0.0 10.100.15.1

5.搭建DMVPN環境:
配置隧道口地址

R4(config)#interface Tunnel0
R4(config -if)#ip address 200.1.1.1 255.255.255.0

定義隧道的源和目標

R4(config -if)# tunnel key 10
R4(config -if)# tunnel source Ethernet0/0
R4(config -if)# tunnel mode gre multipoint

NHRP協議的開啟:

R4(config -if)# ip nhrp network-id 100
R4(config -if)# ip nhrp authentication cisco
R4(config -if)# ip nhrp nhs 200.1.1.5                  //企業總部的隧道口地址
R4(config -if)# ip nhrp map 200.1.1.5 10.100.12.1       //將總部的隧道口地址對映為其公網口的地址

總部的R5上做同分支R4上相同的配置。
6.啟用IPSEC對DMVPN構建的隧道實施加密保護:

R4(config-isakmp)#crypto isakmp policy 10       
R4(config-isakmp)#encr 3des
R4(config-isakmp)#hash md5
R4(config-isakmp)#authentication pre-share
R4(config-isakmp)#group 2
R4(config )# crypto isakmp key ccie address 0.0.0.0
R4(config )#crypto ipsec transform-set ccie esp-3des esp-md5-hmac 
R4(cfg-crypto-trans)# mode transport                //IPSEC的傳輸工作模式,借用DMVPN的隧道

R4(config )#crypto ipsec profile ccie                  //CISCO的SVI配法
R4(ipsec-profile) set transform-set ccie
R4(config)#inter tunnel 0
R4(config-if) #tunnel protection ipsec profile ccie       //隧道口呼叫策略集

企業總部R5上啟用和分支R4相同的IPSEC配置。

*Nov 13 10:29:23.961: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON 彈出此日誌說明IPSEC呼叫成功

R4#show crypto engine connections active //通過此命令來檢視IPSEC的引擎,我們可以看到IPSEC構建的三條通道,如下圖所示:
在這裡插入圖片描述
補充:如果裝置上預設沒有開啟NAT-T,使用如下命令開啟:

R4(config)#crypto ipsec nat-transparency udp-encapsulation

總結:通過NAT-T協議的使用,我們可以實現多VPN的構建,IPSEC的IKE第一階段由隧道出介面為500的源埠號和各大廠商指定的目標埠號(根據你所使用的裝置來決定)來發起IPSEC的IKE第一階段的協商,但是當隧道另一端的入介面上無法正確識別並將其轉換為正確的500埠號時,我們要在接收方的邊界做靜態對映,將其轉換為正確的500埠,完成IKE第一階段;IKE的第二階段,發起方以源目埠號4500發起IPSEC的IKE第二階段的協商,類似於IKE的第一階段,接收方會在完成埠轉換之後向發起方迴應一個源埠為4500的確認報文,IKE的第二階段仍然需要我們在邊界裝置上做靜態對映;NAT下IPSEC VPN的部署,面對的問題有兩個,一個是埠號複用的問題,一個是TCP/UDP的偽首部校驗機制帶來的問題(這個問題是由於主機對VPN的資料包進行了偽首部校驗,我們可以在VPN裝置上修改這個資料包,最終再轉發給主機,通過偽首部校驗)。解決埠號複用的問題,就得通過NAT-T協議(俗稱NAT穿越技術)的解決。