[CCNA] OSPF – DR/BDRの選定

OSPFのDR/BDRを選出する仕組みを見ていく

・DR(Disignated Router)
 セグメント内でのLSAの交換を取りまとめる代表ルータ。

・BDR(Backup Disignated Router)
 DRのバックアップとして動作するルータ。

・DROTHER
 それ以外のルータ

LSAの交換を各ルータとDR,BDR間のみすることで、
トラフィック量を抑えることができる。

※LSA(Link State Advertisement : リンク状態広告)
 インターフェイスや接続しているネットワークなどの情報。
 OSPF機器はこれらの情報からネットワークマップを生成し、
 ルーティングテーブルを構成する。

これらは、下記の基準によって選出される。

・OSPFプライオリティ(デフォルトは1)
 プライオリティが最大のものがDR、
 2番目のものがBDRになる。
 (プライオリティ値が0のものは必ずDROTHERになる)

・ルータID
 プライオリティ値が同じ場合は、
 ルータIDが大きいものからDR,BDRが選出される。
 ルータIDのフォーマットはIPアドレス形式。

ルータIDは下記のように決まる。(上から優先度:高)
・ルータIDをコマンドで明示的に指定する
・ループバックインターフェイスのIPアドレス
・アクティブなインターフェイスの中で最大のIPアドレス

○動作確認

以上のことを実機で確かめていきたいと思います。

環境は、前回の記事で設定した、
 Cisco C841M (以下、C841側)
 Debian に入れたQuagga(以下、debian側)
で見ていきます。

現状の設定は、

・C841側でネイバー確認
Router#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.11.100    1   FULL/DR         00:00:36    192.168.11.100  GigabitEthernet0/4.1

・debian側でネイバー確認
ospfd# show ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.11.50     1 Full/Backup       35.798s 192.168.11.50   eth0:192.168.11.100      0     0     0

debian側がDR、C841がBDRになっていることが分かる。

今回は、プライオリティの設定もなし、
ルータIDも明示的に設定していない、
ループバックインターフェイスのIPアドレスも設定していないので、

アクティブなインターフェイスのIPアドレスがルータIDとなり、
そのルータIDの値が大きいdebian側がDRとなりました。

ちなみに、その時のやり取りを、
WireSharkでキャプチャしてみると、

まずは、お互いにHelloパケットを飛ばしています。

内容はこんな感じ。
(From C841側)

“OSPF Hello Packet”の中を見ると、
DRは自分、BDRは 0.0.0.0 としています。

(From debian側)

debian側は、C841側のHelloを受け取ってるので、
ネイバーは検出済み。
DR/BDRはまだ決定していない様子。

その後、DescriptionやUpdateのやり取りがありますが、
10秒後くらいに再度送られているHelloを見ると、

(From C841側)

(From debian側)

お互いに、DR/BDRの選定・認識ができてますね。
この間に選定が行われたようです。

●DR/BDR入れ替え

で、この状態から、
C841側のGigabitEthernet0/4.1のIPアドレスを変更する。
192.168.11.50 → 192.168.11.200

Router(config)#int GigabitEthernet 0/4.1
Router(config-subif)#ip address 192.168.11.200 255.255.255.0
Router(config-subif)#end
Router#clear ip ospf process (一度clearしてルータIDの変更を反映させる)
Reset ALL OSPF processes? [no]: y

Router#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.11.100    1   FULL/DR         00:00:35    192.168.11.100  GigabitEthernet0/4.1

あら?
debian側がDRのままですね。

一度、debian側がDRとしてネイバー関係が確立しているので、
そこにルータIDやPriorityの値が大きい機器が参入しても、
DRのポジションは変わらないと。

というわけで、
改めて1からネイバー関係を確立するために、
一度お互いのネイバー関係をリセットしてあげる必要がある。

互いのHelloパケットが届かないように、
物理的に切断してあげてtime outを待ちます。
(interfaceのリンクをdownさせないように注意)

デフォルトでtime outの時間(dead-interval)は40秒。(確認方法は↓↓)
通信を切断して40秒待つ。

ネイバーが検出されなくなったことを確認。

・C841側
Router#show ip ospf neighbor
Router#

・debian側
ospfd# show ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
ospfd#

この状態で、改めて接続してネイバー確立。
して、状態確認。

・C841側で確認
Router#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.11.100    1   FULL/BDR        00:00:33    192.168.11.100  GigabitEthernet0/4.1

・debian側で確認
ospfd# show ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.11.200    1 Full/DR           32.152s 192.168.11.200   eth0:192.168.11.100      0     0     0

DR/BDRが入れ替わりました。

●loopbackの設定

では、
ルータIDの決定に、他のinterfaceより、
loopbackのIPアドレスが優先されることを確認します。

C841で、例えば下記のように設定

Router(config)#int Loopback 0
Router(config-if)#ip address 1.1.1.1 255.255.255.255
Router(config-if)#exit
Router(config)#no router ospf 1 (※)
Router(config)#router ospf 1
Router(config-router)#network 192.168.11.0 0.0.0.255 area 0
Router(config-router)#end

Router#show ip ospf
Routing Process "ospf 1" with ID 1.1.1.1
Start time: 03:10:46.716, Time elapsed: 00:01:13.300
(以下略)

ルータIDが、loopbackのIPアドレスになりました。

アクティブなinterfaceのIPアドレスに
 ルータIDが既に設定されている場合は、
 loopbackのIPアドレスを設定した後に、
 一度OSPFプロセス自体を削除する必要がある。
 (clear ip ospf process コマンドでは反映されない)

ちなみに、この状態で、↑↑と同じ手順で、
1からネイバー確立する。

・C841側で確認
Router#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.11.100    1   FULL/DR         00:00:36    192.168.11.100  GigabitEthernet0/4.1

・debian側で確認
ospfd# show ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
1.1.1.1           1 Full/Backup       38.828s 192.168.11.200  eth0:192.168.11.100      0     0     0

DRがdebian側に変わりましたね。
ルータIDはdebain側の方が大きい値なので、
debian側がDR。

ルータIDの比較でDR/BDRを選ぶときは、
ルータIDの決定方法は関係なさそう。

●ルータID:明示的に設定

続いて、ルータIDをコマンドで明示的に設定してみる。

Router(config)#router ospf 1
Router(config-router)#router-id ?
  A.B.C.D  OSPF router-id in IP address format
Router(config-router)#router-id 192.168.11.80 (IPアドレス形式で指定)
% OSPF: Reload or use "clear ip ospf process" command, for this to take effect
Router(config-router)#end
Router#clear ip ospf process
Reset ALL OSPF processes? [no]: y

Router#show ip ospf
Routing Process "ospf 1" with ID 192.168.11.80
(以下略)

ルータIDを明示的に設定した場合は、
clear コマンドで設定値に反映される。

ちなみに、この設定で同様にDR/BDRの選定をさせてみても、
ルータIDの値が大きいdebian側がDRになる。

やっぱり、ルータIDの比較でDR/BDRを選ぶときは、
ルータIDの決定方法は関係ないと。

それもそのはず、パケットのOSPFヘッダーの中に、
ルータIDの決定方法なんて無いですもんねw

●Priorityの設定

では、OSPF Priority を設定してみる。
OSPF Priorityは、デフォルトでは1。
これを2に設定します。

Router(config)#interface GigabitEthernet 0/4.1
Router(config-subif)#ip ospf priority 2
Router(config-subif)#end

Router#show ip ospf interface
GigabitEthernet0/4.1 is up, line protocol is up
  Internet Address 192.168.11.200/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 192.168.11.80, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
        0           1         no          no            Base
  Transmit Delay is 1 sec, State DR, Priority 2 (←プライオリティ値が変更されている)
  Designated Router (ID) 192.168.11.80, Interface address 192.168.11.200
(以下略)

Priorityは即時に反映される。

で、同様の方法でネイバーを1から確立させると、

・C841側で確認
Router#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.11.100    1   FULL/BDR        00:00:30    192.168.11.100  GigabitEthernet0/4.1

・debian側で確認
ospfd# show ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.11.80     2 Full/DR           32.253s 192.168.11.200  eth0:192.168.11.100      0     0     0

最後に、Priorityを0に設定した時の動作を確認する。

・C841側
Router#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.11.100    1   FULL/DR         00:00:34    192.168.11.100  GigabitEthernet0/4.1

・debian側
ospfd# show ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.11.80     0 Full/DROther      32.070s 192.168.11.200  eth0:192.168.11.100      0     0     0

プライオリティが0になったルーターは、
即時にDROTHERになり、BDRがDRに昇格する。

●dead-intervalの確認:show ip ospf interface

Router#show ip ospf interface
GigabitEthernet0/4.1 is up, line protocol is up
  Internet Address 192.168.11.200/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 192.168.11.200, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
        0           1         no          no            Base
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 192.168.11.200, Interface address 192.168.11.200
  Backup Designated router (ID) 192.168.11.100, Interface address 192.168.11.100
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    oob-resync timeout 40
    Hello due in 00:00:05
(以下略)

●参考

(スマホ問題集付)徹底攻略Cisco CCNA Routing & Switching教科書 ICND2編[200-105J][200-125J]V3.0対応

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です