GRE-----通用路由封装协议
GRE(Generic routing encapsulation)通用路由封装是一种隧道协议,能够在IP隧道中封装各种网络层协议的分组,从而创建虚拟点到点链路。GRE隧道并不提供加密服务,默认情况下以明文方式离开,所以通常使用GRE通过IPsec vpn隧道传输动态路由协议数据流。
GRE封装和解封装过程
设备从连接私网的接口接收到数据包后,检查报文头部中的目的IP地址字段,在路由表中查找出接 口,如果发现出接口为隧道接口,则将报文发送给隧道模块进行处理。
隧道模块接收到报文后,首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行 GRE封装
然后,设备给报文添加新的传输协议,该协议的源IP就是隧道源地址,目的IP为隧道目的地址。
最后,设备根据新条件的IP报文头部中的目的地址,在路由表中查找对应的出接口并发送报文。
接收端设备从连接公网的接口收到报文后,首先分析IP报文头部信息,如果发现协议字段类型值为 47(GRE协议号),表示数据部分由GRE模块进行处理。
GRE模块去除掉IP报文头部和GRE报文头部,并根据GRE报文头部中的协议类型字段来判断乘客协议内容。从而交给对应模块处理。
相关配置:
R1:
[r1]interface Tunnel 0/0/0 ----创建隧道接口
[r1-Tunnel0/0/0]ip address 192.168.3.1 24 ---该IP地址必须为私网IP
[r1-Tunnel0/0/0]tunnel-protocol gre ----定义封装方式
[r1-Tunnel0/0/0]source 12.0.0.1 ----定义封装内容,源IP
[r1-Tunnel0/0/0]destination 23.0.0.3 --目的IP[r1]ip route-static 192.168.2.0 24 192.168.3.2 --去往r2私网网段的静态路由
R2:
[r2]interface Tunnel 0/0/0 ----创建隧道接口
[r2-Tunnel0/0/0]ip address 192.168.3.2 24 ---该IP地址必须为私网IP
[r2-Tunnel0/0/0]tunnel-protocol gre ----定义封装方式
[r2-Tunnel0/0/0]source 23.0.0.3 ----定义封装内容,源IP
[r2-Tunnel0/0/0]destination 12.0.0.1 --目的IP[r1]ip route-static 192.168.1.0 24 192.168.3.1 --去往r1私网网段的静态路由
MGRE
MGRE技术全称为多点GRE技术,是基于GRE技术的升级版,GRE技术的弊端很明显,就是只能再两个点之间建立tunnel,如果有多个局域网需要建立自己的通信环境,那么就需要建立多个全互联形式的tunnel隧道,这样就会造成管理上的不方便和资源的占用,因此产生了MGRE技术。
原理
1、中心站点,固定的公有ip地址;
2、tunnel配置完成,所有的分支站点将自己当下的信息发送给HUB,生成映射列表;
3、此时中心站点可以直接和所有的分支站点进行GRE通讯;
4、分支站点间直接GRE,通讯时,需要先到HUB节点,再由HUB转发给分支。
NHRP--下一跳解析协议
hub-spoke架构----中心到节点架构
相关配置:
Hub节点配置
[r1]interface Tunnel 0/0/0
[r1-Tunnel0/0/0]ip address 192.168.5.1 24
[r1-Tunnel0/0/0]tunnel-protocol gre p2mp ----修改接口封装协议为GRE,且为点到多点模式 [r1-Tunnel0/0/0]source 15.0.0.1
Spoke节点配置
[r2]interface Tunnel 0/0/0
[r2-Tunnel0/0/0]ip address 192.168.5.2 24
[r2-Tunnel0/0/0]tunnel-protocol gre p2mp
[r2-Tunnel0/0/0]source GigabitEthernet 0/0/0 --源IP,建议写成公网出接口
[r2-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 register --向hub进行注册
[r3]interface Tunnel 0/0/0
[r3-Tunnel0/0/0]ip address 192.168.5.3 24
[r3-Tunnel0/0/0]tunnel-protocol gre p2mp
[r3-Tunnel0/0/0]source GigabitEthernet 0/0/0
[r3-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 registe
[r4]interface Tunnel 0/0/0
[r4-Tunnel0/0/0]ip address 192.168.5.4 24
[r4-Tunnel0/0/0]tunnel-protocol gre p2mp
[r4-Tunnel0/0/0]source GigabitEthernet 0/0/0
[r4-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 registe
DSVPN --动态智能vpn
传统的MGRE技术存在的问题。-----分部之间无法直接通讯(源分支无法获取目的分支的公网地址,也 就无法建立VPN隧道),导致所有的分支之间的通讯数据只能通过总部HUB设备进行中转,增加了HUB设备的负担。
NHRP映射表
静态表项
由网络管理员手工配置
spoke与hub建立静态的mgre隧道。
动态表项
是由NHRP协议动态生成
hub节点被动获取到spoke节点发送来的注册信息。
各个spoke节点通过NHRP协议获取到对端的spoke节点的映射关系。
7200S老化时间
NHRP映射表的建立过程
1、建立spoke到hub之间的mgre隧道
1)spoke向hub注册请求
2)hub向spoke注册应答
2、分支间路由学习
DSVPN支持两种分支间路由学习方式:
1)分支间互相学习路由----非shortcut方式
每个分支需要学习到所有对端的路由数据,且下一跳为分支本身。
2)分支路由汇聚到总部----shortcut方式
下一跳为hub设备。
3、建立spoke与spoke之间的mgre隧道
spoke与spoke之间的建立mgre隧道过程
非shortcut方式
当Spoke1下的用户首次访问Spoke2下的用户时,将触发Spoke1与Spoke2之间建立动态mGRE隧道,隧道建立过程如下:
-
Spoke1收到其下用户发往Spoke2的数据报文后:
-
根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2(Spoke2的Tunnel地址),但在NHRP映射表中没有查找10.1.1.2对应的公网地址,就默认将该数据报文直接转发给Hub。
-
构建并向Hub发送NHRP地址解析请求报文,请求10.1.1.2对应的公网地址。
-
Hub收到Spoke1发送的数据报文和NHRP地址解析请求报文后,将报文通过Hub与Spoke2间的mGRE隧道转发给Spoke2。
-
Spoke2收到NHRP地址解析请求报文后:
-
从NHRP地址解析请求报文中提取Spoke1的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中。
-
构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的Tunnel地址10.1.1.2和公网地址2.2.2.2)。
-
Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的Tunnel地址和公网地址,更新到自己的NHRP映射表中,Spoke1与Spoke2之间的动态mGRE隧道随即建立。
当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2,再根据10.1.1.2在NHRP映射表中找到公网地址2.2.2.2,即可按照公网地址2.2.2.2将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub
shortcut方式
当Spoke1下的用户首次访问Spoke2下的用户时,将触发Spoke1与Spoke2之间建立动态mGRE隧道,隧道建立过程如下:
-
Spoke1收到其下用户发往Spoke2下用户的数据报文后,根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.3(Hub的Tunnel地址),并在NHRP映射表中找到10.1.1.3对应的公网地址3.3.3.3(Hub的公网地址),就将数据报文转发给Hub。
-
Hub收到Spoke1转发的数据报文后:
-
将此报文通过Hub与Spoke2间的mGRE隧道转发给Spoke2。
-
检查发现接收和发送数据报文的Tunnel接口属于同一个NHRP域,就构建并向Spoke1发送NHRP重定向报文(携带Hub的Tunnel地址和公网地址,以及需要解析的数据报文的目的地址192.168.2.0)。
-
Spoke1收到NHRP重定向报文后,构建并向Hub发送NHRP地址解析请求报文(携带Spoke1的Tunnel地址10.1.1.1和公网地址1.1.1.1,以及需要解析的数据报文的目的地址192.168.2.0)。
-
Hub收到NHRP地址解析请求报文后转发给Spoke2处理。
-
Spoke2收到NHRP地址解析请求报文后:
-
从NHRP地址解析请求中提取Spoke1的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中。
-
构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的子网地址192.168.2.0、Spoke2的Tunnel地址10.1.1.2和公网地址2.2.2.2)。
-
Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的子网地址和公网地址,更新到自己的NHRP映射表中,Spoke1与Spoke2之间的动态mGRE隧道随即建立。
当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)查找NHRP映射表,找到Spoke2的公网地址2.2.2.2,即可根据公网地址2.2.2.2将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub。