动态多点VPN技术基础知识
引言
动态多点VPN(Dynamic Multipoint VPN)是mGRE、NHRP(Next Hop Resolution Protocol)、IPSec结合产生的一种技术,简写为DMVPN。它为具有点多面广分支机构特点的企业和公司,提供了一种以 INTERNET为基础的低成本安全互联方案。其骨干网采用星形拓扑结构(Hub and Spoke)。结构示意图见图1,其中HUB为中心,SPOKE为分支。
图1:动态多点VPN结构示意
一、mGRE、IPSec、NHRP 的概念及相互关系
GRE是一个在任意一种网络层协议上封装任意一个其它网络层协议的协议,DMVPN中是将IP包封装进另一个IP包并加上新的IP头。它有两种形式:Point-to-point(GRE),Point-to-multipoint(mGRE)。
IPSec是一种安全隧道技术,但不支持组播和广播的加密。在DMVPN中,要用到动态路由协议,动态路由协议用组播和广播宣告路由信息,所以不能直接使 用IPSec加密。GRE隧道支持组播和广播,所以DMVPN中采用GRE隧道,但是GRE隧道的数据是没有加密的,在因特网上传送不安全。因为GRE隧 道的数据包是单播的,所以GRE隧道的数据包采用IPSec加密,即GRE Over IPSec。GRE隧道的配置已经包括了GRE隧道对端的地址,这个地址同时也是IPSec隧道的对端地址,通过将GRE隧道与IPSec绑定,GRE隧道一旦建立,立刻触发IPSec加密。
mGRE是将GRE点对点隧道扩展成一点与多点建立隧道。一个mGRE接口包括一个IP地址、一个隧道源、一个隧道密钥,与GRE隧道不同,它没有隧道目 的。因为mGRE隧道不定义隧道目的地,所以它依赖NHRP,NHRP告诉mGRE向哪里发送数据包。NHRP协议的作用是将隧道的IP地址映射到 NBMA地址,可以是静态映射和动态映射。
mGRE怎样使用NHRP呢?当转发一个IP数据包时,总是沿着下一跳地址将数据包传给mGRE接口,下一跳地址就是对端的隧道IP地址。mGRE在 NHRP表中查找下一跳地址映射的对端NBMA地址。然后mGRE将数据包封装为另一个IP包的净负荷,新的IP包目的地址就是对端的NBMA地址。组播 包的地址由NHRP配置中指定。mGRE/NHRP路由通道示意如下页图2。
图2:mGRE/NHRP路由通道示意
图2可以这样理解,在192.168.0.0/24网络有一个IP包需要发送到192.168.1.0/24 网络中, 其源地址为192.168.0.1,目的地址为192.168.1.1。通过查路由表,到192.168.1.0/24,走隧道0,下一跳是隧道对端IP 地址10.0.0.2。通过查NHRP表,下一跳10.0.0.2对应的目的NBMA地址是172.16.0.2。再对IP包做GRE封装,加上新IP 头,源地址为172.16.0.1,目的地址为172.16.0.2,然后IP包就能发向对端。
二、NHRP 地址映射表的生成过程
NHRP地址映射表生成有三种方法:
手动配置静态映射、中心(Hub)通过登记请求(Registration Request)学习、分支(Spoke)用解析请求(Resolution Request)学习。NHRP映射表的初始化。开始时,中心的映射表是空表,分支的映射表有一个静态配置的映射项,即中心的隧道IP地址与其NBMA地 址的映射,例如IP NHRP MAP10.0.0.1、172.17.0.1,还配置有一个组播映射项,例如IP NHRP MAPmulticast 172.17.0.1。分支必须向中心登记,中心的NHRP表实际上由分支在控制,为了让分支能向中心登记,中心必须宣告自己为下一跳服务器(Next- Hop-Server,NHS),分支发送登记请求给中心,其中包括分支的隧道IP地址和NBMA地址,以及保存时长。中心在NHRP表中对应生成一个表 项,表项只在保存时长内有效。然后中心向分支回送登记确认信息。
NHRP登记请求过程示意见图3。
图3:NHRP登记请求过程示意
NHRP登记确认过程示意如图4。
图4:NHRP登记确认过程示意
NHRP注册功能至少解决了三个问题:
① 由于分支的NBMA地址是通过ISP的DHCP自动获取的,每次上线时的IP地址可能不同,所以中心通过注册过程可以自动学习该地址;
② 中心不必针对所有分支分别配置GRE或IPSec信息,大大简化中心的配置;所有相关信息可通过NHRP自动获取;
③ 当DMVPN网络扩展时,无须改动中心和其它分支的配置。新加入的分支将自动注册到中心,通过动态路由协议,所有其它分支可以学到这条新的路由,新加入的分支也可以学到到达其它所有分支的路由信息。
NHRP的作用可以概括为两点,一是地址的映射和解析,二是转发数据。通过静态配置、NHRP登记、NHRP解析实现地址映射,由路由表获得到目的IP地 址的隧道下一跳IP地址,通过解析隧道下一跳IP地址与NBMA地址的映射,获得隧道下一跳IP地址对应的NBMA地址,实现数据转发。
三、分支之间的动态隧道
在动态多点VPN中,分支与分支之间除了经过中心转发数据外,分支还可以向另一分支直接发送数据。分支到中心的隧道一旦建立便持续存在,但是各分支之间并 不配置持续的隧道。当一个分支需要向另一个分支发送数据包时,两个分支之间通过mGRE端口动态建立IPSec隧道,进行数据传输。
两个分支间路由和 NHRP过程见图5。
图5:两个分支间路由和NHRP过程
为了生成分支到分支的隧道,分支必须学到目的网络路由、下一跳必须是远端分支的隧道IP地址、分支必须学到了下一跳的NBMA地址。
分支采用动态路由协议学习到目的网络的路由。路由协议只在中心和分支之间用到,为了使分支与分支间能路由,首先分支要向中心宣告自己的私网路由信息,再由 中心向各分支宣告,中心对分支宣告的私网路由必须保留下一跳的私网地址,看起来就象是分支自己宣告的一样。分支用NHRP解析请求学习到下一跳分支的 NBMA地址。分支的NHRP解析与NHRP登记过程是有差别的,登记是分支在中心上登记自己,解析是分支通过中心寻址其他分支。分支首先向中心发送解析 请求,请求下一跳隧道IP地址映射的NBMA地址,中心解析出映射的NBMA地址后回复给请求分支,回复中还包括解析结果在中心的有效时长。然后,分支生 成一个NHRP表项,在没插入NHRP表之前,IPSec隧道就开始初始化,在隧道建立后,NHRP表项才被插入表中并能使用。一旦对应的NHRP表项超 时,分支与分支间隧道随之消失。
建立动态分支隧道的过程图示见图6。
图6:建立动态分支隧道的过程
四、结语
分析DMVPN的特点,在应用上它具有如下优势:分支之间可动态建立隧道传输数据,当两个分支在同一城市,而中心在另一城市时,分支之间直接发送数据可以 减小延时,降低对中心路由器资源消耗,并且更经济;增加分支不用改变中心和其他分支的配置,维护工作量成倍降低;分支节点可使用动态IP地址,节约了公网 IP地址资源;动态隧道的特点使它的网络规模可以很大。它的这些优势使它特别适合于分支机构点多面广的企业和公司做安全互联。
五、实验
HUB 配置
interface FastEthernet0/0
ip address 203.86.63.237 255.255.255.0
interface Loopback10
ip address 192.168.0.1 255.255.255.0
router rip
network 10.0.0.0
network 192.168.0.0
ip route 0.0.0.0 0.0.0.0 203.86.63.233
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key nozuonodie address 0.0.0.0 0.0.0.0
crypto ipsec transform-set ESP_3DES_MD5 esp-3des esp-md5-hmac
crypto ipsec profile security-sopke
set transform-set ESP_3DES_MD5
!
interface Tunnel1
ip address 10.0.0.1 255.255.255.0
tunnel source FastEthernet0/0
tunnel mode gre multipoint //配置隧道为多点GRE
tunnel key 123456123456
ip mtu 1400 //调整MTU防止IPSec分片
tunnel protection ipsec profile security-sopke //对mGRE数据加密
ip nhrp authentication inhand //激活NHRP认证,密码inhand
ip nhrp map multicast dynamic //动态接收NHRP的组播映射
ip nhrp network-id 1 //激活HNRP
!
SPOKE1 配置
interface FastEthernet0/0
ip address dhcp
interface Loopback10
ip address 192.168.1.1 255.255.255.0
router rip
network 10.0.0.0
network 192.168.1.0
ip route 0.0.0.0 0.0.0.0 FastEthernet0/0
!
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key nozuonodie address 203.86.63.237
!
crypto ipsec transform-set ESP_3DES_MD5 esp-3des esp-md5-hmac
!
crypto ipsec profile security-sopke
set transform-set ESP_3DES_MD5
!
interface Tunnel1
ip address 10.0.0.11 255.255.255.0
tunnel source FastEthernet0/0
tunnel mode gre multipoint
tunnel key 123456
ip mtu 1400 //调整MTU防止IPSec分片
tunnel protection ipsec profile security-sopke //对mGRE数据加密
ip nhrp authentication inhand //激活NHRP认证,密码inhand
ip nhrp map 10.0.0.1 203.86.63.237
//手动NHRP映射,映射中心站点的虚拟隧道IP动中心站点公网IP。有了这个映射,分支站点才能访问中心站点
ip nhrp map multicast 203.86.63.237
//映射组播到中心站点公网IP。mGRE是NBMA网,分支站点要和中心站点建立动态路由协议的邻居关系,必须在每个分支节点将组播映射到中心站点公网IP,这样才能把分支节点组播送到中心站点。分支站点之间不需要映射,所以分支只与中心建立动态路由邻居关系。
ip nhrp network-id 1 //激活HNRP
ip nhrp nhs 10.0.0.1 //NHS(Next Hop Server)就是NHRP服务器,定义了中心站点隧道接口虚拟地址。
!
IR900 作为spoke的配置
#system config
language Chinese
hostname Router
ip domain-name router.com.cn
clock timezone UTC-8
!
#log config
!
#user config
username adm privilege 15 password $MD5$zcYwH1JL7c18Q
!
enable password $MD5$2.UzICXN6rKjE
!
#aaa config
!
#cron config
!
#alarm config
!
#ipsec config
crypto keyring abc
pre-shared-key address 10.0.0.1 key nozuonodei
!
crypto isakmp nat keepalive 60
crypto isakmp policy 1
authentication pre-share
encryption 3des
hash md5
group 2
lifetime 86400
!
crypto isakmp profile abc
self-identity address
match identity address
keyring abc
policy 1
!
crypto ipsec transform-set abc esp-3des esp-md5-hmac
mode tunnel
!
crypto ipsec profile abc
set isakmp-profile abc
set transform-set abc
!
!
#loopback config
interface loopback 1
ip address 127.0.0.1 255.0.0.0
!
!
#ethernet interface config
interface fastethernet 0/1
!
!
#Ethernet sub interface config
!
#switch virtual interface config
interface vlan 1
ip address 192.168.2.1 255.255.255.0
!
!
!
#ethernet config
interface fastethernet 0/1
!
interface fastethernet 1/1
!
interface fastethernet 1/2
!
interface fastethernet 1/3
!
interface fastethernet 1/4
!
!
#cellular config
cellular 1 gsm profile 1 3gnet *99***1# auto gprs gprs
cellular 1 dial interval 10
cellular 1 signal interval 120
cellular 1 network auto
!
interface cellular 1
dialer profile 1
dialer timeout 120
dialer activate auto
ip address negotiated
ip mru 1500
ip mtu 1500
ppp ipcp dns request
ppp keepalive 55 5
!
!
#dialer config
!
#l2tp config
#openvpn config
!
#web config
ip http server port 80
!
#telnet server config
ip telnet server port 23
!
#dns config
ip name-server 202.106.0.20 8.8.8.8
!
#gre config
interface tunnel 1
ip address 10.0.0.11 255.255.255.0
ip nhrp map 10.0.0.1 203.86.63.236
ip nhrp nhs 10.0.0.1
ip nhrp authentication inhand
ip nhrp holdtime 3600
ip nhrp registration
tunnel source cellular 1
tunnel destination 203.86.63.236
tunnel key 123456
tunnel protection ipsec profile abc
!
!
#static route config
ip route 0.0.0.0 0.0.0.0 cellular 1
!
#rip config
router rip
network 192.168.77.0 255.255.255.0
network 192.168.2.0 255.255.255.0
access-list 100 permit ip any any
!
ip snat inside list 100 interface cellular 1