GRE VPN 概述
> GRE
GRE(Generic Routing Encapsulation) 在任意一种网络协议上传送任意一种其他网络协议的封装方法 我们先本质上还是同种协议封装 也是就IP over IP
> GRE VPN
直接使用GRE封装建立GRE隧道,在一种协议的网络上传输其他协议,需要虚拟的隧道(Tunnel)接口
GRE的封装格式
协议B头: 也就是我们的<code>载荷协议</code>封装我们的内网源IP目的IP GRE头: 就是我们的<code>封装协议</code>告诉对方我放用的什么协议 协议A头: 也就是我们的<code>承载协议</code> 里面包含了我们外网的源IP目的IP 链路层头: 就是我们二层的源MAC和目的MAC
IP over IP 的GRE封装格式
GRE的IP协议号为47 其中 载荷协议0x0800就是我们的IP层头部 也就是说 公网IP头使用协议号47来标识GRE头部 而 GRP头部使用0x0800来标识我们内网IP头部
> IP头部格式(回顾)
其中Protocol字段就是将该数据包解封装后交给哪个协议处理 在GRP的封装格式中此项被协议号47代替
> 解封装
GRE隧道处理的流程
【1】 隧道起点路由查找 查找私网路由,数据包发往Tunnel口 【2】 开始封装 数据包在Tunnel口进行封装公网IP头部 【3】 承载协议路由转发 根据公网IP头部查找路由表,并转发 【4】 中途转发 就是数据包在公网转发传输 【5】 解封装 查到公网路由后,由公网路由进行解封装,解除公网封装头部,查看GRE封装部分 【6】 隧道终点路由查找 最后查找私网路由,并转发给目的主机
Tunnel多隧道冗余
为了提升可靠性,可以组建多个Tunnel隧道 只需要开区KeepAlive来检测隧道运行状态即可
GRE VPN的优点
- 支持多种协议
- 支持组播,因此可以在隧道中运行路由协议
- 配置简单,部署容易
GRE VPN的缺点
- 点到点隧道,多站点配置复杂(和静态路由一样)
- 金泰配置隧道参数,配置复杂(缺乏灵活性,要手动指定源公网地址、目的公网地址)
- 缺乏安全性(不对数据包做加密等处理,且报文在公网上传播,因此基本上都是搭配IPsec)
- 不能隔离地址空间(不能解决私网地址冲突的问题)
相关配置命令
代码语言:javascript复制interface tunnel [id] mode gre
/*创建GRE隧道口*/
source [ip-address / interface-name]
/*配置用于隧道封装的源地址或者源接口*/
destination [ip-address / interface-name]
/*配置用于隧道封装的目的地址或者目的接口*/
keepalive [interval times]
/*配置隧道保活,来检测隧道存活状态*/