GRE、MGRE
VPN --- 虚拟专用网络
依靠ISP或者其他公用网络基础设施上构建专用的安全数据通信网络。 -->只不过这个装用网络是逻辑而非物理的。
虚拟:用户不再需要拥有实际的长途数据线缆,而是使用佛南公共网络资源建立自己的网络。
专用:可以定制最符合自身需求的网络。
公用网络不可用私有网络
核心技术:封装技术
GRE -- 通用路由封装
通过点到点的通信方式实现私网的互通,其通过在date报文前封装gre协议报文再在这两个报文前添加IP报文头部形成完整报文,当私网源地数据经过路由时自动识别gre报文通过Tunnel接口转发到公网中,最后到达另一个私网目的地,最后实现网络的通信
配置:
[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必须为真实的公网出口IP
[r1-Tunnel0/0/0]destination 23.0.0.3
配置完成后,需要在本地补上通往目的私网网段的路由信息
GRE报文协议:
GRE封装和解封装过程:
封装: 1. 设备从连接私网的接口接收到数据包后,检查报文头部中的目的IP地址字段,在路由表中查找出接口,如果发现出接口为隧道接口,则将报文发送给隧道模块进行处理。 2. 隧道模块接收到报文后,首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装 3. 然后,设备给报文添加新的传输协议,该协议的源IP就是隧道源地址,目的IP为隧道目的地址。 4. 最后,设备根据新条件的IP报文头部中的目的地址,在路由表中查找对应的出接口并发送报文。
解封装: 5.接收端设备从连接公网的接口收到报文后,首先分析IP报文头部信息,如果发现协议字段类型值为47 (GRE协议号)表示数据部分由GRE模块进行处理。 GRE模块去除掉IP报文头部和GRE报文头部,并根据GRE报文头部中的协议类型字段来判断乘客协议内容。从而交给对 应模块处理。
通过抓包发现数据此时数据的发送时通过gre协议封装来传输的,达到我们的目的
Keepalive检测机制
[r1-Tunnel0/0/0]keepalive period 2 retry-times 5
设置发送周期为2S;设置重传次数为5次
用keepalive检测机制保证数据不丢失,从而实现网络的稳定通信
抓包:
MGRE-- 多点GRE–NBMA⽹路类型
MGRE实质是通过GRE转变而来,其容易理解为点到多点的通信方式,但其实本身效果还是点到点的通信方式。通过建立中心(HUB)到节点(Spoke)建立mgre隧道动态转发数据信息,当节点与节点之间进行通信时,通过nhrp协议的映射动态学习到对方的路由信息,此时通过查看路由表可发现通信节点双方都学习到对方的路由信息。最后可实现网络的通信。
MGRE结构 --- Hub-spoke 结构 --中心到节点架构
常用:政府
NHRP --- 下一跳解析协议
MGRE结构 --- Hub-spoke 结构 --中心到节点架构
常用:政府
NHS --- 下一跳服务器
中心节点的IP地址必须固定
MGRE的shortcut配置:
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地址更换)也可写出接口的IP地址
[r2-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 register
hub的虚拟接口IP hub的物理接口IP 注册
[r1]display nhrp peer all ----查看nhrp映射表
DSVPN --- 动态智能VPN
传统的MGRE技术存在的问题。----分部之间无法直接通讯(源分支无法获取目的分支的公网地址,也就无法建立VPN隧道),导致所有的分支之间的通讯数据只能通过总部HUB设备进行中转。
NHRP映射表
-
静态表项
-
有网络管理员手工配置
-
spoke与hub建立静态的mgre隧道
-
-
动态表项
-
是由NHRP协议动态生成
-
hub节点被动获取到spoke节点发送来的注册信息
-
各个spoke节点通过NHRP协议获取到对端的spoke节点的映射关系
-
7200S
-
NHRP映射表的建立过程
1、建立spoke到hub之间的mgre隧道
-
spoke向hub注册请求
-
hub向spoke注册应答
2、分支链路学习
DSVPN支持两种分支间路由学习方式:
-
分支间互相学习路由----非shortcut方式
-
每个分支需要学习到所有对端的路由数据,且下一跳为分支本身。
-
-
分支路由汇聚到总部----shortcut方式
-
下一跳为hub设备。
-
3、建立spoke与spoke之间的mgre隧道
在shortcut方式下需要添加的配置
中心:
[r1-Tunnel0/0/0]nhrp redirect ----开启重定向功能。默认情况为未启动
分支:
[r4-Tunnel0/0/0]nhrp shortcut ----使用shortcut功能
MGRE的shorecut和非shorecut
非shorecut:每个分支需要学习到所有对端的路由数据,且下一跳为分支本身。
中心节点hub与分支节点spoke1、spoke2建立了mgre隧道,添加路由信息后,两个分支节点可以与中心节点通信,此时中心节点也动态拿到了两个spoke分支节点相应的信息;建立spoke与spoke之间的mgre隧道需要两个spoke分支节点去通信时才会建立mgre隧道。
设spoke为1.0网段、spoke为2.0网段。当1.0网段想要去访问2.0网段,当信息来到spoke后,需要进行查询路由表进行转发,但此spoke1的下一跳spok2没有它的nhrp表象,只能将ICMP报文发送到中心节点hub,hub中含有两个分支节点spoke的信息,同时将nhrp的请求报文发送到中心节点hub,告诉中心节点获取到spoke2的映射关系,中心支点hub数据发送到spoke2处,发送请求的spoke1的数据到达spoke2处,随后进行回复,但此时spoke2中还没有学习到spoke1的表象,回复时ICMP报文还是通过hub回复到spoke,但收到开始时spoke1发送来的nhrp请求,随后发送回spoke1,spoke1学习到spoke2的表象;当回复ICMP报文到hub进行换发到spoke1时同时产生疑问nhrp请求报文请求学习spoke1的表象,同spoke1学习到spoke2的过程一致。最后spoke1和spoke2建立mgre隧道,两个spoke节点可以进行通信。
shortcut方式:下一跳为hub设备。
中心节点hub与分支节点spoke1、spoke2建立了mgre隧道,添加路由信息后,两个分支节点可以与中心节点通信,此时中心节点也动态拿到了两个spoke分支节点相应的信息;
spoke1想要与spoke2通信时,数据包转发时spoke1查看路由表后知道下一跳为HUB,随后查看本身的nhrp映射表,查询是否有hub相应的nhrp,hub中已经含有spoke1的nhrp表象,spoke正常发出ICMP报文,但不会产生疑问发送nhrp请求报文,此时HUB收到ICMP报文后也会正常转发ICMP报文spoke2中;但此时HUB产生疑问,在发送ICMP报文给spoke2时几乎同时发送重定向报文;spoke2收到ICMP报文后,也不会产生疑问回复ICMP报文,此时,spoke1收到hub发来的重定向报文发现问题后发送nhrp请求报文给hub,此时hub收到了来自spoke1的nhrp请求报文和spoke2回复的ICMP报文,同时正常转发,spoke2收到hub转发来的nhrp请求报文后,spoke2拿到spoke1发来的nhrp报文后将自己的信息发送给spoke1,随后hub又发现了问题,发送重定向报文到spoke2中,同像hub向spoke1的过程一致,最后两个spoke节点建立mgre隧道,最后两个spoke节点就可直接正常通信。