DMVPN には、フェーズ1〜3の3つの動作モードがあります。この記事ではフェーズ1を取り上げ、Cisco ルータ4台の検証構成で設定と動作を確かめます。
フェーズ1では、スポークが NHRP を使って自分のアドレスをハブに登録し、ハブはマルチポイント GRE(mGRE)の1つのトンネルインターフェースで全スポークとつながります。スポーク側のトンネルはハブ宛ての固定のトンネルなので、スポーク同士が直接トンネルを張ることはありません。スポーク間の通信はすべてハブで折り返すため、スポークが増えるほどハブの処理負荷が高くなります。
- アンダーレイ(R2・R3・R5・R6)を設定し、ハブからスポークまで届くことを確かめる
- ハブ(R2)に mGRE のトンネルを作る
- スポーク(R5)にハブ宛てのトンネルを作り、NHRP でハブに登録する
- 2台目のスポーク(R6)を同じ形で追加する
- スポーク間の通信がハブを折り返すことをキャプチャで確かめる
DMVPN フェーズ1の仕組み
DMVPN は、mGRE と NHRP を組み合わせて、多数の拠点を1つのオーバーレイネットワークにまとめる仕組みです。mGRE と NHRP そのものの説明は 【DMVPN】mGRE、NHRPの概要をわかりやすく解説 にまとめています。
NHRP で扱うアドレスは2種類あります。トンネルを運ぶ外側のアドレスを NBMA アドレス、トンネルインターフェースに付けたアドレスをトンネルアドレスと呼びます。ハブは NHS(ネクストホップサーバ)として、各スポークから登録された「トンネルアドレスと NBMA アドレスの対応」を NHRP テーブルに持ちます。
| 用語 | この記事の構成での例 | 意味 |
|---|---|---|
| NBMA アドレス | 169.254.35.5(R5) | トンネルの送信元になる、アンダーレイ側のアドレス |
| トンネルアドレス | 192.168.0.5(R5) | トンネルインターフェースに設定したオーバーレイ側のアドレス |
| NHS | R2(ハブ) | スポークの登録を受け付け、アドレスの対応を管理するサーバ |
| NHC | R5、R6(スポーク) | NHS に自分のアドレスを登録する NHRP クライアント |
3つのフェーズの違いは、スポーク間の通信をどう扱うかです。
| フェーズ | スポークのトンネル | スポーク間の通信 |
|---|---|---|
| フェーズ1 | ハブ宛ての GRE(tunnel destination を指定) | 常にハブを経由する |
| フェーズ2 | mGRE | NHRP で相手を解決し、スポーク間に動的なトンネルを張る |
| フェーズ3 | mGRE | フェーズ2の仕組みに、ハブからのリダイレクトとショートカットを加えて拡張性を高めたもの |
検証構成
R2 がハブ、R5 と R6 がスポークです。R3 はアンダーレイ(インターネットの代わり)のルータで、DMVPN の設定はしません。トンネルアドレスは 192.168.0.0/24 で、末尾をルータ番号にそろえています。
この検証では、トンネルの動きを見やすくするため IPsec を使わず、GRE だけで構成しています。実際の DMVPN ではトンネルを IPsec で保護(tunnel protection ipsec profile)し、あわせて ip mtu 1400 と ip tcp adjust-mss 1360 を設定する構成が Cisco の設定ガイドで案内されています。
アンダーレイの設定
アンダーレイのアドレスとルートを設定する
まず、トンネルを運ぶアンダーレイネットワークを作ります。アンダーレイは 169.254.0.0/16 の範囲のサブネットで構成し、各ルータの間で疎通できれば準備完了です。R2・R5・R6 は、アンダーレイ全体(169.254.0.0/16)への経路を R3 に向けています。
R2
R2(config)#interface FastEthernet0/0.23
R2(config-subif)# encapsulation dot1Q 23
R2(config-subif)# ip address 169.254.23.2 255.255.255.0
R2(config-subif)#exit
R2(config)#ip route 169.254.0.0 255.255.0.0 169.254.23.3
R3
R3(config)#interface FastEthernet0/0.23 R3(config-subif)# encapsulation dot1Q 23 R3(config-subif)# ip address 169.254.23.3 255.255.255.0 R3(config)#interface FastEthernet0/0.35 R3(config-subif)# encapsulation dot1Q 35 R3(config-subif)# ip address 169.254.35.3 255.255.255.0 R3(config)#interface FastEthernet0/0.36 R3(config-subif)# encapsulation dot1Q 36 R3(config-subif)# ip address 169.254.36.3 255.255.255.0
R5
R5(config)#interface FastEthernet0/0.35
R5(config-subif)# encapsulation dot1Q 35
R5(config-subif)# ip address 169.254.35.5 255.255.255.0
R5(config-subif)#exit
R5(config)#ip route 169.254.0.0 255.255.0.0 169.254.35.3
R6
R6(config)#interface FastEthernet0/0.36
R6(config-subif)# encapsulation dot1Q 36
R6(config-subif)# ip address 169.254.36.6 255.255.255.0
R6(config-subif)#exit
R6(config)#ip route 169.254.0.0 255.255.0.0 169.254.36.3
ping:ハブからスポークのアンダーレイに届くか
ハブの R2 から、R5 と R6 のアンダーレイ側のアドレスへ ping します。ここが通らないと、トンネルも NHRP の登録も成り立ちません。
R2
R2#ping 169.254.35.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 169.254.35.5, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 24/36/48 ms R2#ping 169.254.36.6 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 169.254.36.6, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/24/44 ms
ハブルータ(R2)の設定
ハブに mGRE のトンネルを作る
ハブのトンネルインターフェースを設定します。ポイントは、tunnel destination を書かずに tunnel mode gre multipoint(mGRE)にしていることです。これで1つのトンネルインターフェースで複数のスポークを受け入れられます。宛先の NBMA アドレスは、スポークから届く NHRP の登録で分かります。
R2
R2(config)#interface Tunnel0 R2(config-if)# ip address 192.168.0.2 255.255.255.0 R2(config-if)# ip nhrp authentication DMVPNPWD R2(config-if)# ip nhrp map multicast dynamic R2(config-if)# ip nhrp network-id 1 R2(config-if)# tunnel source 169.254.23.2 R2(config-if)# tunnel mode gre multipoint
通常の GRE トンネルの設定(アドレス、tunnel source)に加えて、ハブで使っている DMVPN の設定は次のとおりです。
| コマンド | 説明 |
|---|---|
| tunnel mode gre multipoint | トンネルを mGRE にします。宛先を固定しないので、登録してきたスポークすべてとこのインターフェースで通信できます。 |
| ip nhrp map multicast dynamic | 登録してきたスポークを、マルチキャストの送り先に自動で加えます。スポークの NBMA アドレスを1台ずつ静的に書かなくても、OSPF や EIGRP などのマルチキャストを使うルーティングプロトコルのパケットを各スポークへ送れます。 |
| ip nhrp network-id 1 | インターフェースで NHRP を有効にし、どの NHRP ネットワークに属するかを示す ID を付けます。ID はそのルータの中だけで意味を持つ値で、対向と違っていても動作します。この記事では全ルータで 1 にそろえています。 |
| ip nhrp authentication DMVPNPWD | NHRP の認証文字列を設定します(任意)。設定する場合は、同じ DMVPN に参加するハブとスポークのすべてで同じ文字列にします。 |
Cisco IOS XE Denali 16.3 以降では、ip nhrp map multicast dynamic は既定で有効になっています。この記事の検証環境では明示的に設定しています。
スポーク1(R5)の設定
スポークにハブ宛てのトンネルを作る
スポークの R5 を設定します。フェーズ1のスポークは、tunnel destination でハブの NBMA アドレスを指定した、ふつうの GRE トンネルです(tunnel mode は既定の GRE のまま)。トンネルの行き先がハブに固定されるので、スポーク間の通信もすべてハブへ送られます。
R5
R5(config)#interface Tunnel0 R5(config-if)# ip address 192.168.0.5 255.255.255.0 R5(config-if)# ip nhrp authentication DMVPNPWD R5(config-if)# ip nhrp map 192.168.0.2 169.254.23.2 R5(config-if)# ip nhrp map multicast 169.254.23.2 R5(config-if)# ip nhrp network-id 1 R5(config-if)# ip nhrp nhs 192.168.0.2 R5(config-if)# tunnel source 169.254.35.5 R5(config-if)# tunnel destination 169.254.23.2
通常の GRE トンネルの設定に加えて、スポークで使っている DMVPN の設定は次のとおりです(ip nhrp authentication と ip nhrp network-id はハブと同じ意味です)。
| コマンド | 説明 |
|---|---|
| ip nhrp map 192.168.0.2 169.254.23.2 | ハブのトンネルアドレス(192.168.0.2)とハブの NBMA アドレス(169.254.23.2)の対応を静的に登録します。 |
| ip nhrp map multicast 169.254.23.2 | このトンネルから送るマルチキャストの送り先を、ハブの NBMA アドレスにします。指定するのはトンネルアドレスではなく NBMA アドレスです。OSPF などのルーティングプロトコルをハブと動かすときに必要です。 |
| ip nhrp nhs 192.168.0.2 | NHS(ハブ)をトンネルアドレスで指定します。R5 はこの宛先へ NHRP の登録を送ります。 |
| tunnel destination 169.254.23.2 | トンネルの宛先をハブの NBMA アドレスに固定します。フェーズ1のスポークの形です。 |
トンネルのアップと show dmvpn:ハブに登録されたか
R2 と R5 の設定が終わると、R5 のトンネルインターフェースがアップします。
R5
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up
R2 で show dmvpn を実行し、R5 が登録されているかを確認します。
R2
R2#show dmvpn
Legend: Attrb --> S - Static, D - Dynamic, I - Incomplete
N - NATed, L - Local, X - No Socket
# 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:Hub, NHRP Peers:2,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.35.5 192.168.0.5 UP 00:12:30 D
| 表示 | 意味 |
|---|---|
| Type:Hub | このルータがハブとして動いていることを示します。 |
| Peer NBMA Addr | スポークの NBMA アドレス(169.254.35.5)です。 |
| Peer Tunnel Add | スポークのトンネルアドレス(192.168.0.5)です。NBMA アドレスとの対応がとれています。 |
| State UP | このスポークとの NHRP のやり取りができている状態です。 |
| Attrb D | Dynamic、つまりスポークからの登録で動的に作られたエントリです。 |
パケットキャプチャ:NHRP の登録の中身
R5 が送った NHRP Registration Request をキャプチャで見てみます。キャプチャは R5 と R3 の間(VLAN 35)で取ったものです。NHRP は GRE でカプセル化され、外側の IP ヘッダはアンダーレイのアドレス(R5 → R2)になっています。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 351▸ Internet Protocol Version 4, Src: 169.254.35.5, Dst: 169.254.23.2▸ Generic Routing Encapsulation (NHRP)2▾ Next Hop Resolution Protocol (NHRP Registration Request) ▸ NHRP Fixed Header ▾ NHRP Mandatory Part Source Protocol Len: 4 Destination Protocol Len: 43 ▸ Flags: 0x8002, Uniqueness Bit, Cisco NAT Supported Request ID: 0x00010004 (65540)4 Source NBMA Address: 169.254.35.5 Source Protocol Address: 192.168.0.5 Destination Protocol Address: 192.168.0.2 ▸ Client Information Entry ▸ Responder Address Extension ▸ Forward Transit NHS Record Extension ▸ Reverse Transit NHS Record Extension ▸ NHRP Authentication Extension ▸ Cisco NAT Address Extension ▸ End of Extension
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Src: 169.254.35.5, Dst: 169.254.23.2 | 外側の IP ヘッダです。R5 の NBMA アドレスから、ハブの NBMA アドレス(ip nhrp map で登録した値)へ送っています。 |
| 2 | NHRP Registration Request | スポークからハブへの登録要求です。 |
| 3 | Uniqueness Bit | このトンネルアドレスの登録が一意であることを示すフラグです。Cisco ルータでは既定で付きます。 |
| 4 | Source NBMA Address ほか | 自分の NBMA アドレス(169.254.35.5)とトンネルアドレス(192.168.0.5)を、NHS のトンネルアドレス(192.168.0.2)に知らせています。 |
これに対して、R2 は NHRP Registration Reply を返します。Reply は Request をもとに作られるため、NHRP の中のアドレス(Source NBMA Address など)は Request と同じ値のままで、外側の IP ヘッダだけが R2 → R5 の向きになります。
▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 351▸ Internet Protocol Version 4, Src: 169.254.23.2, Dst: 169.254.35.5▸ Generic Routing Encapsulation (NHRP)2▾ Next Hop Resolution Protocol (NHRP Registration Reply) ▸ NHRP Fixed Header ▾ NHRP Mandatory Part Source Protocol Len: 4 Destination Protocol Len: 4 ▸ Flags: 0x8002, Uniqueness Bit, Cisco NAT Supported Request ID: 0x00010005 (65541)3 Source NBMA Address: 169.254.35.5 Source Protocol Address: 192.168.0.5 Destination Protocol Address: 192.168.0.2 ▸ Client Information Entry ▸ Responder Address Extension ▸ Forward Transit NHS Record Extension ▸ Reverse Transit NHS Record Extension ▸ NHRP Authentication Extension ▸ Cisco NAT Address Extension ▸ End of Extension
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Src: 169.254.23.2, Dst: 169.254.35.5 | 外側の IP ヘッダは、ハブからスポークへの向きです。 |
| 2 | NHRP Registration Reply | ハブからの登録応答です。 |
| 3 | Source NBMA Address ほか | Request と同じ値です。どのスポークの登録に対する応答かを表しています。 |
スポーク2(R6)の設定
2台目のスポークを追加する
スポーク2の設定は、スポーク1の設定のうち、トンネルインターフェースの IP アドレスと tunnel source のアドレスを変えるだけです。ハブ側の設定は変える必要がありません。
R6
R6(config)#interface Tunnel0 R6(config-if)# ip address 192.168.0.6 255.255.255.0 R6(config-if)# ip nhrp authentication DMVPNPWD R6(config-if)# ip nhrp map 192.168.0.2 169.254.23.2 R6(config-if)# ip nhrp map multicast 169.254.23.2 R6(config-if)# ip nhrp network-id 1 R6(config-if)# ip nhrp nhs 192.168.0.2 R6(config-if)# tunnel source 169.254.36.6 R6(config-if)# tunnel destination 169.254.23.2
R2 で show dmvpn を実行し、R6 も登録されたことを確認します。
R2
R2#show dmvpn
Legend: Attrb --> S - Static, D - Dynamic, I - Incomplete
N - NATed, L - Local, X - No Socket
# 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:Hub, NHRP Peers:2,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.35.5 192.168.0.5 UP 00:12:30 D
1 169.254.36.6 192.168.0.6 UP 00:00:18 D
R5 に加えて R6 のエントリ(NBMA アドレス 169.254.36.6、トンネルアドレス 192.168.0.6)が、State UP、Attrb D で並んでいます。
疎通試験
オーバーレイで疎通を確かめる
これで DMVPN によるオーバーレイネットワーク(192.168.0.0/24)ができました。R2(ハブ)から R5、R6(スポーク)のトンネルアドレスへ ping します。
R2
R2#ping 192.168.0.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.0.5, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 24/33/40 ms R2#ping 192.168.0.6 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.0.6, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 40/43/48 ms
次に、スポーク間の通信として R6 から R5 へ ping します。
R6
R6#ping 192.168.0.5
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.5, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 52/67/92 ms
パケットキャプチャ:スポーク間の通信はハブを折り返す
R6 から R5 への ping を R2(ハブ)でキャプチャすると、ping 1往復で4つのパケットが見えます。同じ Echo request が2回出ているのは、R6 から届いたパケットと、R2 が R5 へ転送したパケットの両方を見ているからです。2回目は R2 がルーティングした分だけ TTL が1つ減っています。
| No. | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 1 | 192.168.0.6 | 192.168.0.5 | ICMP | Echo (ping) request id=0x0009, seq=0/0, ttl=255 |
| 2 | 192.168.0.6 | 192.168.0.5 | ICMP | Echo (ping) request id=0x0009, seq=0/0, ttl=254 |
| 3 | 192.168.0.5 | 192.168.0.6 | ICMP | Echo (ping) reply id=0x0009, seq=0/0, ttl=255 |
| 4 | 192.168.0.5 | 192.168.0.6 | ICMP | Echo (ping) reply id=0x0009, seq=0/0, ttl=254 |
| 192.168.0.6 | 192.168.0.5 | ICMP | Echo (ping) request id=0x0009, seq=1/256, ttl=255 | |
| 192.168.0.6 | 192.168.0.5 | ICMP | Echo (ping) request id=0x0009, seq=1/256, ttl=254 | |
| 192.168.0.5 | 192.168.0.6 | ICMP | Echo (ping) reply id=0x0009, seq=1/256, ttl=255 | |
| 192.168.0.5 | 192.168.0.6 | ICMP | Echo (ping) reply id=0x0009, seq=1/256, ttl=254 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | request ttl=255 | R6 が送った Echo request が R2 に届いたところです。 |
| 2 | request ttl=254 | R2 が R5 へ転送した同じパケットです。R2 を1ホップ通ったので TTL が1減っています。 |
| 3 | reply ttl=255 | R5 が返した Echo reply が R2 に届いたところです。 |
| 4 | reply ttl=254 | R2 が R6 へ転送した Echo reply です。 |
このように、フェーズ1ではスポーク同士が同じ 192.168.0.0/24 にいても、通信は必ずハブを通ります。スポーク間で直接トンネルを張れるようにしたのがフェーズ2です。
うまくいかないときの切り分け
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| スポークのトンネルがアップしない | アンダーレイでハブの NBMA アドレスに届かない | スポークから tunnel destination のアドレスへ ping する。経路(STEP 1 のスタティックルート)を確認する |
ハブの show dmvpn にスポークが出ない | ip nhrp map や ip nhrp nhs のアドレスの誤り、NHRP 認証文字列の不一致 | スポークの show running-config interface Tunnel0 と、ハブとの認証文字列を見比べる |
| ハブからスポークのトンネルアドレスに ping が通らない | ハブにそのスポークの NHRP エントリがない | ハブで show dmvpn や show ip nhrp を実行し、対象のトンネルアドレスのエントリがあるか見る |
| OSPF などのネイバーがスポークと張れない | マルチキャストの送り先がない | ハブの ip nhrp map multicast dynamic、スポークの ip nhrp map multicast(NBMA アドレスを指定しているか)を確認する |
まとめ
フェーズ1では、ハブだけが mGRE で、スポークはハブ宛ての GRE トンネルを持ちます。スポークは NHRP でハブに登録し、スポーク間の通信はハブを折り返します。
| 設定 | ハブ(R2) | スポーク(R5・R6) |
|---|---|---|
| トンネルの形 | tunnel mode gre multipoint | tunnel destination(ハブの NBMA アドレス) |
| NHRP の有効化 | ip nhrp network-id | ip nhrp network-id |
| NHS の指定 | ― | ip nhrp nhs(ハブのトンネルアドレス) |
| アドレスの対応 | スポークからの登録で動的に作る | ip nhrp map(ハブの分を静的に書く) |
| マルチキャスト | ip nhrp map multicast dynamic | ip nhrp map multicast(ハブの NBMA アドレス) |
| 認証(任意) | ip nhrp authentication | ip nhrp authentication(ハブと同じ文字列) |
コメント