GRE VPN

GRE Generic Routing Encapsulation,通用路由封装

提供了一种协议的报文封装在另一种协议报文的机制,是一种隧道封装技术;

GRE的优点

1. 支持组播和动态路由协议(多种协议)
2. 基于IP层工作,是一种三层VPN封装技术
3. 配置简单,部署容易

GRE的缺点

1. 点到点隧道
2. 没有安全性可言,不提供加密
3. 不能分隔地址空间
4. 部署复杂连接关系时代价巨大

GRE的IP协议号:47 GRE载荷协议:0x0800:表示上层协议为IPv4乘客协议(passenger):(IPv4/IPv6/MPLS)乘客,货物,携带的上层数据;
封装协议:(GRE)货车的车厢,用于装载货物的载体;
运输协议:(IPv4):负责传输协议,比如货车车头,在传输过程当中,只检测此部分,不会检测乘客协议

GRE VPN路由宣告注意事项:使用动态路由协议宣告接口时千万不能宣告公网接口

会出现递归死循环,当配置了GRE并宣告了公网路由时,会从隧道接口(Tunnel)同时学习到对端的公网路由和对端的隧道路由,这时,如果本局域网访问对端PC,根据本端的PC的IP地址查询路由表,出接口为本端Tunnel接口,进入并执行GRE封装,对封装后的公网IP地址再次查询本端路由表,这一查看本端的公网IP地址的出接口还是Tunnel接口,则又进入了Tunnel口,解封装了,出来之后再次根据第一次的本局域网私有IP地址查询路由表,则再次进入Tunnel接口封装公网IP地址,出来后再次根据公网IP地址查询路由表,无限循环,根本出不去,也称为:递归死循环;

GRE VPN隧道口虚假状态问题:只要有到达隧道目标的路由,隧道口的协议字段即可Up;
但是如果对端或者去往对端设备的路由不存在或者故障(不可达),隧道口是感知不到,还是Up状态;
解决办法:开启GRE的Keeplive,用于检测隧道对端是否可达; Keeplive缺省情况下未开启;
可以只在一端开启周期性发送Keeplive报文即可,对端会回显响应KeepliveReply报文;
如果只在一端开启的话,另一端则无法进行主动检测,只是在配合本端的检测而已;
Keeplive报文默认周期性5s发送,重传3次如果对端未回应,则认为此隧道Down掉;

关于Tunnel接口的IP地址配置
此接口地址可随意配置,不会影响GRE隧道的建立;

在封装GRE隧道时,会直接将原始数据的二层直接干掉,使用本地公网接口的二层MAC地址进行发送,当对端进行解封装后,就直接展现了三层数据(类似P2P链路)无关乎二层通讯,因此,通过GRE隧道,即使Tunnel接口的IP地址与对端Tunnel接口的IP地址不在相同网段,也是可以通讯的,也可以建立OSPF邻居和互访以及学习路由;

拓展补充:
在OSPF的P2P链路上,双端IP地址不在同网段时,是可以建立Full邻居并可以学习到路由以及可以互访的;

在OSPF的广播链路上,修改ospf network-type p2p时,可以建立Full邻居和学习路由,但是不能互访;
因为,在ping对端设备时,ARP会发送广播FFFF帧,对端收到后判断不是找自己的,则不会做出响应,无法通讯;
虽然修改了ospf链路类型,但是底层仍然是以太网链路,依然需要二层MAC通讯

[R1]interface tunnel 0/0/0      	 //创建隧道口  最大支持512个隧道口   范围0~511 
	Tunnel-protocol gre     	     //指定协议   华为默认无协议,思科默认GRE协议
	Source 12.0.0.2                 //指定隧道源
	Destination 13.0.0.3            //指定隧道目标
	Ip address x.x.x.x              //Tunnel接口的IP,随意
	Gre key  dazhen                 //设置关键字key  类似密码,如果两端不相同,则丢弃
  display interface tunnel 0/0/0   //查看隧道接口状态
Keepalive period 5 retry-times 3   //开启keepalive检测避免数据黑洞
ip route-static x.x.x.x 0 tunnel0/0/0   //配置静态路由,或者使用动态路由协议