48小时系统班试听入口

【网工技术】GRE协议介绍

发布作者:新盟教育 发布日期:2022-09-05 浏览人数:5130人

网工技术

项目背景

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,抓包如下:


    GRE报文解析:


    GRE头各字段解释:


    目前实现的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具有如下的优点:

    1.多协议的本地网可以通过单一协议的骨干网实现传输;

    2.将一些不能连续的子网连接起来,用于组建VPN;

    3.扩大了网络的工作范围,包括那些路由网管有限的协议。如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 |  
        -------------------                ------------------------------
    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隧道

    在IPv4 Internet向IPv6 Internet过渡后期,IPv6网络被大量部署后,而IPv4网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公网访问其他IPv4网络。

    推荐阅读

    >>>【独家首发】新版HCIE考试解读直播回顾

    >>> 重磅!华为HCIE认证改版升级通知!

    >>>【命令解析】Linux用户行为的常用命令

    >>> 网工必备通信基础知识,还不知道你就out了?

    >>>【必备干货】网工入门必会桥接教程,外网+GNS3+Vmware

    >>>【技术指南】5分钟搞清楚OSPF链路状态路由协议


    网工界市场认可度极高的华为认证,你考了吗?


    拿下华为HCIE认证之后,你可以:


    • 跨越90%企业的招聘硬门槛

    • 增加70%就业机会

    • 拿下BAT全国TOP100大厂敲门砖

    • 体系化得到网络技术硬实力

    • 技术大佬年薪可达30w+


    客服电话 15822722968 邮箱 799830458@qq.com 地址 天津市红桥区光荣道157号宝能创业中心2号楼-1、2门-907号
    官方公众号
    商务合作