DMVPN协议

DMVPN(Dynamic Multipoint VPN)动态多点VPN

对于分公司和分总公司内网实现通信环境下,分公司是很多的。我们不可能每个分公司和总公司都挨个建立ipsec隧道 ,而且如果是分公司和分公司建立隧道,就会很麻烦。此时我们需要在分公司和分公司之间建立按需链路(一旦只有数据传输的时候才会建立,没有数据传输的时候不建立隧道)

注意:DMVPN是思科私有的协议技术

DMVPN基于tunnel

  • tunnel:也叫做GRE(GRE:通用路由封装,是一个模型),VPN的模型,隧道的模型,内网到内网的模型,双IP报头的模型

  • image.png

  • 内网数据经过隧道口来进行一个二次封装,这个隧道口也可以起路由协议

  • 配置案列:封装双IP报头
    image.png

    en
    conf ter
    ip route 0.0.0.0 0.0.0.0 100.1.1.1
    int tunnel 0
    ip add 123.1.1.1 255.255.255.0
    tunnel source 100.1.1.2
    tunnel destination 200.1.1.2
    tunnel mode ipip //我们现在是处于封装双IP报头的形式
    exit
    router ospf 100
    router-id 2.2.2.2
    network 123.1.1.0 0.0.0.255 a 0
    network 172.16.1.1 0.0.0.0 a 0
    end
    
    en
    conf ter
    ip route 0.0.0.0 0.0.0.0 200.1.1.1
    int tunnel 0
    ip add 123.1.1.2 255.255.255.0
    tunnel source 200.1.1.2
    tunnel destination 100.1.1.2
    tunnel mode ipip //封装双IP报头
    exit
    router ospf 100
    router-id 1.1.1.1
    network 123.1.1.0 0.0.0.255 a 0
    network 192.168.1.1 0.0.0.0 a 0
    end
    

DMVPN基于NHRP(重点)

  • NHRP:下一条解析解析(有点像ARP)

    NHRP运用场景

  • Spoke 1和Spoke 2会把tunnel口的ip和连接运营商的公网ip做一个映射并且发给Hub,Hub此时收到两个映射关系
  • 但此时Spoke 1和Spoke 2都只有Hub的映射关系,假设Spoke 1去访问123.1.1.1,它会自动映射到11.1.1.2,但是如果Spoke 1去访问Spoke 2(Spoke 1里面并没有123.1.1.3映射的表),它会去找Hub发送请求(请求123.1.1.3,Hub端会把123.1.1.3的映射发给Spoke 1),此时Spoke 1获取的这个表项长时间没用是会超时的,下次要继续发送的时候会重新申请,Spoke 2访问Spoke 1同理

NHRP的配置案例(隧道之间使用RIP协议)

要求:彼此之间的环回口地址可以互通(环回口模拟内网)
image.png

Hub
en
conf ter
int tunnel 0
ip add 123.1.1.1 255.255.255.0
tunnel source 11.1.1.2 //不需要写tunnel destination(因为我们使用的是DMVPN,我们再这里面不知到是有多少个Spoke客户端的,不可能每个都去写)
tunnel mode gre multipoint //把隧道模式改为多点隧道模式(隧道模式默认情况下是点对点模式,而我们现在的环境是点对多点)

//配置NHRP
ip nhrp network-id 111 //用于DMVPN的组的一个划分(有点像vtp里面的domain功能,大家都在这个网络号里面才是一个组)
ip nhrp authentication cisco //DMVPN不需要配置destination,防止有人知道我们的预共享密钥冒充连接上来,做一个身份认证)

//开启DMVPN的组播功能
ip nhrp map multicast dynamic //让接收到的组播地址自动形成映射关系,因为Spoke端会自动刚给Hub端发送自己的映射(等下会在三台设备上面运行RIP协议,RIP协议是基于组播的,相当于ip nhrp map 224.0.0.9 22.1.1.2的作用,在DMVPN下组播和单播是分开处理的,DMVPN默认情况下是不支持组播的)
exit

//隧道上起动态协议
router rip
version 2
no auto-summary
network 123.0.0.0
network 1.0.0.0
exit
//Hub
show ip nhrp

image.png

//Hub
show ip route

image.png

Spoke 1
en
conf ter
int tunnel 0
ip add 123.1.1.2 255.255.255.0
tunnel source 22.1.1.2
tunnel mode gre multipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp nhs 123.1.1.1 //配置NHRP的server端的tunnel口地址(他们是基于tunnel口来建立DMVPN的,确定谁是Hub端)

//单播映射
ip nhrp map 123.1.1.1 11.1.1.2 //Hub端不会把自己的123.1.1.1对应11.1.1.2的映射发给Spoke端的,仅仅是Spoke端给Hub端发,只有在Spoke端请求的时候才会给他发

//组播映射
ip nhrp map multicast 11.1.1.2 //只要是去往组播地址的数据,外面都会加一层公网IP的报头11.1.1.2,Hub端和Spoke端的流量分两种:1.组播流量:组播发送的,一般是服务于路由协议的;2.单播流量(业务流量):一对一发送的
exit

//隧道上起动态协议
router rip
version 2
no auto-summary
network 123.0.0.0
network 2.0.0.0
exit

//Spoke 1
show ip nhrp

image.png

//Spoke 1
show ip route

image.png

为什么Hub的内网地址收到了,对端Sopke 2 的内网地址怎么没收到?

RIP的水平分割机制:从一个接口收到的路由不会再从这个接口发送出去(用于防环措施)

此时我们需要关闭RIP协议的水平分割机制

en
conf ter
int tu 0
no ip split-horizon
end
Spoke 2
en
conf ter
int tunnel 0
ip add 123.1.1.3 255.255.255.0
tunnel source 33.1.1.2
tunnel mode gre multipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp nhs 123.1.1.1
ip nhrp map 123.1.1.1 11.1.1.2
ip nhrp map multicast 11.1.1.2
exit

//隧道上起动态协议
router rip
version 2
no auto-summary
network 123.0.0.0
network 1.0.0.0
exit
//Spoke 2
show ip nhrp

image.png

Spoke 1 ping Spoke 2 的内网地址查表过程

ping 3.3.3.3

//Spoke 1
show ip route

image.png

//Spoke 1
show ip nhrp

image.png

  1. Spoke1 ping 3.3.3.3,先查路由表,看到去往3.3.3.3的下一跳为123.1.1.1,去往123.1.1.1从tunnel 0口出去
  2. 进入tunnel 0口之后开始查NHRP表,123.1.1.3对应的是33.1.1.2的一个映射封装
验证

当Spoke 1 ping Spoke 2的tunnel口时候,此时你就能看见动态获得映射关系
image.png

show ip nhrp

image.png

NHRP的配置案例(隧道之间使用EIGRP协议)

要求:彼此之间的环回口地址可以互通(环回口模拟内网)
image.png

Hub
en
conf ter
int tunnel 0
ip add 123.1.1.1 255.255.255.0
tunnel source 11.1.1.2
tunnel mode gre mutipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp map multicast dynamic
exit

//在隧道上起动态协议
router EIGRP 100
no auto-summary
network 123.1.1.0 0.0.0.255
network 1.1.1.0 0.0.0.255
exit

//关闭EIGRP的水平分割
int tunnel 0
no ip split-horizon eigrp 100 //关闭EIGRP 100的水平分割
exit

//关闭EIGRP承载下一跳功能
int tunnel 0
no ip next-hop-self eigrp 100 //关闭EIGRP 100的承载下一跳

//Hub
show ip route

image.png

  • 此时Hub端收到了Spoke 1和Spoke 2的路由条目
Spoke 1
en
conf ter
int tunnel 0
ip add 123.1.1.2 255.255.255.0
tunnel source 22.1.1.2
tunnel mode gre multipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp nhs 123.1.1.1
ip nhrp map 123.1.1.1 11.1.1.2
ip nhrp map multicast 11.1.1.2
exit

//隧道上起动态协议
router EIGRP 100
no auto-summary
network 123.1.1.0 0.0.0.255
network 2.2.2.0 0.0.0.255
exit
//Spoke 1
show ip route

image.png

  • 此时Spoke 1上只收到了Hub的路由条目,没有收到对端Spoke 2的路由条目,和RIP的情况相同
  • 解决方法:在Hub的tunnel口上把EIGRP100的水平分割关掉
  • 水平分割关掉之后接着查看路由表
//Spoke 1
show ip route

image.png

  • 此时会发现去往3.3.3.3条目的下一条为123.1.1.1(Spoke1去往Spoke2的3.3.3.3得经过Hub端),出现了次优路径,不可能下面的分布去往任何一个分布,数据都得经过总部
  • 这个就是是EIGRP的特性:Spoke2把自己3.3.3.3的路由条目发给了Hub端,Hub端接收到了这个路由条目又发给Spoke1,路由按正常来说,谁发给我的,我收到的这个条目的下一跳地址就是谁(按道理来说没问题,但是在我们这个环境中就有问题了)
  • 为了解决这个问题,需要在Hub上面关闭承载下一跳功能(让它恢复原有的下一跳功能)
  • 关闭承载下一跳功能之后接着查看路由表
//Spoke 1
show ip route

image.png

  • 此时发现Spoke1去往3.3.3.3的下一条为123.1.1.3了
Spoke 2
en
conf ter
int tunnel 0
ip add 123.1.1.3 255.255.255.0
tunnel source 33.1.1.2
tunnel mode gre multipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp nhs 123.1.1.1
ip nhrp map 123.1.1.1 11.1.1.2
ip nhrp map multicast 11.1.1.2
exit

//隧道上起动态协议
router EIGRP 100
no auto-summary
network 123.1.1.0 0.0.0.255
network 3.3.3.0 0.0.0.255
exit
//Spoke 2
show ip route

image.png

  • 此时Spoke 2上只收到了Hub的路由条目,没有收到对端Spoke 1的路由条目

NHRP的配置案例(隧道之间使用OSPF协议)

要求:彼此之间的环回口地址可以互通(环回口模拟内网)
image.png

Hub
en
conf ter
int tunnel 0
ip add 123.1.1.1 255.255.255.0
tunnel source 11.1.1.2
tunnel mode gre mutipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp map multicast dynamic
exit

//在隧道上起动态协议
router ospf 100
router-id 1.1.1.1
net 1.1.1.0 0.0.0.255 a 0
net 123.1.1.0 0.0.0.255 a 0
exit

//更改接口的网络类型
int tunnel 0
ip ospf network broadcast //更改tunnel 0接口的网络类型为广播
exit
  • 此时会发现每台设备上面都会有大量的报错信息
    image.png

  • 并且查看邻居时,邻居会不停的变换
    image.png
    image.png

  • 查看tunnel 0接口的状态

//Hub
show ip ospf interface tunnel 0

image.png | 900
参数信息查看

  • Network Type POINT-TO-POTIN(tunnel口的默认网络类型为点对点的网络类型,只能一次性建立一个邻居)
  • 但此时Hub端需要建立多个邻居关系,不能是点对点的网络类型
  • 解决方法,更改tunnel口的网络类型(建立ospf邻居的设备都要修改,因为ospf建立邻居需要都在同一个网络类型结构)
  • 在Hub和Spoke这种网络结构的情况下,需要让Hub为DR,这就需要设备其他Spoke不参与选举DB和BD(因为Spoke端都得把路由信息发给Spoke端,由Hub端去做同步),把建立邻居的端口的优先级设置为0就不会参与选举了
  • 如果Hub的tunnel口为广播类型,Spoke1和Spoke2的tunnel为点对点类型,此时会发现邻居起来了,但是没有路由条目
  • 查看ospf数据库的1类LSA
//Spoke 1
show ip ospf 100 database router

image.png

参数说明

  • Adv Router is not-reachable //表示通告路由器是不可达的(如果看一类条目有这个错误信息,大多数都是网络类型不同导致的)

  • 最后查看邻居建立的情况
    image.png

  • 此时会发现Hub已经是DR了,并且Spoke1和Spoke2不参与选举

Spoke 1
en
conf ter
int tunnel 0
ip add 123.1.1.2 255.255.255.0
tunnel source 22.1.1.2
tunnel mode gre multipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp nhs 123.1.1.1
ip nhrp map 123.1.1.1 11.1.1.2   
ip nhrp map multicast 11.1.1.2
exit

//在隧道上起动态协议
router ospf 100
router-id 2.2.2.2
net 2.2.2.0 0.0.0.255 a 0
net 123.1.1.0 0.0.0.255 a 0
exit

//更改接口的网络类型
int tunnel 0
ip ospf network broadcast //更改tunnel 0接口的网络类型为广播
exit

//设置接口优先级,不参与选举DR和BDR
int tunnel 0
ip ospf priority 0
exit

最后查看建立邻居的情况

//Spoke 1
show ip ospf neighbors

image.png

Spoke 2
en
conf ter
int tunnel 0
ip add 123.1.1.3 255.255.255.0
tunnel source 33.1.1.2
tunnel mode gre multipoint
ip nhrp network-id 111
ip nhrp authentication cisco
ip nhrp nhs 123.1.1.1
ip nhrp map 123.1.1.1 11.1.1.2
ip nhrp map multicast 11.1.1.2
exit

//在隧道上起动态协议
router ospf 100
router-id 3.3.3.3
net 3.3.3.0 0.0.0.255 a 0
net 123.1.1.0 0.0.0.255 a 0
exit

//更改接口的网络类型
int tunnel 0
ip ospf network broadcast //更改tunnel 0接口的网络类型为广播
exit

//设置接口优先级,不参与选举DR和BDR
int tunnel 0
ip ospf priority 0
exit

最后查看建立邻居的情况

//Spoke 2
show ip ospf neighbors

image.png

基于IPSEC

基于上面的配置开始做IPSec

image.png

Hub
en
conf ter
crypto isakmp policy 10
encryption 3des
hash md5
authentication pre-share
group 2
exit
crypto isakmp key 0 cisco address 0.0.0.0 //配置PSK(此时不能能够确定Spoke端是多少,假设有100个Spoke端,照之前的配置就跟做L2L差不多)
crypto ipsec transform-set X esp-md5-hmac esp-3des

//创建一个IPSec简档,名为DMVPN
crypto ipsec profile DMVPN
set transform-set X
exit

//挂载接口
int tunnel 0
tunnel protection ipsec profile DMVPN
end
//Spoke 1
show crypto engine connections active

image.png
此时我都没有发送数据,从哪里来的加密解密的数据?(RIP的周期跟新,30/s更新一次)

Spoke 1
en
conf ter
crypto isakmp policy 10
encryption 3des
hash md5
authentication pre-share
group 2
exit
crypto isakmp key 0 cisco address 0.0.0.0
crypto ipsec transform-set X esp-md5-hamc esp-3des
exit
crypto ipsec profile DMVPN
set transform-set X
exit
int tunnel 0
tunnel protection ipsec profile DMVPN
end
//Spoke1
show crypto isakmp sa

image.png

Spoke 2
en
conf ter
crypto isakmp policy 10
encryption 3des
hash md5
authentication pre-share
group 2
exit
crypto isakmp key 0 cisco address 0.0.0.0
crypto ipsec transform-set X esp-md5-hamc esp-3des
exit
crypto ipsec profile DMVPN
set transform-set X
exit
int tunnel 0
tunnel protection ipsec profile DMVPN
end

说说DMVPN是一个怎么样的形态

image.png

  • 分公司和总公司之间都建立隧道,但是分公司和分公司之间也可能有数据传输,此时总公司是固定的,分公司不是固定的,所有分公司和分公司之间不可能每一个都要建立隧道(数量太多了),所以让分公司和分公司之间一旦有需要的时候才建立按需链路
  • 分公司和分公司之间没有数据传输的时候是不建立隧道的,有数据传输的时候才动态的建立一条隧道
  • 这条隧道又是如何产生的呢?
    • 分公司和总公司之间有连接,从总公司这里获取到另外一个分公司的tunnel对应的公网IP(这里牵扯到一个map映射关系,这个映射关系就是总公司有所有分公司tunnel口对应的公网IP),一旦分公司有响应要跟另外一个分公司建立按需链路的时候,就要向总公司去请求这个的一个映射关系
    • 这时数据再传输的时候,数据就是通过DMVPN来建立的,通过IPSec来加密的,这个就是动态多点VPN
  • 这个按需链路的请求又怎么配置呢?
    • 这就需要用到NHRP(下一跳解析协议)
    • NHRP最主要的作用:总公司和分公司之间如何进行map的一个响应关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901649.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【单运放可调频率正弦波电路二阶RC移相震荡文氏桥】2021-12-20

缘由想让正弦波频率是1K赫兹到100K赫兹应该怎么调节滑动变阻器,计算起来感觉不对劲-嵌入式-CSDN问答 调节R12负反馈让波形不出现销顶失真,同时负反馈深度影响输出幅值,调节频率范围有限,频率越高越不稳定。 RC移相式振荡器文氏电…

ThinkPHP+Mysql 灵活用工+灵活用工平台+灵活用工系统

基于 ThinkPHPMysql 灵活用工灵活用工平台灵活用工系统灵活用工小程序灵活用工源码灵活用工系统源码 开发语言 ThinkPHPMysql 源码合作 提供完整源代码 软件界面展示 一、企业管理后台 二、运用管理平台 三、手机端

vue文件报Cannot find module ‘webpack/lib/RuleSet‘错误处理

检查 Node.js 版本:这个问题可能与 Node.js 的版本有关。你可以尝试将 Node.js 的版本切换到 12 或更低。如果没有安装 nvm(Node Version Manager),可以通过以下命令安装: curl -o- https://raw.githubusercontent.co…

Docker 安装使用

1. 下载 下载地址:Index of linux/static/stable/x86_64/ 下载好后,将文件docker-18.06.3-ce.tgz用WinSCP等工具,上传到不能外网的linux系统服务器 2. 安装 解压后的文件夹docker中文件如下所示: 将docker中的全部文件&#xff…

基于云平台的智能家居管理系统设计与通信协议分析

案例 阅读以下关于 Web 系统架构设计的教述,在答题纸上回答问题1至问题3。 【说明】 某公司拟开发一个智能家居管理系统,该系统的主要功能需求如下: 1)用户可使用该系统客户端实现对家居设备的控制,且家居设备可向客户端反馈实时状态&#x…

威胁 Windows 和 Linux 系统的新型跨平台勒索软件:Cicada3301

近年来,网络犯罪世界出现了新的、日益复杂的威胁,能够影响广泛的目标。 这一领域最令人担忧的新功能之一是Cicada3301勒索软件,最近由几位网络安全专家进行了分析。他们有机会采访了这一危险威胁背后的勒索软件团伙的成员。 Cicada3301的崛…

工单管理用什么工具好?8款推荐清单

本文推荐的8款项目工单管理系统有:1. PingCode; 2.Worktile; 3.Teambition; 4.致远OA; 5.TAPD; 6.Gitee; 7.Wrike; 8.Trello。 很多企业在处理项目工单时,依然依赖电子邮件、Excel表格,甚至是手动记录。这样做不仅效率低下,还容易导致工单遗漏…

最新版本jdbcutils集成log4j做详细sql日志、自动释放连接...等

maven坐标 <!-- MySQL 8 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!-- Druid连接池 --><dependency><groupId&…

sass软件登录设定——未来之窗行业应用跨平台架构

一、saas软件开发中登录设计 以为大公司为参考思迅在登录时候需要录入商户号 二、独立商户商户好处 1.每个店铺的账户是独立的&#xff0c;保护商户职员账户信息的相对安全。 2.不同店铺可以试用相同用户名

qt QMediaPlaylist

QMediaPlaylist 是 Qt Multimedia 模块中的一个类&#xff0c;用于管理媒体文件的播放列表。它提供了一种方便的方式来组织和控制多媒体内容的播放&#xff0c;如音频和视频文件。 主要方法 QMediaPlaylist(00bject *parent nullptr):构造一个新的媒体播放列表对象。void add…

低代码平台如何通过AI赋能,实现更智能的业务自动化?

引言 随着数字化转型的加速推进&#xff0c;企业在日常运营中面临的业务复杂性与日俱增。如何快速响应市场需求&#xff0c;优化流程&#xff0c;并降低开发成本&#xff0c;成为各行业共同关注的核心问题。低代码平台作为一种能够快速构建应用程序的工具&#xff0c;因其可视化…

ArcGIS003:ArcMap常用操作0-50例动图演示

摘要&#xff1a;本文以动图形式介绍了ArcMap软件的基本操作&#xff0c;包括快捷方式创建、管理许可服务、操作界面元素&#xff08;如内容列表、目录树、搜索窗口、工具箱、Python窗口、模型构建器窗口等&#xff09;的打开与关闭、位置调整及合并&#xff0c;设置默认工作目…

【JavaEE初阶】网络原理-TCP连接管理之“三次握手和四次挥手”

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP协议的重要的机制“连接的建立和断开”~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &…

Linux 部署 mysql

Linux&#xff08;四&#xff09;- Ubuntu安装Mysql_mysql-community-server-core depends on libaio1 (>-CSDN博客 #创建用户 打开终端。 登录到MySQL服务器&#xff1a; mysql -u root -p 创建新用户。替换new_user为您想要的用户名&#xff0c;password为新用户的密码&am…

python异常监测-ARIMA(自回归积分滑动平均模型)

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 Python异常检测- DBSCAN Python异常检测- 单类支持向量机(…

python之数据结构与算法(数据结构篇)-- 元组

一、元组的概念 其实&#xff0c;所谓的“元组”就是一组不能改变的特殊数组(一般情况下)&#xff0c;这里我们去创建一个“小羊元组”&#xff0c;大家就能更加明白其中的意思了。 二、元组实现思路 1.我们去定义一个“羊村小羊”的元组 # 创建一个"羊村小羊"的元…

SystemC学习(2)— APB_SRAM的建模与测试

SystemC学习&#xff08;2&#xff09;— APB_SRAM的建模与测试 一、前言 二、APB_SRAM建模 编写APB_SRAM模型文件apb_sram.h文件如下所示&#xff1a; #ifndef __APB_SRAM_H #define __APB_SRAM_H#include "systemc.h"const int ADDR_SIZE 32; const int DATA_…

【专题】计算机网络之数据链路层

数据链路层的地位&#xff1a;网络中的主机、路由器等都必须实现数据链路层。 数据链路层信道类型&#xff1a; 点对点信道。 使用一对一的点对点通信方式。 广播信道。 使用一对多的广播通信方式。 必须使用专用的共享信道协议来协调这些主机的数据发送。 1. 使用点对点信道…

三次握手与四次挥手

1.三次握手 1.1状态机 客户端 SYN_SENT&#xff1a;客户端发送SYN报文段请求建立连接 ESTABLISHED&#xff1a;在收到服务端发来的SYN请求报文以及确认报文后就建立客户端到服务端的连接 服务端 LISTEN&#xff1a;一开始时LISTEN状态&#xff0c;等待客户端的SYN请求 SY…

群晖系统基本命令

切换超级管理员 sudo -i 查询系统 运行的所有服务 synoservicecfg --list 启动服务命令(该命令需要使用超级管理员) #老版本群晖使用synoservice命令 synoservice --start 服务名称#新版本群晖使用systemctl命令 systemctl start 服务名称 synoservice所管理的服务配置文…