コンテンツにスキップ

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

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

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


  • Hub 1 台と Spoke 2 台で DMVPN cloud を作る。
  • Hub-Spoke の NHRP 登録を確立する。
  • Hub は 1 個の mGRE interface で複数の Spoke を収容する。
  • Spoke は point-to-point GRE で Hub だけを peer とする。
  • Spoke 間通信を常に Hub 経由で転送する。
  • EIGRP または OSPF で各拠点 LAN を広告する。

flowchart TB
    subgraph dataPath[" "]
        direction LR
        lan1["Spoke1 LAN<br/>192.168.1.0/24"]
        spoke1["Spoke1 / point-to-point GRE<br/>Tunnel0: 10.255.0.11<br/>NBMA: 198.51.100.2"]
        hub["Hub / NHS / mGRE<br/>Tunnel0: 10.255.0.1<br/>NBMA: 203.0.113.2"]
        spoke2["Spoke2 / point-to-point GRE<br/>Tunnel0: 10.255.0.12<br/>NBMA: 192.0.2.2"]
        lan2["Spoke2 LAN<br/>192.168.2.0/24"]

        lan1 --- spoke1
        spoke1 ==>|"Spoke間通信もHubへ送る"| hub
        hub ==>|"Hubが宛先Spokeへ再転送"| spoke2
        spoke2 --- lan2
    end

    style dataPath fill:none,stroke:none

Hub は tunnel mode gre multipoint により、1 個の Tunnel0 で動的に登録される複数の Spoke を扱う。Spoke は tunnel destination 203.0.113.2 により、GRE の外側宛先を Hub に固定する。

Spoke1 から Spoke2 LAN への packet は、Spoke1-Hub の GRE / IPsec peer と Hub-Spoke2 の GRE / IPsec peer を順に通る。逆方向も同じであり、Spoke1 と Spoke2 の間に直接の NHRP mapping や IPsec SA は作られない。


項目 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 アドレスへの経路が必要である。

DMVPN Tunnel を作る前に、各ルータから必要な NBMA アドレスへ到達できることを確認する。

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 により使える暗号方式や細部のキーワードが異なるため、投入前に ? で確認する。



Hub、Spoke1、Spoke2 のすべてに同じ Proposal と Policy を設定する。

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

Proposal と Policy の各コマンドが選ぶアルゴリズムは IKEv2の設定要素 を参照する。

Hub は複数の Spoke から動的に接続されるため、Keyring と IKEv2 Profile をすべての remote IPv4 address に一致させる。

crypto ikev2 keyring DMVPN-IKEV2-KEYRING
peer DMVPN-SPOKES
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

Keyring の address は、remote peer に使用する Keyring entry と PSK を選ぶ。Profile の match identity remote address は、remote の IKE identity がアドレスである場合に、この Profile を選ぶ。選択対象が異なるため、Hub では両方を wildcard にする。

Phase 1 の Spoke が接続する remote peer は Hub の 203.0.113.2 だけである。Spoke1 と Spoke2 の両方に、次の Keyring と Profile を設定する。

crypto ikev2 keyring DMVPN-IKEV2-KEYRING
peer DMVPN-HUB
address 203.0.113.2
pre-shared-key ChangeMe-StrongKey
exit
exit
crypto ikev2 profile DMVPN-IKEV2-PROFILE
match identity remote address 203.0.113.2 255.255.255.255
authentication remote pre-share
authentication local pre-share
keyring local DMVPN-IKEV2-KEYRING
dpd 10 3 on-demand
exit

Phase 2 / 3 では Spoke 間の動的 peer に一致するため Spoke 側も wildcard にするが、Phase 1 では直接 peer を作らない。ここを Hub だけに限定しても、NHRP 登録と Hub 経由の Spoke 間通信は成立する。

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

3. IPsec Transform SetとProfileを作成する

Section titled “3. IPsec Transform SetとProfileを作成する”

Hub、Spoke1、Spoke2 のすべてに設定する。

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

DMVPN では GRE が外側 IP header を作るため、IPsec は transport mode で GRE header 以降を保護する。Transform Set、PFS、transport mode の一般説明は関連する IPsec ページを参照する。

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 を受け取り、Tunnel / NBMA mapping を動的に学習する。ip nhrp map multicast dynamic は、登録済み Spoke を EIGRP / OSPF の multicast 配送先に加える。

Phase 1 では NHRP Redirect を使わないため、ip nhrp redirect は設定しない。Hub が mGRE であることは、Spoke 間を直接通信させるためではなく、Spoke ごとの Tunnel interface を Hub に作らず収容するためである。

tunnel key 100 と ip nhrp authentication DMVPN100 は任意、ip nhrp network-id 100 は NHRP を有効化するために必要である。三つの違いは 三つの識別設定 を参照する。

5. Spoke1のpoint-to-point GREとNHRPを設定する

Section titled “5. Spoke1のpoint-to-point GREとNHRPを設定する”

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 nhs 10.255.0.1
ip nhrp network-id 100
ip tcp adjust-mss 1360
tunnel source GigabitEthernet0/0
tunnel destination 203.0.113.2
tunnel key 100
tunnel protection ipsec profile DMVPN-IPSEC-PROFILE
no shutdown
exit

tunnel destination 203.0.113.2 は、GRE の外側宛先を Hub に固定し、Tunnel0 を point-to-point GRE として動作させる。tunnel mode gre multipoint は設定しない。

ip nhrp map は Hub の Tunnel address 10.255.0.1 を NBMA address 203.0.113.2 に対応付け、ip nhrp nhs は登録先を Hub にする。point-to-point GRE では multicast も固定した tunnel destination へ送られるため、Spoke に ip nhrp map multicast は必要ない。

Phase 1 の Spoke は remote Spoke の NHRP mapping を作らないため、ip nhrp shortcut も設定しない。

6. Spoke2のpoint-to-point GREとNHRPを設定する

Section titled “6. Spoke2のpoint-to-point GREとNHRPを設定する”

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 nhs 10.255.0.1
ip nhrp network-id 100
ip tcp adjust-mss 1360
tunnel source GigabitEthernet0/0
tunnel destination 203.0.113.2
tunnel key 100
tunnel protection ipsec profile DMVPN-IPSEC-PROFILE
no shutdown
exit

Spoke2 も Spoke1 と同様に、GRE、NHRP、IKEv2 の remote peer を Hub だけに固定する。

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

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

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

Hub の設定。

interface Tunnel0
no ip split-horizon 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

Hub の split horizon を無効化し、Spoke1 から学習した LAN 経路を同じ Tunnel0 の先にある Spoke2 へ広告できるようにする。split horizon の仕組みは Hubのsplit horizon を参照する。

Phase 1 では EIGRP の next-hop-self を残す。Hub が別の Spoke へ経路を広告するときに next hop を Hub へ変更することで、Spoke 間の traffic は Hub へ送られる。Phase 2 用の no ip next-hop-self eigrp 100 は設定しない。

Hub の設定。

router ospf 10
router-id 1.1.1.1
passive-interface default
no passive-interface Tunnel0
exit
interface Tunnel0
ip ospf network point-to-multipoint
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 point-to-multipoint
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 point-to-multipoint
ip ospf 10 area 0
exit
interface GigabitEthernet0/1
ip ospf 10 area 0
exit

全ルータで OSPF network type を point-to-multipoint にそろえ、DR / BDR を使わずに Hub と各 Spoke が Adjacency を形成する。Spoke に作られる remote Tunnel address の /32 route は Hub を next hop とするため、Phase 1 の転送方法と一致する。Phase 3 のように shortcut と競合しないため、この構成では /32 route を distribute-list で除外しない。

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 interface Tunnel0
show ip nhrp nhs
show ip nhrp
show dmvpn

Tunnel0 の Tunnel source / destination が自分の NBMA address と 203.0.113.2 の組み合わせになり、NHS 10.255.0.1 が応答していることを確認する。各 Spoke に remote Spoke の動的 NHRP entry は必要ない。

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 が Hub の 10.255.0.1 になることを確認する。Spoke2 では 192.168.1.0/24 を同じように確認する。

Spoke間通信がHubを通ることを確認する

Section titled “Spoke間通信がHubを通ることを確認する”

Spoke1 で実行する。

ping 192.168.2.1 source 192.168.1.1 repeat 5
traceroute 192.168.2.1 source 192.168.1.1

Spoke1 からの packet が最初に Hub の Tunnel address 10.255.0.1 へ送られ、その後 Spoke2 へ転送されることを確認する。通信後も Spoke1 に 10.255.0.12 -> 192.0.2.2 という動的 mapping は作られない。

show crypto ikev2 sa
show crypto ipsec sa
show crypto session

Hub には Spoke1 と Spoke2 に対する SA が存在する。各 Spoke の remote peer は Hub の 203.0.113.2 だけになり、Spoke1 と Spoke2 の間には直接の IKEv2 / IPsec SA が作られない。Spoke 間の traffic を流すと、Hub 上の両方の IPsec SA で encaps / decaps counter が増える。


症状 確認する場所
Hub に Spoke が登録されない NBMA 疎通、Hub の wildcard Profile、Spoke の固定 remote address、PSK、NHRP authentication
Spoke の Tunnel0 が down tunnel source、tunnel destination 203.0.113.2、underlay route
EIGRP neighbor はできるが remote LAN を学習しない Hub の no ip split-horizon eigrp 100、LAN の network statement
EIGRP で remote LAN の next hop が remote Spoke になる Hub に Phase 2 用の no ip next-hop-self eigrp 100 が残っていないか
OSPF neighbor が形成されない 全ルータの point-to-multipoint、timer、passive-interface
Spoke 間通信が暗号化されない Hub-Spoke 両方の Tunnel protection、二つの Hub-Spoke SA の counter
小さい ping だけ通る Tunnel MTU、TCP MSS、underlay の path MTU、NAT-T

この例では Hub の IKEv2 Profile がすべての remote IPv4 address に一致し、全 Spoke が共通 PSK を使用する。管理可能な環境では、IKEv2 証明書認証や Spoke ごとの認証・認可を検討する。

Hub を冗長化する場合は、複数 NHS、dual-hub、dual-cloud のいずれを使うかを設計し、動的ルーティングと障害時の経路を確認する。

暗号方式は機器の対応範囲とポリシーに合わせる。AES-GCM、明示的な PRF、ECDH を使う構成は PRFとAEAD を参照する。