工业路由器
您当前位置: 首页 >> 服务与支持 >> 产品百科 >> 工业路由器

GRE协议介绍

发布时间:2021-03-23浏览:1750

项目背景


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.   闽ICP备15018514号
在线咨询 拨打电话