概述
- DMVPN 是一个高扩展性的 IPSec VPN 解决方案,所谓高扩展性,是指适合企业级大规模部署的解决方案,例如,适用于一个企业拥有几百个分支机构的网络环境
传统 IPSec VPN 星型网络拓扑的局限性
- 中心站点配置量大
无论是采用经典配置的 IPSec VPN,还是采用 GRE Over IPSec 或 SVTI,多一个分支站点就要增加一份配置
2. 分支站点间流量延时较大
即两个分支站点间不能直接通信,两个分支站点间通信需要经过 Hub 节点中转,数据被两次加解密,大大增加了延时时间
3. 分支站点间流量占用中心带宽
在星型拓扑网络环境,分支站点间的所有流量,都要经过中心站点进行转发
传统 IPSec VPN 的网状模型存在的问题
- 中心与分支站点配置量大
无论是采用经典配置的 IPSec VPN,还是采用 GRE Over IPSec 或 SVTI,多一个分支站点,所有的站点都要多一份配置
2. 分支站点需要维护过多的 IPSec SA
网状拓扑的 IPSec VPN,分支站点要和每一个其它站点建立 IPSec SA,如果站点过多,每一个分支站点就会维护很多的 IPSec SA
3. 每一个分支站点需要固定 IP 地址
网状拓扑的 IPSec VPN,需要在任意两个站点间建立 IPSec VPN,所以每一个分支站点都需要有固定的 IP 地址
DMVPN 的优点
- Zero-touch provisioning:零接触服务,增加新的分支站点,无需更改中心站点配置
- Dynamic Spoke to Spoke tunnel:分支站点间流量,通过动态产生的站点间隧道进行封装
- Flexible network topologies:灵活的网络拓扑,简单的星型拓扑配置,提供了虚拟网状连通性
- Multicast support:组播支持,DMVPN支持组播流量通过隧道接口
- Adaptable connectivity:适应性强的连通性,分支站点支持动态 IP 地址
DMVPN 三个发展阶段
- Phase 1:Spoke-to-Hub,星型拓扑
- 中心站点为 mGRE 隧道,所有分支站点均为普通的点对点 GRE 隧道
- 分支站点间的流量都必须经过中心站点进行转发
- 阶段一的优点:
- 增加分支站点并不会增加中心站点的配置量
- 分支站点支持动态获取 IP 地址(所有阶段都支持)
- 可以在 Hub 节点做路由汇总
- Phase 2:Spoke-to-Spoke,虚拟网状拓扑
- 所有站点都配置 mGRE 隧道
- 中心站点与分支站点间维护一个永恒的隧道,而分支站点与分支站点间则按需建立隧道,形成了虚拟网状拓扑,真正实现了 DMVPN 的高扩展性
- 不支持 Hub 节点路由汇总
- Hierarchical Tree Spoke-to-Spoke,层次化(树状)设计
- 主要用于超大范围部署
- 能够实现不同区域的分支站点间直接建立隧道
- 支持 Hub 端路由汇总,为 Spoke 节点间优化路由
DMVPN 的4大组件
- 动态多点 GRE,Multipoint GRE(mGRE)
- 下一跳解析协议(Next Hop Resolution Protocol)
- 动态路由协议(Dynamic Routing Protocol,EIGRP,OSPF,BGP)
- IPSec 技术
动态多点 GRE,Multipoint GRE(mGRE)
- tunnel mode gre multipoint
- 是一个典型的 NBMA 网络
- 所有 mGRE 隧道接口都在同一个网段
- 进入 mGRE 网络的任何一个分支站点能够和其它分支站点直接通信
下一跳解析协议(Next Hop Resolution Protocol)
- mGRE 隧道的虚拟地址就是逻辑地址,物理接口地址就是公网地址,每一个站点的固定公网 IP 地址或者动态获取的公网 IP 地址,就是物理地址。NHRP 协议就是为了这个虚拟地址到公网地址的映射而设计的,首先每一个分支站点都需要手动映射中心站点的虚拟 IP 到公网 IP,所以中心站点必须拥有固定 IP 地址。分支站点有了这个手动映射就能够和中心站点取得联系,并且通过 NHRP 协议,注册这个分支站点的隧道虚拟 IP 到动态获取的公网 IP。一旦注册成功,中心站点就有所有分支站点的 NHRP 映射。这样中心站点也就能够访问所有注册后的分支站点。
- 因为注册是动态的,所以分支站点支持动态获取地址。当某一分支站点希望访问另外一个分支站点时,它首先使用 NHRP 协议向中心站点(NHRP 服务器)询问目的分支站点隧道虚拟 IP 所对应的公网 IP 地址;接下来,中心站点就会将 NHRP 映射发送给发起方;在发起方收到了目的站点的 NHRP 映射以后,就能够通过 mGRE 直接发起隧道访问目的站点了。
- 由于这个流量是两个分支站点间直接发起的,并不占用中心站点资源。
动态路由协议
- 由于NBMA网络类型不支持直接承载组播信息,因此需要配置组播映射,把组播转换成为单播(Hub:ip nhrp map multicast dynamic;Spoke:ip nhrp map multicast Underlay_IP)
- 因为只有中心站点才拥有固定 IP 地址,所以默认值能够配置分支站点和中心站点之间的组播映射
- 所以动态路由协议的邻居关系,只会出现在分支站点和中心站点之间
- mGRE 支持的路由协议包括:EIGRP、OSPF、BGP等。
IPSec 技术
- 对 mGRE 流量进行加密
- mGRE 只是一种特殊的 GRE 技术,IP 协议号和 GRE 一样都为 47
- DMVPN 与 GRE over IPSec 的封装原理完全相同,依然是加密点等于通信点,推荐使用传输模式进行封装(mode transport)
DMVPN 第一阶段配置
拓扑:
中心站点 Hub 端通过 Internet 与两个分支站点 Spoke-1、Spoke-2互联,地址规划如下:
Hub 端
物理地址:12.1.1.100
隧道地址:172.16.1.100
Spoke-1 端
物理地址:23.1.1.1
隧道地址:172.16.1.1
Spoke-2 端
物理地址:24.1.1.1
隧道地址:172.16.1.2
路由器身后环回口模拟站点内部网络,Hub 端内部网络 10.0.0.0/16,Spoke-1 端内部网络 10.1.0.0/16,Spoke-2 端内部网络 10.2.0.0/16
基本配置
Internet 路由器基本配置
interface Ethernet0/0 ip address 12.1.1.2 255.255.255.0 ! interface Ethernet0/1 ip address 23.1.1.2 255.255.255.0 ! interface Ethernet0/2 ip address 24.1.1.2 255.255.255.0 |
基本配置
Hub interface Loopback100 ip address 10.0.0.1 255.255.0.0 ! interface Ethernet0/0 ip address 12.1.1.100 255.255.255.0 ! ip route 0.0.0.0 0.0.0.0 12.1.1.2 Spoke-1 interface Loopback1 ip address 10.1.1.1 255.255.0.0 ! interface Ethernet0/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 Spoke-2 interface Loopback1 ip address 10.2.2.2 255.255.0.0 ! interface Ethernet0/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 |
mGRE 和 NHRP 配置
Hub 路由器
Hub(config)# interface tunnel 0 Hub(config-if)# ip address 172.16.1.100 255.255.255.0 Hub(config-if)# tunnel mode gre multipoint //配置隧道模式为多点 GRE Hub(config-if)# tunnel source ethernet 0/0 Hub(config-if)# tunnel key 123 //配置隧道密钥为 123 Hub(config-if)# ip nhrp network-id 1 //nhrp开关,network-id 本地有效,建议所有站点相同 Hub(config-if)# ip nhrp authentication ccie //可选配置,激活NHRP认证,密钥为 ccie Hub(config-if)# ip nhrp map multicast dynamic //Hub端建立动态接收 nhrp 的组播映射,默认配置 |
Spoke-1 配置
Spoke-1(config)# int tunnel 0 Spoke-1(config-if)# ip address 172.16.1.1 255.255.255.0 Spoke-1(config-if)# tunnel mode gre ip //第一阶段,Spoke节点为点到点 GRE Spoke-1(config-if)# tunnel source ethernet 0/0 Spoke-1(config-if)# tunnel destination 12.1.1.100 Spoke-1(config-if)# tunnel key 123 Spoke-1(config-if)# ip nhrp network-id 1 Spoke-1(config-if)# ip nhrp authentication ccie Spoke-1(config-if)# ip nhrp nhs 172.16.1.100 //该配置定义了 NHRP 服务器地址为中心站点的隧道接口虚拟地址172.16.1.100;也可以这么理解,服务器地址一般都为站点内部的私有地址,NHS是NHRP服务器,只要是服务器就得配置企业内部的私有地址 |
Spoke-2 配置
Spoke-2(config)# interface tunnel 0 Spoke-2(config-if)# ip address 172.16.1.2 255.255.255.0 Spoke-2(config-if)# tunnel mode gre ip //tunnel接口的默认配置 Spoke-2(config-if)# tunnel source ethernet 0/0 Spoke-2(config-if)# tunnel destination 12.1.1.100 //第一阶段spoke节点无需配置任何map信息,所以不要忘记配置tunnel目的地址 Spoke-2(config-if)# tunnel key 123 Spoke-2(config-if)# ip nhrp network-id 1 Spoke-2(config-if)# ip nhrp authentication ccie Spoke-2(config-if)# ip nhrp nhs 172.16.1.100 |
验证 NHRP
Hub# show ip nhrp //查看spoke手动注册的NHRP映射信息 172.16.1.1/32 via 172.16.1.1 --------------- Spoke的overlay地址 Tunnel0 created 00:12:15, expire 00:07:44 Type: dynamic, Flags: registered nhop NBMA address: 23.1.1.1 ------------------ Spoke的underlay地址 172.16.1.2/32 via 172.16.1.2 Tunnel0 created 00:09:09, expire 00:07:30 Type: dynamic, Flags: registered nhop NBMA address: 24.1.1.1 由于只有 Hub 端是 mGRE,Spoke端还是 P2P GRE,所以只有 Hub 端才能看到 nhrp 映射信息 -------------------------------------------------------------------------------------------------- Hub# show ip nhrp multicast //组播NHRP映射表 I/F NBMA address Tunnel0 23.1.1.1 Flags: dynamic (Enabled) Tunnel0 24.1.1.1 Flags: dynamic (Enabled) hub端根据spoke手动注册的nhrp映射信息,提取出来,放入到自己的组播nhrp映射表里,当发送组播报文时,自动封装组播nhrp映射表里的NBMA地址 -------------------------------------------------------------------------------------------------- |
动态路由协议 EIGRP 配置
Hub(config)#router eigrp ccie Hub(config-router)#address-family ipv4 unicast autonomous-system 90 Hub(config-router-af)#network 172.16.1.100 0.0.0.0 Hub(config-router-af)#network 10.0.0.0 0.0.255.255 -------------------------------------------------------------------------------------------------- Spoke-1(config)#router eigrp ccie Spoke-1(config-router)#address-family ipv4 unicast autonomous-system 90 Spoke-1(config-router-af)#network 172.16.1.1 0.0.0.0 Spoke-1(config-router-af)#network 10.1.0.0 0.0.255.255 -------------------------------------------------------------------------------------------------- Spoke-2(config)#router eigrp ccie Spoke-2(config-router)#address-family ipv4 unicast autonomous-system 90 Spoke-2(config-router-af)#network 172.16.1.2 0.0.0.0 Spoke-2(config-router-af)#network 10.2.0.0 0.0.255.255 |
验证 EIGRP 配置
Hub# show ip eigrp neighbors EIGRP-IPv4 VR(ccie) Address-Family Neighbors for AS(90) H Address Interface Hold Uptime SRTT RTO Q Seq (sec) (ms) Cnt Num 1 172.16.1.2 Tu0 11 00:02:28 5 1428 0 4 0 172.16.1.1 Tu0 10 00:02:46 4 1428 0 4 -------------------------------------------------------------------------------------------------- Spoke-1# show ip eigrp neighbors EIGRP-IPv4 VR(ccie) Address-Family Neighbors for AS(90) H Address Interface Hold Uptime SRTT RTO Q Seq (sec) (ms) Cnt Num 0 172.16.1.100 Tu0 14 00:07:25 14 1470 0 6 -------------------------------------------------------------------------------------------------- Spoke-2# show ip eigrp neighbors EIGRP-IPv4 VR(ccie) Address-Family Neighbors for AS(90) H Address Interface Hold Uptime SRTT RTO Q Seq (sec) (ms) Cnt Num 0 172.16.1.100 Tu0 10 00:10:20 10 1470 0 6 -------------------------------------------------------------------------------------------------- 只有 Hub 端可以分别与两个Spoke建立邻居关系,而Spoke之间是无法建立邻居关系的,这主要是由 NHRP 的组播映射决定的,因为只有在中心站点和分支站点间才存在组播映射,分支站点之间是不存在组播映射的 |
查看 EIGRP 路由
Hub# show ip route eigrp | be Gateway D 10.1.0.0/16 [90/76800640] via 172.16.1.1, 00:11:11, Tunnel0 D 10.2.0.0/16 [90/76800640] via 172.16.1.2, 00:10:54, Tunnel0 -------------------------------------------------------------------------------------------------- Spoke-1# show ip route eigrp | be Gateway D 10.0.0.0/16 [90/76800640] via 172.16.1.100, 00:11:21, Tunnel0 -------------------------------------------------------------------------------------------------- Spoke-2# show ip route eigrp | be Gateway D 10.0.0.0/16 [90/76800640] via 172.16.1.100, 00:11:04, Tunnel0 -------------------------------------------------------------------------------------------------- 只有 Hub 端学到了两个分支站点的路由,而分支站点间没有学习到对方分支站点的路由,这是由于 EIGRP 默认开启的水平分割特性,也就是在 Hub 中心站点的隧道接口默认开启了 EIGRP 的水平分割特性造成的 |
关闭 Hub 端隧道接口水平分割特性
Hub(config)# router eigrp ccie Hub(config-router)# address-family ipv4 unicast autonomous-system 90 Hub(config-router-af)# af-interface tunnel 0 Hub(config-router-af-interface)# no split-horizon |
再次到两个分支站点间查看 EIGRP 路由
Spoke-1# show ip route eigrp | be Gateway D 10.0.0.0/16 [90/76800640] via 172.16.1.100, 00:20:19, Tunnel0 D 10.2.0.0/16 [90/102400640] via 172.16.1.100, 00:02:49, Tunnel0 -------------------------------------------------------------------------------------------------- Spoke-2# show ip route eigrp | be Gateway D 10.0.0.0/16 [90/76800640] via 172.16.1.100, 00:20:49, Tunnel0 D 10.1.0.0/16 [90/102400640] via 172.16.1.100, 00:03:37, Tunnel0 -------------------------------------------------------------------------------------------------- 关闭水平分割后,分支站点互相学习到了对方内网的路由,由于是第一阶段,所以下一跳为中心站点 |
路由优化
由于第一阶段支持 Hub 端的路由汇总,用于优化 Spoke 节点的路由 -------------------------------------------------------------------------------------------------- Hub(config)# router eigrp ccie Hub(config-router)# address-family ipv4 unicast autonomous-system 90 Hub(config-router-af)# af-interface tunnel 0 Hub(config-router-af-interface)# summary-address 10.0.0.0 255.0.0.0 -------------------------------------------------------------------------------------------------- Spoke-1# show ip route eigrp | be Gateway D 10.0.0.0/8 [90/76800640] via 172.16.1.100, 00:01:06, Tunnel0 -------------------------------------------------------------------------------------------------- Spoke-2# show ip route eigrp | be Gateway D 10.0.0.0/8 [90/76800640] via 172.16.1.100, 00:01:11, Tunnel0 分支站点只有一条通过中心站点下放的汇总路由 |
网络连通性测试
Spoke-1# ping 10.0.0.1 source loop1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms Spoke-1# ping 10.2.2.2 source loop1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.2.2.2, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms Spoke-1# traceroute 10.2.2.2 source loop1 Type escape sequence to abort. Tracing the route to 10.2.2.2 VRF info: (vrf in name/id, vrf out name/id) 1 172.16.1.100 0 msec 0 msec 0 msec 2 172.16.1.2 1 msec * 1 msec |
DMVPN 第二阶段配置
要点:
Phase 2:Spoke-to-Spoke,虚拟网状拓扑
- 由于第二阶段支持Spoke之间按需建立虚拟隧道,所以所有站点都要配置 mGRE 隧道
- tunnel mode gre multipoint
- ip nhrp nhs 172.16.1.100 nbma 12.1.1.100 multicast
- ip nhrp map 172.16.1.100 12.1.1.100
- ip nhp map multicast 12.1.1.100
- ip nhrp nhs 172.16.1.100
- 两个 Spoke 站点之间如何动态建立隧道
- 首先根据路由表下一跳(spoke节点overlay地址)触发该通信需要建立动态虚拟隧道
- 建立隧道之前,首先要知道对方 spoke 站点的 underlay 和 overlay 地址
- 发起方 spoke 发送 nhrp 解析请求给 hub,该请求包含对方 spoke 站点的 overlay 地址
- hub 把请求转发给 destination spoke
- destination spoke 直接将自己的 underlay 地址发送给发起方 spoke
- 发起方 spoke 知道了对方的 underlay 和 overlay 地址映射关系后,隧道建立完成
- Overlay 使用 EIGRP 动态路由协议的注意事项
- no ip split-horizon eigrp xx
- no ip next-hop-self eigrp xx
- 学到明细路由的下一跳地址保持不变
- 产生该路由的Spoke节点的overlay地址,不会被hub替换掉
- 下一跳地址为上一个发送该路由的路由器地址(发送该路由的Spoke节点overlay地址)
拓扑
同第一阶段拓扑
基本配置
同第一阶段,略
mGRE 和 NHRP 配置
Hub interface Tunnel0 ip address 172.16.1.100 255.255.255.0 ip nhrp authentication ccie //可选配置,激活NHRP认证,密钥为 ccie ip nhrp network-id 1 //nhrp开关,network-id 本地有效,建议所有站点相同 ip nhrp map multicast dynamic //Hub端建立动态接收 nhrp 的组播映射,默认配置(不显示) tunnel source Ethernet0/0 tunnel mode gre multipoint //配置隧道模式为多点 GRE tunnel key 123 //配置隧道密钥为 123 end -------------------------------------------------------------------------------------------------- Spoke-1 interface Tunnel0 ip address 172.16.1.1 255.255.255.0 ip nhrp authentication ccie ip nhrp map 172.16.1.100 12.1.1.100 ip nhrp map multicast 12.1.1.100 ip nhrp network-id 1 //nhrp开关,network-id 本地有效,建议所有站点相同 ip nhrp nhs 172.16.1.100 //该配置定义了 NHRP 服务器地址为中心站点的隧道接口虚拟地址 tunnel source Ethernet0/0 tunnel mode gre multipoint tunnel key 123 end -------------------------------------------------------------------------------------------------- Spoke-2 interface Tunnel0 ip address 172.16.1.2 255.255.255.0 ip nhrp authentication ccie ip nhrp map 172.16.1.100 12.1.1.100 ip nhrp map multicast 12.1.1.100 ip nhrp network-id 1 ip nhrp nhs 172.16.1.100 tunnel source Ethernet0/0 tunnel mode gre multipoint tunnel key 123 end -------------------------------------------------------------------------------------------------- Spoke-1(config-if)# ip nhrp map 172.16.1.100 12.1.1.100 //手动配置 nhrp 映射,映射中心站点的隧道虚拟 IP 地址(172.16.1.100)到中心站点的公网 IP 地址(12.1.1.100)。有了这个映射,分支站点才能访问中心站点。由于分支站点间没有配置组播映射,所以分支站点间没有动态路由协议的邻居关系 Spoke-1(config-if)# ip nhrp map multicast 12.1.1.100 //映射组播到中心站点的公网 IP 地址(12.1.1.100),告诉Spoke路由器发送组播目的 IP 地址封装12.1.1.100 |
EIGRP配置
Hub router eigrp ccie ! address-family ipv4 unicast autonomous-system 90 ! af-interface Tunnel0 no next-hop-self no split-horizon exit-af-interface ! topology base exit-af-topology network 10.0.0.0 0.0.255.255 network 172.16.1.100 0.0.0.0 exit-address-family -------------------------------------------------------------------------------------------------- Spoke-1 router eigrp ccie ! address-family ipv4 unicast autonomous-system 90 ! topology base exit-af-topology network 10.1.0.0 0.0.255.255 network 172.16.1.1 0.0.0.0 exit-address-family -------------------------------------------------------------------------------------------------- Spoke-2 router eigrp ccie ! address-family ipv4 unicast autonomous-system 90 ! topology base exit-af-topology network 10.2.0.0 0.0.255.255 network 172.16.1.2 0.0.0.0 exit-address-family Spoke-1# show ip route eigrp | be Gateway D 10.0.0.0/16 [90/76800640] via 172.16.1.100, 00:01:27, Tunnel0 D 10.2.0.0/16 [90/102400640] via 172.16.1.2, 00:01:27, Tunnel0 //由于Hub端关闭了水平分割,学到了对方Spoke节点内网路由;关闭了next-hop-self,下一跳为对方spoke节点overlay地址 |
验证
Spoke-1# ping 10.2.2.2 source loop1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.2.2.2, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms Spoke-1# show ip nhrp 172.16.1.1/32 via 172.16.1.1 Tunnel0 created 00:00:10, expire 00:09:49 Type: dynamic, Flags: router unique local NBMA address: 23.1.1.1 (no-socket) 172.16.1.2/32 via 172.16.1.2 Tunnel0 created 00:00:10, expire 00:09:49 Type: dynamic, Flags: router nhop ------------- 动态建立隧道 NBMA address: 24.1.1.1 172.16.1.100/32 via 172.16.1.100 Tunnel0 created 00:20:50, never expire Type: static, Flags: used NBMA address: 12.1.1.100 -------------------------------------------------------------------------------------------------- Spoke-2# show ip nhrp 172.16.1.1/32 via 172.16.1.1 Tunnel0 created 00:01:08, expire 00:08:51 Type: dynamic, Flags: router nhop ------------- 动态建立隧道 NBMA address: 23.1.1.1 172.16.1.2/32 via 172.16.1.2 Tunnel0 created 00:01:08, expire 00:08:51 Type: dynamic, Flags: router unique local NBMA address: 24.1.1.1 (no-socket) 172.16.1.100/32 via 172.16.1.100 Tunnel0 created 00:16:40, never expire Type: static, Flags: used NBMA address: 12.1.1.100 Spoke-2# show ip nhrp multicast I/F NBMA address Tunnel0 12.1.1.100 Flags: static (Enabled) Spoke-2# show dmvpn Legend: Attrb --> S - Static, D - Dynamic, I - Incomplete N - NATed, L - Local, X - No Socket T1 - Route Installed, T2 - Nexthop-override C - CTS Capable, I2 - Temporary # 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:Spoke, NHRP Peers:2, # Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb ----- --------------- --------------- ----- -------- ----- 1 23.1.1.1 172.16.1.1 UP 00:01:22 D 1 12.1.1.100 172.16.1.100 UP 00:16:53 S -------------------------------------------------------------------------------------------------- Spoke-1# traceroute 10.2.2.2 source loopback 1 Type escape sequence to abort. Tracing the route to 10.2.2.2 VRF info: (vrf in name/id, vrf out name/id) 1 172.16.1.2 1 msec * 0 msec //Spoke之间建立了虚拟隧道,直接进行通信,无需hub中转 |
DMVPN 第三阶段配置
要点:
- 解决了第二阶段的不足:hub端不支持路由汇总,在一个大型网络,会对路由表造成负担
- 第三阶段:结合了第一阶段的优点(hub端路由汇总)和第二阶段的优点(Spoke间动态建立隧道)
- 当hub端收到了一个U型流量(从一个接口接收的流量又从该接口发送出去),感知到即将发生一个Spoke间通信,帮助Spoke间动态建立隧道,告诉spoke你可以建立一个直连隧道,无需再经过hub中转,告诉spoke你有一个更好的下一跳而不是我
- 第三阶段无需关闭next-hop-self功能,而水平分割问题根据拓扑决定(通常关闭)
- 告诉spoke最优的下一跳方法:
- 在spoke上直接添加一条到达远端spoke overlay地址的路由;或通过IGP学到汇总路由,但没有到达远端的明细路由,Spoke节点间直连隧道建立后,会通过NHRP产生一条到达远端的明细路由
- 对本地路由表里已经存在的到达远端站点的路由(下一跳指向hub的路由)直接overrides(next hop override),show ip route里显示%,show ip cef 可以看到真正的下一跳,或show ip route next hop override,以上都是本地有效
- 将NHRP看成一个路由协议,在spoke节点的路由表里自动产生一条NHRP路由,下一跳是远端Spoke节点的overlay地址
- DMVPN Phase 3 NHRP Shortcut Switching Enhancements
- Hub节点:ip nhrp redirect
- Spoke节点:ip nhrp shortcut(默认配置,show run 无法看到)
拓扑
配置
基本配置
Hub interface Loopback100 ip address 10.0.0.1 255.255.0.0 ! interface Ethernet0/0 ip address 12.1.1.100 255.255.255.0 ! ip route 0.0.0.0 0.0.0.0 12.1.1.2 Spoke-1 interface Loopback1 ip address 10.1.1.1 255.255.0.0 ! interface Ethernet0/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 Spoke-2 interface Loopback1 ip address 10.2.2.2 255.255.0.0 ! interface Loopback2 ip address 192.168.2.2 255.255.255.0 ! interface Ethernet0/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 |
mGRE和NHRP配置
Hub节点
Hub(config)# interface tunnel 0 Hub(config-if)# ip address 172.16.1.100 255.255.255.0 Hub(config-if)# tunnel mode gre multipoint Hub(config-if)# tunnel source ethernet 0/0 Hub(config-if)# tunnel key 123 Hub(config-if)# ip nhrp network-id 100 Hub(config-if)# ip nhrp authentication cisco Hub(config-if)# ip nhrp map multicast dynamic Hub(config-if)# ip nhrp redirect |
Spoke-1节点
Spoke-1(config)# interface tunnel 0 Spoke-1(config-if)# ip add 172.16.1.1 255.255.255.0 Spoke-1(config-if)# tunnel mode gre multipoint Spoke-1(config-if)# tunnel source ethernet 0/0 Spoke-1(config-if)# tunnel key 123 Spoke-1(config-if)# ip nhrp network-id 100 Spoke-1(config-if)# ip nhrp authentication cisco Spoke-1(config-if)# ip nhrp map 172.16.1.100 12.1.1.100 Spoke-1(config-if)# ip nhrp map multicast 12.1.1.100 Spoke-1(config-if)# ip nhrp nhs 172.16.1.100 Spoke-1(config-if)# ip nhrp shortcut |
Spoke-2节点
Spoke-2(config)# interface tunnel 0 Spoke-2(config-if)# ip add 172.16.1.2 255.255.255.0 Spoke-2(config-if)# tunnel mode gre multipoint Spoke-2(config-if)# tunnel source ethernet 0/0 Spoke-2(config-if)# tunnel key 123 Spoke-2(config-if)# ip nhrp network-id 100 Spoke-2(config-if)# ip nhrp authentication cisco Spoke-2(config-if)# ip nhrp nhs 172.16.1.100 nbma 12.1.1.100 multicast Spoke-2(config-if)# ip nhrp shortcut |
EIGRP配置
Hub Hub(config)# router eigrp ccie Hub(config-router)# address-family ipv4 unicast autonomous-system 90 Hub(config-router-af)# network 172.16.1.100 0.0.0.0 Hub(config-router-af)# network 10.0.0.0 0.0.255.255 Hub(config-router-af)# af-interface tunnel 0 Hub(config-router-af-interface)# no split-horizon Hub(config-router-af-interface)# summary-address 10.0.0.0 255.0.0.0 Hub(config-router-af-interface)# end -------------------------------------------------------------------------------------------------- Spoke-1 Spoke-1(config)# router eigrp 90 Spoke-1(config-router)# network 172.16.1.1 0.0.0.0 Spoke-1(config-router)# network 10.1.0.0 0.0.255.255 Spoke-1(config-router)# end -------------------------------------------------------------------------------------------------- Spoke-2 Spoke-2(config)# router eigrp 90 Spoke-2(config-router)# network 172.16.1.2 0.0.0.0 Spoke-2(config-router)# network 10.2.0.0 0.0.255.255 Spoke-2(config-router)# network 192.168.2.0 0.0.0.255 Spoke-2(config-router)# end |
路由分析
Spoke-1# show ip route | be Gateway Gateway of last resort is 23.1.1.2 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 23.1.1.2 10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks D 10.0.0.0/8 [90/26880032] via 172.16.1.100, 00:01:12, Tunnel0 C 10.1.0.0/16 is directly connected, Loopback1 L 10.1.1.1/32 is directly connected, Loopback1 23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks C 23.1.1.0/24 is directly connected, Ethernet0/0 L 23.1.1.1/32 is directly connected, Ethernet0/0 172.16.0.0/16 is variably subnetted, 2 subnets, 2 masks C 172.16.1.0/24 is directly connected, Tunnel0 L 172.16.1.1/32 is directly connected, Tunnel0 D 192.168.2.0/24 [90/28288000] via 172.16.1.100, 00:00:33, Tunnel0 -------------------------------------------------------------------------------------------------- Spoke-1# ping 10.2.2.2 source loop1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.2.2.2, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms -------------------------------------------------------------------------------------------------- icmp流量(10.2.2.2)自动触发两个Spoke之间隧道建立
Spoke-1# show ip nhrp 10.1.0.0/16 via 172.16.1.1 Tunnel0 created 00:00:02, expire 00:09:57 Type: dynamic, Flags: router unique local NBMA address: 23.1.1.1 (no-socket) 10.2.0.0/16 via 172.16.1.2 Tunnel0 created 00:00:02, expire 00:09:57 Type: dynamic, Flags: router rib NBMA address: 24.1.1.1 172.16.1.2/32 via 172.16.1.2 Tunnel0 created 00:00:02, expire 00:09:57 Type: dynamic, Flags: router nhop rib NBMA address: 24.1.1.1 172.16.1.100/32 via 172.16.1.100 Tunnel0 created 00:26:56, never expire Type: static, Flags: used NBMA address: 12.1.1.100 -------------------------------------------------------------------------------------------------- 隧道建立之后查看Spoke-1的路由表如下 -------------------------------------------------------------------------------------------------- Spoke-1# ping 192.168.2.2 source loop1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms -------------------------------------------------------------------------------------------------- icmp流量(192.168.2.2)自动触发两个Spoke之间隧道建立 Spoke-1#show ip nhrp | be 192 192.168.2.0/24 via 172.16.1.2 Tunnel0 created 00:00:18, expire 00:09:41 Type: dynamic, Flags: router rib nho NBMA address: 24.1.1.1 -------------------------------------------------------------------------------------------------- 隧道建立之后查看Spoke-1的路由表如下 -------------------------------------------------------------------------------------------------- CEF表里也可以看到真正的下一跳 Spoke-1#show ip cef | in 192 192.168.2.0/24 172.16.1.2 Tunnel0 -------------------------------------------------------------------------------------------------- 报文转发路径,下一跳直接为Spoke节点overlay地址 Spoke-1#traceroute 192.168.2.2 source loop1 Type escape sequence to abort. Tracing the route to 192.168.2.2 VRF info: (vrf in name/id, vrf out name/id) 1 172.16.1.2 1 msec * 1 msec |