NHRPの設定(実機検証編)
この章では、Cisco CML上で実際にDMVPN(Dynamic Multipoint VPN)を構築し、
NHRP設定の構成方法と動作を確認します。
Hubと2台のSpokeで構成し、すべてのルータは同一のNBMA(Non-Broadcast Multi-Access)ネットワーク上に存在します。
物理インターフェースの設定
トンネルインターフェースのソースとなる物理インターフェース(通常はWAN側のインターフェース)を正しく設定します。IPアドレスの設定など基本的なネットワーク構成が前提となります。
HUB-Router(config)#interface GigabitEthernet0/0
HUB-Router(config-if)#ip address 1.1.1.1 255.255.255.0
HUB-Router(config-if)#no shut
SPOKE-Router1(config)#interface GigabitEthernet0/0
SPOKE-Router1(config-if)#ip address 1.1.1.2 255.255.255.0
SPOKE-Router1(config-if)#no shut
SPOKE-Router2(config)#interface GigabitEthernet0/0
SPOKE-Router2(config-if)#ip address 1.1.1.3 255.255.255.0
SPOKE-Router2(config-if)#no shut
GREトンネルインターフェースの設定
DMVPNで使用するGREトンネル(mGRE)インターフェースを設定します。トンネルインターフェースは、仮想的なインターフェースであり、ここでmGREやNHRPの設定を行います。
HUB-Router(config)#interface Tunnel0
HUB-Router(config-if)#ip address 192.168.1.1 255.255.255.0
HUB-Router(config-if)#tunnel source GigabitEthernet0/0
HUB-Router(config-if)#tunnel mode gre multipoint
HUB-Router(config-if)#tunnel key 10
SPOKE-Router1(config)#interface Tunnel0
SPOKE-Router1(config-if)#ip address 192.168.1.2 255.255.255.0
SPOKE-Router1(config-if)#tunnel source GigabitEthernet0/0
SPOKE-Router1(config-if)#tunnel mode gre multipoint
SPOKE-Router1(config-if)#tunnel key 10
SPOKE-Router2(config)#interface Tunnel0
SPOKE-Router2(config-if)#ip address 192.168.1.3 255.255.255.0
SPOKE-Router2(config-if)#tunnel source GigabitEthernet0/0
SPOKE-Router2(config-if)#tunnel mode gre multipoint
SPOKE-Router2(config-if)#tunnel key 10
| コマンド | 構文説明 | 補足 |
|---|---|---|
interface Tunnel0 | 仮想トンネルインターフェースを作成 | DMVPNで使用する論理的なトンネル。 |
ip address 192.168.1.x 255.255.255.0 | トンネルインターフェースにIPアドレスを設定 | HubとSpoke間の論理的アドレス空間。 |
tunnel source GigabitEthernet0/0 | トンネルの送信元(物理IF)を指定 | インターネット側(NBMA)インターフェース。 |
tunnel mode gre multipoint | マルチポイントGRE(mGRE)を有効化 | Spokeを複数同時に接続可能。 |
tunnel key 10 | トンネル識別用のキーを設定 | HubとSpoke間で一致させる。 |
NHRP(Next Hop Resolution Protocol)の設定
NHRPは、DMVPNでの動的なネクストホップ解決に使われる重要なプロトコルです。これにより、スポークルーターがハブを通じて他のスポークのIPアドレスを取得できます。
HUB-Router(config)#interface Tunnel0
HUB-Router(config-if)#ip nhrp network-id 1
HUB-Router(config-if)#ip nhrp map multicast dynamic
HUB-Router(config-if)#ip nhrp authentication cisco
HUB-Router(config-if)#ip nhrp holdtime 300
SPOKE-Router1(config)#interface Tunnel0
SPOKE-Router1(config-if)#ip nhrp network-id 1
SPOKE-Router1(config-if)#ip nhrp map 192.168.1.1 1.1.1.1
SPOKE-Router1(config-if)#ip nhrp map multicast 1.1.1.1
SPOKE-Router1(config-if)#ip nhrp nhs 192.168.1.1
SPOKE-Router1(config-if)#ip nhrp authentication cisco
SPOKE-Router1(config-if)#ip nhrp holdtime 300
SPOKE-Router2(config)#interface Tunnel0
SPOKE-Router2(config-if)#ip nhrp network-id 1
SPOKE-Router2(config-if)#ip nhrp map 192.168.1.1 1.1.1.1
SPOKE-Router2(config-if)#ip nhrp map multicast 1.1.1.1
SPOKE-Router2(config-if)#ip nhrp nhs 192.168.1.1
SPOKE-Router2(config-if)#ip nhrp authentication cisco
SPOKE-Router2(config-if)#ip nhrp holdtime 300
| コマンド | 構文説明 | 補足 |
|---|---|---|
ip nhrp network-id 1 | NHRPネットワークの識別子 | Hub・Spoke間で共通にする必要あり。 |
ip nhrp map multicast dynamic | Hub側でマルチキャストの動的登録を許可 | SpokeからのEIGRPマルチキャストなどを受け取る。 |
ip nhrp map <トンネルIP> <NBMA IP> | トンネルと実アドレスのマッピング | SpokeがHubのアドレスを指定。 |
ip nhrp map multicast <NBMA IP> | マルチキャストトラフィックをHubへ転送 | EIGRPなどのルーティング更新を伝搬。 |
ip nhrp nhs <HubトンネルIP> | HubをNHS(Next Hop Server)として指定 | Spokeが他のSpokeを解決するために使用。 |
ip nhrp authentication cisco | 認証キーを設定 | HubとSpoke間で一致必須。 |
ip nhrp holdtime 300 | NHRP登録の保持時間を設定 | 秒単位で登録を維持。 |
トンネルの保護(IPsec)の設定
DMVPNでのトラフィックを暗号化するために、IPsecを使用することが一般的です。これにより、データ通信のセキュリティが強化されます。
HUB-Router(config)#crypto isakmp policy 10
HUB-Router(config-isakmp)#hash sha512
HUB-Router(config-isakmp)#encr aes 256
HUB-Router(config-isakmp)#authentication pre-share
HUB-Router(config-isakmp)#group 16
HUB-Router(config-isakmp)#exit
HUB-Router(config)#crypto isakmp key cisco address 0.0.0.0
HUB-Router(config)#crypto ipsec transform-set AES esp-aes 256 esp-sha512-hmac
HUB-Router(cfg-crypto-trans)#mode transport
HUB-Router(cfg-crypto-trans)#exit
HUB-Router(config)#crypto ipsec profile DMVPN-Profile
HUB-Router(ipsec-profile)#set transform-set AES
HUB-Router(ipsec-profile)#set pfs group16
HUB-Router(ipsec-profile)#set security-association lifetime seconds 86400
HUB-Router(ipsec-profile)#exit
HUB-Router(config)#interface Tunnel0
HUB-Router(config-if)#tunnel protection ipsec profile DMVPN-Profile
SPOKE-Router1(config)#crypto isakmp policy 10
SPOKE-Router1(config-isakmp)#hash sha512
SPOKE-Router1(config-isakmp)#encr aes 256
SPOKE-Router1(config-isakmp)#authentication pre-share
SPOKE-Router1(config-isakmp)#group 16
SPOKE-Router1(config-isakmp)#exit
SPOKE-Router1(config)#crypto isakmp key cisco address 0.0.0.0
SPOKE-Router1(config)#crypto ipsec transform-set AES esp-aes 256 esp-sha512-hmac
SPOKE-Router1(cfg-crypto-trans)#mode transport
SPOKE-Router1(cfg-crypto-trans)#exit
SPOKE-Router1(config)#crypto ipsec profile DMVPN-Profile
SPOKE-Router1(ipsec-profile)#set transform-set AES
SPOKE-Router1(ipsec-profile)#set pfs group16
SPOKE-Router1(ipsec-profile)#set security-association lifetime seconds 86400
SPOKE-Router1(ipsec-profile)#exit
SPOKE-Router1(config)#interface Tunnel0
SPOKE-Router1(config-if)#tunnel protection ipsec profile DMVPN-Profile
SPOKE-Router2(config)#crypto isakmp policy 10
SPOKE-Router2(config-isakmp)#hash sha512
SPOKE-Router2(config-isakmp)#encr aes 256
SPOKE-Router2(config-isakmp)#authentication pre-share
SPOKE-Router2(config-isakmp)#group 16
SPOKE-Router2(config-isakmp)#exit
SPOKE-Router2(config)#crypto isakmp key cisco address 0.0.0.0
SPOKE-Router2(config)#crypto ipsec transform-set AES esp-aes 256 esp-sha512-hmac
SPOKE-Router2(cfg-crypto-trans)#mode transport
SPOKE-Router2(cfg-crypto-trans)#exit
SPOKE-Router2(config)#crypto ipsec profile DMVPN-Profile
SPOKE-Router2(ipsec-profile)#set transform-set AES
SPOKE-Router2(ipsec-profile)#set pfs group16
SPOKE-Router2(ipsec-profile)#set security-association lifetime seconds 86400
SPOKE-Router2(ipsec-profile)#exit
SPOKE-Router2(config)#interface Tunnel0
SPOKE-Router2(config-if)#tunnel protection ipsec profile DMVPN-Profile
| コマンド | 構文説明 | 補足 |
|---|---|---|
crypto isakmp policy 10 | IKEフェーズ1ポリシーの作成 | 暗号・認証方式などを定義。 |
hash sha512 | ハッシュアルゴリズム設定 | データ完全性を確保。 |
encr aes 256 | 暗号化方式設定 | 高強度のAES 256ビット暗号。 |
authentication pre-share | 事前共有鍵(PSK)認証方式 | シンプルかつ一般的な方式。 |
group 16 | DHグループ設定 | 鍵交換の強度を指定。 |
crypto isakmp key cisco address 0.0.0.0 | PSK登録 | すべてのピアと共通のキーを使用。 |
crypto ipsec transform-set AES esp-aes 256 esp-sha512-hmac | IPsecの暗号化・認証方式を指定 | フェーズ2の設定。 |
mode transport | トランスポートモード指定 | GREトンネルと併用するため。 |
crypto ipsec profile DMVPN-Profile | プロファイル作成 | transform-setやPFSなどを束ねる。 |
set pfs group16 | Perfect Forward Secrecyを有効化 | 毎回異なる鍵を生成。 |
set security-association lifetime seconds 86400 | SAの有効期限設定 | 24時間ごとに再交渉。 |
tunnel protection ipsec profile DMVPN-Profile | トンネルにIPsecを適用 | GREをIPsecで暗号化。 |
ルーティングプロトコルの設定
ルーティングプロトコルは、DMVPN上でルート情報を交換するために必須です。最も一般的にはEIGRPやOSPFが使用されます。
HUB-Router(config)#router eigrp 1
HUB-Router(config-router)#network 192.168.1.0 0.0.0.255
HUB-Router(config-router)#network 10.10.10.0 0.0.0.255
HUB-Router(config-router)#exit
HUB-Router(config)#int tunnel 0
HUB-Router(config-if)#no ip split-horizon eigrp 1
HUB-Router(config-if)#no ip next-hop-self eigrp 1
スプリットホライゾンは、特定のインターフェースから学習したルート情報をその同じインターフェースから再広告しないようにするルールです。しかし、スプリットホライゾンが有効になっていると、ハブが特定のトンネルインターフェースから受信したルートを同じトンネルインターフェースに向けて広告できなくなります。そのため、スプリットホライゾンを無効化することで、ハブがスポーク間でルート情報を共有できるようになります。
EIGRPを使用してルートを広告する際に、自身のトンネルインターフェースアドレスを「次ホップ」に設定します。「no ip next-hop-self eigrp 1」を設定することで、ハブがスポーク間のルートを中継する際に元の次ホップを保持することで、スポーク間のダイレクト通信が可能になります。
SPOKE-Router1(config)#router eigrp 1
SPOKE-Router1(config-router)#network 192.168.1.0 0.0.0.255
SPOKE-Router1(config-router)#network 10.10.12.0 0.0.0.255
SPOKE-Router2(config)#router eigrp 1
SPOKE-Router2(config-router)#network 192.168.1.0 0.0.0.255
SPOKE-Router2(config-router)#network 10.10.13.0 0.0.0.255
| コマンド | 構文説明 | 補足 |
|---|---|---|
router eigrp 1 | EIGRPプロセスを開始 | AS番号を指定。 |
network 192.168.1.0 0.0.0.255 | トンネルネットワークを広告 | HubとSpoke共通のセグメント。 |
network 10.x.x.0 0.0.0.255 | 各SpokeのローカルLANを広告 | 各拠点固有のセグメント。 |
no ip split-horizon eigrp 1 | Split Horizonを無効化 | Hubが受信ルートを再広告可能に。 |
no ip next-hop-self eigrp 1 | Hubが元のNextHopを維持 | Spoke間の直接通信を実現(Phase2)。 |
設定後の確認
スポークルータ1からスポークルータ2にtracerouteを実行すると最初はハブルータを経由していますが、その後は直接通信されていることが確認できます。

DMVPN Phase 3の設定
「no ip split-horizon eigrp 1」や「no ip next-hop-self eigrp 1」を設定してスポーク間で直接通信することをフェーズ2といいます。
フェーズ3では上記コマンドを使用せず、「ip nhrp redirect」と「ip nhrp shortcut」コマンドを使用してスポーク間の直接通信を行います。
HUB-Router(config)#int tunnel 0
HUB-Router(config-if)#ip next-hop-self eigrp 1
HUB-Router(config-if)#ip split-horizon eigrp 1
HUB-Router(config-if)#ip summary-address eigrp 1 10.10.0.0 255.255.0.0
HUB-Router(config-if)#ip nhrp redirect
スポーク間で対抗のネットワークに接続するため要約ルートを作成しています。
SPOKE-Router1(config)#int tunnel 0
SPOKE-Router1(config-if)#ip nhrp shortcut
SPOKE-Router2(config)#int tunnel 0
SPOKE-Router2(config-if)#ip nhrp shortcut
設定完了後、スポーク間で直接通信することが出来ています。

| フェーズ | 主な特徴 | コマンド | 動作概要 |
|---|---|---|---|
| Phase1 | Hub & Spoke通信のみ | ip nhrp nhs のみ使用 | Spoke間通信はHub経由。 |
| Phase2 | Spoke間直接通信(NextHop維持) | no ip split-horizon eigrp / no ip next-hop-self | Hubを介さずダイレクト通信。 |
| Phase3 | Redirect / Shortcut 機能 | Hub:ip nhrp redirectSpoke:ip nhrp shortcut | Spoke間通信を動的に最適化。 |
DMVPNのルーティングプロトコルにOSPFを使用する際の注意点
OSPFネットワークタイプの選択:「ip ospf network broadcast」コマンドを使用してタイプを変更します。
優先度の設定:スポークルータがDRにならないように「 ip ospf priority 0」コマンドを使用して優先度を0にします。
DMVPN トラブルシューティング
セッション/統計クリアコマンド
| コマンド | 目的 | 使用例 | 確認ポイント |
|---|---|---|---|
clear dmvpn session interface tunnel 0 | トンネル上のNHRPセッションをリセットし、再登録を促す | Router# clear dmvpn session interface tunnel 0 | show dmvpnで再登録されたPeerが表示される |
clear dmvpn statistics interface tunnel 0 | DMVPN関連の送受信統計を初期化 | Router# clear dmvpn statistics interface tunnel 0 | show ip nhrp traffic interface tunnel0 のカウンタがリセットされる |
デバッグコマンド
| コマンド | 目的 | 使用例 | 主な出力例/確認ポイント |
|---|---|---|---|
debug dmvpn error all | DMVPN全般のエラー(NHRP・ソケット・暗号保護)を表示 | Router# debug dmvpn error all | NHRP Registration failed、Crypto SS Downなどが出力 |
debug dmvpn condition interface tunnel 0 | 指定トンネルのみのデバッグを有効化 | Router# debug dmvpn condition interface tunnel 0 | 指定トンネルのUP/DOWNのみ出力される |
debug nhrp condition | NHRP登録・解決・削除動作を表示 | Router# debug nhrp condition | Received Registration Request、Adding peer to cache など |
debug nhrp error | NHRPの認証や解決失敗を表示 | Router# debug nhrp error | Authentication failed、Registration Request failed |
nhrp debug-trace | NHRPの詳細トレースログを有効化 | Router(config)# nhrp debug-trace cache | cache / multicast / limit など対象を指定して詳細解析 |
undebug all | すべてのデバッグを停止 | Router# undebug all | 以降のデバッグ出力を停止 |
ログ出力と監視
| コマンド | 目的 | 使用例 | 主なログ出力例 |
|---|---|---|---|
logging dmvpn rate-limit 20 | DMVPNログを20秒間隔で出力し、過剰出力を防ぐ | Router(config)# logging dmvpn rate-limit 20 | %DMVPN-7-CRYPTO_SS: Tunnel0 socket is UP%DMVPN-5-NHRP_NHS: ... is UP%DMVPN-5-NHRP_CACHE: Client Registered |
| `show logging | inc DMVPN` | DMVPN関連ログを抽出して表示 | `Router# show logging |
状態確認(show系)
| コマンド | 目的 | 使用例 | 確認ポイント |
|---|---|---|---|
show dmvpn | DMVPNセッション一覧を表示 | Router# show dmvpn | Interface: Tunnel0 / Peer UP / Type: Spoke |
show ip nhrp | NHRPキャッシュと解決情報を確認 | Router# show ip nhrp | via 203.0.113.1, Tunnel0 created など登録状態を確認 |
show ip nhrp traffic interface tunnel0 | NHRP統計情報を確認 | Router# show ip nhrp traffic interface tunnel0 | Requests / Replies / Registration の送受が対応しているか |
show crypto isakmp sa | IKEフェーズ1状態を確認 | Router# show crypto isakmp sa | state QM_IDLE = 正常確立 |
show crypto ipsec sa active | IPsecフェーズ2状態を確認 | Router# show crypto ipsec sa active | #pkts encrypt/decrypt が増加していれば通信中 |
show crypto map | IPsecマップ構成を確認 | Router# show crypto map | Transform-set, Peerアドレス, Profile名の一致確認 |
show crypto session | ISAKMPとIPsec両方の概要確認 | Router# show crypto session | 状態が“UP-ACTIVE”であるか確認 |
show interface tunnel0 | トンネル状態の確認 | Router# show interface tunnel0 | line protocol is up、MTU値、トラフィック統計など |
show ip route | 経路情報の確認 | Router# show ip route | Hub⇔Spoke間のルートが存在するか |
show ip eigrp neighbors | EIGRP隣接の確認(EIGRP使用時) | Router# show ip eigrp neighbors | 隣接がup状態であるか |
show crypto engine connections active | 暗号エンジンの動作状態を確認 | Router# show crypto engine connections active | 使用中セッション数、負荷状況の確認 |
状況別コマンドクイックリファレンス
| 状況 | 確認すべきコマンド |
|---|---|
| トンネルがUpしない | show ip int brief / show interface tunnel0 / show dmvpn |
| NHRP登録がされない | show ip nhrp detail / debug nhrp error / debug nhrp condition |
| IPsec確立しない | show crypto isakmp sa / show crypto ipsec sa active / debug dmvpn error all |
| Spoke間通信ができない | show dmvpn detail / show ip nhrp / show crypto ipsec sa |
| ルーティングできない | show ip route / show ip eigrp topology / show ip ospf neighbor |
| デバッグ停止 | undebug all |