第24章_GRE原理与配置

  • IPSec VPN用于在两个端点之间提供安全的IP通信,但只能加密并传播单播数据,无法加密和传输语音、视频、动态路由协议信息等组播数据流量。

  • 通用路由封装协议GRE(Generic Routing Encapsulation)提供了将一种协议的报文封装在另一种协议报文中的机制,是一种隧道封装技术。GRE可以封装组播数据,并可以和IPSec结合使用,从而保证语音、视频等组播业务的安全。

1.GRE应用场景

  • GRE支持将一种协议的报文封装在另一种协议报文中。
  • GRE可以解决异种网络的传输问题。

image-20231209091707429

  • GRE用来对某些网络层协议如IPX(Internet Packet Exchange)的报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。GRE可以解决异种网络的传输问题。
  • IPSec VPN技术可以创建一条跨越共享公网的隧道,从而实现私网互联。IPSec VPN能够安全传输IP报文,但是无法在隧道的两个端点之间运行RIP和OSPF等路由协议。GRE可以将路由协议信息封装在另一种协议报文(例如IP)中进行传输。
  • GRE隧道扩展了受跳数限制的路由协议的工作范围,支持企业灵活设计网络拓扑。

image-20231209091758878

  • 使用GRE可以克服IGP协议的一些局限性。例如,RIP路由协议是一种距离矢量路由协议,最大跳数为15。如果网络直径超过15,设备将无法通信。这种情况下,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。
  • 首先通过GRE对报文进行封装,然后再由IPSec对封装后的报文进行加密和传输。

image-20231209091900914

  • GRE本身并不支持加密,因而通过GRE隧道传输的流量是不加密的。将IPSec技术与GRE相结合,可以先建立GRE隧道对报文进行GRE封装,然后再建立IPSec隧道对报文进行加密,以保证报文传输的完整性和私密性。

2.GRE报文结构

  • GRE在封装数据时,会添加GRE头部信息,还会添加新的传输协议头部信息。

image-20231209092006133

  • GRE封装报文时,封装前的报文称为净荷,封装前的报文协议称为乘客协议,然后GRE会封装GRE头部,GRE成为封装协议,也叫运载协议,最后负责对封装后的报文进行转发的协议称为传输协议。
  • GRE封装和解封装报文的过程如下:
    1. 设备从连接私网的接口接收到报文后,检查报文头中的目的IP地址字段,在路由表查找出接口,如果发现出接口是隧道接口,则将报文发送给隧道模块进行处理。
    2. 隧道模块接收到报文后首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装,即添加GRE报文头。
    3. 然后,设备给报文添加传输协议报文头,即IP报文头。该IP报文头的源地址就是隧道源地址,目的地址就是隧道目的地址。
    4. 最后,设备根据新添加的IP报文头目的地址,在路由表中查找相应的出接口,并发送报文。之后,封装后的报文将在公网中传输。
    5. 接收端设备从连接公网的接口收到报文后,首先分析IP报文头,如果发现协议类型字段的值为==47==,表示协议为GRE,于是出接口将报文交给GRE模块处理。GRE模块去掉IP报文头和GRE报文头,并根据GRE报文头的协议类型字段,发现此报文的乘客协议为私网中运行的协议,于是将报文交给该协议处理。

3.GRE关键字验证

  • 隧道两端设备通过关键字字段(Key )来验证对端是否合法。

image-20231209092136711

  • 关键字(Key)验证是指对隧道接口进行校验,这种安全机制可以防止错误接收到来自其他设备的报文。关键字字段是一个四字节长的数值,若GRE报文头中的K位为1,则在GRE报文头中会插入关键字字段。只有隧道两端设置的关键字完全一致时才能通过验证,否则报文将被丢弃。

4.Keepalive检测

  • Keepalive检测功能用于检测隧道对端是否可达。

image-20231209092654682

  • Keepalive检测功能用于在任意时刻检测隧道链路是否处于Keepalive状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免形成数据空洞。使能
  • Keepalive检测功能后,GRE隧道本端会定期向对端发送Keepalive探测报文。若对端可达,则本端会收到对端的回应报文;若对端不可达,则收不到对端的回应报文。如果在隧道一端配置了Keepalive功能,无论对端是否配置Keepalive,配置的Keepalive功能在该端都生效。隧道对端收到Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。
  • 使能Keepalive检测功能后,GRE隧道的源端会创建一个计数器,并周期性地发送Keepalive探测报文,同时进行不可达计数。每发送一个探测报文,不可达计数加1。
  • 如果源端在计数器值达到预先设置的值之前收到回应报文,则表明对端可达。如果计数器值达到预先设置的重试次数,源端还是没有收到回应报文,则认为对端不可达。此时,源端将关闭隧道连接。

5.GRE配置

image-20231209092802831

  • interface tunnel interface-number命令用来创建Tunnel接口。创建Tunnel接口后,需要配置Tunnel接口的IP地址和Tunnel接口的封装协议。
  • tunnel-protocol命令用来配置Tunnel接口的隧道协议。
  • source{source-ip-address|interface-type interface-number}命令用来配置Tunnel源地址或源接口。
  • destination dest-ip-address命令用来指定Tunnel接口的目的IP地址。
  • 在本端设备和远端设备上还必须存在经过Tunnel转发的路由,这样,需要进行GRE封装的报文才能正确转发。经过Tunnel接口转发的路由可以是静态路由,也可以是动态路由。配置静态路由时,路由的目的地址是GRE封装前原始报文的目的地址,出接口是本端Tunnel接口。

配置验证:

image-20231209092909561

  • 执行display interface Tunnel 0/0/1命令,可以查看接口的运行状态和路由信息。如果接口的当前状态和链路层协议的状态均显示为UP,则接口处于正常转发状态。隧道的源地址和目的地址分别为建立GRE隧道使用的物理接口的IP地址。

image-20231209092950421

  • 执行display ip routing table命令,可以查看IP路由表,判断GRE隧道连接的两个网络的可达信息。在本示例中,可以看出目的地址为通过GRE隧道可达的网络地址,下一跳地址为GRE隧道远端接口的IP地址。

6.配置Keepalive检测

image-20231209093030838

  • 执行keepalive [period period [retry-times retry-times]命令,可以在GRE隧道接口启用Keepalive检测功能。其中,period参数指定Keepalive检测报文的发送周期,默认值为==5秒==;retry-times参数指定Keepalive检测报文的重传次数,默认值为3。如果在指定的重传次数内未收到对端的回应报文,则认为隧道两端通信失败,GRE隧道将被拆除。

image-20231209093058224

  • 执行display interface tunnel命令,还可以查看GRE的Keepalive功能是否使能。本示例中,Keepalive检测功能的当前状态显示为启用,且报文的发送周期为3秒,重传次数为3次。

7.本章总结

  • GRE的应用场景有哪些?
    • GRE可以解决异种网络的传输问题;GRE隧道扩展了受跳数限制的路由协议的工作范围,支持企业灵活设计网络拓扑;GRE可以与IPSec结合来实现加密传输组播数据。
  • display interface tunnel命令显示的信息中会包含InternetAddress和Tunnel source,这两者的区别是什么?
    • Internet Address代表建立GRE隧道所用的虚拟隧道地址,Tunnel source表示隧道的起点,是设备的出接口物理地址。