【DMVPN】フェーズ2上でのOSPF(non-Broadcastタイプ)

 

DMVPN フェーズ2では、スポーク同士の通信はハブを経由せず、スポーク間で直接やり取りされます。この記事では、DMVPN フェーズ2のトンネルで OSPF のネットワークタイプを non-broadcast にして、ネイバーの作り方と、スポーク間の通信が直接流れることを確かめます。

DMVPN フェーズ2の構成は 【DMVPN】フェーズ2をわかりやすく解説、DMVPN 上で OSPF を動かすときの基本は 【OSPF】DMVPN上でOSPFを有効後、大量にエラーが出る を参照してください。

この記事でわかること
  1. non-broadcast では neighbor コマンドでネイバーを指定する必要があること
  2. ハブを DR にし、スポークを優先度 0 にする理由
  3. フェーズ2でスポーク間の通信がハブを経由しないこと

検証構成

ハブの R2 と、スポークの R5・R6 を DMVPN のトンネル(192.168.0.0/24)でつなぎ、すべてエリア0にします。トンネルインターフェースの OSPF ネットワークタイプを non-broadcast にし、スポークの優先度は 0 にします。

OSPF Area 0DMVPNTunnel 192.168.0.0/24R2(Hub)Lo0 2.2.2.2/32R5Spoke1Lo0 5.5.5.5/32R6Spoke2Lo0 6.6.6.6/32.2.5.6non-broadcastnon-broadcastnon-broadcastPriority 1(DR)Priority 0Priority 0
図1 検証構成(トンネルのネットワークタイプは non-broadcast)

ネットワークタイプを non-broadcast にする

R2(ハブ)

R2(config)#interface tunnel0
R2(config-if)#ip ospf network non-broadcast

R5(スポーク)

R5(config)#interface tunnel 0
R5(config-if)#ip ospf network non-broadcast
R5(config-if)#ip ospf priority 0

R6(スポーク)

R6(config)#interface tunnel 0
R6(config-if)#ip ospf network non-broadcast
R6(config-if)#ip ospf priority 0
スポークの優先度を 0 にする理由

DR はセグメント内のすべてのルータと隣接関係を作る必要がありますが、DMVPN で全員とやり取りできるのはハブだけです。スポークが DR や BDR になると、ほかのスポークとの間で LSA をやり取りできず、経路が一部しか届かなくなります。スポークの優先度を 0 にして、ハブだけが DR になるようにします。

インターフェースの状態を確認する

ネットワークタイプが NON_BROADCAST になり、Hello 間隔は 30 秒、Dead 間隔は 120 秒です。ハブの R2 が DR です。

R2#show ip ospf interface  tunnel 0
Tunnel0 is up, line protocol is up 
  Internet Address 192.168.0.2/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 2.2.2.2, Network Type NON_BROADCAST, Cost: 1000
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
        0           1000      no          no            Base
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 2.2.2.2, Interface address 192.168.0.2
  No backup designated router on this network
  Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
    oob-resync timeout 120
    Hello due in 00:00:06
表示意味
Network Type NON_BROADCASTネイバーを自動では見つけないネットワークタイプ。Hello はマルチキャストではなく、指定した相手へユニキャストで送ります
Cost: 1000トンネルインターフェースの既定の帯域(100 kbit/s)から計算したコスト
State DR, Priority 1R2 が DR になっている
Hello 30, Dead 120non-broadcast の既定のタイマー。broadcast(Hello 10、Dead 40)より長い

neighbor コマンドでネイバーを指定する

この時点では、R2 のネイバーは1つも表示されません。non-broadcast ではネイバーを自動で見つけないためです。

R2# show ip ospf neighbor
R2#

ハブの R2 で、neighbor コマンドにスポークのトンネルアドレスを指定します。

R2

R2(config)# router ospf 1 
R2(config-router)# neighbor 192.168.0.5
R2(config-router)# neighbor 192.168.0.6

すると、R5・R6 との隣接関係が FULL になります。今回はハブの R2 だけに neighbor を設定しました。スポーク側は、ハブから届いた Hello に応えるので、neighbor の設定は不要です。

%OSPF-5-ADJCHG: Process 1, Nbr 6.6.6.6 on Tunnel0 from LOADING to FULL, Loading Done
%OSPF-5-ADJCHG: Process 1, Nbr 5.5.5.5 on Tunnel0 from LOADING to FULL, Loading Done

スポークのネイバーと経路を確認する

スポークの R6 では、ハブの R2 が DR として FULL になっています。

R6

R6#show ip ospf neighbor 

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:01:56    192.168.0.2     Tunnel0

R6 は、R2 と R5 のループバックを学習しています。5.5.5.5 のネクストホップは、ハブの R2(192.168.0.2)ではなく、R5 のトンネルアドレス 192.168.0.5 です。

R6# show ip route ospf
      2.0.0.0/32 is subnetted, 1 subnets
O        2.2.2.2 [110/1001] via 192.168.0.2, 00:01:57, Tunnel0
      5.0.0.0/32 is subnetted, 1 subnets
O        5.5.5.5 [110/1001] via 192.168.0.5, 00:01:57, Tunnel0

non-broadcast や broadcast のように同じセグメントを共有するネットワークタイプでは、経路のネクストホップは、その経路を持つルータのセグメント上のアドレスになります。DR が LSA を中継しても、ネクストホップはハブに書き換わりません。これがフェーズ2でスポーク間の直接通信ができる理由です。

スポーク間の通信

通信前の DMVPN の状態

R6 の DMVPN の状態を見ると、トンネルはハブの R2 とだけつながっています(Attrb が S=スタティック)。

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 04:37:29     S

R6 から R5 へ ping する

R6 のループバックから R5 のループバックへ ping します。

R6# ping 5.5.5.5 source 6.6.6.6
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:
Packet sent with a source address of 6.6.6.6 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/65/164 ms

もう一度 DMVPN の状態を見ると、R5 とのトンネルができています(Attrb が D=ダイナミック)。R6 が NHRP で 192.168.0.5 の NBMA アドレス(169.254.35.5)を調べ、R5 と直接トンネルを張ったためです。

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 04:38:20     S
     1 169.254.35.5        192.168.0.5    UP 00:00:18     D

トレースルートで経路を確かめる

R6 から R5 のループバックへトレースルートすると、1ホップ目が R5(192.168.0.5)です。ハブを経由せず、R5 へ直接届いています。

R6# traceroute 5.5.5.5  
Type escape sequence to abort.
Tracing the route to 5.5.5.5
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.0.5 20 msec 20 msec 20 msec
DMVPNR2(Hub)R5R6192.168.0.5192.168.0.6R6 → R5 直接
図2 フェーズ2のスポーク間通信(ハブを経由せず、R6 から R5 へ直接届く)

まとめ

項目non-broadcast(DMVPN フェーズ2)
ネイバーの検出自動ではしない。ハブで neighbor にスポークのアドレスを指定する
DRハブを DR にする(スポークは ip ospf priority 0)
タイマーHello 30 秒、Dead 120 秒
スポーク間の経路ネクストホップは相手スポークのトンネルアドレス。ハブを経由せず直接通信する

non-broadcast はスポークを追加するたびにハブへ neighbor を足す必要があり、スポークが多い環境では手間がかかります。ネイバーを自動で見つける broadcast タイプと比べて選びます。

コメント