【DMVPN】フェーズ1上のOSPF( Broadcastタイプ)

 

DMVPN フェーズ1では、スポーク同士の通信もすべてハブを経由します。この記事では、DMVPN フェーズ1のトンネルで OSPF のネットワークタイプを broadcast にして、ネイバーと DR の選び方、経路と実際の通信の流れを確かめます。broadcast はイーサネットの既定のネットワークタイプで、複数のルータが同じセグメントにつながるマルチアクセスのネットワークで使います。

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

この記事でわかること
  1. broadcast では Hello をマルチキャストで送り、ネイバーを自動で見つけること
  2. スポークが DR に選ばれたときの直し方(優先度 0 とプロセスのリセット)
  3. フェーズ1では、経路のネクストホップがスポークでも通信はハブを経由すること

検証構成

ハブの R2 と、スポークの R5・R6 を DMVPN のトンネル(192.168.0.0/24)でつなぎ、すべてエリア0にします。トンネルインターフェースの OSPF ネットワークタイプを broadcast にします。図は、この記事で最終的にできあがる状態(ハブが DR、スポークは優先度 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.6broadcastbroadcastbroadcastPriority 1(DR)Priority 0Priority 0
図1 検証構成(トンネルのネットワークタイプは broadcast)

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

R2(ハブ)

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

R5(スポーク)

R5(config)# interface Tunnel0
R5(config-if)# ip ospf network broadcast

R6(スポーク)

R6(config)# interface Tunnel0
R6(config-if)# ip ospf network broadcast

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

ネットワークタイプは BROADCAST で、Hello 間隔は 10 秒、Dead 間隔は 40 秒です。

R2# show ip ospf interface tunnel0

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 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 10, Dead 40, Wait 40, Retransmit 5
    oob-resync timeout 40
    Hello due in 00:00:08

Hello パケットを見る

R2 が送る Hello をキャプチャすると、宛先はマルチキャストアドレスの 224.0.0.5 です。この Hello でネイバーを自動で見つけます。外側の IP ヘッダを見ると、マルチキャストの Hello が GRE でカプセル化され、スポーク(R5)の NBMA アドレス宛てのユニキャストで送られていることもわかります。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark)画面イメージ
▸ Ethernet II, Src: 00:00:00_00:22:22 (00:00:00:00:22:22), Dst: 00:00:00_00:33:33 (00:00:00:00:33:33)▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 231▸ Internet Protocol Version 4, Src: 169.254.23.2, Dst: 169.254.35.5▸ Generic Routing Encapsulation (IP)2▸ Internet Protocol Version 4, Src: 192.168.0.2, Dst: 224.0.0.5▾ Open Shortest Path First  ▾ OSPF Header      Version: 23      Message Type: Hello Packet (1)      Packet Length: 52      Source OSPF Router: 2.2.2.2      Area ID: 0.0.0.0 (Backbone)      Checksum: 0x11d2 [correct]      Auth Type: Null (0)      Auth Data (none): 0000000000000000  ▸ OSPF Hello Packet  ▸ OSPF LLS Data Block
図2 R2 が送った Hello パケット(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Src: 169.254.23.2, Dst: 169.254.35.5
Generic Routing Encapsulation
外側の IP ヘッダと GRE。R2 の NBMA アドレスから R5 の NBMA アドレスへのユニキャスト
2Src: 192.168.0.2, Dst: 224.0.0.5トンネルの中の IP ヘッダ。OSPF の Hello はマルチキャスト(224.0.0.5)宛て
3Message Type: Hello Packet (1)OSPF パケットの種類が Hello であること

DMVPN のトンネルでマルチキャストを送るには、NHRP のマルチキャストの設定が必要です。ハブはマルチキャストのパケットをスポークごとにコピーし、それぞれの NBMA アドレスへユニキャストで送ります。

ネイバーと DR を確認する

R2 のネイバーを見ると、スポークの R6 が DR、R5 が DROTHER になっています。

R2# show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
5.5.5.5           1   FULL/DROTHER    00:00:36    192.168.0.5     Tunnel0
6.6.6.6           1   FULL/DR         00:00:32    192.168.0.6     Tunnel0

DMVPN では、スポーク同士は直接 Hello をやり取りできず、どちらもハブとしかつながっていません。スポークが DR になると、ほかのスポークとの間で LSA をやり取りできず、経路が一部しか届かなくなります。全員とやり取りできるハブだけが DR になるようにします。

スポークの優先度を 0 にする

スポークの R5・R6 で、トンネルインターフェースの OSPF の優先度を 0 にします。優先度 0 のルータは DR・BDR に選ばれません。

R5

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

R6

R6(config)#interface tunnel 0
R6(config-if)#ip ospf priority 0

DR の選出には「後から優先度の高いルータが現れても、今の DR を交代させない」性質があります。優先度を変えただけでは DR は変わらないので、ハブの R2 で OSPF のプロセスをリセットして、選び直させます。

R2

R2# clear ip ospf process
Reset ALL OSPF processes? [no]: yes
R2#
%OSPF-5-ADJCHG: Process 1, Nbr 5.5.5.5 on Tunnel0 from FULL to DOWN, Neighbor Down: 
Interface down or detached
%OSPF-5-ADJCHG: Process 1, Nbr 6.6.6.6 on Tunnel0 from FULL to DOWN, Neighbor Down: 
Interface down or detached
%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

DR を確認する

R2 から見ると、R5・R6 はどちらも DROTHER になりました。

R2

R2# show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
5.5.5.5           0   FULL/DROTHER    00:00:39    192.168.0.5     Tunnel0
6.6.6.6           0   FULL/DROTHER    00:00:35    192.168.0.6     Tunnel0
R2#

スポークの R5・R6 から見ると、ハブの R2 が DR として FULL になっています。

R5

R5# show ip ospf neighbor 
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:33    192.168.0.2     Tunnel0

R6

R6# show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:32    192.168.0.2     Tunnel0

経路を確認する

R2

R2# show ip route ospf
      5.0.0.0/32 is subnetted, 1 subnets
O        5.5.5.5 [110/1001] via 192.168.0.5, 00:01:29, Tunnel0
      6.0.0.0/32 is subnetted, 1 subnets
O        6.6.6.6 [110/1001] via 192.168.0.6, 00:01:29, Tunnel0

スポークの R5 から見た 6.6.6.6 のネクストホップは、ハブの R2(192.168.0.2)ではなく、R6 のトンネルアドレス 192.168.0.6 です。R6 から見た 5.5.5.5 も、R5 の 192.168.0.5 です。broadcast のように同じセグメントを共有するネットワークタイプでは、ネクストホップがハブに書き換わらないためです。

R5

R5#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:02:53, Tunnel0
      6.0.0.0/32 is subnetted, 1 subnets
O        6.6.6.6 [110/1001] via 192.168.0.6, 00:02:53, Tunnel0

R6

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:03:12, Tunnel0
      5.0.0.0/32 is subnetted, 1 subnets
O        5.5.5.5 [110/1001] via 192.168.0.5, 00:03:02, Tunnel0

通信の流れを確かめる

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 = 76/87/116 ms

トレースルートすると、1ホップ目はハブの R2(192.168.0.2)、2ホップ目が R5(192.168.0.5)です。ルーティングテーブルのネクストホップは 192.168.0.5 なのに、実際の通信はハブを経由しています。

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.2 22 msec 37 msec 42 msec
  2 192.168.0.5 94 msec 49 msec 80 msec

DMVPN フェーズ1では、スポークのトンネルは宛先がハブに固定されたポイントツーポイントの GRE トンネルです。ネクストホップが 192.168.0.5 でも、パケットはハブ宛てにカプセル化されて送られ、ハブが R5 へ転送します。スポーク間の直接通信は、NHRP で相手を調べてトンネルを張るフェーズ2の機能です。

DMVPNR2(Hub)R5R6192.168.0.5192.168.0.6R6 → R2 → R5
図3 フェーズ1のスポーク間通信(ネクストホップは R5 でも、トンネルの宛先がハブなので R2 を経由する)

まとめ

項目broadcast(DMVPN フェーズ1)
ネイバーの検出自動(Hello を 224.0.0.5 へ送る。NHRP のマルチキャストの設定が必要)
DRハブを DR にする(スポークは ip ospf priority 0。変更後はプロセスをリセットして選び直す)
タイマーHello 10 秒、Dead 40 秒
経路と通信ネクストホップは相手スポーク。ただしフェーズ1ではトンネルの宛先がハブなので、通信はハブを経由する

コメント