【DMVPN】フェーズ2をわかりやすく解説

DMVPN には、フェーズ1〜3の3つの動作モードがあります。この記事ではフェーズ2を取り上げ、フェーズ1との違いを中心に設定と動作を確かめます。

前の記事

フェーズ1の設定と、この記事で使うアンダーレイの設定は 【DMVPN】フェーズ1をわかりやすく解説 にまとめています。

フェーズ2でも、スポークは NHRP で自分のアドレスをハブに登録し、ハブはマルチポイント GRE(mGRE)で全スポークとつながります。フェーズ1と違うのは、スポークのトンネルも mGRE にすることです。スポークは通信したい相手スポークの NBMA アドレスを NHRP でハブに問い合わせ、スポーク間に動的にトンネルを張ります。トンネルができたあとは、スポーク間の通信はハブを経由しません。

この記事でわかること
  1. ハブ(R2)に mGRE のトンネルを作る(フェーズ1と同じ)
  2. スポーク(R5)のトンネルを mGRE にして、ハブに登録する
  3. 2台目のスポーク(R6)を同じ形で追加する
  4. ハブからスポークへの疎通を確かめる
  5. スポーク間の通信で、動的なトンネルができることを確かめる

DMVPN フェーズ2の仕組み

アンダーレイ mGREmGRE 動的トンネル ハブNHS スポーク1NHC スポーク2NHC
図1 DMVPN フェーズ2の構成(スポーク間には必要なときに動的なトンネルができる)

フェーズ1では、スポークのトンネルは tunnel destination でハブに固定されていました。そのため、スポーク間の通信もすべてハブへ送られ、ハブで折り返していました。フェーズ2ではスポークも mGRE にするので、トンネルの宛先を通信のたびに決められます。宛先の NBMA アドレスは、ハブ(NHS)の NHRP テーブルに問い合わせて知ります。

項目フェーズ1フェーズ2
ハブのトンネルmGREmGRE(フェーズ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の記事と同じなので、ここでは省きます。

アンダーレイ 169.254.23.0/24 .2.3 169.254.35.0/24 169.254.36.0/24 .3.3 .5.6 動的 Tu0 .2Tu0 .5Tu0 .6 オーバーレイ 192.168.0.0/24(mGRE) R2ハブ R3 R5スポーク1 R6スポーク2
図2 検証構成(灰色の線がアンダーレイ、紺の破線がトンネル)
補足

フェーズ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 SStatic、つまり 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 と直接トンネルを張ります。

① NHRP で問い合わせR5 の NBMA アドレスは? ② 直接のトンネルで通信 データはハブを経由しない R2ハブ(NHS) R6NBMA 169.254.36.6 R5NBMA 169.254.35.5
図3 スポーク間の通信(NHRP で相手を解決したあと、データはハブを経由しない)

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 multipointtunnel mode gre multipoint(フェーズ1との違い)
NHRP の有効化ip nhrp network-idip nhrp network-id
NHS の指定―ip nhrp nhs(ハブのトンネルアドレス)
アドレスの対応スポークからの登録で動的に作るip nhrp map(ハブの分を静的に書く)。相手スポークの分は NHRP で動的に作る
マルチキャストip nhrp map multicast dynamicip nhrp map multicast(ハブの NBMA アドレス)
認証(任意)ip nhrp authenticationip nhrp authentication(ハブと同じ文字列)

 

コメント