IPsec協議作為目前最為常見的VPN隧道協議,其強大的加密與驗證功能保障了私網數據在公網傳遞時通信的安全。由于IPsec VPN隧道不支持對多播和廣播數據包的傳遞,需要接合GRE隧道技術,GRE隧道將多播和廣播數據包封裝成單播包,再由IPsec技術提供數據傳輸的加密和驗證。
如圖1所示,使用GRE over IPsec VPN技術實現單位總部局域網中主機c1和分部局域網中主機c2間的通信,通過路由器模擬在Internet中實現數據傳輸的安全性。這里使用銳捷RSR20-18路由器,系統版本為 10.3(5b6)p2。(為 方 便實驗驗證,主機c1和c2分別在路由器上用loopback0口來代替做測試。)
1.路由器RA配置

圖1 GRE over IPsec案例應用


//只要建了tunnel隧道,默認封裝模式就是GRE,隧道源和目的地址分別是兩端路由器物理口的公網IP地址。
RA(config)#ip route 0.0.0.0 0.0.0.0 tunnel 0//發往目標主機的路由發到tunnel口就是對數據包進行GRE封裝,GRE封裝后生成的新IP包的報頭IP地址就是tunnel隧道內定義的源地址和目的地址。

//定義IKE的第一階段,這里采用預共享密鑰的認證方式,預共享密碼為zt,其余ISAKMP安全策略為默認。



//定義IKE的第二階段,定義轉換集test保護傳輸數據流。由于IPsec中ESP方式加密后生成的新IP報頭地址和GRE封裝后的報頭IP地址都是隧道的源地址和目的地址,因此這里選擇傳輸模式,可以省略掉GRE報頭中的IP地址,相較tunnel模式而言,每個數據包可以節省20字節的IP頭部信息,提升網絡傳輸效率。要的區別之一就在于感興趣流量定義不同,GRE over IPSec VPN中順序:先路由(由于下一跳是tunnel口,所以就要先做GRE封裝);感興趣流量再撞擊map,這時GRE封裝后的新IP報頭是公網地址,報頭中目標IP變 為 200.1.1.2,源 IP為200.1.1.1,所以感興趣ACL中源地址和目的地址要用公網端口IP地址。此外,這里感興趣流量ACL定義時如果使用access-list 100 permit gre host 200.1.1.1 host 200.1.1.2,只允許放行gre流量,不使用IP流量,會更嚴謹些。

2.路由器RB配置


//定義IKE的第一階段,這里采用預共享密鑰的認證方式,預共享密碼為zt,其余ISAKMP安全策略為默認。


RB(config)#crypto map VPN 10 ipsecisakmp //定義加密圖VPN


圖2 GRE over IPSec數據報文封裝結構

在路由器RA上使用ping命令模擬主機c1到c2的通信測試,發現已互通,但剛開始數據傳輸仍然掉包,說明做了IPSec,前面數據包先觸發協商把隧道打通。同時可以看見GRE和數據部分都用ESP方式加密了,如圖2所示,這就是GRE over IPSec VPN。
如果不使用靜態路由,而使用一些IGP動態路由協議,利用其定期發送的hello包來觸發打通隧道,那么上面ping包測試時前面就不會再有丟包出現。這里假設使用OSPF路由協議替代上面靜態路由,實現私網路由的學習。



在RA上再使用ping命令進行測試,發現數據包全部ping通,由于OSPF中以太網口每10s發送hello包,這時已不需再用一些數據包去觸發打通IPSec隧道。此外,這時由于經過tunnel口需要進行GRE的封裝,GRE已把OSPF組播報文封裝成單播報文進行發送,報頭中源地址和目的地址分別為雙方路由器的物理口IP地址。
RA#ping


GRE over IPsec VPN技術先做GRE隧道封裝,后進行數據加密,把感興趣流訪問列表中的源和目的IP地址定義為GRE隧道的源和目的IP,把加密圖應用在路由器的公網物理出口上,這樣就可以保證所有進入隧道的數據包都會被加密傳輸,在實際場景中有著廣泛應用。