hale
Published on 2026-06-02 / 2 Visits
0
0

基于IPv6和域名解析的IKEv2 DMVPN实战部署

前言

DMVPN(Dynamic Multipoint VPN)是 Cisco 经典的动态多点 VPN 方案,大多数资料都以 IPv4 作为底层承载网络。本文记录一次完全基于 IPv6 公网地址、并通过域名动态解析来组建 DMVPN 的实验过程。相比传统 IPv4 方案,该设计省去了 NAT 穿越的困扰,且域名解析机制让 Spoke 无需硬编码 Hub 的 IPv6 地址,配置更灵活。

实验的 IKE 版本选用 IKEv2,加密套件使用 AES-GCM-256,密钥交换采用 DH Group 19(ECP-256)

实验拓扑

                  +----------+
                  |   Hub    |
                  | C8000V   |
                  | .254     |  Tunnel200: 172.16.200.0/24
                  +----+-----+
                       |
        IPv6 Internet  |  GRE over IPv6 (mGRE)
                       |
          +------------+------------+
          |                         |
     +----+-----+             +----+-----+
     |  Spoke1  |             |  Spoke2  |
     |  C8000V  |             |  C8000V  |
     |   .1     |             |   .2     |
     +----------+             +----------+

Hub  IPv6: 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD  (nj-home.wuhao.net.cn)
Spoke1 IPv6: 240E:3A1:620:80A3:250:56FF:FE91:FF24
Spoke2 IPv6: 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064

OSPF Area 0 在 Tunnel 接口上运行,实现路由动态学习
Hub   Loopback2: 10.255.1.1/32   (Router-ID: 10.255.0.1)
Spoke1 Loopback2: 2.2.2.2/32     (Router-ID: 10.255.0.2)
Spoke2 Loopback2: 3.3.3.3/32     (Router-ID: 10.255.0.3)

设备信息:

角色

平台

版本

物理接口 IPv4

物理接口 IPv6(NBMA)

Hub

C8000V

IOS XE 17.09.07a

192.168.50.215/24 (DHCP)

240E:3AF:872:94B0:BE24:11FF:FE6A:40BD

Spoke1

C8000V

IOS XE 17.06.07

192.168.188.53/24 (DHCP)

240E:3A1:620:80A3:250:56FF:FE91:FF24

Spoke2

C8000V

IOS XE 17.06.07

192.168.100.146/24 (DHCP)

2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064

核心设计要点

1. IPv6 作为底层承载(Underlay)

传统的 DMVPN 使用 IPv4 公网地址作为 NBMA 地址。本实验全部三台路由器的公网接口(GigabitEthernet1)均通过 SLAAC 获取 IPv6 全球单播地址,GRE 隧道封装在 IPv6 之上:

interface Tunnel200
 tunnel mode gre multipoint ipv6     # 关键:mGRE over IPv6
 tunnel source GigabitEthernet1       # 源接口通过 SLAAC 获取 IPv6

IKEv2 和 IPsec 的通信对端也都是 IPv6 地址,所有 ISAKMP 和 ESP 报文封装在 IPv6 中传输。

2. 域名方式发现 Hub(NHS)

这是本实验最特别的设计。传统 DMVPN 中,Spoke 的 NHS 配置通常是硬编码的 IPv4/IPv6 地址:

! 传统方式
ip nhrp nhs 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD

而本实验中,Spoke 通过域名指定 NHS,由路由器在运行时做 DNS 解析:

! Spoke1 和 Spoke2 上的配置
ip host nj-home.wuhao.net.cn 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD
!
interface Tunnel200
 ip nhrp nhs dynamic nbma nj-home.wuhao.net.cn multicast

dynamic nbma 关键字表示 NBMA 地址通过 DNS 动态解析获得。这意味着如果 Hub 的 IPv6 地址发生变更,只需更新 DNS 记录(以及路由器上的静态 host 映射),无需修改 NHRP 配置本身。在多 Hub 场景下,还可以结合 DNS 轮询实现负载分担。

3. Hub 作为 NHRP 服务器和 OSPF DR

Hub 的特殊配置:

interface Tunnel200
 ip nhrp server-only          # 仅作为服务器,不学习其他 NHS
 ip nhrp redirect             # 启用 NHRP 重定向,支持 Spoke-to-Spoke 捷径
 ip ospf priority 255         # 确保 Hub 成为 OSPF DR(广播网络类型)

OSPF 网络类型设为 broadcast,Hub 的优先级设为 255 确保它总是 DR,Spoke 优先级设为 0 不参与 DR 选举。这样设计的原因是 mGRE 网络中 Hub 是中心节点,作为 DR 可以确保 LSA 的可靠泛洪。

配置详解

Hub 配置

IKEv2 配置

crypto ikev2 proposal IKEV2-PROPOSAL
 encryption aes-gcm-256          # 加密算法
 prf sha256 sha384               # 伪随机函数
 group 19                        # DH Group 19 (ECP-256)

crypto ikev2 policy IKEV2-POLICY
 proposal IKEV2-PROPOSAL

crypto ikev2 keyring DMVPN-KEYRING
 peer DMVPN
  address ::/0                   # 匹配所有 IPv6 对端
  pre-shared-key Cisco123

crypto ikev2 profile DMVPN-PROFILE-V6
 match identity remote address ::/0
 authentication remote pre-share
 authentication local pre-share
 keyring local DMVPN-KEYRING

crypto ikev2 dpd 30 5 on-demand  # DPD 保活

值得注意的点:

  • address ::/0 匹配所有 IPv6 地址,使得 Spoke 可以动态加入,无需在 Hub 上逐一添加 Spoke 的地址

  • IKEv2 Profile 中的 match identity remote address ::/0 同样使用通配匹配,适合 Spoke 地址不固定的场景

IPsec 配置

crypto ipsec transform-set DMVPN-TS esp-gcm 256
 mode transport                    # 传输模式,避免额外封装开销

crypto ipsec profile DMVPN-IPSEC-V6
 set transform-set DMVPN-TS
 set ikev2-profile DMVPN-PROFILE-V6

DMVPN 中使用 transport mode 而非 tunnel mode,因为 GRE 已经提供了隧道封装,IPsec 只需保护 GRE 载荷即可,避免双重隧道头的额外开销。

Tunnel 接口配置

interface Tunnel200
 ip address 172.16.200.254 255.255.255.0
 ip mtu 1380                         # 预留 GRE+IPsec 封装开销
 ip nhrp authentication Cisco123
 ip nhrp network-id 200
 ip nhrp holdtime 360
 ip nhrp server-only
 ip nhrp redirect
 ip tcp adjust-mss 1340
 ip ospf network broadcast
 ip ospf hello-interval 2
 ip ospf priority 255
 ip ospf mtu-ignore
 ip ospf 1 area 0
 tunnel source GigabitEthernet1
 tunnel mode gre multipoint ipv6      # mGRE over IPv6
 tunnel key 200
 tunnel path-mtu-discovery
 tunnel protection ipsec profile DMVPN-IPSEC-V6

MTU/MSS 参数说明:

  • ip mtu 1380:IPv6 头(40)+ GRE 头(4-24)+ IPsec ESP 头(约 56)+ 内部 IP 头(20)= 约 120 字节开销,1380 + 120 = 1500

  • ip tcp adjust-mss 1340:在 TCP 三次握手时动态调整 MSS,避免分片

Spoke 配置(以 Spoke1 为例)

Spoke 的 IKEv2 和 IPsec 配置与 Hub 完全一致,差异主要在 Tunnel 接口:

ip host nj-home.wuhao.net.cn 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD

interface Tunnel200
 ip address 172.16.200.1 255.255.255.0
 ip mtu 1380
 ip nhrp authentication Cisco123
 ip nhrp network-id 200
 ip nhrp holdtime 360
 ip nhrp nhs dynamic nbma nj-home.wuhao.net.cn multicast    # 域名方式指定 NHS
 ip nhrp redirect
 ip tcp adjust-mss 1340
 ip ospf network broadcast
 ip ospf hello-interval 2
 ip ospf priority 0                     # Spoke 不参与 DR 选举
 ip ospf mtu-ignore
 ip ospf 1 area 0
 tunnel source GigabitEthernet1
 tunnel mode gre multipoint ipv6
 tunnel key 200
 tunnel path-mtu-discovery
 tunnel protection ipsec profile DMVPN-IPSEC-V6

Spoke2 配置与 Spoke1 类似,Tunnel 地址为 172.16.200.2/24,Loopback2 为 3.3.3.3/32。

OSPF 路由配置

所有节点上:

router ospf 1
 router-id 10.255.0.X
 passive-interface default             # 默认所有接口不发送 OSPF Hello
 no passive-interface Tunnel200        # 仅在 Tunnel 接口启用 OSPF

通过 passive-interface default 限制 OSPF 只在 Tunnel 网络运行,避免在公网侧接口建立不必要的邻居关系。

验证与分析

1. IKEv2 SA 状态

Hub 上的 IKEv2 SA(两个 Spoke 均已接入):

Hub# show crypto ikev2 sa

 IPv6 Crypto IKEv2 SA

Tunnel-id    fvrf/ivrf              Status
2          none/none             READY
Local  240E:3AF:872:94B0:BE24:11FF:FE6A:40BD/500
Remote 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064/500
      Encr: AES-GCM, keysize: 256, PRF: SHA256, Hash: None,
      DH Grp:19, Auth sign: PSK, Auth verify: PSK

Tunnel-id    fvrf/ivrf              Status
1          none/none             READY
Local  240E:3AF:872:94B0:BE24:11FF:FE6A:40BD/500
Remote 240E:3A1:620:80A3:250:56FF:FE91:FF24/500
      Encr: AES-GCM, keysize: 256, PRF: SHA256, Hash: None,
      DH Grp:19, Auth sign: PSK, Auth verify: PSK

可以看到 Hub 与两个 Spoke 分别建立了独立的 IKEv2 SA,状态均为 READY,会话参数完全一致:AES-GCM-256 加密、SHA256 伪随机函数、DH Group 19、PSK 认证。IKE SA 的生命周期为 86400 秒(24 小时)。

Spoke1 上的 IKEv2 SA(一次 Spoke-to-Spoke 通信后):

Spoke1# show crypto ikev2 sa

Tunnel-id    fvrf/ivrf              Status
2          none/none             READY
Local  240E:3A1:620:80A3:250:56FF:FE91:FF24/500
Remote 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064/500    ← 与 Spoke2 的直接隧道

Tunnel-id    fvrf/ivrf              Status
1          none/none             READY
Local  240E:3A1:620:80A3:250:56FF:FE91:FF24/500
Remote 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD/500      ← 与 Hub 的隧道

Spoke1 上同时存在两条 IKEv2 SA:一条是与 Hub 的(始终存在),另一条是与 Spoke2 的(触发式按需建立)。这就是 DMVPN Phase 3 的核心特征——Spoke-to-Spoke 动态隧道。

2. IPsec SA 状态

Hub# show crypto ipsec sa

interface: Tunnel200
    Crypto map tag: Tunnel200-head-0,
    local addr 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD

  protected vrf: (none)
  local  ident (addr/mask/prot/port):
    (240E:3AF:872:94B0:BE24:11FF:FE6A:40BD/128/47/0)
  remote ident (addr/mask/prot/port):
    (2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064/128/47/0)

     inbound esp sas:
      spi: 0x6D1F1F30
        transform: esp-gcm 256,
        in use settings ={Transport, }
        sa timing: remaining key lifetime (k/sec): (4607989/3480)
        Status: ACTIVE(ACTIVE)

     outbound esp sas:
      spi: 0x703408D0
        transform: esp-gcm 256,
        in use settings ={Transport, }
        Status: ACTIVE(ACTIVE)

ESP 使用 GCM-256 认证加密,传输模式(Transport),SA 状态均为 ACTIVE。prot 47 表明保护的是 GRE 协议流量。

3. NHRP 表项

Hub 上的 NHRP:

Hub# show ip nhrp
172.16.200.1/32 via 172.16.200.1
   Type: dynamic, Flags: registered nhop
   NBMA address: 240E:3A1:620:80A3:250:56FF:FE91:FF24
172.16.200.2/32 via 172.16.200.2
   Type: dynamic, Flags: registered nhop
   NBMA address: 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064

Hub# show dmvpn
Interface: Tunnel200, IPv4 NHRP Details
Type:Hub, NHRP Peers:2,

 # Ent  Peer NBMA Addr                     Peer Tunnel Addr State  UpDn Tm Attrb
 ----- ----------------------------------- --------------- ----- -------- -----
     1  240E:3A1:620:80A3:250:56FF:FE91:FF24  172.16.200.1  UP    00:03:01  D
     1  2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064 172.16.200.2  UP    00:02:10  D

Hub 作为 NHRP 服务器,维护了两个 Spoke 的动态注册信息。每个 Spoke 的 NBMA 地址都是其 IPv6 全球单播地址。

Spoke1 上的 NHRP(静态 + 动态):

Spoke1# show ip nhrp
172.16.200.254/32 via 172.16.200.254
   Type: static, Flags:
   NBMA address: 240E:3AF:872:94B0:BE24:11FF:FE6A:40BD (nj-home.wuhao.net.cn)
172.16.200.2/32 via 172.16.200.2
   Type: dynamic, Flags: router nhop
   NBMA address: 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064

NHRP 表中有两条记录:

  • Hub(172.16.200.254)是静态条目,通过域名 nj-home.wuhao.net.cn 解析得到的 IPv6 地址。Flags 中显示域名信息。

  • Spoke2(172.16.200.2)是动态条目,在 Spoke1 首次访问 3.3.3.3(Spoke2 的 Loopback)时通过 NHRP 解析获取。

router nhop 标志表示该条目是通过 NHRP Redirect 学习到的,用于 Spoke-to-Spoke 直接通信,下一跳是 Spoke2 的 Tunnel 地址而非 Hub。

4. 路由表验证

Hub 的路由表:

Hub# show ip route

O    2.2.2.2 [110/1001] via 172.16.200.1, 00:02:37, Tunnel200
O    3.3.3.3 [110/1001] via 172.16.200.2, 00:01:46, Tunnel200
C    10.255.1.1 is directly connected, Loopback2
C    172.16.200.0/24 is directly connected, Tunnel200

Spoke2 的路由表:

Spoke2# show ip route

O    2.2.2.2 [110/1001] via 172.16.200.1, 00:03:44, Tunnel200
C    3.3.3.3 is directly connected, Loopback2
O    10.255.1.1 [110/1001] via 172.16.200.254, 00:03:44, Tunnel200
C    172.16.200.0/24 is directly connected, Tunnel200

所有路由均通过 OSPF 学习,Metric 为 1001(到 Loopback 接口的默认开销 + 1000)。Tunnel 接口被 OSPF 视为广播网络,各节点通过 Hub(DR)交换 LSA。

5. 连通性测试

Spoke1 访问 Spoke2 的 Loopback(首次触发 NHRP 解析):

Spoke1# ping 3.3.3.3 source lo2
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/20/21 ms

Spoke2 访问 Spoke1 的 Loopback:

Spoke2# ping 2.2.2.2 source 3.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 17/17/19 ms

两端互通,延迟稳定在 17-21ms,说明 Spoke1 和 Spoke2 之间已建立直接的 IPsec 隧道。

Spoke-to-Spoke 动态隧道建立过程

DMVPN Phase 3 最精彩的部分是 Spoke 之间的直接隧道建立。以 Spoke1 ping Spoke2(3.3.3.3)为例,完整流程如下:

Step 1: Spoke1 查路由表,发现 3.3.3.3 的下一跳是 172.16.200.2(Spoke2 的 Tunnel 地址)
Step 2: Spoke1 查 NHRP 表,172.16.200.2 没有对应条目
Step 3: Spoke1 向 Hub(NHS)发送 NHRP Resolution Request:
        "谁是 172.16.200.2?"
Step 4: Hub 查 NHRP 表,回复 NHRP Resolution Reply:
        "172.16.200.2 的 NBMA 地址是 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064"
Step 5: Spoke1 与 2408:823C:8B8D:CE4:BE24:11FF:FEC8:1064 发起 IKEv2 协商
Step 6: IKEv2 SA 和 IPsec SA 建立成功(独立的隧道,不经 Hub)
Step 7: 数据流直接在 Spoke1 ↔ Spoke2 之间传输

从 Spoke1 的验证输出来看,ping 发起后:

  • NHRP 表中新增了一条到 Spoke2 的动态条目

  • IKEv2 SA 中新增了与 Spoke2 的会话(Tunnel-id 2,Active Time: 7 sec)

  • DMVPN 表中 Peer 数从 1 变为 2

安全参数总结

参数

配置值

IKE 版本

IKEv2

加密算法

AES-GCM-256

伪随机函数

SHA256 / SHA384

DH 组

Group 19 (ECP-256)

认证方式

预共享密钥 (PSK)

IPsec 模式

Transport

IPsec 协议

ESP

DPD

30 秒间隔,5 次重试,按需

总结

本实验展示了基于 IPv6 的 IKEv2 DMVPN 的几个关键技术点:

  1. IPv6 作为 Underlay:使用 tunnel mode gre multipoint ipv6 在 IPv6 公网上运行 mGRE,避免了 IPv4 NAT 穿越问题。

  2. 域名动态解析:通过 ip nhrp nhs dynamic nbma <FQDN> 实现 NHS 的域名指定,使 Hub 地址变更时配置更加灵活。

  3. IKEv2 + AES-GCM-256:使用现代加密标准,GCM 模式同时提供加密和完整性校验,相比传统的 AES-CBC + HMAC 组合更高效。

  4. Spoke-to-Spoke 直接通信:借助 NHRP Redirect 和 NHRP Resolution 机制,Spoke 之间可以动态建立直连隧道,流量无需绕行 Hub。

这种架构适合 Spoke 分布在运营商 IPv6 宽带下的场景——如家庭办公、门店互联等,无需固定的公网 IPv4 地址,也无需担心 NAT 对 IPsec 的影响。


实验环境:Cisco C8000V (IOS XE 17.06.07 / 17.09.07a),2026 年 6 月


Comment