DMVPN フェーズ2では、スポーク同士の通信はハブを経由せず、スポーク間で直接やり取りされます。この記事では、DMVPN フェーズ2のトンネルで OSPF のネットワークタイプを non-broadcast にして、ネイバーの作り方と、スポーク間の通信が直接流れることを確かめます。
DMVPN フェーズ2の構成は 【DMVPN】フェーズ2をわかりやすく解説、DMVPN 上で OSPF を動かすときの基本は 【OSPF】DMVPN上でOSPFを有効後、大量にエラーが出る を参照してください。
- non-broadcast では
neighborコマンドでネイバーを指定する必要があること - ハブを DR にし、スポークを優先度 0 にする理由
- フェーズ2でスポーク間の通信がハブを経由しないこと
検証構成
ハブの R2 と、スポークの R5・R6 を DMVPN のトンネル(192.168.0.0/24)でつなぎ、すべてエリア0にします。トンネルインターフェースの OSPF ネットワークタイプを non-broadcast にし、スポークの優先度は 0 にします。
ネットワークタイプを 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
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 1 | R2 が DR になっている |
| Hello 30, Dead 120 | non-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
まとめ
| 項目 | non-broadcast(DMVPN フェーズ2) |
|---|---|
| ネイバーの検出 | 自動ではしない。ハブで neighbor にスポークのアドレスを指定する |
| DR | ハブを DR にする(スポークは ip ospf priority 0) |
| タイマー | Hello 30 秒、Dead 120 秒 |
| スポーク間の経路 | ネクストホップは相手スポークのトンネルアドレス。ハブを経由せず直接通信する |
non-broadcast はスポークを追加するたびにハブへ neighbor を足す必要があり、スポークが多い環境では手間がかかります。ネイバーを自動で見つける broadcast タイプと比べて選びます。
コメント