OSPFの認証とは
OSPFの認証は、同じリンク上のルータが正しい相手かどうかを確かめる仕組みです。認証を設定していないOSPFは、届いたHelloの送信元を検証しません。同じセグメントにつないだ機器がHelloを流せば、それだけで隣接が成立し、LSAが流れ込みます。
認証はOSPFヘッダーの中で完結していて、AuType(認証方式)とAuthentication(8バイト)の2つのフィールドで表現されます。ヘッダーの構造はOSPFパケットの種類とヘッダーフォーマットで解説しているので、ここでは設定方法と鍵の運用を扱います。
| 方式 | AuType | 内容 |
|---|---|---|
| 認証なし | 0 | 検証しない。既定の状態 |
| 平文認証 | 1 | パスワードをそのままパケットに入れる。キャプチャーすれば読める |
| 暗号認証 | 2 | 鍵から計算したダイジェストをパケット末尾に付ける。鍵そのものは流れない |
認証はリンク単位の設定です。 片側だけに設定すると相手のHelloは検証に失敗して捨てられ、Deadインターバルの満了で隣接が落ちます。逆に、同じルータでもリンクごとに有効・無効や鍵を変えられます。
設定する場所は2つある
IOS XRでは、認証をエリア単位とインタフェース単位のどちらでも設定できます。
| 設定場所 | 書く位置 | 効く範囲 |
|---|---|---|
| エリア単位 | router ospf <プロセス> → area <ID> 配下 | そのエリアに属する全インタフェース |
| インタフェース単位 | area <ID> → interface <IF> 配下 | そのインタフェースだけ |
両方を書いた場合はインタフェース単位が優先されます。エリア単位でまとめて有効にし、例外のリンクだけインタフェース単位で上書きする使い方ができます。
鍵はキーチェーンで管理する
暗号認証の鍵は、OSPFの設定に直接書くのではなくキーチェーンという独立した入れ物に定義し、インタフェースからは名前で参照します。
key chain <名前>
key <鍵ID>
cryptographic-algorithm <アルゴリズム>
key-string clear <鍵文字列>
send-lifetime <開始> <終了> ← この鍵で送信してよい期間
accept-lifetime <開始> <終了> ← この鍵を受信で受け付ける期間要点は、鍵IDごとに送信と受信の期間を別々に持てることです。1つのキーチェーンに複数の鍵を入れ、受信を先に、送信を後に切り替えることで、隣接を落とさずに鍵を入れ替えられます。
鍵IDはパケットのKey IDフィールドに入り、受信側はその番号で使う鍵を選びます。ダイジェストの長さはアルゴリズムで決まり、RFC 5709が定めるHMAC-SHA-256なら32バイト、MD5なら16バイトです。この長さはパケットのAuth Crypt Data Lengthにそのまま出ます。
検証構成
R1 - R2 - R3の直線で、全リンクがエリア0です。認証はR1 - R2間にだけ設定し、R2 - R3間は認証なしのままにします。R2のshow出力の中に「認証あり」と「なし」のインタフェースが並ぶため、認証がリンク単位であることをそのまま確認できます。
| 項目 | 内容 |
|---|---|
| 認証を設定するリンク | R1 - R2間(10.1.2.0/24) |
| 認証を設定しないリンク | R2 - R3間(10.2.3.0/24) |
| ルータID | R1が1.1.1.1、R2が2.2.2.2、R3が3.3.3.3(すべて明示設定) |
| キャプチャー | R1 - R2間(フィルタはip proto 89) |
| ソフトウェア | XRd 26.1.1 |
7つのSTEPで進めます。
| STEP | 操作 | 確かめること |
|---|---|---|
| 0 | 認証なし | 認証の行が表示されない |
| 1 | 平文認証を設定 | パスワードがキャプチャーに平文で見える。片側だけだと隣接が落ちる |
| 2 | MD5(キーチェーン)に変更 | Auth Crypt Data Lengthが16。R2の隣のリンクは認証なしのまま |
| 3 | HMAC-SHA-256に変更 | Auth Crypt Data Lengthが32に変わる |
| 4 | 鍵を追加してローテーション | Key IDが1から2へ。隣接は落ちない |
| 5 | エリア単位の認証を併用 | インタフェース単位が優先される |
| 6 | 認証を削除 | 認証なしの状態へ復旧(最終状態) |
STEP 0:認証なしの状態
認証を設定していないインタフェースでは、show ospf interfaceに認証に関する行がそもそも表示されません。この記事で見るのは、Suppress helloとMulti-area interface Countの間です。
RP/0/RP0/CPU0:R1#show ospf interface GigabitEthernet0/0/0/0
Fri Sep 11 05:45:20.485 UTC
GigabitEthernet0/0/0/0 is up, line protocol is up
Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
Label stack Primary label 0 Backup label 0 SRTE label 0
Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State DR, Priority 1, MTU 1500, MaxPktSz 1500
Forward reference No, Unnumbered no, Bandwidth 1000000
RIB LC sync Yes
Designated Router (ID) 1.1.1.1, Interface address 10.1.2.1
Backup Designated router (ID) 2.2.2.2, Interface address 10.1.2.2
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:04:035
Index 1/1, flood queue length 0
Next 0(0)/0(0)
Last flood scan length is 1, maximum is 1
Last flood scan time is 0 msec, maximum is 0 msec
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Backup Designated Router)
Suppress hello for 0 neighbor(s)
Multi-area interface Count is 0
Segment Routing Forwarding MPLS enabled: Yes
Adjacency hold timer expired last : Never
Exchange timer expired last : NeverSTEP 1:平文認証を設定する
インタフェース配下でauthenticationをキーワードなしで書くと平文認証になり、authentication-keyでパスワードを指定します。
(R1)
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
authentication
authentication-key ospfauthR1にだけ設定した時点で、R1 - R2の隣接が落ちます。 R2は認証なしのHelloを送り続けますが、R1はそれを検証に失敗したものとして捨てるためです。R1のsyslogを見ると、設定をcommitした32秒後に隣接が落ちています。認証エラーではなくdead timer expiredとしか記録されません。
RP/0/RP0/CPU0:Sep 11 05:46:42.207 UTC: config[67620]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000001' to view the changes.
RP/0/RP0/CPU0:Sep 11 05:46:42.444 UTC: config[67620]: %MGBL-SYS-5-CONFIG_I : Configured from console by cisco
RP/0/RP0/CPU0:Sep 11 05:46:44.236 UTC: config[67639]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000002' to view the changes.
RP/0/RP0/CPU0:Sep 11 05:46:44.418 UTC: config[67639]: %MGBL-SYS-5-CONFIG_I : Configured from console by cisco
RP/0/RP0/CPU0:Sep 11 05:47:16.873 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 設定ミスに気づきにくいのはこのためです。隣接が落ちた原因を追うときは、両端の認証設定を突き合わせる必要があります。
R2にも同じ設定を入れると隣接が戻ります。認証の行が1行だけ現れました。
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Designated Router)
Suppress hello for 0 neighbor(s)
Clear text authentication enabled
Multi-area interface Count is 0
Segment Routing Forwarding MPLS enabled: Yes
Adjacency hold timer expired last : Never
Exchange timer expired last : Never問題は、この方式ではパスワードがそのままパケットに入ることです。キャプチャーのNo.33を見ると、設定したospfauthがそのまま読み取れます。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: Hello Packet (1)
Packet Length: 48
Source OSPF Router: 1.1.1.1
Area ID: 0.0.0.0 (Backbone)
Checksum: 0xce8e [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Simple password (1)
Auth Data (Simple): ospfauth
OSPF Hello Packet
Network Mask: 255.255.255.0
Hello Interval [sec]: 10
Options: 0x12, (L) LLS Data block, (E) External Routing
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..0. .... = (DC) Demand Circuits: Not supported
...1 .... = (L) LLS Data block: Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
Router Priority: 1
Router Dead Interval [sec]: 40
Designated Router: 10.1.2.1
Backup Designated Router: 10.1.2.2
Active Neighbor: 2.2.2.2
OSPF LLS Data Block
Checksum: 0x7fc2
LLS Data Length: 32 bytes
Extended options TLV
TLV Type: 1
TLV Length: 4
Options: 0x00000001, (LR) LSDB Resynchronization
.... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
.... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
Local Interface ID
TLV Type: 18
TLV Length: 4
Local Interface ID: 00000004
Unknown LLS TLV
TLV Type: 32768
TLV Length: 8平文認証は経路を盗み見られる環境では意味を持ちません。 設定ミスで意図しない隣接が張られるのを防ぐ用途に限られます。
STEP 2:MD5(キーチェーン)に変更する
暗号認証に切り替えます。まずキーチェーンを定義し、インタフェースから名前で参照します。
(R1・R2の両方に投入する)
key chain KC-OSPF
key 1
accept-lifetime 00:00:00 january 01 2020 infinite
send-lifetime 00:00:00 january 01 2020 infinite
cryptographic-algorithm HMAC-MD5
key-string clear ospfkey1
!
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
no authentication
no authentication-key
authentication keychain KC-OSPF表示がKeychain-based authentication enabledに変わり、キーチェーン名・使用中の鍵ID・アルゴリズムが続きます。HMAC_MD5_16の末尾の16はダイジェストのバイト数です。
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Designated Router)
Suppress hello for 0 neighbor(s)
Keychain-based authentication enabled
Keychain name KC-OSPF
Key id used is 1
Cryptographic algorithm HMAC_MD5_16
Multi-area interface Count is 0鍵文字列そのものはパケットに入りません。 show key chainでも暗号化されて表示されます。
RP/0/RP0/CPU0:R1#show key chain
Fri Sep 11 05:53:12.011 UTC
Key-chain: KC-OSPF -
timezone -- local
Key 1 -- text "0700325C48021C1C46"
Cryptographic-Algorithm -- HMAC_MD5
Send lifetime -- 00:00:00, 01 Jan 2020 - Always valid [Valid now]
Accept lifetime -- 00:00:00, 01 Jan 2020 - Always valid [Valid now]キャプチャーではAuth Type: Cryptographic (2)になり、Auth Crypt Data Lengthが16です。ダイジェスト本体はパケットの末尾に付きます。Auth Crypt Sequence Numberは、同じパケットを録音して再送する攻撃を防ぐための単調増加する値です。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: Hello Packet (1)
Packet Length: 48
Source OSPF Router: 1.1.1.1
Area ID: 0.0.0.0 (Backbone)
Checksum: 0x0000 (None)
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Cryptographic (2)
Auth Crypt Key id: 1
Auth Crypt Data Length: 16
Auth Crypt Sequence Number: 1789105860
Auth Crypt Data: f3be6f6190f302a73b4b99071c5d3fde
OSPF Hello Packet
Network Mask: 255.255.255.0
Hello Interval [sec]: 10
Options: 0x12, (L) LLS Data block, (E) External Routing
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..0. .... = (DC) Demand Circuits: Not supported
...1 .... = (L) LLS Data block: Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
Router Priority: 1
Router Dead Interval [sec]: 40
Designated Router: 10.1.2.2
Backup Designated Router: 10.1.2.1
Active Neighbor: 2.2.2.2
OSPF LLS Data Block
Checksum: 0x0000
LLS Data Length: 56 bytes
Extended options TLV
TLV Type: 1
TLV Length: 4
Options: 0x00000001, (LR) LSDB Resynchronization
.... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
.... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
Local Interface ID
TLV Type: 18
TLV Length: 4
Local Interface ID: 00000004
Unknown LLS TLV
TLV Type: 32768
TLV Length: 8
Crypto Authentication TLV
TLV Type: 2
TLV Length: 20
Sequence number: 0x6aa396c4
Auth Data: bb2d9f6e43f93bf3d125592e350d8006ここで認証がリンク単位であることも確認できます。R2のshow ospf interfaceには2本のインタフェースが並びますが、R1向けのGi0/0/0/0にだけ認証の行があり、R3向けのGi0/0/0/1には同じ出力の中で1行も出ていません。R2 - R3の隣接は認証なしのまま維持されています。
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 1.1.1.1 (Backup Designated Router)
Suppress hello for 0 neighbor(s)
Keychain-based authentication enabled
Keychain name KC-OSPF
Key id used is 1
Cryptographic algorithm HMAC_MD5_16
Multi-area interface Count is 0
Segment Routing Forwarding MPLS enabled: Yes
Adjacency hold timer expired last : Never
Exchange timer expired last : Never
GigabitEthernet0/0/0/1 is up, line protocol is up
Internet Address 10.2.3.2/24, Area 0, SID 0, Strict-SPF SID 0
Label stack Primary label 0 Backup label 0 SRTE label 0
Process ID 1, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State DR, Priority 1, MTU 1500, MaxPktSz 1500
Forward reference No, Unnumbered no, Bandwidth 1000000
RIB LC sync Yes
Designated Router (ID) 2.2.2.2, Interface address 10.2.3.2
Backup Designated router (ID) 3.3.3.3, Interface address 10.2.3.3
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:00:478
Index 2/2, flood queue length 0
Next 0(0)/0(0)
Last flood scan length is 1, maximum is 2
Last flood scan time is 0 msec, maximum is 0 msec
LS Ack List: current length 0, high water mark 1
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 3.3.3.3 (Backup Designated Router)
Suppress hello for 0 neighbor(s)
Multi-area interface Count is 0STEP 3:HMAC-SHA-256に変更する
鍵の文字列はそのままに、アルゴリズムだけを差し替えます。XRd 26.1.1のキーチェーンでは次のアルゴリズムが選べました。
AES-128-CMAC-96 HMAC-MD5 HMAC-SHA-256 HMAC-SHA1-12
HMAC-SHA1-20 HMAC-SHA1-96 MD5 SHA-1(R1・R2の両方に投入する)
key chain KC-OSPF
key 1
cryptographic-algorithm HMAC-SHA-256show ospf interfaceのアルゴリズム行が変わります。
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Designated Router)
Suppress hello for 0 neighbor(s)
Keychain-based authentication enabled
Keychain name KC-OSPF
Key id used is 1
Cryptographic algorithm HMAC-SHA-256
Multi-area interface Count is 0パケット側ではAuth Crypt Data Lengthが16から32になります。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: Hello Packet (1)
Packet Length: 48
Source OSPF Router: 1.1.1.1
Area ID: 0.0.0.0 (Backbone)
Checksum: 0x0000 (None)
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Cryptographic (2)
Auth Crypt Key id: 1
Auth Crypt Data Length: 32
Auth Crypt Sequence Number: 1789106045
Auth Crypt Data: 17dbf327138380c48f79512045ee29048f7f5ee887c0e9763eebbe8001fbdb67
OSPF Hello Packet
Network Mask: 255.255.255.0
Hello Interval [sec]: 10
Options: 0x12, (L) LLS Data block, (E) External Routing
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..0. .... = (DC) Demand Circuits: Not supported
...1 .... = (L) LLS Data block: Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
Router Priority: 1
Router Dead Interval [sec]: 40
Designated Router: 10.1.2.2
Backup Designated Router: 10.1.2.1
Active Neighbor: 2.2.2.2
OSPF LLS Data Block
Checksum: 0x0000
LLS Data Length: 72 bytes
Extended options TLV
TLV Type: 1
TLV Length: 4
Options: 0x00000001, (LR) LSDB Resynchronization
.... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
.... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
Local Interface ID
TLV Type: 18
TLV Length: 4
Local Interface ID: 00000004
Unknown LLS TLV
TLV Type: 32768
TLV Length: 8
Crypto Authentication TLV
TLV Type: 2
TLV Length: 36
Sequence number: 0x6aa3977d
Auth Data: 3c03c25d0614f54b6bda0b649d28a32a8bf479c1178a294ac7707434999c7d5aダイジェストが16バイト伸びるので、フレーム長そのものが154バイトから186バイトに増えます。切り替わりは14:54:26のHelloからで、隣接は落ちていません。
36 2026-09-11 14:53:57.562199 10.1.2.1 → 224.0.0.5 OSPF 154 Hello Packet
38 2026-09-11 14:54:07.263721 10.1.2.1 → 224.0.0.5 OSPF 154 Hello Packet
40 2026-09-11 14:54:16.344887 10.1.2.1 → 224.0.0.5 OSPF 154 Hello Packet
42 2026-09-11 14:54:26.309415 10.1.2.1 → 224.0.0.5 OSPF 186 Hello Packet
45 2026-09-11 14:54:36.189748 10.1.2.1 → 224.0.0.5 OSPF 186 Hello Packetこのとき両側の設定が揃わない時間がわずかに生まれます。今回はDeadインターバル(40秒)より早く両側の変更を終えられたため隣接が維持されました。運用では、次のSTEPと同じく鍵IDを分けて切り替えるほうが安全です。
STEP 4:鍵をローテーションする
運用で一番使うのがこれです。手順は2段階に分けます。いきなり送信鍵を変えると、相手がその鍵を受け付けられずに隣接が落ちるためです。
1. 両側に新しい鍵を追加する。accept-lifetime だけ設定し、送信はまだ旧鍵のまま
2. 両側の送信を新しい鍵へ切り替える(新鍵に send-lifetime を設定し、旧鍵の send-lifetime を外す)
3. 旧鍵を削除するまず鍵2を受信専用で両側に追加します。accept-lifetimeだけを書き、send-lifetimeは書きません。
(R1・R2の両方に投入する)
key chain KC-OSPF
key 2
accept-lifetime 00:00:00 january 01 2020 infinite
cryptographic-algorithm HMAC-SHA-256
key-string clear ospfkey2この時点で両側は「鍵1で送り、鍵1と鍵2のどちらでも受け取れる」状態です。次に送信を鍵2へ切り替えます。
(R1・R2の両方に投入する)
key chain KC-OSPF
key 2
send-lifetime 00:00:00 january 01 2020 infinite
!
key 1
no send-lifetimeshow key chainを見ると、鍵1は受信専用(Send lifetime -- Not configured)、鍵2は送受信とも有効になっています。
RP/0/RP0/CPU0:R1#show key chain
Fri Sep 11 06:00:19.100 UTC
Key-chain: KC-OSPF -
timezone -- local
Key 1 -- text "0700325C48021C1C46"
Cryptographic-Algorithm -- HMAC_SHA_256
Send lifetime -- Not configured
Accept lifetime -- 00:00:00, 01 Jan 2020 - Always valid [Valid now]
Key 2 -- text "000B001602500E1F5D"
Cryptographic-Algorithm -- HMAC_SHA_256
Send lifetime -- 00:00:00, 01 Jan 2020 - Always valid [Valid now]
Accept lifetime -- 00:00:00, 01 Jan 2020 - Always valid [Valid now]OSPF側の表示はKey id used is 2に変わります。
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Designated Router)
Suppress hello for 0 neighbor(s)
Keychain-based authentication enabled
Keychain name KC-OSPF
Key id used is 2
Cryptographic algorithm HMAC-SHA-256
Multi-area interface Count is 0隣接は一度も落ちていません。 Neighbor is up forが12分を超えており、これはSTEP 1の復旧時点から継続していることを示します。MD5への変更もHMAC-SHA-256への変更も鍵の入れ替えも、この間に行っています。
RP/0/RP0/CPU0:R1#show ospf neighbor
Fri Sep 11 06:00:13.536 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/DR 00:00:31 10.1.2.2 GigabitEthernet0/0/0/0
Neighbor is up for 00:12:09
Total neighbor count: 1キャプチャーでも、R1が送るHelloのKey IDが14:58:26を境に1から2へ変わり、Helloの間隔は10秒のまま乱れていません。
frame.number _ws.col.cls_time ospf.auth.crypt.key_id ospf.auth.crypt.data_length
1 2026-09-11 14:57:38.057345 1 32
3 2026-09-11 14:57:47.830721 1 32
5 2026-09-11 14:57:57.492035 1 32
7 2026-09-11 14:58:07.300398 1 32
9 2026-09-11 14:58:16.426431 1 32
11 2026-09-11 14:58:26.183293 2 32
13 2026-09-11 14:58:35.699347 2 32
15 2026-09-11 14:58:44.738048 2 32
17 2026-09-11 14:58:53.906863 2 32
19 2026-09-11 14:59:03.431175 2 32切り替わった直後のパケットは次のようになります。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: Hello Packet (1)
Packet Length: 48
Source OSPF Router: 1.1.1.1
Area ID: 0.0.0.0 (Backbone)
Checksum: 0x0000 (None)
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Cryptographic (2)
Auth Crypt Key id: 2
Auth Crypt Data Length: 32
Auth Crypt Sequence Number: 1789106279
Auth Crypt Data: 2a6a1e689084e5190b163af1c3f9141f1d325c227e7fb97d45dfacbf65d18db9
OSPF Hello Packet
Network Mask: 255.255.255.0
Hello Interval [sec]: 10
Options: 0x12, (L) LLS Data block, (E) External Routing
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..0. .... = (DC) Demand Circuits: Not supported
...1 .... = (L) LLS Data block: Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
Router Priority: 1
Router Dead Interval [sec]: 40
Designated Router: 10.1.2.2
Backup Designated Router: 10.1.2.1
Active Neighbor: 2.2.2.2
OSPF LLS Data Block
Checksum: 0x0000
LLS Data Length: 72 bytes
Extended options TLV
TLV Type: 1
TLV Length: 4
Options: 0x00000001, (LR) LSDB Resynchronization
.... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
.... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
Local Interface ID
TLV Type: 18
TLV Length: 4
Local Interface ID: 00000004
Unknown LLS TLV
TLV Type: 32768
TLV Length: 8
Crypto Authentication TLV
TLV Type: 2
TLV Length: 36
Sequence number: 0x6aa39867
Auth Data: 01d3c53a9a853189b11c5b7d4afdb000869b2cea0321138318e1b39e6e249e07手順1を省いて先に送信鍵を変えると、相手はその鍵IDを知らないためパケットを捨て、Deadインターバルの満了で隣接が落ちます。受信を先に、送信を後にが鍵ローテーションの原則です。
STEP 5:エリア単位とインタフェース単位を併用する
R1のエリア0にエリア単位の認証を追加します。インタフェース単位のキーチェーン設定はそのままです。
(R1)
router ospf 1
area 0
authentication message-digest両方が設定された状態になります。
router ospf 1
router-id 1.1.1.1
area 0
authentication message-digest
interface Loopback0
passive enable
!
interface GigabitEthernet0/0/0/0
authentication keychain KC-OSPF
!
!
!このときインタフェース単位が優先されます。表示はキーチェーンのままで、隣接も落ちません。エリア単位のmessage-digestはこのインタフェースには適用されませんでした。
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Designated Router)
Suppress hello for 0 neighbor(s)
Keychain-based authentication enabled
Keychain name KC-OSPF
Key id used is 2
Cryptographic algorithm HMAC-SHA-256
Multi-area interface Count is 0STEP 6:認証を削除する
エリア単位とインタフェース単位の両方を外します。
(R1)
router ospf 1
area 0
no authentication message-digest
interface GigabitEthernet0/0/0/0
no authentication keychain KC-OSPF
(R2)
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
no authentication keychain KC-OSPF認証の行が消え、STEP 0と同じ状態に戻ります。
LS Ack List: current length 0, high water mark 3
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 2.2.2.2 (Designated Router)
Suppress hello for 0 neighbor(s)
Multi-area interface Count is 0
Segment Routing Forwarding MPLS enabled: Yes
Adjacency hold timer expired last : Never
Exchange timer expired last : Never設計上の注意
- 平文認証は盗聴に対して無力です。 使うなら暗号認証にし、対向が対応していればHMAC-SHAを選びます
- 鍵の入れ替えは受信を先、送信を後。 手順を守れば隣接を落とさずに交換できます
- 片側だけの設定はDeadインターバルが切れるまでわかりません。 syslogにも認証エラーは出ず
dead timer expiredとしか残らないので、隣接が落ちたら両端の設定を突き合わせます send-lifetimeとaccept-lifetimeは装置の時刻に依存します。 期間を区切って自動で切り替える運用にするなら、NTPで時刻を合わせておく必要があります
検証Configおよびshow結果
各STEPで3台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 6のもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route / show route ospf / show ospf / show ospf interface / show ospf interface brief / show ospf neighbor / show ospf neighbor detail / show ospf database / show ospf database router / show ospf database network / show ospf statistics interface / show ospf interface GigabitEthernet0/0/0/0 / show key chain |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
STEP 0:認証なし — 認証の行が表示されない
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 1:平文認証を設定 — パスワードがキャプチャーに平文で見える。片側だけだと隣接が落ちる
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 2:MD5(キーチェーン)に変更 — Auth Crypt Data Length が 16。R2の隣のリンクは認証なしのまま
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 3:HMAC-SHA-256に変更 — Auth Crypt Data Length が 32 に変わる
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 4:鍵を追加してローテーション — Key ID が 1 から 2 へ。隣接は落ちない
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 5:エリア単位の認証を併用 — インタフェース単位が優先される
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 6:認証を削除(最終状態) — 認証なしの状態へ復旧
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
キャプチャーはR1 - R2間で、STEPをまとめて3本に分けて取得しました。
認証なしと平文認証(STEP 0〜1)のキャプチャーをダウンロード
MD5とHMAC-SHA-256(STEP 2〜3)のキャプチャーをダウンロード
鍵のローテーションと削除(STEP 4〜6)のキャプチャーをダウンロード
参考
| RFC | タイトル | 概要 |
|---|---|---|
| RFC 2328 | OSPF Version 2 | 認証の定義。AuTypeの値(Appendix A.3.1)と、AuType 0 / 1 / 2 それぞれの処理(Appendix D)。 |
| RFC 5709 | OSPFv2 HMAC-SHA Cryptographic Authentication | AuType 2の暗号認証をHMAC-SHAへ拡張する仕様。Auth Data Lenがアルゴリズムのダイジェスト長になることを定める。 |
関連記事
- OSPFとは
- OSPFのルータID
- OSPFパケットの種類とヘッダーフォーマット
- OSPFの認証
- OSPFの状態遷移
- OSPF Optionsフィールド
- OSPFのDRとBDR
- OSPF ネットワークタイプ
- OSPFのコスト(メトリック)
- OSPFの外部経路(スタティックの再配布)
- OSPFのマルチエリアとABR
- OSPFのバーチャルリンク
- OSPFのスタブエリアとトータリースタブエリア
- OSPFのNSSAとトータリーNSSA
- OSPFの経路集約
- OSPFのLSAとLSAヘッダー
- OSPFのRouter-LSA(Type 1)
- OSPFのNetwork-LSA(Type 2)
- OSPFのSummary-LSA(Type 3)
- OSPFのASBR Summary-LSA(Type 4)
- OSPFのAS External-LSA(Type 5)
- OSPFのNSSA External-LSA(Type 7)