> GRE
GRE(Generic Routing Encapsulation) 在任意一种网络协议上传送任意一种其他网络协议的封装方法 我们先本质上还是同种协议封装 也是就IP over IP
> GRE VPN
直接使用GRE封装建立GRE隧道,在一种协议的网络上传输其他协议,需要虚拟的隧道(Tunnel)接口
++协议B头:++ 也就是我们的<code>载荷协议</code>封装我们的内网源IP目的IP ++GRE头:++ 就是我们的<code>封装协议</code>告诉对方我放用的什么协议 ++协议A头:++ 也就是我们的<code>承载协议</code> 里面包含了我们外网的源IP目的IP ++链路层头:++ 就是我们二层的源MAC和目的MAC
GRE的IP协议号为47 其中 ++载荷协议0x0800就是我们的IP层头部++ 也就是说 ++公网IP头使用协议号47来标识GRE头部++ 而 ++GRP头部使用0x0800来标识我们内网IP头部++
> IP头部格式(回顾)
其中Protocol字段就是将该数据包解封装后交给哪个协议处理 在GRP的封装格式中此项被协议号47代替
> 解封装
【1】 ++隧道起点路由查找++ 查找私网路由,数据包发往Tunnel口 【2】 ++开始封装++ 数据包在Tunnel口进行封装公网IP头部 【3】 ++承载协议路由转发++ 根据公网IP头部查找路由表,并转发 【4】 ++中途转发++ 就是数据包在公网转发传输 【5】 ++解封装++ 查到公网路由后,由公网路由进行解封装,解除公网封装头部,查看GRE封装部分 【6】 ++隧道终点路由查找++ 最后查找私网路由,并转发给目的主机
为了提升可靠性,可以组建多个Tunnel隧道 只需要开区KeepAlive来检测隧道运行状态即可
interface tunnel [id] mode gre
/*创建GRE隧道口*/
source [ip-address / interface-name]
/*配置用于隧道封装的源地址或者源接口*/
destination [ip-address / interface-name]
/*配置用于隧道封装的目的地址或者目的接口*/
keepalive [interval times]
/*配置隧道保活,来检测隧道存活状态*/