工作原理:DMVPN是一种基于mGRE的IPSec VPN技术,由mGRE、NHRP、IPSec和动态路由协议四个部分组成;mGRE是多点GRE隧道接口,使得单一的GRE接口可以支持多个IPsec隧道且简化配置;IPSec是对mGRE流量进行加密处理;保护根据NHRP和动态路由协议建立起来的网络间的临时隧道;NHRP允许分支机构采用动态IP地址,由中心站点来维护每个分支机构公网地址的NHRP数据库。
DMVPN只要求中心站点必须申请静态的公网IP地址,分支站点使用动态IP地址。
▶多点mGRE隧道 mGRE是DMVPN重要的组成部分,GRE技术是点对点的隧道技术,而mGRE是点对多点的GRE隧道技术,即任何一个分支站点不仅仅能够和中心站点通信,而且还能直接和其它分支站点进行通信;mGRE隧道技术中的中心站点只需配置一个mGRE隧道接口且只需要指定tunnel源,并不需要指定tunnel目的地;这样任何一个分支都能够和其他分支建立隧道连接;当有新的分支站点需要加入,中心站点是不需要再增加新的配置,只需要在新的分支站点进行配置就可以建立起与总部或分支之间的连接。
▶下一跳解析协议NHRP DMVPN的核心是NHRP,提供了多路访问网络上的源分支获取到达目标分支的“下一跳”的IP地址或NBMA子网地址(DLCI)的方法;利用NHRP就可以将tunnel接口地址和公网IP地址之间形成映射;NHRP是基于客户端和服务器的结构,HUB作为NHRP服务器(NHS),Spoke作为客户端;利用NHRP解决分支站点访问总部或分支站点时的动态地址映射问题,为分支提供注册和查询服务。
●分支到中心的动态隧道建立 DMVPN网络中,在中心路由器上不必配置分支的mGRE或IPSec的信息,可通过NHRP自动获取有关信息,而在分支路由器上则必须依靠中心路由器的公网IP地址和NHRP协议来配置mGRE隧道,分支站点需要形成中心站点的隧道接口地址和公网IP之间的映射,形成NHRP映射表;当分支路由器加电启动时,由运营商通过DHCP获取IP地址,并自动建立IPSec加密的mGRE隧道,通过NHRP向中心路由器注册自己的外网端口IP地址,分支到中心的隧道一旦建立便持续存在。 ●分支到分支的动态隧道建立 中心路由器设置mGRE隧道端口的“下一跳”地址是目的分支隧道的端口地址;当源分支需要向目的分支传递数据包时,它利用NHRP从中心路由器来动态获取目的分支IP地址,在这一过程中,中心路由器充当NHRP服务器的角色,响应分支路由器作为NHRP客户端的请求,向源分支分配目标分支公网地址;源分支获取到目的分支的公网地址后就可以直接发起隧道连接访问目标分支;这样两个分支之间可以通过mGRE端口建立IPSec动态隧道。
▶报文类型:
1、NHRP resolution request NHRP地址解析请求
2、NHRP resolution reply NHRP地址解析应答
3、NHRP registration request NHRP注册请求
4、NHRP registration reply NHRP注册应答
5、NHRP purge request NHRP表项清除请求
6、NHRP purge reply NHRP表项清除应答
7、NHRP error indication NHRP错误指示消息
8、NHRP redirect NHRP重定向消息
▶因特网协议安全IPSec
●IPSec其实就是对mGRE流量进行加密,虽然mGRE是一种特殊的GRE技术,但是协议号依然为GRE的47,所以和配置GRE over IPSec一般无二;下图就是DMVPN数据封装示意图,DMVPN和GRE over IPSec一样采取传输模式进行封装。
●IPSec利用访问控制列表(ACL)来决定哪些数据是需要加密的;当有数据包匹配所定义的ACL时,IPSec加密隧道便会建立;通过将mGRE隧道与IPSec绑定,mGRE隧道一旦建立,将立刻触发IPSec加密。
●IPSec隧道不支持多播/广播包的封装,而mGRE隧道可以将多播/广播包封装到GRE包中,并且mGRE包是单播包,可以被IPSec加密;在用IPSec对mGRE包进行加密时,可以将IPSec配置为传输模式,因为GRE已经将原始数据包封装为单播的数据包,没有必要让IPSec再封装一个包头;IPSec的传输模式要求被加密数据包的源和目的地址必须与IPSec隧道两端的地址相匹配,也就是说mGRE隧道两端的地址与IPSec隧道两端的地址必须相同;由于mGRE隧道两端的路由器与IPSec隧道两端的路由器是相同的两台路由器,所以这一点是可以保证的。
▶动态路由协议 DMVPN是一个标准的mGRE over IPSec技术,支持在IPSec和mGRE隧道之上运行动态路由协议;通过mGRE隧道与IPSec加密相结合,我们可以利用动态路由协议在加密隧道两端的路由器上更新路由表,将从隧道对端学到的网络加入路由表,路由条目里包含的隧道对端的IP地址可以作为到达对端网络的下一跳地址;这样隧道任何一端的网络发生变化,另外一端都会动态地学习到这个变化,并保持网络的连通性而无需改变路由器的配置;DMVPN技术支持的路由协议有RIP、EIGRP、OSPF和BGP等。 在DMVPN网络中,分支到中心的隧道一旦建立便持续存在,而各分支之间并没有持续存在的隧道;这样在路由器初始化后,中心路由器会通过持续存在的隧道向分支路由器宣告其它分支子网的可达路由,于是分支路由器的路由表中到达其它分支子网的“下一跳”地址就是中心路由器的隧道端口地址,而不是其它分支路由器的隧道端口地址;这样分支与分支之间的数据传输还是会通过中心路由器,要解决这一问题,必须在中心路由器上设置为在mGRE隧道端口上宣告某一分支子网的可达路由时“下一跳”地址是该分支路由器的隧道端口地址,而非中心路由器的地址。
●在RIP或EIGRP等距离矢量型路由协议中,通常都开启了水平分割功能,阻止将路由信息发回来源接口,以避免相邻路由器上路由环路的产生;如果在DMVPN网络上运行RIP或EIGRP协议,则必须关闭水平分割(split horizon)功能,否则,分支路由器将无法学习到通往其它分支子网的路由。 RIP向路由信息来源端口发送该路由时,其“下一跳”地址不被改变,仍然是原来的地址;而EIGRP在向路由信息来源端口发送该路由时,其“下一跳”地址将改变为该端口的地址;所以必须关闭这一特性(no ip next hop self eigrp );
●OSPF是链路状态型路由协议,其本身就不存在水平分割(split horizon)问题,但必须把DMVPN的中心配置为OSPF的指定路由器(DR),这可通过指定中心路由器有更高的OSPF优先权来实现。