特点
- 配置简单,配置中只存在hub和SPoke两套配置
- 支持Spoke动态地址
- 增加新的Spoke无须更改Hub配置
- Spoke到Spoke动态产生隧道触发IPsec加密
四个技术组件
MGRE
解决隧道的封装技术
GRE
想要了解MGRE,必须知道GRE(通用路由封装)----点到点网络类型
- GRE提供将一种协议报文封装在另一个协议报文里面----三层隧道封装技术
- GRE 是一种最传统的隧道协议,其根本功能就是要实现隧道功能,通过隧道连接的两个远程网络就如同直连,GRE在两个远程网络之间模拟出直连链路,从而使网络间达到直连的效果
- GRE需要完成多次封装,总共有3次,换句话说,就是在GRE隧道中传输的数据包都有3个head头,因为只谈IP协议,所以GRE中的IP数据包是一层套一层,总共有3个IP地址,GRE在实现隧道时,需要创建虚拟直连链路,GRE实现的虚拟链路可以认为是隧道,隧道是模拟链路,所以隧道两端也有IP地址,但隧道需要在公网中找到起点和重点,所以隧道的源和终点分别都以公网IP地址结尾,该链路是通过GRE协议来完成的,隧道传递数据包的过程分为3步:
- 接收原始IP数据包当作乘客协议,原始数据包包头的IP地址为私有IP地址。
- 将原始IP数据包封装进GRE协议,GRE协议成为封装协议(Encapsulation Protocol),封装的包头IP地址为虚拟直连链路两端的IP地址。
- 将整个GRE数据包当作数据,在外层封装公网的IP包头,也就是隧道的起源和终点,从而路由到隧道终点。
在远程路由器之间配置GRE,总共分为三步:
- 创建虚拟链路(隧道)接口,号码任意,两端不可相同。
- 配置虚拟链路(隧道)接口地址,该地址是在GRE包头中被封装的地址。
- 定义虚拟链路(隧道)的源和目的,因为数据包最终要在公网中传递,所以该地址就是在公网中指导路由器转发数据包的可路由公网IP,也是建立隧道两端路由器的真实公网IP。
注:
- GRE Tunnel 只支持路由器,不支持集中器和PIX以及ASA。
- GRE支持的协议有IP,Decnet,IPX,Appletalk。
- GRE可分为Point-to-Point GRE 和Multipoint GRE (mGRE)两种。
- Point-to-Point GRE只能在两台路由器之间建立。
- Multipoint GRE (mGRE)也可以在两台以上的路由器之间建立。
- Point-to-Point GRE 支持IP单播,组播,以及IGP动态路由协议和非IP协议
- Multipoint GRE (mGRE)只支持单播,组播以及动态IGP路由协议,不支持非IP协议。
GRE隧道接口没有OSI一层协议做检测,只要本地源地址有效,并且隧道终点地址有路由可达,那么GRE隧道接口就会UP,而无论隧道对端是否已经配置隧道接口,如果GRE隧道的接口状态为down,只要达到如下3中情况任意一个即可:
- 没有向往隧道终点地址的路由。
- 去往隧道终点地址的路由指向了隧道接口自己。
- 隧道起源地址的接口状态为down。
MGRE
多点GRE,是一种HUB-SPOCK结构的多点VPN,每个VPN节点上只需要配置一个隧道口即可,且分部的公网IP可变。MGRE的中心为NHRP的server端,
- 第一阶段来生成分部和公网IP的映射表,
- 第二阶段来实现伪广播的发送。
- 第三阶段后为DM VPN,可实现分部的直接互访。
当分部使用GRE隧道时,先给NHRP中心节点发送数据包完成注册,并下载映射表,得到其他分部的IP。伪广播:如要发送广播包,则将包发送给NHRP的中心,由中心节点向各个分支发送复制的数据包来实现伪广播。
NHRP
解决多点网络的通信技术
工作原理
nhrp技术被部署到各站点的虚拟通道中,各个站点之间形成隧道地址与公网地址的映射关系,分支站点通过触发产生注册报文向总站点提供自身隧道与公网映射表,最后中心收集到整个网络的映射表。此阶段之后中心有所有的映射关系,所以可以访问任意的分公司,分公司也可以任意访问中心站点;然而分公司之间的互相通信则需要开启nhrp流量触发才会发出注册报文向中心copy映射表达到通信问题,然后将虚拟的报头解封装还原公网报文,达到交互信息的作用。
- 一个二层的客户-服务器解析协议
- 用于映射隧道地址(逻辑)到一个地址(物理)
- NHRP功能类似于ARP(IP-MAC)和Reverse ARP(IP-DLCI)
- NHRP支持静态映射和动态映射
- Hub路由器维护一个所有Spoke隧道地址到公网地址的数据库
- 当Spoke启动后,它向Hub注册自己的公网地址,并且询问其它目的Spoke的公网地址。这样,Spokes直接就能直接建立
- 第一阶段
通过nhrp技术把目的站点公网与虚拟隧道地址做成映射关系,让每个站点有去其它站点的映射关系; - 第二阶段
通过nhrp技术完成分支到分支之间直接通信的问题;
此阶段可以通过动态路由协议运行在MGRE网络中来解决,但是MGRE链路默认是不支持组播的信息数据包,然而大部分的路由协议都是通过组播来建立邻居关系的,那么问题就产生了:
如何处理这些建邻组播包? - 第一种方式:(用协议本身解决问题)用单播与中心建立邻居关系;现在分支到中心的问题解决了,但是会发现分支到分支问题却没有解决;
- 应用eigrp协议:eigrp默认开启水平分割我们要关闭它
- 应用rip:类似于eigrp
- 应用ospf协议:(网络类型问题默认为点到点)
第二种方式:(用nhrp技术解决)
1、eigrp协议:(默认水平分割开启) - 直接在总站点处使用汇总路由(这样就可以避免大量的关闭水平分割,和路由环路问题)
- 总站点开启重定向
- 分支站点(请求端)开启深层次的映射关系——需要触发发出注册报文(nhrp利用汇总路由会 直接把映射关系发布到路由表中并显示为H标记的路由条目)
2、ospf协议: - 总部开启重定向
- 分部开启NHRP的查询 (Spoke上ip nhrp shortcut 可以发映射请求了)
- 请求回来的路由会出来一个特殊的标识%,因为NHRP修改了OSPF的下一跳,我们需要操作的是参考OSPF中的FA地址,让OSPF选择NHRP给他的路由而不相信他自己根据拓扑算出来的路由,路由加入路由表并打上%标记。
动态路由协议
不要在路由协议中宣告tunnel source //不然会不断翻滚
这里为了解决翻滚需要对eigrp和ospf进行相应的处理
路由协议是ospf
解决:将网络类型改为广播(或将R2改为点对多点)
#网络类型改为广播
R4(config)#interface tunnel 0
R4(config-if)#ip ospf network broadcast
#改为点对多点
R(config)#interface tunnel 0
R(config-if)#ip ospf network point-to-multipoint
路由协议是eigrp
需要关闭水平分割
no ip next-hop-self eigrp 100 //这个100根据不同的协议号码修改
IPSEC协议加密
解决专线的加密技术
这里与其他vpn的区别是
Router(config)#crypto isakmp policy 10
Router(config-isakmp)# authentication pre-share
Router(config-isakmp)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0 这里不需要指定地址
Router(config)#crypto ipsec transform-set Trans esp-des esp-md5-hmac
Router(cfg-crypto-trans)# mode transport
Router(cfg-crypto-trans)#crypto ipsec profile DMVPN
Router(ipsec-profile)# set transform-set Trans
Router(ipsec-profile)#interface Tunnel0
Router(config-if)#tunnel protection ipsec profile DMVPN
配置
dmnvpn的建立
HUB
Router>en
Router#config ter
Router(config)#int tunnel 0 //创建隧道接口
Router(config-if)#ip add 10.1.1.1 255.255.255.0 //在接口配置地址
#设置MGRP
Router(config-if)#tunnel source ethernet 0/0 //与接口e0/0关联
Router(config-if)#tunnel mode gre multipoint //设置隧道接口的封装模式为mGRE
#设置NHRP
Router(config-if)#ip nhrp network-id 234 //指定网络域,同一个TUNNEL必须处在相同的区域,且是一个子网中
Router(config-if)#no ip redirects //关闭发送icmp重定向报文的功能。
Router(config-if)#ip nhrp map multicast dynamic //设置动态映射
下面的根据路由协议进行选择
#Router(config-if)#no ip next-hop-self eigrp 100
#Router(config-if)#ip ospf network point-to-multipoint //默认网络类型为非广播
#认证
Router(config-if)#ip nhrp authentication cisco //启动认证密钥,用来不被路由欺骗,常用于WAN边界的安全考虑;
SPOKE
Router>en
Router#config ter
Router(config)#int tunnel 0
Router(config-if)#ip add 10.1.1.2 255.255.255.0
Router(config-if)#tunnel source e0/0
Router(config-if)#tunnel mode gre multipoint
Router(config-if)#ip nhrp network-id 234
Router(config-if)#ip nhrp map 10.1.1.1 12.1.1.2 //这里前面的地址是HUB的Tunnel地址,后面的是HUB的物理接口地址
Router(config-if)#ip nhrp map multicast 12.1.1.2 //静态映射到HUB的物理地址
Router(config-if)#ip nhrp nhs 10.1.1.1 这里是HUB的Tunnel地址
Router(config-if)#no ip redirects
Router(config-if)#ip nhrp authentication cisco
#Router(config-if)#no ip next-hop-self eigrp 100
#Router(config-if)#ip ospf network point-to-multipoint //默认网络类型为非广播
如果需要数据加密就需要配置相应的加密模板,应用在Tunnel0的接口下面就可以了
测试
查看dmvp状态
Router#sh dmvpn
Legend: Attrb --> S - Static, D - Dynamic, I - Incomplete
N - NATed, L - Local, X - No Socket
# Ent --> Number of NHRP entries with same NBMA peer
NHS Status: E --> Expecting Replies, R --> Responding, W --> Waiting
UpDn Time --> Up or Down Time for a Tunnel
==========================================================================
Interface: Tunnel0, IPv4 NHRP Details
Type:Hub, NHRP Peers:2,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 34.0.0.3 10.1.1.2 UP 00:00:52 D
1 64.0.0.6 10.1.1.3 UP 00:00:48 D
查看NHRP信息
Router#show ip nhrp
10.1.1.1/32 via 10.1.1.1
Tunnel0 created 00:17:40, never expire
Type: static, Flags: used
NBMA address: 74.0.0.7