【汇总】学习VPN其实很简单
简介
Cisco DMVPN是为了解决大型的企业的需求而出现的。基于传统的IPsec VPN的缺点。
1、如果基于Hub-spoke的模型,就像上面的图,如果上海的分支需要访问长沙分支,那么就必须经过总部到达,这样一样经过总部就需要解密然后加密发送出去,center端的路由器负担非常重。而且延迟也大,对于一些敏感的流量是不允许的。
2、如果实现full mash的话,那么就必须每两个路由器之间建立一个IPsec通道,这对于配置跟管理都是非常繁琐的,并且必须依赖于固定IP地址,在如今IPv4的网络中,固定IP越来越难获得了。
Cisco DMVPN就是解决这个问题,它主要为大型企业网络提供的解决方案,扩展性强。它由几个协议共同完成
我们都知道GRE是一个典型的VPN隧道,它实现一个点对点的连接,如果需要与另外的节点建立tunnel,那么就需要建立多个GRE才能完成。DMVPN使用的是Mutiple Gre 动态多点GRE,非常类似于我们的帧中继,一个tunnel对应多个分支的tunnel, 但是它并不知道对方的地址,它的建立必须依赖于NHRP。
NHRP:下一跳解析协议,它是一个C/S模型,我们通常把S放在Hub端,而client为spoke,它的工作原理是当client启动后,就会向server发送一个注册信息,这个注册信息包含这个tunnel地址和公网IP,所以在MGRE与NHRP配合的情况下,使得除了server端必须是固定IP地址以外,其余的client可以是动态的。这样server就会知道所有client的公网地址,从而实现了DMVPN。
DMVPN技术总体实现:client通过NHRP自动向server端注册自己的地址,这样一来,server那就有了所有的动态地址信息,这样无论是建立VPN还是Spoke之间通信都不成问题了,当一个Spoke想发送数据到另外一个Spoke的时候,它会先向server端询问Spoke的公网地址并把数据包发送出去,server收到这个数据包和查询包,会先代为转发,并且回复这个查询。当Spoke端收到这个查询后得到对方的公网地址,建立VPN隧道,但是这个隧道是有时间限制的,默认为2个小时。
Cisco-Center:
nterface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
!
interface FastEthernet1/0
ip address 12.1.1.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 12.1.1.2
Internet
interface FastEthernet0/0
ip address 12.1.1.2 255.255.255.0
!
interface FastEthernet0/1
ip address 23.1.1.2 255.255.255.0
!
interface FastEthernet1/0
ip address 24.1.1.2 255.255.255.0
SCisco-HSpoke
interface FastEthernet0/0
ip address 192.168.2.1 255.255.255.0
!
interface FastEthernet1/0
ip address 24.1.1.1 255.255.255.0
ip route 0.0.0.0 0.0.0.0 24.1.1.2
HNSpoke
interface FastEthernet0/0
ip address 192.168.3.1 255.255.255.0
!
interface FastEthernet1/0
ip address 23.1.1.1 255.255.255.0
ip route 0.0.0.0 0.0.0.0 23.1.1.2
基本配置已经完了,各个公网口能够Ping通。开始配置Mgre
Cisco-Center
interface tunnel 0
tunnel source 12.1.1.1
tunnel mode gre multipoint
ip address 172.16.1.1 255.255.255.0
SCisco-HSpoke & NCisco-HSpoke
interface tunnel 0
tunnel source fastEthernet 1/0
tunnel mode gre multipoint
ip address 172.16.1.2 255.255.255.0 | ip address 172.16.1.3 255.255.255.0这里注意的是Spoke的源因为是通过动态获取地址的,所以只需要指定接口就行,实际环境可能为Dialer口。另外一点就是关于12.4以前的版本需要注意tunnel必须设置key才能up。
NHRP配置:
center
ip nhrp network-id 100
ip nhrp authentication cisco
Cisco-Center端的设置非常简单,只需要设置一个network-id,这个ID跟EIGRP的AS一样,必须一致。认证是可选的,可有可无。
SPoke端:
ip nhrp network-id 100
ip nhrp authentication ciscoip nhrp nhs 172.16.1.1
ip nhrp map 172.16.1.1 12.1.1.1
我们来看下为什么要这么设置,我们之间了解过NHRP是基于C/S模式的,Cisco-Center端只需要配置一个网络标识就行了,它只需负责进行client的动态注册,那么SPoke端相当于client,它必须知道server是谁,所以IP nhrp nhs 172.16.1.1,这里必须是tunnel地址,这样CLient还是不知道server怎么去,所以在后面做了一个map映射,把去往172.16.1.1 的地址对应12.1.1.1 ,这个地址就是server的公网地址。 这是不是很像帧中继的DLCi MAP。这里MGRE也是一个典型的NBMA网络。
在server端上shw ip nhrp 的结果会显示两个地址信息,172.16.1.2对应公网地址24.1.1.1 type为dynamic。
[v_act]这时候SH的IP为172.16.1.2 ,它只知道server端的地址信息,当需要访问172.16.1.3的时候,它会向server端询问,server端有所有CLient的注册信息,所以响应了这个请求。 跟上面一样当ping 172.16.1.3后,show ip nhrp 关于 172.16.1.3这个地址动态的映射到了23.1.1.1上,而关于到172.16.1.1这个地址由于是静态指定的 所以为static。
关于一个完整的mGRE已经建立完毕了,剩下的就是动态路由协议来学习各自的路由,关于加密的实施最后在说明,DMVPN的难点在于NHRP与动态路由协议在这个环境下的状况。 mGRE支持RIP、EIGRP、OSPF、BGP、关于ISIS好像实现不了。这里只证明EIGRP和OSPF,因为它们是企业用得最多,另外一个就是在这个环境下有许多的问题。
Cisco-Center(config)#router eigrp 1
Cisco-Center(config-router)#no au
Cisco-Center(config-router)#no auto-summary
Cisco-Center(config-router)#network 172.16.1.0 0.0.0.255
Cisco-Center(config-router)#network 192.168.1.0 0.0.0.255
Cisco-HSpoke(config)#router eigrp 1
SCisco-HSpoke(config-router)#no auto-summary
SCisco-HSpoke(config-router)#network 172.16.1.0 0.0.0.255
SCisco-HSpoke(config-router)#network 192.168.2.0 0.0.0.255
Cisco-HNSPOKE(config)#router eigrp 1
Cisco-HNSPOKE(config-router)#no auto-summary
Cisco-HNSPOKE(config-router)#network 172.16.1.0 0.0.0.255
Cisco-HNSPOKE(config-router)#network 192.168.3.0 0.0.0.255
会发现根本没有EIGRP邻居的发现,这是为什么呢。如果对帧中继熟悉的朋友,一定看出来了,在帧中继中默认是不支持broadcast和Muticast,它的实现是基于伪广播,就是一个相同的数据包,复制多份发给多个DLCI,而这个mGRE也是一样,它是一个典型的NBMA网络,默认也不支持组播。下面有一列是NBMA addessr 23.1.1.1[/v_act]
Cisco-Center(config-if)#ip nhrp map multicast dynamic
SCisco-HSpoke(config-if)#ip nhrp map multicast 12.1.1.1
Cisco-HNSPOKE(config-if)#ip nhrp map multicast 12.1.1.1
Cisco-Center作为server端,所以使用dynamic来接收来自各个CLient的组播包,而CLient端只需要把地址设置为server的公网地址即可,其实CLient也可以为dynamic,只是实现的效果就会变成SPoke之间也建立了动态路由协议,有邻居关系,这个是我们不需要的,我们只希望需要的时候才建立。
我们会发现这时候,Cisco-Center已经有邻居关系了,可SPoke缺没有,这是一个需要注意的地方,这时候需要把tunnel 全部shuodwn,然后在Cisco-Center端先No shutdown,在开启其他的。 这个问题还会出现在 当你NHRP设置错误的时候,当你改回来后需要shutdown,no shutdown接口才能改正,否则也会解析不正常。
邻居已经成功建立了,SPoke端只学到了到了Cisco-Center的路由,这是典型的水平分割原则,所以需要关闭水平分割。
Cisco-Center(config-if)#no ip split-horizon eigrp 1
路由已经正常学习了,还有一个问题就是下一跳解析问题,它的流量还是经过了Cisco-Center,而不是对方的SPoke为下一跳,所以我们需要关闭next-hop-self,不然它改变下一跳,这个命令是专门为EIGRP开出来支持DMVPN环境的。
Cisco-Center(config-if)#no ip next-hop-self eigrp 1
这时候下一跳解析正常了。trackrouter 192.168.2.2这个主机,查看它的流量是不是直接发往172.16.1.2。而不是经过了172.16.1.1
这里为EIGRP的在这个NBMA环境的各种问题,其实发现麻烦挺多的,所以在实际实施的时候,一步到位,直接配置完全部在设置路由协议,这样就不会出现问题,这里主要是为了演示在这个环境下出现的问题。
OSPF在这个环境中存在的问题,删除掉EIGRP。
Cisco-Center
Router ospf 1
router-id 1.1.1.1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.1.0 0.0.0.255 area 0
SHSPoke
router ospf 1
router-id 2.2.2.2
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.2.0 0.0.0.255 area 0
HNSPoke
router ospf 1
router-id 3.3.3.3
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.3.0 0.0.0.255 area 0
当启用后,第一个现象就是Cisco-Center端的邻居一会up,一会down,这是因为tunnel的网络类型默认是Point-to-point,所以一会跟这边建立邻居,一会与那边建立邻居,改变的方法有两种point-to-multipie 还有种就是broadcast,这里推荐第二种,因为broadcast会自动优化下一跳,而在多点下它不会自动切换,这样就不优化了。
Cisco-Center
ip ospf network broadcastSpoke
ip ospf network broadcast
ip ospf priority 0
这样做是为了让Cisco-Center永远是DR,因为本地链路组播的TTL都为1。
最后一部分是关于IPsec VPN的,为什么放到最后来说是因为它在这个VPN中不是难点,难点在于NHRP和动态路由协议的问题。VPN的配置就不做解释了。
crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto ipsec transform-set trans esp-des esp-md5-hmac
mode transport
crypto ipsec profile dmvpn
set transform-set trans
interface tunnel 0
tunnel protection ipsec profile dmvpn
这里的配置都可以复制到各个路由器上,通用的,Spoke的key不为固定的原因是,有时候Spoke之间需要建立临时的通道所以也为任意。
center端有两个sa的内容,这是正常的,Cisco-Center和Spoke之间是永久建立,这里主要查看spoke之间建立按需tunnel的细节。
最后一个优化,关于MTU,官方建议把MTU改成1436~1440
Cisco-Center(config-if)#ip mtu 1440
因为物理接口默认为1500,当一个本来小于1500的数据包进入加密的tunnel后,会封装GRE,然后打上ESP的头部,这样很容易就超过了1500,造成分片,这对路由器的性能和数据的传递都是影响巨大。
EtherⅡ | IP头部20字节| ESP 37字节 | GRE 4字节| IP头部 20字节 | ICMP 头部8字节 | data
关于DMVPN配置的思路
1、先运行tunnel,配置mode为多点GRE
2、运行NHRP,主要是Spoke端之间(spoke端之间的配置是可以互相复制的)
3、启用DVI 的IPsec VPN
4、启用动态路由协议。
NHRP注意的两点就Spoke端正确指定nhs,然后就是设置支持组播协议,否则需要shutdown接口来激活。
下载对应文档
关于博客资源下载说明
(1)第一种是书籍PDF与视频类,全部放在博客分享,觉得对大家学习有帮助的博主会收集好、然后以博主的经验整理分类后排序好分享出来。
(2)第二种是技术性文章与视频,全部放在公众号(网络之路博客)/B站(网络之路Blog)发布,以博主原创为主,主要分享系列为主,由浅入深的带大家了解工作中常用到的一些网络技术,当然也会分享一些比较经典的案例。
(3)分享资源有涉及到您的利益以及版权问题,请联系博主,24小时候内删除。

学习视频系列(总有您想要的)
Book与实验手册(从初级到高级)
数通系列(路由交换 无线、防火墙VPN等)
实战系列(最贴近企业需求的案例)
想第一时间收到最新更新内容吗,点击获取~~~