詳解GRE協議
GRE詳解
GRE定義:
通用路由封裝協議GRE(Generic Routing Encapsulation)可以對某些網絡層協議(如IPX、ATM、IPv6、AppleTalk等)的數據報文進行封裝,使這些被封裝的數據報文能夠在另一個網絡層協議(如IPv4)中傳輸。
GRE提供了將一種協議的報文封裝在另一種協議報文中的機制,是一種三層隧道封裝技術,使報文可以通過GRE隧道透明的傳輸,解決異種網絡的傳輸問題。
GRE的優點
?GRE實現機制簡單,對隧道兩端的設備負擔小。
?GRE隧道可以通過IPv4網絡連通多種網絡協議的本地網絡,有效利用了原有的網絡架構,降低成本。
?GRE隧道擴展了跳數受限網絡協議的工作范圍,支持企業靈活設計網絡拓撲。
?GRE隧道可以封裝組播數據,和IPSec結合使用時可以保證語音、視頻等組播業務的安全。
?GRE隧道支持使能MPLS LDP,使用GRE隧道承載MPLS LDP報文,建立LDP LSP,實現MPLS骨干網的互通。
?GRE隧道將不連續的子網連接起來,用于組建VPN,實現企業總部和分支間安全的連接。
基本原理
實現過程
報文在GRE隧道中傳輸包括封裝和解封裝兩個過程。如圖1所示,如果X協議報文從Ingress PE向Egress PE傳輸,則封裝在Ingress PE上完成,而解封裝在Egress PE上進行。封裝后的數據報文在網絡中傳輸的路徑,稱為GRE隧道。
通過GRE隧道實現X協議互通組網圖
?封裝
1.Ingress PE從連接X協議網絡的接口接收到X協議報文后,首先交由X協議處理。
2.X協議根據報文頭中的目的地址在路由表或轉發表中查找出接口,確定如何轉發此報文。如果發現出接口是GRE Tunnel接口,則對報文進行GRE封裝,即添加GRE頭。
3.根據骨干網傳輸協議為IP,給報文加上IP頭。IP頭的源地址就是隧道源地址,目的地址就是隧道目的地址。
4.根據該IP頭的目的地址(即隧道目的地址),在骨干網路由表中查找相應的出接口并發送報文。之后,封裝后的報文將在該骨干網中傳輸。
?解封裝
解封裝過程和封裝過程相反。
1.Egress PE從GRE Tunnel接口收到該報文,分析IP頭發現報文的目的地址為本設備,則Egress PE去掉IP頭后交給GRE協議處理。
2.GRE協議剝掉GRE報頭,獲取X協議報文,再交由X協議對此數據報文進行后續的轉發處理。
報文格式
GRE封裝后的報文格式如圖2所示。
?乘客協議(Passenger Protocol):封裝前的報文稱為凈荷,封裝前的報文協議稱為乘客協議。
?封裝協議(Encapsulation Protocol):GRE Header是由封裝協議完成并填充的,封裝協議也稱為運載協議(Carrier Protocol)。
?傳輸協議(Transport Protocol或者Delivery Protocol):負責對封裝后的報文進行轉發的協議稱為傳輸協議。
GRE頭的各字段解釋如下所示。
表1 GRE頭的各字段解釋
GRE頭字段
字段解釋
C
校驗和驗證位。?該位置1,表示GRE頭插入了校驗和(Checksum)字段。
?該位置0,表示GRE頭不包含校驗和字段。
K
關鍵字位。?該位置1,表示GRE頭插入了關鍵字(Key)字段。
?該位置0,表示GRE頭不包含關鍵字字段。
Recursion
表示GRE報文被封裝的層數。完成一次GRE封裝后將該字段加1。如果封裝層數大于3,則丟棄該報文。該字段的作用是防止報文被無限次的封裝。
說明:
?RFC1701規定該字段默認值為0。
?RFC2784規定當發送和接收端該字段不一致時不會引起異常,且接收端必須忽略該字段。
?設備實現時該字段僅在加封裝報文時用作標記隧道嵌套層數,GRE解封裝報文時不感知該字段,不會影響報文的處理。
Flags
預留字段。當前必須置為0。
Version
版本字段。必須置為0。
Protocol Type
標識乘客協議的協議類型。常見的乘客協議為IPv4協議,協議代碼為0800。
Ethernet over GRE協議的協議代碼為0x6558。
Checksum
對GRE頭及其負載的校驗和字段。
Key
關鍵字字段,隧道接收端用于對收到的報文進行驗證。
GRE的安全機制
GRE本身提供兩種基本的安全機制:
?校驗和驗證
?識別關鍵字
GRE的安全機制
校驗和驗證
校驗和驗證是指對封裝的報文進行端到端校驗。
若GRE報文頭中的C位標識位置1,則校驗和有效。發送方將根據GRE頭及Payload信息計算校驗和,并將包含校驗和的報文發送給對端。接收方對接收到的報文計算校驗和,并與報文中的校驗和比較,如果一致則對報文進一步處理,否則丟棄。
隧道兩端可以根據實際應用的需要決定配置校驗和或禁止校驗和。如果本端配置了校驗和而對端沒有配置,則本端將不會對接收到的報文進行校驗和檢查,但對發送的報文計算校驗和;相反,如果本端沒有配置校驗和而對端已配置,則本端將對從對端發來的報文進行校驗和檢查,但對發送的報文不計算校驗和。
識別關鍵字
識別關鍵字(Key)驗證是指對Tunnel接口進行校驗。通過這種弱安全機制,可以防止錯誤識別、接收其它地方來的報文。
RFC1701中規定:若GRE報文頭中的K位為1,則在GRE頭中插入一個四字節長關鍵字字段,收發雙方將進行識別關鍵字的驗證。
關鍵字的作用是標志隧道中的流量,屬于同一流量的報文使用相同的關鍵字。在報文解封裝時,GRE將基于關鍵字來識別屬于相同流量的數據報文。只有Tunnel兩端設置的識別關鍵字完全一致時才能通過驗證,否則將報文丟棄。這里的“完全一致”是指兩端都不設置識別關鍵字,或者兩端都設置相同的關鍵字。
GRE的keepalive檢測
由于GRE協議并不具備檢測鏈路狀態的功能,如果對端接口不可達,隧道并不能及時關閉該Tunnel連接,這樣會造成源端會不斷的向對端轉發數據,而對端卻因隧道不通接收不到報文,由此就會形成數據空洞。
GRE的Keepalive檢測功能可以檢測隧道狀態,即檢測隧道對端是否可達。如果對端不可達,隧道連接就會及時關閉,避免因對端不可達而造成的數據丟失,有效防止數據空洞,保證數據傳輸的可靠性。
Keepalive檢測功能的實現過程如下:
1.當GRE隧道的源端使能Keepalive檢測功能后,就創建一個定時器,周期地發送Keepalive探測報文,同時通過計數器進行不可達計數。每發送一個探測報文,不可達計數加1。
2.對端每收到一個探測報文,就給源端發送一個回應報文。
3.如果源端的計數器值未達到預先設置的值就收到回應報文,就表明對端可達。如果源端的計數器值到達預先設置的值——重試次數(Retry Times)時,還沒收到回送報文,就認為對端不可達。此時,源端將關閉隧道連接。但是源端口仍會繼續發送Keepalive報文,若對端Up,則源端口也會Up,建立隧道鏈接。
說明: (對于設備實現的GRE Keepalive檢測功能,只要在隧道一端配置Keepalive,該端就具備Keepalive功能,而不要求隧道對端也具備該功能。隧道對端收到報文,如果是Keepalive探測報文,無論是否配置Keepalive,都會給源端發送一個回應報文。)
Ethernet over GRE
Ethernet over GRE
通用路由封裝協議GRE(Generic Routing Encapsulation)提供了將一種協議報文封裝在另一種協議報文中的機制,使報文能夠在異種網絡中傳輸,這種在異種網絡中傳輸報文的通道稱為隧道(Tunnel)。
目前,GRE隧道可以通過兩種隧道接口建立:
?GRE隧道接口
GRE隧道接口是為實現報文的封裝而提供的一種點對點類型的邏輯接口,包含源地址、目的地址和隧道接口IP地址。
?mGRE隧道接口
mGRE隧道接口是為實現DSVPN而提供的一種點到多點類型的邏輯接口,包含源地址、目的地址和隧道接口IP地址。
與GRE隧道接口手工指定目的地址不同,mGRE隧道接口的目的地址來自于NHRP地址解析協議,一個mGRE隧道接口上,可以存在多條GRE隧道,有多個GRE對端。
如圖1所示,分支與總部的網絡都是以太網絡,分支與總部之間通過IP骨干網相連,如果用戶希望分支與總部之間能夠互通,可以部署Ethernet over GRE功能,實現以太報文通過GRE隧道進行透傳。
Ethernet over GRE是將以太網協議的報文通過GRE封裝后,在另一個網絡層協議(如IPv4)的網絡中傳輸,具體工作原理如下:
1.在設備LAN側的物理以太網接口GE2/0/0上綁定二層VE接口VE0/0/2,在設備WAN側的Tunnel接口Tunnel0/0/1上綁定二層VE接口VE0/0/1。
2.Router_1的LAN側物理以太網接口GE2/0/0收到分支網絡的以太報文,以太報文中攜帶了VLAN Tag信息。
3.GE2/0/0收到的以太報文轉發到VE0/0/2后,在VE0/0/2上進行入接口VLAN處理,然后在設備內基于MAC和VLAN進行二層轉發,找到出接口VE0/0/1。
4.以太報文在VE0/0/1上進行出接口VLAN處理后,將轉發到VE0/0/1綁定的Tunnel0/0/1接口,經過GRE封裝(協議代碼為0x6558)后,進行后續的GRE轉發處理。
5.Router_2的Tunnel0/0/1接口上對收到的報文進行GRE解封裝,檢查到協議代碼為0x6558后,將以太報文轉發給入接口VE0/0/1。
6.在VE0/0/1上進行入接口VLAN處理后,二層轉發給VE0/0/2進行出接口VLAN處理。
7.以太報文中攜帶新的VLAN Tag信息從出接口GE2/0/0發往總部網絡。
下面我們舉個配置GRE的例子
配置GRE通過OSPF實現IPv4協議互通示例
組網拓撲