目 錄
第1章 GRE簡(jiǎn)介... 11.1 GRE概述... 11.2 GRE報文格式... 11.3 GRE工作原理... 21.3.1 隧道源端的加封裝過(guò)程... 21.3.2 隧道對端的解封裝過(guò)程... 21.4 設備版本信息... 2第2章 配置GRE. 32.1 GRE配置思路... 32.2 GRE配置命令... 3第3章 GRE配置實(shí)例... 53.1 網(wǎng)絡(luò )拓撲... 53.2 配置步驟... 5第4章 GRE維護與診斷... 7簡(jiǎn)介
概述
GRE是Generic Routing Encapsulation(通用路由封裝)的簡(jiǎn)稱(chēng)。簡(jiǎn)單而言,GRE就是對某些網(wǎng)絡(luò )層協(xié)議(如:IPV4,IPV6,IPX等)的數據報進(jìn)行封裝,使這些被封裝的數據報能夠在另一個(gè)網(wǎng)絡(luò )層協(xié)議(如IPV4,IPV6等)中傳輸。
GRE通過(guò)創(chuàng )建一條點(diǎn)到點(diǎn)的tunnel來(lái)完成二次封裝數據的轉發(fā)。
企業(yè)私有網(wǎng)絡(luò )的IP地址通常是自己規劃,無(wú)法和外部互聯(lián)網(wǎng)進(jìn)行正確的路由。而在企業(yè)網(wǎng)絡(luò )的出口,通常會(huì )有一個(gè)互聯(lián)網(wǎng)唯一的IP地址,這個(gè)地址可以在互聯(lián)網(wǎng)中唯一識別出來(lái)。GRE就是對目的IP地址和源地址為企業(yè)內部地址的數據報文進(jìn)行封裝,加上一個(gè)IP頭,其目的地址為遠端機構互聯(lián)網(wǎng)出口的IP地址,源地址為本地互聯(lián)網(wǎng)出口的IP地址,從而通過(guò)互聯(lián)網(wǎng)進(jìn)行正確的傳輸,實(shí)現最簡(jiǎn)單的VPN技術(shù)。
實(shí)現VPN的應用只是GRE的功能之一,GRE的隧道功能還能為IPV4到IPV6的過(guò)渡發(fā)揮積極的作用。
報文格式
GRE的報文由傳遞協(xié)議和負載協(xié)議構成,如圖1.2?1所示。
1.2?1 GRE報文格式
Delivery Header:傳遞協(xié)議的協(xié)議頭在傳遞協(xié)議為IPv4的情況下,這里占用20個(gè)字節并且將協(xié)議號置為47,表明這個(gè)報文是GRE報文。
GRE Header:GRE協(xié)議頭占用8個(gè)字節,其中包含了2個(gè)字節的Protocol Type,用于表明負載協(xié)議是什么類(lèi)型,當負載協(xié)議為IP時(shí)需要將這兩個(gè)字節數據標注為0x800。
Payload:負載協(xié)議的數據包。
工作原理
當路由器發(fā)送或轉發(fā)一個(gè)IP數據報時(shí),如果IP數據報經(jīng)路由查找要從GRE隧道接口發(fā)出,就需要進(jìn)行GRE封裝。在封裝時(shí)需要根據該GRE隧道接口的選項設置情況進(jìn)行GRE報頭選項字段的處理,最后根據封裝后的目的地址查找路由把數據報送到輸出的網(wǎng)絡(luò )接口,實(shí)現數據報的轉發(fā)。
目前GER隧道的MTU是1476字節,如果要發(fā)送的數據報長(cháng)度大于接口的MTU,還需要進(jìn)行分片操作,然后再經(jīng)過(guò)GRE封裝后發(fā)出,即先分片后封裝。當該IP數據報頭DF位置1表明該數據包進(jìn)行了分片,當接口接收到的報文大于自己的MTU時(shí),則回送ICMP消息表明自己需要分片接收數據包(type為3,code為4,附帶該接口的MTU)。
當路由器收到一個(gè)IP數據報時(shí),如果其目的地址是本地且其報頭的協(xié)議字段為47,說(shuō)明該數據報是經(jīng)過(guò)GRE封裝的,需要在本路由器上進(jìn)行解析。
GRE報文經(jīng)過(guò)合法性檢查后,需要根據GRE報文的源地址和目的地址映射到本地保存的GRE隧道編號,若對應的GRE隧道不存在,則丟棄該數據報。
接著(zhù)進(jìn)行GRE選項的處理,目前我司路由器僅支持key選項而忽略其他選項。若GRE報頭中flag字段的key標記與本路由器對應隧道的key標記不同,或者都置了key標記而key值不同,則丟棄該數據報。
把去除GRE封裝的IP數據報頭的TTL減1,然后進(jìn)行進(jìn)一步的處理。通過(guò)查找路由判斷數據報是要本地投遞還是轉發(fā)。TTL的處理方法表明,藏在外網(wǎng)IP后的內網(wǎng)IP不會(huì )在隧道轉發(fā)的過(guò)程中將TTL遞減。
注意:
解封裝時(shí),如果內部IP頭的地址是原封裝設備,則會(huì )造成路由環(huán)路。要避免這種情況的發(fā)生。
設備類(lèi)型
測試版本
支持的版本
硬件配置
ZXR10 GER
GER08 V2.6.03b42
所有版本
ZXR10 GAR/ZSR系列
GAR V2.8.01.A30.P9
所有版本
配置思路
GRE的主要配置步驟包括:
1. 創(chuàng )建隧道,設置隧道模式為GRE;
2. 配置隧道源地址和目的地址;
3. 配置私網(wǎng)路由的出口為tunnel接口或者將下一跳設置為對端的tunnel ip。
此外可根據需要啟用密鑰、tunnel sequence選項、tunnel checksum選項等。
配置命令
下面介紹GRE的主要配置命令。
1. 創(chuàng )建隧道,并進(jìn)入該隧道接口配置模式
命令格式
命令模式
命令功能
interface <tunnel-number>
全局
創(chuàng )建一個(gè)tunnel隧道接口
<tunnel-number>的格式為tunnel+<id>,如tunnel1,id取值范圍在1~64。
2. 配置隧道為GRE隧道
命令格式
命令模式
命令功能
tunnel mode gre ip
接口
配置隧道為GRE隧道
3. 為所在隧道配置一個(gè)隧道源地址
命令格式
命令模式
命令功能
tunnel source {ipv4 | ipv6} <ip-address>
接口
為所在隧道配置一個(gè)隧道源地址
4. 為所在隧道配置一個(gè)隧道目的地址
命令格式
命令模式
命令功能
tunnel destination {ipv4 | ipv6} <ip-address>
接口
為所在隧道配置一個(gè)隧道目的地址
5. 為隧道配置密鑰
命令格式
命令模式
命令功能
tunnel key <key>
接口
為隧道配置密鑰
隧道兩端的密鑰必須相同。
6. 配置本隧道啟用tunnel sequence選項
命令格式
命令模式
命令功能
tunnel sequence
接口
配置本GRE隧道啟用tunnel sequence選項
7. 配置本隧道啟用tunnel checksum選項
命令格式
命令模式
命令功能
tunnel checksum
接口
配置本GRE隧道啟用tunnel checksum選項
配置實(shí)例
如圖3.1?1所示,某公司為了連接兩個(gè)部門(mén)之間的網(wǎng)絡(luò ),啟用了GRE構建隧道。規劃中路由器的loopback作為tunnel source和tunnel destination,并設置兩個(gè)私網(wǎng)地址作為tunnel地址,打通100.100.100.0/24和200.200.200.0/24的隧道通路。
3.1?1 GRE典型配置組網(wǎng)
GER的fei_1/1連接的是100.100.100.0/24的內部網(wǎng)絡(luò ),fei_1/2連接到運營(yíng)商提供的公網(wǎng)接口,接口IP地址為1.1.1.1/30。GAR的fei_1/1連接的是200.200.200.0/24的內部網(wǎng)絡(luò ),fei_2/1連接到運營(yíng)商提供的公網(wǎng)接口,接口IP地址為2.2.2.1/30。
GER的配置:
GER(config)#int loopback1
GER(config-if)#ip address 10.10.10.10 255.255.255.255
GER(config)#int fei_1/1
GER(config-if)#ip address 100.100.100.1 255.255.255.0
GER(config)#int fei_1/2
GER(config-if)#ip address 1.1.1.1 255.255.255.252
GER(config)#int tunnel1
GER(config-if)#ip address 172.16.1.1 255.255.255.252
GER(config-if)#tunnel mode gre ip
GER(config-if)#tunnel source 10.10.10.10
GER(config-if)#tunnel destination 20.20.20.20
GER(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.2
GER(config)#ip route 200.200.200.0 255.255.255.0 tunnel1
GAR的配置:
GAR(config)#int loopback1
GAR(config-if)#ip address 20.20.20.20 255.255.255.255
GAR(config)#int fei_1/1
GAR(config-if)#ip address 200.200.200.1 255.255.255.0
GAR(config)#int fei_2/1
GAR(config-if)#ip address 2.2.2.1 255.255.255.252
GAR(config)#int tunnel1
GAR(config-if)#ip address 172.16.1.1 255.255.255.252
GAR(config-if)#tunnel mode gre ip
GAR(config-if)#tunnel source 20.20.20.20
GAR(config-if)#tunnel destination 10.10.10.10
GAR(config)#ip route 0.0.0.0 0.0.0.0 2.2.2.2
GAR(config)#ip route 100.100.100.0 255.255.255.0 tunnel1
配置要點(diǎn):要使tunnel接口協(xié)議up,tunnel source和tunnel destination之間必須路由可達。建議tunnel source和tunnel destination的IP地址取用設備的loopback,這樣可以防止物理接口異常導致隧道故障,并充分利用公網(wǎng)上的冗余路由,保證GRE隧道的穩定性。Tunnel接口的IP地址可以用ip unnumber配置,但是推薦配置私有IP地址使配置更加清晰。
維護與診斷
使用以下命令可以檢查T(mén)unnel接口狀態(tài):
命令格式
命令模式
命令功能
show ip interface [brief] <interface-name>
除用戶(hù)模式外所有模式
顯示接口狀態(tài)
當GRE出現故障時(shí),可以通過(guò)以下步驟確認問(wèn)題。
1. 查看tunnel接口是否協(xié)議UP
GER(config)#show ip interface brief
2. 檢查tunnel source和tunnel destination之間是否路由可達
GER(config)#ping 20.20.20.20 source 10.10.10.10
3. 檢查tunnel接口是否能夠相互ping通
GER(config)#ping 172.16.1.2 source 172.16.1.1