コンテンツにスキップ

Cisco機器でDMVPN Phase 2を設定する

Cisco IOS / IOS XE ルータ 3 台で、IKEv2 PSK により保護された DMVPN Phase 2 を構成する。

DMVPN の mGRE、NHRP、Phase の違いは DMVPNの仕組みとPhase 1・2・3、IKEv2 / IPsec の各設定要素は Cisco IOSのIPsec設定要素 を参照する。


  • Hub 1 台と Spoke 2 台で DMVPN cloud を作る。
  • 全ルータで mGRE を使用する。
  • Hub-Spoke の NHRP 登録を確立する。
  • routing protocol が remote Spoke の Tunnel address を next hop として広告する。
  • NHRP Resolution により remote Spoke の NBMA address を学習する。
  • Spoke 間のデータを Hub 経由にせず直接転送する。
  • EIGRP または OSPF で各拠点 LAN を広告する。

flowchart TB
    hub["Hub / NHS / mGRE<br/>Tunnel0: 10.255.0.1<br/>NBMA: 203.0.113.2"]

    subgraph dataPath[" "]
        direction LR
        lan1["Spoke1 LAN<br/>192.168.1.0/24"]
        spoke1["Spoke1 / mGRE<br/>Tunnel0: 10.255.0.11<br/>NBMA: 198.51.100.2"]
        spoke2["Spoke2 / mGRE<br/>Tunnel0: 10.255.0.12<br/>NBMA: 192.0.2.2"]
        lan2["Spoke2 LAN<br/>192.168.2.0/24"]

        lan1 --- spoke1
        spoke1 ==>|"NHRP解決後のデータは直接転送"| spoke2
        spoke2 --- lan2
    end

    spoke1 -.-|"NHRP登録・解決"| hub
    spoke2 -.-|"NHRP登録・解決"| hub
    style dataPath fill:none,stroke:none

Spoke は自分の Tunnel / NBMA mapping を Hub / NHS へ登録する。Spoke1 が Spoke2 LAN の経路を学習した時点で、routing table の next hop は Spoke2 の 10.255.0.12 になる。

Spoke1 は Hub へ NHRP Resolution Request を送り、10.255.0.12 -> 192.0.2.2 を解決する。解決後のデータは Spoke2 へ直接送られ、Hub はデータ転送経路にならない。Phase 3 のように最初のデータを Hub が転送して NHRP Redirect を返す方式ではない。


項目 Hub Spoke1 Spoke2
機器 Cisco IOS / IOS XE ルータ Cisco IOS / IOS XE ルータ Cisco IOS / IOS XE ルータ
WANインターフェース GigabitEthernet0/0 GigabitEthernet0/0 GigabitEthernet0/0
NBMAアドレス 203.0.113.2/30 198.51.100.2/30 192.0.2.2/30
Underlay next hop 203.0.113.1 198.51.100.1 192.0.2.1
LANインターフェース GigabitEthernet0/1 GigabitEthernet0/1 GigabitEthernet0/1
LAN側アドレス 192.168.0.1/24 192.168.1.1/24 192.168.2.1/24
Tunnelインターフェース Tunnel0 Tunnel0 Tunnel0
Tunnelアドレス 10.255.0.1/24 10.255.0.11/24 10.255.0.12/24
Router ID 1.1.1.1 2.2.2.2 3.3.3.3
IKEバージョン IKEv2 IKEv2 IKEv2
認証方式 PSK PSK PSK
PSK ChangeMe-StrongKey ChangeMe-StrongKey ChangeMe-StrongKey

WAN / LAN インターフェースの IP アドレスと underlay route は設定済みで、3 台の NBMA アドレスが相互到達可能であることを前提とする。各ルータには、上表の underlay next hop を向く default route または remote NBMA アドレスへの経路が必要である。Phase 2 の直接 peer には Spoke 間の underlay 到達性も必要になる。

Hub で確認する。

ping 198.51.100.2 source GigabitEthernet0/0
ping 192.0.2.2 source GigabitEthernet0/0

Spoke1 で確認する。

ping 203.0.113.2 source GigabitEthernet0/0
ping 192.0.2.2 source GigabitEthernet0/0

Spoke2 で確認する。

ping 203.0.113.2 source GigabitEthernet0/0
ping 198.51.100.2 source GigabitEthernet0/0

以下のコマンドは Cisco IOS / IOS XE の構文に基づく。利用する IOS image により使える暗号方式や細部のキーワードが異なるため、投入前に ? で確認する。



1. IKEv2とIPsecの共通設定を作成する

Section titled “1. IKEv2とIPsecの共通設定を作成する”

Hub、Spoke1、Spoke2 のすべてに同じ設定を入れる。

conf t
crypto ikev2 proposal DMVPN-IKEV2-PROPOSAL
encryption aes-cbc-256
integrity sha256
group 14
exit
crypto ikev2 policy DMVPN-IKEV2-POLICY
proposal DMVPN-IKEV2-PROPOSAL
exit
crypto ikev2 keyring DMVPN-IKEV2-KEYRING
peer DMVPN-PEERS
address 0.0.0.0 0.0.0.0
pre-shared-key ChangeMe-StrongKey
exit
exit
crypto ikev2 profile DMVPN-IKEV2-PROFILE
match identity remote address 0.0.0.0 0.0.0.0
authentication remote pre-share
authentication local pre-share
keyring local DMVPN-IKEV2-KEYRING
dpd 10 3 on-demand
exit
crypto ipsec transform-set DMVPN-IPSEC-TS esp-aes 256 esp-sha256-hmac
mode transport
exit
crypto ipsec profile DMVPN-IPSEC-PROFILE
set transform-set DMVPN-IPSEC-TS
set ikev2-profile DMVPN-IKEV2-PROFILE
set pfs group14
exit

Phase 2でremote addressを限定しない理由

Section titled “Phase 2でremote addressを限定しない理由”

Hub は、NHRP Registration を送る複数の Spoke と動的に SA を作る。Spoke は Hub の NBMA address を事前に知っているが、直接通信する remote Spoke の NBMA address は NHRP Resolution が完了するまで分からない。

そのため、Hub だけでなく Spoke でも、Keyring の address と IKEv2 Profile の match identity remote address を wildcard にする。Spoke 側を Hub の 203.0.113.2 だけに限定すると、Hub-Spoke SA は作れても、remote Spoke の IKE identity が Profile に一致せず、Spoke-Spoke SA を作れない。

wildcard により一致範囲は広がるが、暗号化する traffic と実際の peer は tunnel protection ipsec profile、mGRE、NHRP により決まる。全 peer が同じ PSK を使うため、通常構成では証明書認証や peer ごとの認証・認可を検討する。

dpd 10 3 on-demand は任意である。省略しても SA は確立するが、応答しない peer の検出と SA の削除が遅れる場合がある。

DMVPN では mGRE が外側 IP header を作るため、IPsec は transport mode で GRE header 以降を保護する。

全ルータで network-id 100、tunnel key 100、NHRP authentication の文字列 DMVPN100 を使用する。network-id は NHRP を有効化し、tunnel key は GRE cloud を識別し、NHRP authentication は別 cloud の誤混入を減らす。必須性と詳しい違いは 三つの識別設定 を参照する。

bandwidth 1000 は EIGRP などが参照する論理帯域幅であり、通信速度を制限しない。ip mtu 1400 と ip tcp adjust-mss 1360 は開始値であり、実際の path MTU に合わせて調整する。

Hub で設定する。

interface Tunnel0
bandwidth 1000
ip address 10.255.0.1 255.255.255.0
no ip redirects
ip mtu 1400
ip nhrp authentication DMVPN100
ip nhrp map multicast dynamic
ip nhrp network-id 100
ip tcp adjust-mss 1360
tunnel source GigabitEthernet0/0
tunnel mode gre multipoint
tunnel key 100
tunnel protection ipsec profile DMVPN-IPSEC-PROFILE
no shutdown
exit

Hub は NHS として Spoke の NHRP Registration を保持する。ip nhrp map multicast dynamic により、登録済み Spoke へ EIGRP / OSPF の multicast を複製する。

Phase 2 の直接通信は、routing 上の remote Spoke next hop を NHRP Resolution することで始まるため、Hub に ip nhrp redirect は設定しない。

Spoke1 で設定する。

interface Tunnel0
bandwidth 1000
ip address 10.255.0.11 255.255.255.0
no ip redirects
ip mtu 1400
ip nhrp authentication DMVPN100
ip nhrp map 10.255.0.1 203.0.113.2
ip nhrp map multicast 203.0.113.2
ip nhrp nhs 10.255.0.1
ip nhrp network-id 100
ip tcp adjust-mss 1360
tunnel source GigabitEthernet0/0
tunnel mode gre multipoint
tunnel key 100
tunnel protection ipsec profile DMVPN-IPSEC-PROFILE
no shutdown
exit

Spoke は起動時から知っている Hub の Tunnel / NBMA mapping と NHS を静的に設定する。remote Spoke の mapping は設定に列挙せず、通信開始時に NHRP Resolution で動的に学習する。

tunnel mode gre multipoint により、1 個の Tunnel0 から Hub と remote Spoke の両方へ送信できる。Phase 2 は NHRP Redirect / shortcut を使わないため、ip nhrp shortcut は設定しない。

Spoke2 で設定する。

interface Tunnel0
bandwidth 1000
ip address 10.255.0.12 255.255.255.0
no ip redirects
ip mtu 1400
ip nhrp authentication DMVPN100
ip nhrp map 10.255.0.1 203.0.113.2
ip nhrp map multicast 203.0.113.2
ip nhrp nhs 10.255.0.1
ip nhrp network-id 100
ip tcp adjust-mss 1360
tunnel source GigabitEthernet0/0
tunnel mode gre multipoint
tunnel key 100
tunnel protection ipsec profile DMVPN-IPSEC-PROFILE
no shutdown
exit

Spoke2 も Spoke1 と同じ役割の設定を行い、Tunnel address と NBMA address だけを変更する。

6. 動的ルーティングを設定する

Section titled “6. 動的ルーティングを設定する”

EIGRP と OSPF は代替構成である。以下のどちらか一方だけを設定する。

Hub の設定。

interface Tunnel0
no ip split-horizon eigrp 100
no ip next-hop-self eigrp 100
exit
router eigrp 100
eigrp router-id 1.1.1.1
passive-interface default
no passive-interface Tunnel0
network 10.255.0.0 0.0.0.255
network 192.168.0.0 0.0.0.255
exit

Spoke1 の設定。

router eigrp 100
eigrp router-id 2.2.2.2
passive-interface default
no passive-interface Tunnel0
network 10.255.0.0 0.0.0.255
network 192.168.1.0 0.0.0.255
exit

Spoke2 の設定。

router eigrp 100
eigrp router-id 3.3.3.3
passive-interface default
no passive-interface Tunnel0
network 10.255.0.0 0.0.0.255
network 192.168.2.0 0.0.0.255
exit

no ip split-horizon eigrp 100 は、ある Spoke から学習した経路を同じ Tunnel0 の別 Spoke へ広告できるようにする。

no ip next-hop-self eigrp 100 は、Hub が経路を別 Spoke へ広告するときに、元の Spoke の Tunnel address を next hop として維持する。Spoke1 では、Spoke2 LAN の経路が次の形になる必要がある。

192.168.2.0/24 via 10.255.0.12

Spoke1 は 10.255.0.12 を NHRP で 192.0.2.2 に解決し、Spoke2 へ直接送る。next hop が Hub の 10.255.0.1 になっていると、Phase 2 の直接通信は開始できない。

Hub の設定。

router ospf 10
router-id 1.1.1.1
passive-interface default
no passive-interface Tunnel0
exit
interface Tunnel0
ip ospf network broadcast
ip ospf priority 255
ip ospf 10 area 0
exit
interface GigabitEthernet0/1
ip ospf 10 area 0
exit

Spoke1 の設定。

router ospf 10
router-id 2.2.2.2
passive-interface default
no passive-interface Tunnel0
exit
interface Tunnel0
ip ospf network broadcast
ip ospf priority 0
ip ospf 10 area 0
exit
interface GigabitEthernet0/1
ip ospf 10 area 0
exit

Spoke2 の設定。

router ospf 10
router-id 3.3.3.3
passive-interface default
no passive-interface Tunnel0
exit
interface Tunnel0
ip ospf network broadcast
ip ospf priority 0
ip ospf 10 area 0
exit
interface GigabitEthernet0/1
ip ospf 10 area 0
exit

全ルータの Tunnel0 を broadcast network type にそろえる。Hub の priority を 255、Spoke を 0 にすることで、Hub だけを DR 選出対象にする。Spoke は Hub / DR と FULL Adjacency を形成し、同じ broadcast network 上にある remote Spoke の Tunnel address を LAN 経路の next hop として計算できる。

point-to-multipoint を使うと、remote Spoke の Tunnel address に対する /32 route が Hub 向きに作られ、Phase 2 が必要とする直接 next hop と競合する。この構成では broadcast を使うため、Phase 3 の BLOCK-DMVPN-HOSTS と distribute-list は設定しない。

OSPF の DR / BDR は priority を変更しても稼働中に先取りされない。既存の Adjacency に後から設定する場合は、Hub が DR になっていることを確認し、必要なら保守中に OSPF process または Tunnel interface を再確立する。

3 台すべてで設定を保存する。

end
write memory

Hub で確認する。

show dmvpn
show ip nhrp

Hub が次の動的 mapping を学習していることを確認する。

10.255.0.11 -> 198.51.100.2
10.255.0.12 -> 192.0.2.2

Spoke1 と Spoke2 で確認する。

show ip nhrp nhs
show ip nhrp

NHS 10.255.0.1 が応答状態であり、Hub の静的 NHRP entry が 203.0.113.2 を指していることを確認する。

EIGRP を選んだ場合。

show ip eigrp neighbors
show ip route eigrp
show ip route 192.168.2.0

OSPF を選んだ場合。

show ip ospf neighbor
show ip ospf interface Tunnel0
show ip route ospf
show ip route 192.168.2.0

Spoke1 では 192.168.2.0/24 の next hop が Spoke2 の 10.255.0.12 になることを確認する。Spoke2 では 192.168.1.0/24 の next hop が 10.255.0.11 になる必要がある。

OSPF を使う場合、Hub の Tunnel0 が DR、Spoke の priority が 0 になっていることも確認する。各 Spoke と Hub / DR の Neighbor state は FULL になる。

Spoke1 で show ip nhrp と show dmvpn を実行し、Spoke2 の動的 mapping がまだないことを確認する。既に通信済みなら entry が期限切れになるまで待つか、再起動後の未通信状態で確認する。

show ip nhrp
show dmvpn

Spoke2 LAN 宛ての通信を発生させる。

ping 192.168.2.1 source 192.168.1.1 repeat 5
traceroute 192.168.2.1 source 192.168.1.1

続けて確認する。

show ip nhrp
show dmvpn
show crypto ikev2 sa
show crypto ipsec sa
show crypto session

期待する処理は次のとおり。

  1. Spoke1 は routing table から next hop 10.255.0.12 を得る。
  2. Spoke1 は Hub / NHS を通して NHRP Resolution Request を送る。
  3. Spoke1 は 10.255.0.12 -> 192.0.2.2 の動的 mapping を学習する。
  4. Spoke1 と Spoke2 の間に IKEv2 / IPsec SA が作られる。
  5. データは Hub を経由せず、Spoke1 から Spoke2 へ直接送られる。

NHRP Resolution と IKEv2 / IPsec SA の確立を待つ間、最初の一部の ping が失敗する場合がある。確立後の traceroute に Hub の 10.255.0.1 が中継点として現れないことを確認する。

Phase 2 は NHRP shortcut を使わない。routing table の next hop 自体が remote Spoke であり、show ip nhrp shortcut や show ip route next-hop-override を成立条件にはしない。


症状 確認する場所
Hub に Spoke が登録されない NBMA 疎通、PSK、NHRP authentication、network-id、NHS、Hub mapping
remote LAN の next hop が Hub になる EIGRP の no ip next-hop-self、OSPF の broadcast network type と DR
next hop は remote Spoke だが NHRP mapping ができない Hub への NHS / mapping、remote Spoke の登録、Spoke 間 underlay 到達性
NHRP mapping はあるが直接 IPsec SA ができない Spoke 側の wildcard Keyring / Profile、PSK、Tunnel protection
EIGRP neighbor はできるが remote LAN を学習しない Hub の no ip split-horizon eigrp 100、LAN の network statement
OSPF neighbor が形成されない 全ルータの broadcast、Hub / Spoke priority、multicast mapping、passive-interface
OSPF route が Hub next hop になる Hub が DR か、point-to-multipoint や古い /32 route が残っていないか
直接通信が NAT / PAT を越えられない UDP 500 / 4500、NAT-T、Spoke 間 session を許可できる NAT 動作か
小さい ping だけ通る Tunnel MTU、TCP MSS、underlay の path MTU、NAT-T

Phase 2 では、各 Spoke が remote Spoke ごとの経路を持ち、その next hop を維持する必要がある。Hub で経路を集約して Spoke へ広告すると、集約経路の next hop が Hub になり、直接通信を開始できない場合がある。経路集約や階層化が必要な構成では Phase 3 を検討する。

この例は、すべての peer に一致する wildcard と共通 PSK を使用する。管理可能な環境では IKEv2 証明書認証や peer ごとの認証・認可を検討する。

異なる Spoke が別々の PAT 装置の配下にある場合、Hub-Spoke SA が成立しても Spoke-Spoke SA を作れないことがある。Phase 2 の成立確認では、Hub-Spoke と Spoke-Spoke を分けて確認する。