799780百万文字论坛-799780百万文字论坛新粤彩-780790百万文字论坛红字-百万文字论坛500505com-500608百万文字论坛

工業路由器
您當前位置: 首頁 >> 服務與支持 >> 產品百科 >> 工業路由器

GRE協議介紹

發布時間:2021-03-23瀏覽:1778

項目背景


IPv6的部署大致要經歷一個漸進的過程,在初始階段,IPv4的網絡海洋中會出現若干局部零散的IPv6孤島,為了保持通信,這些孤島通過跨越IPv4的隧道彼此連接;隨著IPv6規模的應用,原來的孤島逐漸聚合成為了骨干的IPv6 Internet網絡,形成于IPv4骨干網并存的局面,在IPv6骨干上可以引入了大量的新業務,同時可以充分發揮IPv6的諸多優勢。為了實現IPv6和IPv4網絡資源的互訪,還需要轉換服務器以實現v6和v4的互通;最后,IPv4骨干網逐步萎縮成局部的孤島,通過隧道連接,IPv6占據了主導地位,具備全球范圍的連通性。


IPv6提供很多過渡技術來實現上述這樣一個演進過程。這些過渡技術圍繞兩類問題解決:
IPv6孤島互通技術:實現IPv6網絡和IPv6網絡的互通
IPv6和IPv4互通技術:實現兩個不同網絡之間互相訪問資源

目前,解決上述問題的基本過渡技術有兩種:雙棧和隧道。


雙棧:即設備升級到IPv6的同時保留IPv4支持,可以同時訪問IPv6和IPv4設備,包含雙協議棧支持,應用程序依靠DNS地址解析返回的地址類型,來決定使用何種協議棧。
隧道:通過在一種協議中承載另一種協議,實現跨越不同域的互通,具體可以是IPv6-in-IPv4,IPv6-in-MPLS,IPv4-in-IPv6等隧道類型。


GRE隧道(VPN)


GRE與IP in IP、IPX over IP等封裝形式很相似,但比他們更通用。在GRE的處理中,很多協議的席位差異都被忽略,這使得GRE不限于某個特定的“X over Y”應用,而是一種最基本的封裝形式。


在最簡單的情況下,路由器接收到一個需要封裝和路由的原始數據報文(Payload),這個報文首先被GRE封裝而成GRE報文,接著被封裝在IP協議中,然后完全由IP層負責此報文的轉發。原始報文的協議被稱之為乘客協議,GRE被稱之為封裝協議,而負責轉發的IP協議被稱之為傳遞(Delivery)協議或傳輸(Transport)協議。注意到在以上的流程中不用關心乘客協議的具體格式或內容,整個被封裝的報文格式:


      -------------------------------
      |   Delivery Header           |
      |   (Transport Protocol)      |
      -------------------------------
      |  GRE Header                 |
      |  (Encapsulation Protocol    |
      -------------------------------
      |  Payload Packet             |
      |  (Passenger Protocol)       |
      -------------------------------


GRE報頭的格式如下:


      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |C|R|K|S|s|Recur|  Flags  | Ver |         Protocol Type         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Checksum (optional)      |       Offset (optional)       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Key (optional)                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    Sequence Number (optional)                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    Routing (optional)                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+



GRE隧道原理:


1、封裝
Ingress PE從連接X協議的接口接收到X協議報文后,首先交由X協議處理。
X協議根據報文頭中的目的地址在路由表或轉發表中查找出接口,確定如何轉發此報文。如果發現出接口是GRE Tunnel接口,則對報文進行GRE封裝,即添加GRE頭。
根據骨干網傳輸協議為IP,給報文加上IP頭。IP頭的源地址就是隧道源地址,目的地址就是隧道目的地址。

根據該IP頭的目的地址(即隧道目的地址),在骨干網路由表中查找相應的出接口并發送報文。之后,封裝后的報文將在該骨干網中傳輸。


2、解封裝
解封裝過程和封裝過程相反。
Egress PE從GRE Tunnel接口收到該報文,分析IP頭發現報文的目的地址為本設備,則Egress PE去掉IP頭后交給GRE協議處理。GRE協議剝掉GRE報頭,獲取X協議,再交由X協議對此數據報文進行后續的轉發處理。
配置


左邊為R3,右邊為R4
R3:
配置公網IP:
interface GE0/3/4
 ip address 34.0.0.3/24
 no shutdown
!
配置私網IP:
interface GE0/1/3
 ip address 13.0.0.3/24
 no shutdown
!
配置GRE Tunnel:
interface tunnel100
 tunnel mode gre
 tunnel source 34.0.0.3
 tunnel destination 34.0.0.4
 ip address 192.168.100.3/24 //和對方Tunnel IP在同一網段
 no shutdown
!
配置路由:
ip route 0.0.0.0/0 34.0.0.4 //到公網默認路由
ip route 24.0.0.0/24 tunnel100 //到對方私網路由通過Tunnel 100訪問
!


R4:
配置公網IP:
interface GE0/3/4
 ip address 34.0.0.4/24
 no shutdown
!
配置私網IP:
interface GE0/2/4
 ip address 24.0.0.4/24
 no shutdown
!
配置GRE Tunnel:
interface tunnel100
 tunnel mode gre
 tunnel source 34.0.0.4
 tunnel destination 34.0.0.3
 ip address 192.168.100.4/24 //和對方Tunnel IP在同一網段
 no shutdown
!
配置路由:
ip route 0.0.0.0/0 34.0.0.3 //到公網默認路由
ip route 13.0.0.0/24 tunnel100 //到對方私網路由通過Tunnel 100訪問
!

在R4上ping R3的私網地址13.0.0.3,抓包如下:

261416124793.png
GRE報文解析

261416332056.png



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 標識乘客協議的協議類型。常見的乘客協議為IPv4協議,協議代碼為0800。
Checksum 對GRE頭及其負載的校驗和字段。
Key 關鍵字字段,隧道接收端用于對收到的報文進行驗證。
目前實現的GRE頭不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置為0。
GRE安全機制

GRE本身提供兩種基本的安全機制:校驗和驗證,識別關鍵字。


1、校驗和驗證
校驗和驗證是指對封裝的報文進行端到端校驗。
若GRE報文頭中的C位標識位置1,則校驗和有效。發送方將根據GRE頭及Payload信息計算校驗和,并將包含校驗和的報文發送給對端。接收方對接收到的報文計算校驗和,并與報文中的校驗和比較,如果一致則對報文進一步處理,否則丟棄。

隧道兩端可以根據實際應用的需要決定配置校驗和或禁止校驗和。如果本端配置了校驗和而對端沒有配置,則本端將不會對接收到的報文進行校驗和檢查,但對發送的報文計算校驗和;相反,如果本端沒有配置校驗和而對端已配置,則本端將對從對端發來的報文進行校驗和檢查,但對發送的報文不計算校驗和。


2、識別關鍵字
識別關鍵字(Key)驗證是指對Tunnel接口進行校驗。通過這種弱安全機制,可以防止錯誤識別、接收其它地方來的報文。
RFC1701中規定:若GRE報文頭中的K位為1,則在GRE頭中插入一個四字節長關鍵字字段,收發雙方將進行識別關鍵字的驗證。
關鍵字的作用是標志隧道中的流量,屬于同一流量的報文使用相同的關鍵字。在報文解封裝時,GRE將基于關鍵字來識別屬于相同流量的數據報文。只有Tunnel兩端設置的識別關鍵字完全一致時才能通過驗證,否則將報文丟棄。這里的“完全一致”是指兩端都不設置識別關鍵字,或者兩端都設置相同的關鍵字。


GRE的Keepalive檢測


由于GRE協議并不具備檢測鏈路狀態的功能,如果對端接口不可達,隧道并不能及時關閉該Tunnel連接,這樣會造成源端會不斷的向對端轉發數據,而對端卻因隧道不通接收不到報文,由此就會形成數據空洞。
GRE的Keepalive檢測功能可以檢測隧道狀態,即檢測隧道對端是否可達。如果對端不可達,隧道連接就會及時關閉,避免因對端不可達而造成的數據丟失,有效防止數據空洞,保證數據傳輸的可靠性。
Keepalive檢測功能的實現過程如下:
當GRE隧道的源端使能Keepalive檢測功能后,就創建一個定時器,周期地發送Keepalive探測報文,同時通過計數器進行不可達計數。每發送一個探測報文,不可達計數加1。
對端每收到一個探測報文,就給源端發送一個回應報文。
如果源端的計數器值未達到預先設置的值就收到回應報文,就表明對端可達。如果源端的計數器值到達預先設置的值——重試次數(Retry Times)時,還沒收到回送報文,就認為對端不可達。此時,源端將關閉隧道連接。但是源端口仍會繼續發送Keepalive報文,若對端Up,則源端口也會Up,建立隧道鏈接。
對于設備實現的GRE Keepalive檢測功能,只要在隧道一端配置Keepalive,該端就具備Keepalive功能,而不要求隧道對端也具備該功能。隧道對端收到報文,如果是Keepalive探測報文,無論是否配置Keepalive,都會給源端發送一個回應報文。


GRE具有如下的優點:


多協議的本地網可以通過單一協議的骨干網實現傳輸;
將一些不能連續的子網連接起來,用于組建VPN;
擴大了網絡的工作范圍,包括那些路由網管有限的協議。如IPX包最多可以轉發16次(即經過16個路由器),而在一個Tunnel連接中看上去只經過一個路由器。
由于GRE是將一個數據包封裝到另一個數據包中,因此可能會遇到GRE的數據報大于網絡接口所設定的數據包最大尺寸的情況。解決這種問題的方法是在隧道接口上配置ip tcp adjust-mss 1436。另外,雖然GRE并不支持加密,但是可以通過Tunnel key命令在隧道的兩頭各設置一個密鑰。這個密鑰其實就是一個明文的密碼。由于GRE隧道沒有狀態控制,可能隧道的一端已經關閉,而另一端仍然開啟。這一問題的解決方案就是在隧道兩端開啟keepalive數據包,它可以讓隧道一端定時向另一端發送keepalive數據,確認端口保持開啟狀態。如果隧道的某一端沒有按時收到keepalive數據,那么這一側的隧道端口也會關閉。
IPSec(VPN)


IPSec(IP Security)是一組開放協議的總稱,特定的通信方之間的IP層通過加密與數據源驗證,以保證數據包在Internet網上傳輸時的私有性、完整性和真實性。IPSec通過AH(Authentication Header)和ESP(Encapsulating Security Payload)這兩個安全協議來實現。


AH在IP包中的位置(隧道方式):


    -------------------                ------------------------------
    | IP | TCP | Data |  ---------->   | IP2 | AH | IP | TCP | Data |  
    -------------------                ------------------------------
1
2
3

ESP將需要保護的用戶數據進行加密后再封裝到IP包中,ESP可以保證數據的完整性、真實性和私有性。


ESP頭在IP包中的位置(隧道方式):


    -------------------                ------------------------------------------------
    | IP | TCP | Data |  ---------->   | IP2 | ESP | IP | TCP | Data | Trailer | Auth |
    -------------------                ------------------------------------------------

###IPv6 over IPv4隧道


在IPv4網絡向IPv6網絡過渡的初期,IPv4網絡已被大量部署,而IPv6網絡只是散布在世界各地的一些孤島。利用隧道技術可以在IPv4網絡上創建隧道,從而實現IPv6孤島之間的互連。在IPv4網絡上用于連接IPv6孤島的隧道成為IPv6 over IPv4隧道。為了實現IPv6 over IPv4隧道,需要在IPv4孤島的隧道稱為IPv6 over IPv4隧道。為了實現IPv6 over IPv4隧道,需要在IPv4網絡與IPv6網絡交界的邊界路由設備商啟動IPv4/IPv6雙協議棧。


IPv6 over IPv4隧道技術的原理:


邊界路由設備啟動IPv4/IPv6雙協議棧,并配置IPv6 over IPv4隧道。
邊界路由設備在收到從IPv6網絡側發來的報文后,如果報文的目的地址不是自身且下一跳出接口為Tunnel接口,就要把收到的IPv6報文作為負載,加上Ipv4報文頭,封裝成IPv4報文。
在IPv4網絡中,封裝后的報文被傳遞到對端的邊界路由設備。

對端邊界路由設備對報文解封裝,去掉IPv4報文頭,然后將封裝后的IPv6報文發送到對端的IPv6網絡中。


其他隧道原理類似。


IPv4 over IPv6隧道



261417373902.png


在IPv4 Internet向IPv6 Internet過渡后期,IPv6網絡被大量部署后,而IPv4網絡只是散布在世界各地的一些孤島。利用隧道技術可以在IPv6網絡上創建隧道,從而實現IPv4孤島的互聯,IPv4孤島能通過IPv6公網訪問其他IPv4網絡。


上一篇:SPI 接口配置 下一篇:POE供電的安全傳輸距離,網線的選擇有哪些建議
免費樣機申請 樣機免費試用,提前溝通確保愛陸通產品深度契合貴司業務需求
  • *您的姓名:
  • *手機號碼:
  • *公司名稱:
  • 您的職位:
  • 您的郵箱:
  • 您的QQ:
相關產品
產品百科
隱私政策網站地圖 Copyright ? 2015-2022 廈門愛陸通通信科技有限公司 All Rights Reserved.  
撥打電話