GRE和MGRE
VPN---虚拟专用网络。
指依靠ISP(运营商)或其他公有网络基础设施上构建的专用的安全数据通信网络。该网络是属于逻辑上的。
核心机制—隧道机制(封装技术)
GRE—通用路由封装
三层隧道技术,并且是属于点到点的隧道。
[r1]interface Tunnel 0/0/0 ---创建一个虚拟隧道接口(接口序号只能变最后一个数字,范围:0/0/0-0/0/511)
[r1-Tunnel0/0/0]ip address 192.168.3.1 24
[r1-Tunnel0/0/0]tunnel-protocol gre ---定义隧道所使用的协议
[r1-Tunnel0/0/0]source 12.0.0.1 ---定义封装中的源地址信息
[r1-Tunnel0/0/0]destination 23.0.0.3 ---定义封装中的目的地址信息
r1配完,r3也要配置
测试隧道是否成功建立:
[r1]ping 192.168.3.3 ----ping对方的隧道地址
PING 192.168.3.3: 56 data bytes, press CTRL_C to break
Reply from 192.168.3.3: bytes=56 Sequence=1 ttl=255 time=20 ms
Reply from 192.168.3.3: bytes=56 Sequence=2 ttl=255 time=20 ms
Reply from 192.168.3.3: bytes=56 Sequence=3 ttl=255 time=30 ms
Reply from 192.168.3.3: bytes=56 Sequence=4 ttl=255 time=30 ms
Reply from 192.168.3.3: bytes=56 Sequence=5 ttl=255 time=30 ms
一定要添加私网路由信息,将其导入到隧道接口。
[r1]ip route-static 192.168.2.0 24 192.168.3.3
[r3]ip route-static 192.168.1.0 24 192.168.3.1
测试:
[r1]ping -a 192.168.1.1 192.168.2.1 ---要使用-a规定源IP,不然路由器会使用12.0.0.1去测试
扩展:接收方在接收到报文时看到封装后的目的IP是自己的,往常逻辑会直接对三层进行解封装,但是GRE不同,接口看到报文的协议号为47(GRE协议号:47),就会直接将报文完整的交给隧道接口,因为它本身接口没有开启GRE协议,就算解封装了不认识GRE也会直接将报文丢了
keepalive机制
keepalive机制是用来检测隧道对端是否可达。(一般一端开启即可,因为发送和回复的报文都是keepalive报文,
内容都是一样的)
当某端开启该机制后,会周期性发送keepalive报文,对端收到后会回复keepalive报文。当一定次数未收到回复
报文,则认为该隧道不可用。(默认3次,每一次发送时间间隔为5秒)
[r1-Tunnel0/0/0]keepalive
[r1-Tunnel0/0/0]keepalive period 10 retry-times 5 ---用来更改次数与时间间隔(5次,间隔10秒)
period:设置发送周期
retry-times:重传次数
MGRE—多点通用路由封装
NHRP—下一跳解析协议
MGRE环境是属于P2MP网络,可以近似的看做是NBMA网络。但是其本质还是点到点。
Hub and Spoke架构---中心到站点架构
在私网环境中,选择一个出口物理IP不变的设备作为NHRP的中心节点(NHS)。这样,剩下的分支就
可以知晓中心的隧道IP和物理IP地址。然后NHRP协议要求所有分支将自己的物理IP和隧道IP的对应关系
发送给NHS(一旦发生改变就会发送)。这样NHS就拥有所有分支的地址映射关系,并记录在本地。
在发送数据报文之前,查询NHS决定封装数据。
中心:
[r1]interface Tunnel0/0/0
[r1-Tunnel0/0/0]ip address 192.168.5.1 255.255.255.0
[r1-Tunnel0/0/0]tunnel-protocol gre p2mp ---修改接口的封装协议为MGRE
[r1-Tunnel0/0/0]source 15.0.0.1
[r1-Tunnel0/0/0]nhrp network-id 1 --默认值为0(范围:1-4294967295),改不改都行,要改所有的设备都要改
分支:
[r2] Tunnel0/0/0
[r2-Tunnel0/0/0]ip address 192.168.5.2 255.255.255.0
[r2-Tunnel0/0/0]tunnel-protocol gre p2mp
[r2-Tunnel0/0/0]source GigabitEthernet0/0/0 ---规定封装源为GE0/0/0接口的IP地址
[r2-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 register --第一个IP为隧道地址,第二个为物理地址(都是中心的)
1、告知本端,hub节点的隧道IP与物理IP的对应关系;
2、向hub节点注册本地的隧道IP与物理IP的对应关系;
补全路由信息:
[r1]ip route-static 192.168.2.0 24 192.168.5.2
[r1]ip route-static 192.168.3.0 24 192.168.5.3
[r2]ip route-static 192.168.1.0 24 192.168.5.1 ----下一跳均为Hub节点
[r2]ip route-static 192.168.3.0 24 192.168.5.1
[r3]ip route-static 192.168.1.0 24 192.168.5.1
[r3]ip route-static 192.168.2.0 24 192.168.5.1
DSVPN(动态智能VPN技术):可以随时增加和删除虚拟隧道专线和节点(下面两者相加组成)
- MGRE
- NHRP
shortcut方式:分支路由汇聚到总部,每一个分支编写的路由信息的下一跳均为hub节点。
非shortcut方式:非便捷方式,分支之间相互学习路由。下一跳分别是分支的隧道IP地址。而非hub节点。
扩展:
Hub - Spoke:NHRP映射表静态关系
Spoke - Spoke:NHRP映射表动态关系
在非shortcut方式下,NHRP映射表动态关系:7200S(2小时)老化时间
非shortcut
解释:(图中的数字为报文顺序)
- 首先,在r2里有着3.0网段下一条对应虚拟网段接口5.3,虚拟网段接口5.1对应真实接口吓一跳15.0.0.1,r3中有着2.0网段下一条对应虚拟网段接口5.2,虚拟网段接口5.1对应真实接口吓一跳15.0.0.1
- r2要发送信息给3.0网段时,知道要发送给虚拟网段接口5.3,但NHRP表中没有对应虚拟网段接口5.3的真实端口IP,发现缺少(有误就封装中心的对应真实接口,让中心转发)。而此时有ICMP数据需要发送(ICMP数据发送优先级比填补缺少对应高),所以先发送ICMP数据给r1(hub),随后发送NHRP报文,问r1要r3的地址信息。
- r1先接收到ICMP报文,查看是给r3的,就进行转发给r3,随后接收到NHRP报文,虽然r1有r3的地址信息,但r1不会直接回复,会转发给r3(征求r3意见)
- r3先接收到ICMP报文,正常回复ICMP报文,随后接收到NHRP请求报文,r3直接发送给r2(因为NHRP请求报文中有原IP信息:25.0.0.2),虽然NHRP请求报文中有r2的NHRP映射关系,但r3并不会保存下来,因为在r3看来并不是我主动要的,优先度最低,不可信。只有自己要的才是可信的,但r2接收到r3发送的NHRP应答报文,会直接将r3虚拟网段接口5.3的对应真实接口35.0.0.3写进NHRP映射表中,因为这是r2主动请求的。
- 此时,r1将r3发送的ICMP报文转发给r2,r2要再发送ICMP报文就直接发送给r3
- 而r3要去回复ICMP报文报文时,发现NHRP表中没有对应虚拟网段接口5.2的真实端口IP,他也要发送NHRP请求报文给r1,然后r1转发给r2,r2再直接发送NHRP应答报文给r3,当r3将虚拟网段接口5.2的对应真实接口25.0.0.2写进NHRP映射表中时,两者的虚拟隧道就算建立起来了。
- 当r2与r3两者都不发消息,不发消息超过7200S(2小时)老化时间,这条隧道就会被拆除。
shortcut
解释:(图中的数字为报文顺序)
- r2要发送ICMP报文给r3,先发送给r1(因为是shortcut方式,所以去往3.0网段下一跳写的就是5.1,5.1在NHRP映射表中有,所以在r2看来没有错误),r1接收后将ICMP报文转发给r3,再给r2发送重定向报文(原因和携带内容下面配置后面有写)。
- r2接收到重定向报文,像r1发送NHRP请求报文,r1再转发给r3,r3接收到NHRP请求报文,就直接给r2发送NHRP应答报文。
- 有区别的是:r3接收到第一次r1转发的ICMP报文,会给r1发送ICMP回复报文,r1接收后,也会转发给r2,但也会给r3发送一个重定向报文(原理与上面一样),r3也会给r1发送一个NHRP请求报文,与上面一样,最后r2与r3都NHRP映射表数据都改了,就建立了一个虚拟隧道
在shortcut方式下,如果需要分支之间独立建立隧道,则需要添加如下配置:
[r1-Tunnel0/0/0]nhrp redirect ---hub节点配置,开启重定向功能(r1发现数据从r2发送进入Tunnel0/0/0,
又从Tunnel0/0/0出去转发给r3,发现是次优路径,才会给r2发送重定向报文,报文里面有3.0网段对应的
真实端口IP为192.168.5.3)
[r2-Tunnel0/0/0]nhrp shortcut ---在spoke节点配置,使能shortcut功能,未开启该功能,则代表分支站点
无法响应重定向报文。(如果不开启,r2收到r1的重定向报文,会认为自己可以正常收发消息(去3.0网段下
一跳为5.1,5.1又映射为15.0.0.1),没有错误,不需要更改,直接将重定向报文丢弃)
[r3-Tunnel0/0/0]nhrp shortcut
以非shortcut方式进行DSVPN组网时,分支站点可以自主发现NHRP映射表中存在关系缺少的现象,从而主动向hub节点申请通讯对端的映射关系。而在shortcut组网环境下,分支站点无法自主发现,需要hub节点通过重定向报文参与到分支之间的隧道建立过程。