DMVPN には、フェーズ1〜3の3つの動作モードがあります。この記事ではフェーズ2を取り上げ、フェーズ1との違いを中心に設定と動作を確かめます。
フェーズ1の設定と、この記事で使うアンダーレイの設定は 【DMVPN】フェーズ1をわかりやすく解説 にまとめています。
フェーズ2でも、スポークは NHRP で自分のアドレスをハブに登録し、ハブはマルチポイント GRE(mGRE)で全スポークとつながります。フェーズ1と違うのは、スポークのトンネルも mGRE にすることです。スポークは通信したい相手スポークの NBMA アドレスを NHRP でハブに問い合わせ、スポーク間に動的にトンネルを張ります。トンネルができたあとは、スポーク間の通信はハブを経由しません。
- ハブ(R2)に mGRE のトンネルを作る(フェーズ1と同じ)
- スポーク(R5)のトンネルを mGRE にして、ハブに登録する
- 2台目のスポーク(R6)を同じ形で追加する
- ハブからスポークへの疎通を確かめる
- スポーク間の通信で、動的なトンネルができることを確かめる
DMVPN フェーズ2の仕組み
フェーズ1では、スポークのトンネルは tunnel destination でハブに固定されていました。そのため、スポーク間の通信もすべてハブへ送られ、ハブで折り返していました。フェーズ2ではスポークも mGRE にするので、トンネルの宛先を通信のたびに決められます。宛先の NBMA アドレスは、ハブ(NHS)の NHRP テーブルに問い合わせて知ります。
| 項目 | フェーズ1 | フェーズ2 |
|---|---|---|
| ハブのトンネル | mGRE | mGRE(フェーズ1と同じ) |
| スポークのトンネル | GRE(tunnel destination でハブを指定) | mGRE(tunnel mode gre multipoint) |
| スポーク間の通信 | 常にハブを経由する | NHRP で相手を解決し、スポーク間の動的なトンネルで直接通信する |
スポークの show dmvpn | ハブのエントリだけ | ハブ(S)に加え、通信した相手スポーク(D)のエントリが増える |
検証構成
構成はフェーズ1と同じです。R2 がハブ、R5 と R6 がスポーク、R3 がアンダーレイのルータです。アンダーレイ(169.254.0.0/16)の設定はフェーズ1の記事と同じなので、ここでは省きます。
フェーズ1と同じく、この検証では IPsec を使わず GRE だけで構成しています。実際の DMVPN ではトンネルを IPsec で保護(tunnel protection ipsec profile)し、ip mtu 1400 と ip tcp adjust-mss 1360 もあわせて設定する構成が Cisco の設定ガイドで案内されています。
ハブルータ(R2)の設定
ハブに mGRE のトンネルを作る
ハブの設定はフェーズ1とまったく同じです。tunnel mode gre multipoint で mGRE にし、ip nhrp map multicast dynamic で登録してきたスポークをマルチキャストの送り先に加えます。
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
スポーク1(R5)の設定
スポークのトンネルを mGRE にする
フェーズ1との違いは1行だけです。トンネルの宛先を tunnel destination で固定する代わりに、tunnel mode gre multipoint で mGRE にします。ハブの情報(ip nhrp map、ip nhrp map multicast、ip nhrp nhs)はフェーズ1と同じく静的に設定します。
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 mode gre multipoint
| コマンド | フェーズ1との違い |
|---|---|
| tunnel mode gre multipoint | フェーズ1の tunnel destination 169.254.23.2 の代わりに設定します。宛先を固定しないので、ハブにも相手スポークにも同じトンネルインターフェースで送れます。 |
| ip nhrp map 192.168.0.2 169.254.23.2 | フェーズ1と同じです。ハブのトンネルアドレスと NBMA アドレスの対応を静的に登録します。mGRE ではトンネルの宛先を書かないので、ハブに最初の登録を送るためにこの対応が必要です。 |
| ip nhrp nhs 192.168.0.2 | フェーズ1と同じです。登録と問い合わせの相手(NHS)としてハブを指定します。 |
トンネルのアップと show dmvpn:ハブとスポークの両方で確認
R2 と R5 の設定が終わると、R5 のトンネルインターフェースがアップします。
R5
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up
R2(ハブ)で show dmvpn を実行すると、R5 が動的なエントリ(Attrb D)として登録されています。
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:1,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.35.5 192.168.0.5 UP 00:00:31 D
R5 でも show dmvpn を確認します。R5 にはハブ(R2)のエントリがあり、Attrb は S(Static)です。ip nhrp map で静的に設定した対応だからです。
R5
R5#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:Spoke, NHRP Peers:1,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.23.2 192.168.0.2 UP 00:01:10 S
| 表示 | 意味 |
|---|---|
| Type:Spoke | このルータがスポークとして動いていることを示します。 |
| Peer NBMA Addr | ハブの NBMA アドレス(169.254.23.2)です。 |
| Peer Tunnel Add | ハブのトンネルアドレス(192.168.0.2)です。 |
| Attrb S | Static、つまり ip nhrp map で静的に設定したエントリです。 |
スポーク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 mode gre multipoint
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:04:31 D
1 169.254.36.6 192.168.0.6 UP 00:00:03 D
R6 の show dmvpn にも、R5 と同じくハブ(R2)のエントリが Attrb S で入っています。この時点では、スポークが知っているのはハブだけです。
R6
R6#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:Spoke, NHRP Peers:1,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.23.2 192.168.0.2 UP 00:01:03 S
疎通試験(ハブ→スポーク)
ハブからスポークへ ping する
これで 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/36/48 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 = 12/30/56 ms
疎通試験(スポーク間)
スポーク間で ping し、動的なトンネルを確かめる
スポーク間の通信として、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 = 16/64/148 ms
このとき R6 は、宛先 192.168.0.5 の NBMA アドレスをまだ知りません。そこで NHRP でハブに問い合わせ、R5 の NBMA アドレス(169.254.35.5)を知ったうえで、R5 と直接トンネルを張ります。
ping のあとで R6 の show dmvpn を見ると、NHRP Peers が 2 に増え、R5 へのエントリが Attrb D(Dynamic)で追加されています。
R6
R6#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:Spoke, NHRP Peers:2,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.23.2 192.168.0.2 UP 00:03:54 S
1 169.254.35.5 192.168.0.5 UP 00:00:35 D
R5 にも、R6 へのエントリが動的に作られています。
R5
R5#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:Spoke, NHRP Peers:2,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
----- --------------- --------------- ----- -------- -----
1 169.254.23.2 192.168.0.2 UP 00:09:04 S
1 169.254.36.6 192.168.0.6 UP 00:01:16 D
| 表示 | 意味 |
|---|---|
| NHRP Peers:2 | ハブに加えて、相手スポークとのエントリができたことを示します。 |
| 169.254.23.2 … S | ハブのエントリです。ip nhrp map で静的に設定したものです。 |
| 169.254.35.5 … D 169.254.36.6 … D | 相手スポークのエントリです。スポーク間の通信をきっかけに NHRP で動的に作られました。 |
このように、フェーズ2ではスポーク間にトンネルが動的に張られるため、トンネルができたあとのスポーク間の通信はハブを経由しません。
- スポーク間のトンネルができるまでの間(相手の NBMA アドレスを解決する前)は、パケットはハブを経由して転送されます。トンネルが作れなかった場合も、通信はハブ経由で続きます。
- スポーク間のトンネルは、一定時間通信がないと削除されます。次に通信するときに、もう一度 NHRP で解決します。
- スポークの先の LAN をルーティングプロトコルで広告する場合、スポークが受け取る経路のネクストホップが「相手スポークのトンネルアドレス」のままでないと、スポーク間のトンネルが使われません(たとえば EIGRP では、ハブに
no ip next-hop-self eigrpを設定します)。OSPF での例は関連記事にまとめています。
うまくいかないときの切り分け
| 状態 | よくある原因 | 確認すること |
|---|---|---|
スポーク間で ping は通るが、show dmvpn に相手スポークの D エントリができない | スポークのトンネルが mGRE になっていない(tunnel destination が残っている) | スポークの show running-config interface Tunnel0 で tunnel mode gre multipoint になっているか見る |
| スポーク間の ping が通らない | ハブに相手スポークの NHRP エントリがなく、問い合わせに答えられない。またはスポーク間でアンダーレイが届かない | ハブの show dmvpn に両方のスポークがあるか見る。スポークから相手スポークの NBMA アドレスへ ping する |
| スポークの LAN 宛ての通信がハブ経由のまま | ルーティングプロトコルの経路のネクストホップがハブになっている | スポークで show ip route を実行し、相手スポークの LAN の経路のネクストホップを見る |
まとめ
フェーズ2は、ハブの設定はフェーズ1のままで、スポークの tunnel destination を tunnel mode gre multipoint に変えた形です。スポークは NHRP でハブに相手の NBMA アドレスを問い合わせ、スポーク間に動的なトンネルを張ります。
| 設定 | ハブ(R2) | スポーク(R5・R6) |
|---|---|---|
| トンネルの形 | tunnel mode gre multipoint | tunnel mode gre multipoint(フェーズ1との違い) |
| NHRP の有効化 | ip nhrp network-id | ip nhrp network-id |
| NHS の指定 | ― | ip nhrp nhs(ハブのトンネルアドレス) |
| アドレスの対応 | スポークからの登録で動的に作る | ip nhrp map(ハブの分を静的に書く)。相手スポークの分は NHRP で動的に作る |
| マルチキャスト | ip nhrp map multicast dynamic | ip nhrp map multicast(ハブの NBMA アドレス) |
| 認証(任意) | ip nhrp authentication | ip nhrp authentication(ハブと同じ文字列) |
コメント