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(プロセスの再起動時に参照される) |
| 2 | router ospf配下のrouter-idコマンドで明示的に設定された値 |
| 3 | ITAL(IOS XRのインタフェース情報管理機能)が選択したルータID。up状態のループバックインタフェースのIPv4アドレスから選ばれ、ループバックが無ければ物理インタフェースのアドレスが使われる |
| 4 | OSPFを有効にしたインタフェースのプライマリIPv4アドレスのうち、最初のインタフェースのもの |
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を明示的に設定しています。
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には参加させません。
router ospf 1
no router-id
!
interface Loopback1
ipv4 address 11.11.11.11 255.255.255.255
!commit直後のルータIDと、R2から見たネイバーの状態です。
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 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でした。
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で応答します。
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で再確立されています。
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に変わりました。
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.11R2側では、R1とのネイバーが「Neighbor router id change(ネイバーのルータIDが変わった)」という理由でDownになり、直後に新しいルータID11.11.11.11のネイバーとして隣接関係の再確立が始まっています。LSDBからは、古いルータID1.1.1.1のRouter-LSAがフラッシュされて消えています。
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が登録されます。
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 0x0046c1Loopback0を戻してプロセスを再起動する
Loopback0をno shutdownで戻し、両方のループバックがupの状態でもう一度プロセスを再起動します。今度は11.11.11.11のままで、Loopback0の1.1.1.1には戻りませんでした。
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.1、11.11.11.11だったときは11.11.11.11のままです。これがチェックポイントデータベースに保存された前回のルータIDが最優先される動きで、自動決定されたルータIDは、その元になったインタフェースがupである限り、プロセスを再起動しても引き継がれます。新しく決め直されるのは、元のインタフェースがダウンしている状態でプロセスが起動したときだけです。
router-idを明示的に設定する
ルータIDが11.11.11.11の状態で、router-id 1.1.1.1を明示的に設定します。
router ospf 1
router-id 1.1.1.1
!commit(23:40:50)の直後にルータIDは1.1.1.1に変わり、隣接関係はDownして新しいルータ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: 1RP/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が重複した場合の動作を確認します。
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とは隣接関係を結べません。
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 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: 1R1側では、R2からのHelloが自分自身のものとして扱われるためネイバーとして認識されず、Deadタイマーが満了した時点でR2との隣接関係が消えます。その結果、OSPFで学習していた経路はすべて失われました。
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 foundR2のrouter-idを2.2.2.2に戻すと、R1との隣接関係が再確立され、経路も回復します。
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. | Time | Source | Destination | Router ID | Info |
|---|---|---|---|---|---|
| 2 | 1.166 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | Hello Packet |
| 4 | 10.171 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | Hello Packet |
| 5 | 11.401 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | LS Update |
| 6 | 11.484 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | Hello Packet |
| 9 | 19.796 | 10.1.2.1 | 10.1.2.2 | 1.1.1.1 | DB Description |
| 17 | 19.817 | 10.1.2.1 | 10.1.2.2 | 1.1.1.1 | LS Update |
| 19 | 19.849 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | LS Update |
| 21 | 21.100 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | Hello Packet |
| 54 | 172.866 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | LS Update |
| 60 | 184.931 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | LS Update |
| 61 | 184.988 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | Hello Packet |
| 65 | 194.339 | 10.1.2.2 | 10.1.2.1 | 2.2.2.2 | DB Description |
| 78 | 224.989 | 10.1.2.1 | 10.1.2.2 | 11.11.11.11 | DB Description |
| 83 | 225.001 | 10.1.2.1 | 10.1.2.2 | 11.11.11.11 | LS Update |
| 87 | 225.039 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | LS Update |
| 92 | 232.024 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | Hello Packet |
| 109 | 313.968 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | LS Update |
| 115 | 333.813 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | LS Update |
| 118 | 334.472 | 10.1.2.1 | 10.1.2.2 | 11.11.11.11 | DB Description |
| 127 | 334.566 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | LS Update |
| 138 | 367.466 | 10.1.2.1 | 224.0.0.5 | 11.11.11.11 | LS Update |
| 139 | 367.474 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | Hello Packet |
| 143 | 376.685 | 10.1.2.2 | 10.1.2.1 | 2.2.2.2 | DB Description |
| 158 | 407.475 | 10.1.2.1 | 10.1.2.2 | 1.1.1.1 | DB Description |
| 166 | 409.752 | 10.1.2.1 | 10.1.2.2 | 1.1.1.1 | LS Update |
| 168 | 409.805 | 10.1.2.1 | 224.0.0.5 | 1.1.1.1 | LS Update |
- No.5(プロセス再起動): R1は自身のRouter-LSAをLS Age 3600(MaxAge)にしてフラッディングし、LSDBから消すよう他のルータに伝えます。続くNo.9〜21で、同じルータID
1.1.1.1のまま隣接関係を再確立しています。 - No.54: Loopback0のshutdownにより、R1がRouter-LSAを更新(Sequence Number 0x80000003)してフラッディングしています。
- No.60〜61(Loopback0をshutdownした状態でプロセス再起動): 旧ルータID
1.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から削除します。
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とは別の新しいネイバーとして扱い始めます。
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 neighbor、show ospf database、show 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 2328 | OSPF Version 2 | ルータIDの定義(Section 1.2、C.1)。 |
| ドキュメント | 概要 |
|---|---|
| Routing Configuration Guide for Cisco ASR 9000 Series Routers, IOS XR Release 7.10.x - Implementing OSPF | IOS XRにおけるルータIDの決定順序(チェックポイントデータベース → router-idコマンド → ITAL → インタフェースアドレス)と、router-idコマンドによる設定の推奨。 |