通用路由封装协议GRE 提供了将一种协议报文封装在另一种协议报文中的机制,是一种三层隧道封装技术;可以对IPv4协议的数据报文进行再封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输;报文通过GRE隧道透明的传输,可以解决外网主动访问内网的问题;GRE可以封装组播数据和路由选择协议,结合IP Sec使用,从而保证语音、视频等组播业务的安全。
GRE实现机制简单,对隧道两端的设备负担小;GRE隧道可以有效利用了原有的网络架构,降低成本;GRE隧道扩展了跳数受限网络协议的工作范围,支持企业灵活设计网络拓扑;GRE隧道支持MPLS LDP,使用GRE隧道承载MPLS LDP报文,建立LDP LSP,实现MPLS骨干网的互通;GRE隧道将不连续的子网连接起来,用于组建VPN,实现企业总部和分支间安全的连接。
GRE的工作原理:
1、C–校验和标志位;如配置了checksun则该位置为1,同时校验和(可选)、偏离(可选)部分的共4 bytes出现在GRE头部;如不配置checksun则该位置为0,同时校验和(可选)、偏离(可选)部分不出现在GRE头部。
2、R–路由标志位;如R为1,校验和(可选)、偏离(可选)、路由(可选)部分的共8 bytes出现在GRE头部;如R为0, 校验和(可选)、偏离(可选)、路由(可选)部分不出现在GRE头部。
3、K–密钥标志位;如配置了KEY则该位置为1,密钥(可选)部分出现在GRE头部;如不配置KEY则该位置为0,密钥(可选)部分不出现在GRE头部。
4、S–序列好同步标志位;如配置了sequence-datagrams则该位置为1,同时序列号(可选)部分的共4 bytes出现在GRE头部。如不配置sequence-datagrams则该位置为0,同时序列号(可选)部分不出现在GRE头部。
5、s:严格源路由标志位。所有的路由都符合严格源路由,该位为1。通常为0。
6、递归控制:该位置需为0
7、标志位:未定义,需为0
8、版本:需为0
9、协议类型:常用的协议,例如IP协议为0800
▶报文封装和解封装过程:
GRE封装报文时,封装前的报文称为净荷,封装前的报文协议称为乘客协议,然后先封装GRE头部,GRE成为封装协议,也叫运载协议,最后负责对封装后的报文进行转发的协议称为传输协议。
1)路由器从连接私网的接口接收到报文后,检查报文头中的目的IP地址字段,在路由表查找出接口,发现出接口是隧道接口,将报文发送给隧道模块进行处理。
2)隧道模块接收到报文后首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装,添加GRE报头。
3)路由器给报文添加传输协议报头即IP报头(公网地址);该IP报头的源地址就是隧道源地址,目的地址就是隧道目的地址。
4)路由器根据新添加的IP报头目的地址,在路由表中查找相应的出接口并发送报文,封装后的报文将在公网中传输。
5、接收端路由器从连接公网的接口收到报文后,首先分析IP报文头,如果发现协议类型字段的值为47,表示协议为GRE,于是出接口将报文交给GRE模块处理。GRE模块去掉IP报文头和GRE报文头,并根据GRE报文头的协议类型字段,发现此报文的乘客协议为私网中运行的协议,于是将报文交给该协议处理。
▶Keepalive检测:
1)Keepalive检测功能用于在任意时刻检测隧道链路是否处于Keepalive状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免形成数据空洞;Keepalive检测功能开启后,GRE隧道本端会定期(默认值为5秒,deadtime为15秒)向对端发送Keepalive探测报文;若对端可达,则本端会收到对端的回应报文;若对端不可达,则收不到对端的回应报文。
2)如果在隧道一端配置了Keepalive功能,无论对端是否配置Keepalive,配置的Keepalive功能在该端都生效;隧道对端收到Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。
3)Keepalive检测功能开启后,源端会创建一个计数器并周期性地发送Keepalive探测报文同时进行计数;每发送一个探测报文,不可达计数加1。
4)如果源端在计数器值达到预先设置的值之前收到回应报文,则表明对端可达。如果计数器值达到预先设置的重试次数,源端还是没有收到回应报文,则认为对端不可达。此时,源端将关闭隧道连接。
▶GRE over IPsec
1)GRE本身并不支持加密,因而通过GRE隧道传输的流量是不加密的。将IPSec技术与GRE相结合,可以先建立GRE隧道对报文进行GRE封装,然后再建立IPSec隧道对报文进行加密,以保证报文传输的完整性和私密性。
2)IPSec VPN技术可以创建一条跨越共享公网的隧道,从而实现私网互联;IPSec VPN能够安全传输IP报文,但无法在隧道的两个端点之间运行RIP和OSPF等路由协议;而GRE可以将路由协议信息封装在另一种协议报文(IPv4)中进行传输。3)使用GRE可以克服IGP协议的一些局限性。例如,RIP路由协议是一种距离矢量路由协议,最大跳数为15。如果网络直径超过15,设备将无法通信。这种情况下,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。