メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. OSPF記事一覧/

OSPF ルータID

目次

OSPF ルータIDとは

OSPFは、各ルータが生成したLSAをエリア内で交換し、全ルータが同じLSDB(トポロジマップ)を持つことで最短経路を計算します(仕組みはOSPFとはを参照してください)。このとき、「どのルータが生成したLSAか」「トポロジマップ上のどのノードか」を識別するために使われる32ビットの値がルータIDです。IPv4アドレスと同じドット付き10進表記(1.1.1.1など)で表されますが、IPアドレスそのものではなく単なる識別子であり、その値に到達できる必要はありません。

ルータIDはOSPFのあらゆる場面で使われます。

用途説明
LSAの生成元すべてのLSAのヘッダーにあるAdvertising Routerフィールド。Router-LSA(Type 1)ではLink State IDもルータIDになる。
HelloパケットOSPFヘッダーのRouter IDフィールドと、Helloに含まれるネイバー一覧。ネイバーはこの値で識別される。
DR/BDRの選出プライオリティが同じ場合、ルータIDが大きいルータがDRになる。
LSDB同期のマスター/スレーブExStart状態で、ルータIDが大きい方がマスターになる。
showコマンドの表示show ospf neighborのNeighbor ID、show ospf databaseのLink ID / ADV Routerなど。

ルータIDはOSPFドメイン内で一意でなければなりません。同じルータIDを持つルータが2台存在すると、同じ生成元からの矛盾するLSAが流れてトポロジマップが壊れ、経路が正しく計算できなくなります。

本記事の検証では、OSPFとはと同じ直線トポロジ(Cisco IOS XR、XRd)を使い、R1のルータIDがどのように決まり、どのタイミングで変わるのかを確認します。検証の途中で、R1にLoopback0(1.1.1.1)より大きいアドレスを持つLoopback1(11.11.11.11/32)を追加します。

ルータIDの決定順序

Cisco IOS XRのOSPFは、プロセスの起動時に以下の順序でルータIDを決めます(Cisco IOS XR Routing Configuration Guide - Implementing OSPFより)。

優先順位決定方法
1チェックポイントデータベースに保存されている、前回使用していたルータID(プロセスの再起動時に参照される)
2router ospf配下のrouter-idコマンドで明示的に設定された値
3ITAL(IOS XRのインタフェース情報管理機能)が選択したルータID。up状態のループバックインタフェースのIPv4アドレスから選ばれ、ループバックが無ければ物理インタフェースのアドレスが使われる
4OSPFを有効にしたインタフェースのプライマリIPv4アドレスのうち、最初のインタフェースのもの
ルータIDはrouter-idコマンドで明示的に設定することを推奨します。 自動決定に任せると、どのアドレスが選ばれるかがプラットフォーム(IOS XEとIOS XRで異なる)やインタフェースの状態、前回の値に依存し、インタフェースの追加・削除やプロセスの再起動をきっかけに意図せず変わって隣接関係の再確立と経路断を引き起こすことがあります。Ciscoのドキュメントでも、router-idコマンドで設定することが推奨されています。

IOS XEでは「明示設定 → up状態のループバックのうち最大のIPv4アドレス → 物理インタフェースのうち最大のアドレス」の順で決まりますが、IOS XRは上記のように仕組みが異なります。本記事の検証環境(XRd 26.1.1)では、Loopback0(1.1.1.1)とLoopback1(11.11.11.11)の両方がup状態でルータを再起動すると、小さい方の1.1.1.1が選ばれました。また、いったん決まったルータIDはチェックポイントデータベースに保存され、その値が有効である限り(元になったインタフェースがupである限り)、OSPFプロセスを再起動しても引き継がれました。どちらもIOS XEとは異なる動きです。設定コマンドの詳細はIOS XR OSPF設定およびIOS XE OSPF設定で解説します。

ルータIDが変わるタイミング

ルータIDの変わり方は、明示設定の有無で異なります。

  • router-idコマンドで明示的に設定・変更した場合は、IOS XRではcommitと同時に新しいルータIDが反映されます(プロセスの再起動は不要)。
  • 自動決定されたルータIDは、元になったインタフェースが後から変わっても(より小さいアドレスのループバックを追加するなど)、その場では変わりません。IOS XEではclear ip ospf processでOSPFプロセスを再起動するとルータIDが決め直されますが、IOS XRではclear ospf processで再起動しても、チェックポイントデータベースに保存された前回の値が優先されるため、その値が有効なうちは変わりません。新しく決め直されるのは、前回の値の元になったインタフェースがダウンしている状態でプロセスが再起動されたときです。

どちらの場合も、ルータIDが変わったルータは古いルータIDで生成したLSAをフラッシュ(MaxAgeにして削除)し、新しいルータIDでLSAを生成し直します。ネイバーとの隣接関係もいったんDownになって再確立されるため、ルータIDの変更は経路の断を伴う作業として計画する必要があります。

実機での検証

現在のルータIDの確認

show ospfの先頭行に、OSPFプロセスが使用しているルータIDが表示されます。R1ではrouter-id 1.1.1.1を明示的に設定しています。

R1 ルータIDの確認
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Thu Sep  3 14:29:29.074 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R1#show running-config router ospf
Thu Sep  3 14:29:29.892 UTC
router ospf 1
 router-id 1.1.1.1
 area 0
  interface Loopback0
   passive enable
  !
  interface GigabitEthernet0/0/0/0
  !
  interface GigabitEthernet0/0/0/1
  !
 !
!

明示設定を削除してLoopback1を追加する

R1からrouter-idの設定を削除し、あわせてLoopback0(1.1.1.1)より大きいアドレスを持つLoopback1(11.11.11.11/32)を追加します。Loopback1はOSPFには参加させません。

R1 投入した設定
router ospf 1
 no router-id
!
interface Loopback1
 ipv4 address 11.11.11.11 255.255.255.255
!

commit直後のルータIDと、R2から見たネイバーの状態です。

R1 router-id削除・Loopback1追加後
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Thu Sep  3 14:30:25.793 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R1#show running-config router ospf
Thu Sep  3 14:30:26.788 UTC
router ospf 1
 area 0
  interface Loopback0
   passive enable
  !
  interface GigabitEthernet0/0/0/0
  !
  interface GigabitEthernet0/0/0/1
  !
 !
!
RP/0/RP0/CPU0:R1#show ipv4 interface brief
Thu Sep  3 14:30:27.568 UTC

Interface                      IP-Address      Status          Protocol Vrf-Name
Loopback0                      1.1.1.1         Up              Up       default 
Loopback1                      11.11.11.11     Up              Up       default 
MgmtEth0/RP0/CPU0/0            unassigned      Shutdown        Down     default 
GigabitEthernet0/0/0/0         10.1.2.1        Up              Up       default 
GigabitEthernet0/0/0/1         10.1.3.1        Shutdown        Down     default 
GigabitEthernet0/0/0/2         unassigned      Shutdown        Down     default 
R2 ネイバーの確認
RP/0/RP0/CPU0:R2#show ospf neighbor
Thu Sep  3 14:30:35.736 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1         1     FULL/BDR        00:00:35    10.1.2.1        GigabitEthernet0/0/0/0
    Neighbor is up for 00:02:37
3.3.3.3         1     FULL/DR         00:00:30    10.2.3.3        GigabitEthernet0/0/0/1
    Neighbor is up for 00:02:30

Total neighbor count: 2

明示設定を削除し、より大きいアドレスのループバックを追加しても、動作中のOSPFプロセスのルータIDは1.1.1.1のままです。R2から見たNeighbor IDも変わらず、隣接関係にも影響はありません。

ルータを再起動する

この状態でR1を再起動すると、OSPFプロセスは起動時にルータIDを決め直します。Loopback0(1.1.1.1)とLoopback1(11.11.11.11)がどちらもup状態で起動した結果、選ばれたのは小さい方のアドレスであるLoopback0の1.1.1.1でした。

R1 再起動後
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 22:56:55.130 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R1#show ipv4 interface brief
Fri Sep  4 22:56:56.563 UTC

Interface                      IP-Address      Status          Protocol Vrf-Name
Loopback0                      1.1.1.1         Up              Up       default 
Loopback1                      11.11.11.11     Up              Up       default 
MgmtEth0/RP0/CPU0/0            unassigned      Shutdown        Down     default 
GigabitEthernet0/0/0/0         10.1.2.1        Up              Up       default 
GigabitEthernet0/0/0/1         10.1.3.1        Shutdown        Down     default 
GigabitEthernet0/0/0/2         unassigned      Shutdown        Down     default 

IOS XEのように「ループバックの最大アドレス」を選ぶのであれば11.11.11.11になるはずですが、IOS XRではそうなりません。自動決定の結果はプラットフォームによって異なるため、あてにしない方がよいことが分かります。

OSPFプロセスを再起動する(両方のループバックがup)

clear ospf 1 processでOSPFプロセスを再起動します。IOS XRでは確認プロンプトが表示されるのでyesで応答します。

R1 clear ospf process(両方のループバックがup)
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:34:51.485 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R1#clear ospf 1 process
Fri Sep  4 23:34:54.865 UTC
Reset OSPF process 1? [no]: yes
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:36:16.613 UTC
 Routing Process "ospf 1" with ID 1.1.1.1

プロセスを再起動してもルータIDは1.1.1.1のままです。チェックポイントデータベースに保存されていた前回の値が引き継がれたためで、隣接関係はいったんDownになり、同じルータIDで再確立されています。

R1 ネイバー変化ログ
RP/0/RP0/CPU0:R1#show logging | include OSPF
Fri Sep  4 23:36:17.551 UTC
RP/0/RP0/CPU0:Sep  4 23:25:16.454 UTC: ospf[1035]: %ROUTING-OSPF-5-HA_NOTICE_START : Starting OSPF 
RP/0/RP0/CPU0:Sep  4 23:25:19.744 UTC: ospf[1035]: %ROUTING-OSPF-6-HA_INFO : Process 1: OSPF process initialization complete 
RP/0/RP0/CPU0:Sep  4 23:25:20.045 UTC: ospf[1035]: %ROUTING-OSPF-5-HA_NOTICE : Process 1: Signaled PROC_AVAILABLE 
RP/0/RP0/CPU0:Sep  4 23:26:20.057 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0/0/0 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:34:54.977 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0/0/0 in area 0 from FULL to DOWN, Neighbor Down: interface down or detached, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:35:03.393 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0/0/0 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 

Loopback0をshutdownしてプロセスを再起動する

ルータIDの元になっているLoopback0をshutdownしてから、もう一度プロセスを再起動します。shutdownしただけではルータIDは変わらず、再起動後に、up状態で残っているLoopback1の11.11.11.11に変わりました。

R1 Loopback0 shutdown → clear ospf process
RP/0/RP0/CPU0:R1#show ipv4 interface brief
Fri Sep  4 23:37:47.169 UTC

Interface                      IP-Address      Status          Protocol Vrf-Name
Loopback0                      1.1.1.1         Shutdown        Down     default 
Loopback1                      11.11.11.11     Up              Up       default 
MgmtEth0/RP0/CPU0/0            10.100.22.1     Up              Up       Mgmt    
GigabitEthernet0/0/0/0         10.1.2.1        Up              Up       default 
GigabitEthernet0/0/0/1         10.1.3.1        Shutdown        Down     default 
GigabitEthernet0/0/0/2         unassigned      Shutdown        Down     Mgmt    
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:37:47.487 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R1#clear ospf 1 process
Fri Sep  4 23:37:48.370 UTC
Reset OSPF process 1? [no]: yes
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:37:48.604 UTC
 Routing Process "ospf 1" with ID 11.11.11.11

R2側では、R1とのネイバーが「Neighbor router id change(ネイバーのルータIDが変わった)」という理由でDownになり、直後に新しいルータID11.11.11.11のネイバーとして隣接関係の再確立が始まっています。LSDBからは、古いルータID1.1.1.1のRouter-LSAがフラッシュされて消えています。

R2 ルータID変更直後
RP/0/RP0/CPU0:R2#show logging | include ADJCHG
Fri Sep  4 23:38:22.864 UTC
RP/0/RP0/CPU0:Sep  4 23:26:20.060 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 1.1.1.1 on GigabitEthernet0/0/0/0 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:26:25.810 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 3.3.3.3 on GigabitEthernet0/0/0/1 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:35:03.396 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 1.1.1.1 on GigabitEthernet0/0/0/0 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:37:48.566 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 1.1.1.1 on GigabitEthernet0/0/0/0 in area 0 from FULL to DOWN, Neighbor Down: Neighbor router id change, vrf default vrfid 0x60000000
RP/0/RP0/CPU0:R2#show ospf neighbor
Fri Sep  4 23:38:21.135 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
11.11.11.11     1     EXSTART/BDR     00:00:34    10.1.2.1        GigabitEthernet0/0/0/0
    Neighbor is up for 00:00:23
3.3.3.3         1     FULL/DR         00:00:39    10.2.3.3        GigabitEthernet0/0/0/1
    Neighbor is up for 00:12:26

Total neighbor count: 2
RP/0/RP0/CPU0:R2#show ospf database
Fri Sep  4 23:38:22.003 UTC


            OSPF Router with ID (2.2.2.2) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         34          0x80000007 0x006062 3
3.3.3.3         3.3.3.3         717         0x80000003 0x0004d3 2

		Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.2.3.3        3.3.3.3         717         0x80000001 0x0046c1

隣接関係の再確立が完了すると、R2のネイバーは11.11.11.11でFullになり、LSDBにも新しいルータIDのRouter-LSAが登録されます。

R2 隣接再確立後
RP/0/RP0/CPU0:R2#show ospf neighbor
Fri Sep  4 23:39:45.835 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
11.11.11.11     1     FULL/BDR        00:00:35    10.1.2.1        GigabitEthernet0/0/0/0
    Neighbor is up for 00:01:48
3.3.3.3         1     FULL/DR         00:00:32    10.2.3.3        GigabitEthernet0/0/0/1
    Neighbor is up for 00:13:51

Total neighbor count: 2
RP/0/RP0/CPU0:R2#show ospf database
Fri Sep  4 23:39:46.678 UTC


            OSPF Router with ID (2.2.2.2) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         78          0x80000008 0x00d4dc 3
3.3.3.3         3.3.3.3         802         0x80000003 0x0004d3 2
11.11.11.11     11.11.11.11     79          0x80000002 0x00b903 1

		Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.1.2.2        2.2.2.2         78          0x80000001 0x0017d7
10.2.3.3        3.3.3.3         802         0x80000001 0x0046c1

Loopback0を戻してプロセスを再起動する

Loopback0をno shutdownで戻し、両方のループバックがupの状態でもう一度プロセスを再起動します。今度は11.11.11.11のままで、Loopback0の1.1.1.1には戻りませんでした。

R1 Loopback0 no shutdown → clear ospf process
RP/0/RP0/CPU0:R1#show ipv4 interface brief
Fri Sep  4 23:40:16.154 UTC

Interface                      IP-Address      Status          Protocol Vrf-Name
Loopback0                      1.1.1.1         Up              Up       default 
Loopback1                      11.11.11.11     Up              Up       default 
MgmtEth0/RP0/CPU0/0            10.100.22.1     Up              Up       Mgmt    
GigabitEthernet0/0/0/0         10.1.2.1        Up              Up       default 
GigabitEthernet0/0/0/1         10.1.3.1        Shutdown        Down     default 
GigabitEthernet0/0/0/2         unassigned      Shutdown        Down     Mgmt    
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:40:16.416 UTC
 Routing Process "ospf 1" with ID 11.11.11.11
RP/0/RP0/CPU0:R1#clear ospf 1 process
Fri Sep  4 23:40:17.273 UTC
Reset OSPF process 1? [no]: yes
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:40:17.468 UTC
 Routing Process "ospf 1" with ID 11.11.11.11

再起動前に1.1.1.1だったときは再起動後も1.1.1.111.11.11.11だったときは11.11.11.11のままです。これがチェックポイントデータベースに保存された前回のルータIDが最優先される動きで、自動決定されたルータIDは、その元になったインタフェースがupである限り、プロセスを再起動しても引き継がれます。新しく決め直されるのは、元のインタフェースがダウンしている状態でプロセスが起動したときだけです。

router-idを明示的に設定する

ルータIDが11.11.11.11の状態で、router-id 1.1.1.1を明示的に設定します。

R1 投入した設定
router ospf 1
 router-id 1.1.1.1
!

commit(23:40:50)の直後にルータIDは1.1.1.1に変わり、隣接関係はDownして新しいルータIDで再確立が始まっています。プロセスの再起動は必要ありません。

R1 router-id設定直後
RP/0/RP0/CPU0:R1#show ospf | include Routing Process
Fri Sep  4 23:41:05.490 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R1#show logging | include ADJCHG
Fri Sep  4 23:41:06.303 UTC
RP/0/RP0/CPU0:Sep  4 23:40:50.974 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0/0/0 in area 0 from FULL to DOWN, Neighbor Down: interface down or detached, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:R1#show ospf neighbor
Fri Sep  4 23:41:06.453 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2         1     2WAY/DROTHER    00:00:38    10.1.2.2        GigabitEthernet0/0/0/0
    Neighbor is up for 00:00:06

Total neighbor count: 1
R2 ネイバー変化ログ
RP/0/RP0/CPU0:R2#show logging | include ADJCHG
Fri Sep  4 23:41:16.692 UTC
RP/0/RP0/CPU0:Sep  4 23:40:51.052 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 11.11.11.11 on GigabitEthernet0/0/0/0 in area 0 from FULL to DOWN, Neighbor Down: Neighbor router id change, vrf default vrfid 0x60000000

ルータIDが重複した場合

R1のルータIDが1.1.1.1の状態で、隣接するR2にも同じrouter-id 1.1.1.1を設定し、ルータIDが重複した場合の動作を確認します。

R2 投入した設定(重複)
router ospf 1
 router-id 1.1.1.1
!

R1・R2の両方で、相手のインタフェースアドレスから自分と同じルータIDのHelloを受信したことを示す%ROUTING-OSPF-3-DUP_RTRIDが、Helloを受け取るたび(約20秒ごと)に記録されます。R2はルータIDの変更に伴ってR1・R3との隣接関係をいったんDownにし、R3とは1.1.1.1として再確立しますが、R1とは隣接関係を結べません。

R1 重複検出ログ
RP/0/RP0/CPU0:R1#show logging | include DUP_RTRID
Fri Sep  4 23:45:19.656 UTC
RP/0/RP0/CPU0:Sep  4 23:42:55.723 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:43:15.094 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:43:34.307 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:43:53.395 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:44:12.804 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:44:31.583 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:44:50.124 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:45:08.828 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.2 on interface GigabitEthernet0/0/0/0 
R2 重複設定後
RP/0/RP0/CPU0:R2#show ospf | include Routing Process
Fri Sep  4 23:43:35.241 UTC
 Routing Process "ospf 1" with ID 1.1.1.1
RP/0/RP0/CPU0:R2#show logging | include OSPF
Fri Sep  4 23:43:36.227 UTC
RP/0/RP0/CPU0:Sep  4 23:41:33.331 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 1.1.1.1 on GigabitEthernet0/0/0/0 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:42:55.645 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 1.1.1.1 on GigabitEthernet0/0/0/0 in area 0 from FULL to DOWN, Neighbor Down: interface down or detached, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:42:55.646 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 3.3.3.3 on GigabitEthernet0/0/0/1 in area 0 from FULL to DOWN, Neighbor Down: interface down or detached, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:Sep  4 23:43:02.626 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.1 on interface GigabitEthernet0/0/0/0 
RP/0/RP0/CPU0:Sep  4 23:43:20.716 UTC: ospf[1035]: %ROUTING-OSPF-3-DUP_RTRID : OSPF detected duplicate router-id 1.1.1.1 from 10.1.2.1 on interface GigabitEthernet0/0/0/0
RP/0/RP0/CPU0:R2#show ospf neighbor
Fri Sep  4 23:43:36.621 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
3.3.3.3         1     EXSTART/DR      00:00:39    10.2.3.3        GigabitEthernet0/0/0/1
    Neighbor is up for 00:00:32

Total neighbor count: 1

R1側では、R2からのHelloが自分自身のものとして扱われるためネイバーとして認識されず、Deadタイマーが満了した時点でR2との隣接関係が消えます。その結果、OSPFで学習していた経路はすべて失われました。

R1 Deadタイマー満了後
RP/0/RP0/CPU0:R1#show logging | include ADJCHG
Fri Sep  4 23:46:41.431 UTC
RP/0/RP0/CPU0:Sep  4 23:43:35.649 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0/0/0 in area 0 from FULL to DOWN, Neighbor Down: dead timer expired, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:R1#show ospf neighbor
Fri Sep  4 23:45:17.458 UTC
RP/0/RP0/CPU0:R1#show ospf database
Fri Sep  4 23:45:18.492 UTC


            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         103         0x80000003 0x0057ae 2
3.3.3.3         3.3.3.3         1134        0x80000003 0x0004d3 2

		Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.2.3.3        3.3.3.3         1134        0x80000001 0x0046c1
RP/0/RP0/CPU0:R1#show route ospf
Fri Sep  4 23:45:19.459 UTC

% No matching routes found

R2のrouter-id2.2.2.2に戻すと、R1との隣接関係が再確立され、経路も回復します。

R1 R2のルータIDを戻した後
RP/0/RP0/CPU0:R1#show logging | include ADJCHG
Fri Sep  4 23:46:41.431 UTC
RP/0/RP0/CPU0:Sep  4 23:45:44.011 UTC: ospf[1035]: %ROUTING-OSPF-5-ADJCHG : Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0/0/0 in area 0 from LOADING to FULL, Loading Done, vrf default vrfid 0x60000000 
RP/0/RP0/CPU0:R1#show ospf neighbor
Fri Sep  4 23:46:40.285 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2         1     FULL/BDR        00:00:33    10.1.2.2        GigabitEthernet0/0/0/0
    Neighbor is up for 00:00:57

Total neighbor count: 1
RP/0/RP0/CPU0:R1#show route ospf
Fri Sep  4 23:46:41.190 UTC

O    2.2.2.2/32 [110/2] via 10.1.2.2, 00:00:57, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/3] via 10.1.2.2, 00:00:20, GigabitEthernet0/0/0/0
O    10.2.3.0/24 [110/2] via 10.1.2.2, 00:00:20, GigabitEthernet0/0/0/0

パケットキャプチャ

R1–R2間のリンクで、上記のうち「OSPFプロセスを再起動する(両方のループバックがup)」から「router-idを明示的に設定する」までをキャプチャしたファイルです(ospf-router-id-change.pcap)。全169パケットのうち、ルータIDの変化に関わる主なOSPFパケットを抜粋します。Router ID列はOSPFヘッダーのRouter IDフィールドです。

No.TimeSourceDestinationRouter IDInfo
21.16610.1.2.1224.0.0.51.1.1.1Hello Packet
410.17110.1.2.1224.0.0.51.1.1.1Hello Packet
511.40110.1.2.1224.0.0.51.1.1.1LS Update
611.48410.1.2.1224.0.0.51.1.1.1Hello Packet
919.79610.1.2.110.1.2.21.1.1.1DB Description
1719.81710.1.2.110.1.2.21.1.1.1LS Update
1919.84910.1.2.1224.0.0.51.1.1.1LS Update
2121.10010.1.2.1224.0.0.51.1.1.1Hello Packet
54172.86610.1.2.1224.0.0.51.1.1.1LS Update
60184.93110.1.2.1224.0.0.51.1.1.1LS Update
61184.98810.1.2.1224.0.0.511.11.11.11Hello Packet
65194.33910.1.2.210.1.2.12.2.2.2DB Description
78224.98910.1.2.110.1.2.211.11.11.11DB Description
83225.00110.1.2.110.1.2.211.11.11.11LS Update
87225.03910.1.2.1224.0.0.511.11.11.11LS Update
92232.02410.1.2.1224.0.0.511.11.11.11Hello Packet
109313.96810.1.2.1224.0.0.511.11.11.11LS Update
115333.81310.1.2.1224.0.0.511.11.11.11LS Update
118334.47210.1.2.110.1.2.211.11.11.11DB Description
127334.56610.1.2.1224.0.0.511.11.11.11LS Update
138367.46610.1.2.1224.0.0.511.11.11.11LS Update
139367.47410.1.2.1224.0.0.51.1.1.1Hello Packet
143376.68510.1.2.210.1.2.12.2.2.2DB Description
158407.47510.1.2.110.1.2.21.1.1.1DB Description
166409.75210.1.2.110.1.2.21.1.1.1LS Update
168409.80510.1.2.1224.0.0.51.1.1.1LS Update
  • No.5(プロセス再起動): R1は自身のRouter-LSAをLS Age 3600(MaxAge)にしてフラッディングし、LSDBから消すよう他のルータに伝えます。続くNo.9〜21で、同じルータID1.1.1.1のまま隣接関係を再確立しています。
  • No.54: Loopback0のshutdownにより、R1がRouter-LSAを更新(Sequence Number 0x80000003)してフラッディングしています。
  • No.60〜61(Loopback0をshutdownした状態でプロセス再起動): 旧ルータID1.1.1.1のRouter-LSAをMaxAgeでフラッシュした直後、Router IDフィールドが11.11.11.11に変わったHelloが送信されています。No.65からR2がDBDを送り始めますが、R1側はWaitタイマー(40秒)の満了後にNo.78からDBD交換に応じ、No.83で新しいルータID11.11.11.11のRouter-LSA(Sequence Number 0x80000001)を送っています。
  • No.109: Loopback0を戻したことによるRouter-LSAの更新です。No.115(3回目のプロセス再起動)でも11.11.11.11のLSAをフラッシュしていますが、No.118以降の再確立でもルータIDは11.11.11.11のままです。
  • No.138〜139(router-id 1.1.1.1の明示設定): commitと同時に11.11.11.11のRouter-LSAがフラッシュされ、次のHelloからRouter IDが1.1.1.1に戻っています。No.158以降で1.1.1.1として隣接関係が再確立され、No.166で新しいRouter-LSA(Sequence Number 0x80000001)が送られています。

No.60のLS Updateを展開すると、LS Ageが3600秒(MaxAge)になったRouter-LSAであることが分かります。受け取ったルータは、このLSAをLSDBから削除します。

No.60 LS Update(旧ルータID 1.1.1.1 のRouter-LSAをフラッシュ)
Open Shortest Path First
    OSPF Header
        Message Type: LS Update (4)
        Source OSPF Router: 1.1.1.1
        Area ID: 0.0.0.0 (Backbone)
    LS Update Packet
        Number of LSAs: 1
        LSA-type 1 (Router-LSA), len 36
            .000 1110 0001 0000 = LS Age (seconds): 3600
            LS Type: Router-LSA (1)
            Link State ID: 1.1.1.1
            Advertising Router: 1.1.1.1
            Sequence Number: 0x80000003
            Number of Links: 1
            Type: Transit  ID: 10.1.2.2        Data: 10.1.2.1        Metric: 1

直後のNo.61のHelloでは、OSPFヘッダーのRouter IDフィールドが11.11.11.11になっており、DR/BDRの欄も0.0.0.0にリセットされています。R2はこのHelloを受け取った時点で、1.1.1.1とは別の新しいネイバーとして扱い始めます。

No.61 Hello(新しいルータID 11.11.11.11)
Open Shortest Path First
    OSPF Header
        Message Type: Hello Packet (1)
        Source OSPF Router: 11.11.11.11
        Area ID: 0.0.0.0 (Backbone)
    OSPF Hello Packet
        Network Mask: 255.255.255.0
        Hello Interval [sec]: 10
        Router Priority: 1
        Router Dead Interval [sec]: 40
        Designated Router: 0.0.0.0
        Backup Designated Router: 0.0.0.0

ルータIDの設計

本記事の検証で確認したとおり、自動決定されたルータIDはプラットフォームや状態によって変わります。運用では次の方針を推奨します。

  • ルータIDは必ずrouter-idコマンドで明示的に設定する。自動決定に任せると、選ばれるアドレスがプラットフォームによって異なり(IOS XEは最大、IOS XRは最小のループバックアドレス)、インタフェースの追加や再起動で意図せず変わることがある。
  • 値にはLoopback0のアドレスを使うのが一般的。ループバックは物理インタフェースと違ってダウンしないため、管理用アドレスとルータIDを一致させておくとshowコマンドの出力からルータを特定しやすい。
  • OSPFドメイン内で一意にする。重複すると%ROUTING-OSPF-3-DUP_RTRIDが記録され、隣接関係が結べなくなって経路が失われる。
  • ルータIDの変更は隣接関係の再確立とLSAの再生成を伴うため、メンテナンス時間内に行う。IOS XRでは明示設定の変更がcommitと同時に反映される点に注意する。

検証Config

検証終了時点の各ルータのrunning-configと、show ospf(ルータID)、show ospf neighborshow ospf databaseshow route ospfの出力です。R1にはLoopback1が残っています。MgmtEth0/RP0/CPU0/0のvrf Mgmtは検証用ラボへの管理アクセス用で、OSPFには関係しません。

R1 config(r1_ospf-router-id.cfg) をダウンロード

R2 config(r2_ospf-router-id.cfg) をダウンロード

R3 config(r3_ospf-router-id.cfg) をダウンロード

R1 show出力(r1_ospf-router-id_show.txt) をダウンロード

R2 show出力(r2_ospf-router-id_show.txt) をダウンロード

R3 show出力(r3_ospf-router-id_show.txt) をダウンロード

ospf-router-id-change.pcap をダウンロード

参考

RFCタイトル概要
RFC 2328OSPF Version 2ルータIDの定義(Section 1.2、C.1)。
ドキュメント概要
Routing Configuration Guide for Cisco ASR 9000 Series Routers, IOS XR Release 7.10.x - Implementing OSPFIOS XRにおけるルータIDの決定順序(チェックポイントデータベース → router-idコマンド → ITAL → インタフェースアドレス)と、router-idコマンドによる設定の推奨。

関連記事