この記事は、 「ネットワーク中級編|構築・検証・障害切り分けを身につける」 の第16回です。
前回学んだ動的ルーティングの考え方を踏まえ、 今回は代表的な動的ルーティングプロトコルであるOSPFの全体像を学びます。
OSPFとは?基本の仕組み・エリア・LSA・経路学習を図解
OSPFは、複数のルーターがネットワーク情報を共有し、 障害や構成変更に合わせて最適な経路を自動計算する動的ルーティングプロトコルです。 この記事では、ネイバー、LSA、LSDB、SPF計算、エリア、コストの関係を、 設定例と確認コマンドを交えて解説します。
OSPFを理解するときは、設定コマンドを先に暗記するのではなく、 「隣接ルーターを見つける → 情報を交換する → 地図を作る → 最短経路を計算する」 という流れをつかむことが重要です。
OSPFでは、各ルーターが単に隣から経路表を受け取るのではありません。 同じエリア内のネットワーク構成をLSDBとして共有し、 その情報をもとに各ルーターが自分で最適経路を計算します。
この記事を読み終えるとできること
- OSPFの役割と特徴を説明できる
- ネイバー、LSA、LSDB、SPFの関係を説明できる
- エリア0が必要な理由を説明できる
- 基本的なOSPF設定を投入できる
- showコマンドでネイバーと学習経路を確認できる
- OSPFが動かないときの確認順序を整理できる
OSPFとは何か
OSPFは、ルーター同士がリンク状態の情報を共有し、 各ルーターがネットワーク全体の地図を作って最適経路を計算する、 リンクステート型の動的ルーティングプロトコルです。
OSPFはOpen Shortest Path Firstの略です。 企業ネットワークや拠点間ネットワークなど、 複数のルーターで構成される組織内ネットワークで広く利用されます。
OSPFは、組織内で使うIGP(Interior Gateway Protocol)の一つです。 インターネット上の異なる組織同士で経路を交換するBGPとは、主な利用範囲が異なります。
| 項目 | OSPF |
|---|---|
| 分類 | リンクステート型IGP |
| 主な利用範囲 | 企業・組織内のルーティング |
| 経路選択の指標 | コスト。基本的に小さい経路を優先 |
| 計算方法 | SPFアルゴリズムにより最短経路を計算 |
| 階層化 | エリアによってネットワークを分割できる |
| IP上の扱い | TCPやUDPではなく、IPプロトコル番号89を直接使用 |
IPv4で使用するOSPFは一般にOSPFv2、 IPv6で使用するOSPFはOSPFv3と呼ばれます。 この記事では、主にIPv4のOSPFv2を扱います。
なぜOSPFが使われるのか
ルーターが数台だけで、ネットワーク変更も少ない場合は、 スタティックルートでも管理できます。 しかし、ルーターや経路が増えると、手動設定だけでは変更や障害への対応が難しくなります。
経路を自動学習できる
ルーター同士が情報を交換するため、 すべての宛先を1台ずつ手動設定する必要がありません。
障害時に再計算できる
リンク断などの変更を検知すると、 新しいネットワーク情報を共有し、利用可能な経路を再計算します。
大規模化に対応しやすい
エリアによってネットワークを階層化し、 情報量や再計算の影響範囲を整理できます。
マルチベンダーで利用できる
特定ベンダーだけに限定された方式ではないため、 異なるメーカーのルーター間でも利用できます。
OSPFを導入する目的は、設定をゼロにすることではありません。
経路変更をルーター同士で共有し、 ネットワークの変化に追従できる仕組みを作ることが目的です。
まずOSPFの全体像を1枚で理解する
次の構成では、R1、R2、R3がOSPFを使用しています。 それぞれのルーターは、自分に直接接続されたネットワークの情報を交換します。
単一エリアOSPFの構成例
R1はLAN-Aの存在を、R3はLAN-Cの存在をOSPFで知らせます。 情報交換が完了すると、R1はR3側のLAN-Cへ向かう経路を学習し、 R3もR1側のLAN-Aへ向かう経路を学習します。
OSPFでは、ルーター同士が最終的なルーティングテーブルをそのままコピーするのではありません。 リンクの状態を表す情報を共有し、各ルーターが自分で経路を計算します。
OSPFが経路を学習する4つの流れ
- Helloパケットで隣接ルーターを見つける OSPFが有効なインターフェースからHelloパケットを送信し、 同じセグメント上でOSPFを動作させているルーターを発見します。
- ネイバー関係を確立する エリア番号やHello/Deadタイマーなどの条件が一致すると、 ルーター同士はネイバーとなり、必要に応じて隣接関係を形成します。
- LSAを交換し、LSDBを同期する 各ルーターが持つリンク状態の情報をLSAとして交換し、 同じエリア内でネットワーク構成を表すLSDBをそろえます。
- SPF計算を行い、経路をルーティングテーブルへ登録する LSDBをもとに、自分を起点とした最短経路ツリーを計算し、 採用された経路をルーティングテーブルへ登録します。
情報が経路へ変わる流れ
OSPFの基本用語
| 用語 | 意味 | 覚え方 |
|---|---|---|
| Router ID | OSPFルーターを識別する32ビットのID | OSPF内でのルーター名 |
| Neighbor | Helloによって認識した隣接OSPFルーター | 隣にいることを認識した相手 |
| Adjacency | LSDBを同期するための隣接関係 | 情報交換を行う関係 |
| LSA | リンク状態を通知する情報 | 地図を作るための部品 |
| LSDB | LSAを集めたリンクステートデータベース | エリア内ネットワークの地図 |
| SPF | LSDBから最短経路を計算する処理 | 地図から最短ルートを選ぶ計算 |
| Cost | OSPFが経路選択に使用するメトリック | 小さい経路ほど優先 |
| Area | OSPFネットワークを論理的に分割する単位 | 情報共有と計算の範囲 |
| ABR | 複数エリアに接続し、エリア間を中継するルーター | エリアの境界にいるルーター |
| ASBR | スタティックや他プロトコルなど外部経路をOSPFへ取り込むルーター | OSPF外部との境界ルーター |
| DR / BDR | ブロードキャスト型ネットワークでLSA交換を効率化する代表・予備ルーター | 全員同士の交換を減らす役割 |
Router IDはIPアドレスのように見えるが、識別子である
Router IDは1.1.1.1のような形式で表示されますが、
パケット転送先として使うIPアドレスそのものではなく、OSPFルーターを識別するIDです。
Cisco IOSでは、Router IDを明示しない場合、一般にOSPFプロセス開始時に ループバックインターフェースの最大IPアドレス、 それがなければ稼働中インターフェースの最大IPアドレスから選ばれます。 実務では、意図しない変更を避けるために明示設定するのが安全です。
OSPFのエリアとは何か
OSPFでは、ネットワークをエリアという単位で分割できます。 小規模な構成ではすべてのルーターをArea 0へ所属させる単一エリア構成が分かりやすいですが、 大規模になると複数エリアへ分割します。
複数エリア構成の基本イメージ
Area 0はバックボーンエリア
Area 0はOSPFの中心となるバックボーンエリアです。 通常、Area 10やArea 20などの非バックボーンエリアは、 Area 0へ論理的に接続するよう設計します。
エリアを分ける主な目的
- LSDBの規模を抑える
- トポロジ変更時のSPF再計算範囲を整理する
- LSAの拡散範囲を制御する
- 経路集約や運用上の境界を作りやすくする
エリアを増やせば必ずよくなるわけではありません。 小規模環境で過剰に分割すると、ABRやエリア間経路の管理が増え、 かえって構成が複雑になります。
OSPFで使う5種類のパケット
OSPFルーター同士は、役割の異なる5種類のOSPFパケットを使用して、 ネイバー発見やデータベース同期を行います。
| 種類 | 正式名称 | 主な役割 |
|---|---|---|
| Type 1 | Hello | ネイバー発見、関係維持、パラメータ確認 |
| Type 2 | Database Description(DBD) | 自分が持つLSDBの概要を交換 |
| Type 3 | Link State Request(LSR) | 不足しているLSAを要求 |
| Type 4 | Link State Update(LSU) | LSAを送信 |
| Type 5 | Link State Acknowledgment(LSAck) | LSAを受信したことを確認応答 |
LSAとLSUは同じものではありません。 LSAはリンク状態の情報そのもの、LSUはLSAを運ぶOSPFパケットです。
IPv4のOSPFでは、状況に応じて224.0.0.5(AllSPFRouters)や
224.0.0.6(AllDRouters)などのマルチキャストアドレスを使用します。
OSPFネイバーが確立するまでの状態
OSPFネイバーは、Helloを受信した直後にいきなりFull状態になるわけではありません。 データベースを比較・同期しながら複数の状態を進みます。
一般的なポイントツーポイント接続では、正常にLSDB同期が完了するとFullになります。 Ethernetなどのブロードキャスト型ネットワークではDR/BDRの選出があるため、 すべてのルーター同士が必ずFullになるわけではなく、2-Wayが正常な組み合わせもあります。
次の記事では、各状態で何を交換しているのか、 どの不一致で止まりやすいのかを詳しく解説します。
OSPFのコストと経路選択の基本
OSPFは、経路選択にコストを使用します。 宛先までに通過する各インターフェースのコストを合計し、 基本的に合計コストが小さい経路を優先します。
合計コストで経路を比較する例
Cisco IOSの初期設定では、一般に次の考え方でインターフェースコストを算出します。
OSPFコスト = 参照帯域幅 ÷ インターフェース帯域幅
初期の参照帯域幅が100Mbpsの場合、100Mbps以上の回線が同じコスト1になることがあります。 1Gbps、10Gbps、40Gbpsなどを正しく差別化したい環境では、 すべてのOSPFルーターで参照帯域幅を統一して見直します。
コストは実効速度を自動測定した値ではありません。 インターフェースの帯域幅情報や手動設定をもとに計算されます。
宛先への経路が複数あり、経路種別とコストが同じ場合は、 等コストマルチパスとして複数経路を利用できる場合があります。
ルーティングテーブルでOSPF経路を読む
Cisco IOSのshow ip routeでは、OSPFで学習した経路が
OやO IAなどのコードで表示されます。
| コード | 意味 | 経路の出どころ |
|---|---|---|
| O | Intra-Area | 同じエリア内で学習した経路 |
| O IA | Inter-Area | ABRを経由して別エリアから学習した経路 |
| O E1 | External Type 1 | 外部経路。外部メトリックと内部コストを加味 |
| O E2 | External Type 2 | 外部経路。基本的に外部メトリックを中心に比較 |
R1# show ip route ospf O 192.168.20.0/24 [110/2] via 10.0.12.2, 00:03:21, GigabitEthernet0/0 O 192.168.30.0/24 [110/3] via 10.0.12.2, 00:03:21, GigabitEthernet0/0
[110/2]は、Cisco IOSでは一般に
管理距離110/OSPFメトリック2を表します。
その後ろにネクストホップ、経過時間、出力インターフェースが続きます。
Cisco IOSでOSPFを設定する基本例
次の3台構成で、すべてのネットワークをArea 0へ参加させます。
| ルーター | インターフェース | IPアドレス | 接続先 |
|---|---|---|---|
| R1 | G0/0 | 10.0.12.1/30 | R2 |
| R1 | G0/1 | 192.168.10.1/24 | LAN-A |
| R2 | G0/0 | 10.0.12.2/30 | R1 |
| R2 | G0/1 | 10.0.23.1/30 | R3 |
| R3 | G0/0 | 10.0.23.2/30 | R2 |
| R3 | G0/1 | 192.168.30.1/24 | LAN-C |
R1の設定
R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# network 10.0.12.0 0.0.0.3 area 0 R1(config-router)# network 192.168.10.0 0.0.0.255 area 0 R1(config-router)# passive-interface GigabitEthernet0/1
R2の設定
R2(config)# router ospf 1 R2(config-router)# router-id 2.2.2.2 R2(config-router)# network 10.0.12.0 0.0.0.3 area 0 R2(config-router)# network 10.0.23.0 0.0.0.3 area 0
R3の設定
R3(config)# router ospf 1 R3(config-router)# router-id 3.3.3.3 R3(config-router)# network 10.0.23.0 0.0.0.3 area 0 R3(config-router)# network 192.168.30.0 0.0.0.255 area 0 R3(config-router)# passive-interface GigabitEthernet0/1
各コマンドの意味
| コマンド | 意味 |
|---|---|
router ospf 1 |
ローカル装置上でOSPFプロセス1を開始する |
router-id 1.1.1.1 |
OSPF Router IDを明示する |
network ... area 0 |
指定条件に一致するローカルインターフェースでOSPFを有効化し、Area 0へ所属させる |
passive-interface |
対象インターフェースからHelloを送らず、ネイバーを形成しない |
networkコマンドは「その経路を直接配布する命令」と考えないことが重要です。
Cisco IOSでは、networkコマンドがローカルインターフェースを照合し、 一致したインターフェース上でOSPFを有効にします。 その結果、そのインターフェースの接続ネットワークがOSPFへ反映されます。
router ospf 1の「1」はプロセスIDです。
プロセスIDはルーター内部だけで使用するため、
隣接ルーターと同じ番号にする必要はありません。
OSPFの確認コマンドと確認順序
OSPF設定後は、いきなりエンドツーエンドのpingだけを確認するのではなく、 下位の条件から順番に確認します。
-
インターフェースがup/upか確認する
show ip interface briefで物理・データリンク状態とIPアドレスを確認します。 - 直結相手へpingできるか確認する OSPF以前に、同一セグメントのIP通信が成立していることを確認します。
-
OSPFが対象インターフェースで有効か確認する
show ip ospf interface briefでプロセス、エリア、コスト、状態を確認します。 -
ネイバーが期待する状態か確認する
show ip ospf neighborでRouter ID、状態、Dead Time、接続先を確認します。 -
LSDBに必要な情報があるか確認する
show ip ospf databaseでLSAの登録状況を確認します。 -
OSPF経路がルーティングテーブルへ登録されたか確認する
show ip route ospfで宛先、コスト、ネクストホップを確認します。 - 最終的な通信試験を行う pingやtracerouteで、実際の宛先まで通信できるか確認します。
show ip ospf neighbor
R2# show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 1.1.1.1 1 FULL/DR 00:00:36 10.0.12.1 GigabitEthernet0/0 3.3.3.3 1 FULL/BDR 00:00:33 10.0.23.2 GigabitEthernet0/1
主な確認箇所は、Neighbor ID、State、Dead Time、Address、Interfaceです。
ポイントツーポイント型ではFULL/-、
EthernetではFULL/DRやFULL/BDRなどと表示されることがあります。
show ip ospf interface brief
R2# show ip ospf interface brief Interface PID Area IP Address/Mask Cost State Nbrs F/C Gi0/0 1 0 10.0.12.2/30 1 DR 1/1 Gi0/1 1 0 10.0.23.1/30 1 BDR 1/1
show ip protocols
OSPFプロセスID、Router ID、network設定、passive-interface、 ルーティング情報の送受信対象などをまとめて確認できます。
OSPFのよくある勘違い・設定ミス
Cisco IOSのプロセスIDはローカル装置内だけの識別番号です。 R1がプロセス1、R2がプロセス100でも、他の条件が一致すればネイバーを形成できます。
networkコマンドはローカルインターフェースを照合します。 自分が持っていない遠隔ネットワークを指定しても、その経路が生成されるわけではありません。
同じリンク上でR1がArea 0、R2がArea 10になっていると、正常な隣接関係を確立できません。
隣接ルーター間でタイマーが異なるとネイバーになれません。 片側だけ変更していないか確認します。
Router IDはOSPFドメイン内で一意にします。 重複するとLSAの識別やネイバー形成に問題が発生します。
ルーター間リンクをpassiveにするとHelloを送信しないため、ネイバーを形成できません。 一方、利用者LAN側をpassiveにする設計は一般的です。
MTU不一致、Router IDの重複、通信の片方向性などを確認します。 「Helloが見えているから問題なし」と判断せず、状態を確認します。
Fullになっているか、LSAが存在するか、最終的に経路表へ登録されたかを分けて確認すると、 問題が発生している段階を絞り込めます。
OSPFを設計・運用するときの判断ポイント
Router IDを固定する
装置再起動やインターフェース変更で意図せず変わらないよう、 設計値として明示します。
エリアを増やしすぎない
規模、変更頻度、障害影響、運用体制を見て、 単一エリアか複数エリアかを判断します。
参照帯域幅を統一する
高速回線を区別する場合は、全ルーターで同じ基準を設定します。
利用者LANはpassiveにする
ネイバーが存在しないLANではHelloを止め、 不要な隣接形成や情報露出を減らします。
デフォルトルート配布を明確にする
どのルーターがインターネット向けデフォルトルートを生成・通知するかを決めます。
認証・監視を考慮する
不正な隣接形成を防ぐ認証や、 ネイバー状態・経路数・変更ログの監視を設計します。
変更作業では「経路が変わる時間」を考える
コスト変更、インターフェース停止、ルーター再起動などを行うと、 OSPFはLSA更新とSPF再計算を実施します。 そのため、変更前に次の点を確認します。
- 現在の主経路と待機経路
- 変更後の期待コストとネクストホップ
- 等コスト経路の有無
- 通信セッションへの影響
- 切り戻し条件と確認コマンド
- 隣接ルーター側の設定整合性
OSPFを顧客・上司へ説明する方法
技術に詳しくない相手へは、LSAタイプやSPFアルゴリズムから説明するより、 「経路を自動で共有し、障害時に迂回経路を再計算する仕組み」と説明すると伝わりやすくなります。
説明例
OSPFは、複数のルーターがネットワークの接続状況を共有し、 宛先までの適切な経路を自動で選ぶ仕組みです。 通常利用している回線が停止した場合も、別経路が存在すれば、 ルーター同士で変更情報を共有して経路を再計算できます。 ただし、切り替え時間や利用できる迂回経路は、構成と設定によって異なります。
「必ず無停止になる」と断言せず、 物理障害の検知方法、OSPFタイマー、SPF計算、機器性能、アプリケーション特性によって 影響時間が変わることも合わせて説明します。
OSPFの英語ドキュメントでよく見る表現
| 英語表現 | 意味 | 確認場面 |
|---|---|---|
| neighbor adjacency | ネイバー隣接関係 | ネイバーが確立しない調査 |
| link-state advertisement | リンクステート広告 | LSAの生成・更新・拡散 |
| link-state database | リンクステートデータベース | LSDB同期の確認 |
| shortest path first calculation | 最短経路優先計算 | 経路再計算の説明 |
| route convergence | 経路収束 | 障害後に経路が安定するまで |
| area mismatch | エリア不一致 | ネイバー不成立 |
| dead timer expired | Deadタイマー満了 | ネイバーダウンのログ |
| database exchange | データベース交換 | Exchange状態の調査 |
障害調査では、
OSPF neighbor stuck in EXSTART、
OSPF adjacency down area mismatch、
OSPF MTU mismatch
のように、プロトコル名・状態・症状を組み合わせて検索します。
理解度チェック
解答を見る前に、自分の言葉で理由まで考えてください。
問題1.OSPFの説明として最も適切なものはどれですか。
- すべての経路を管理者が手動設定する方式
- ルーターがリンク状態を共有し、各自で最適経路を計算する方式
- IPアドレスを自動配布する方式
- MACアドレスを学習する方式
解答を見る
OSPFはリンクステート情報を交換してLSDBを作成し、 各ルーターがSPF計算によって最適経路を求めます。
問題2.LSDBの説明として正しいものはどれですか。
- MACアドレスとポートの対応表
- 現在確立しているTCPセッションの一覧
- LSAを集めたネットワーク構成のデータベース
- スタティックルートだけを保存する表
解答を見る
LSDBは、エリア内のリンク状態を表すLSAを集めたデータベースです。 SPF計算の入力情報になります。
問題3.Cisco IOSのOSPFプロセスIDについて正しいものはどれですか。
- 隣接ルーターと必ず一致させる
- エリア番号と必ず同じにする
- ローカル装置内でOSPFプロセスを識別する
- Router IDとして使用される
解答を見る
プロセスIDはローカルな識別番号です。 ネイバー間で同じ番号にする必要はありません。
問題4.OSPFのバックボーンエリアはどれですか。
- Area 0
- Area 1
- Area 100
- Router IDによって変わる
解答を見る
Area 0はバックボーンエリアです。 複数エリア構成では、非バックボーンエリアをArea 0へ論理的に接続します。
問題5.OSPFネイバーがFullなのに宛先経路がない場合、次に確認すべきものを2つ挙げてください。
解答例を見る
例として、LSDBに対象LSAが存在するか、 対象ネットワークのインターフェースがOSPFへ参加しているか、 より優先される別経路が存在しないかなどを確認します。
実践演習:OSPFで2つのLANを接続する
Packet Tracerなどで、R1—R2—R3の3台構成を作成し、 LAN-AとLAN-CがOSPF経由で通信できる状態を作ってください。
演習構成
課題1.設定する
- 各インターフェースへIPアドレスを設定する
- 各ルーターへ一意のRouter IDを設定する
- 必要なインターフェースをArea 0へ参加させる
- PC側LANインターフェースをpassive-interfaceにする
課題2.正常性を確認する
次の確認結果を記録してください。
- R1が認識するネイバー数
- R2が認識するネイバー数
- R3が認識するネイバー数
- R1で学習した192.168.30.0/24の経路
- R3で学習した192.168.10.0/24の経路
- PC-AからPC-Cへのping結果
課題3.意図的に障害を発生させる
R2のR3向けインターフェースだけArea 10へ変更し、 ネイバー状態とルーティングテーブルがどう変化するか確認してください。
演習の解答例を見る
正常時の期待結果
- R1のネイバーはR2の1台
- R2のネイバーはR1とR3の2台
- R3のネイバーはR2の1台
- R1は192.168.30.0/24をOSPF経路として学習
- R3は192.168.10.0/24をOSPF経路として学習
- PC-AとPC-Cのデフォルトゲートウェイが正しければ相互ping可能
Area不一致時の期待結果
- R2—R3間のネイバーが確立しない
- R1側から192.168.30.0/24へのOSPF経路が消える
- R3側から192.168.10.0/24へのOSPF経路が消える
- R2とR3の対象インターフェースでArea番号を確認すると不一致を発見できる
自分の言葉で説明する課題
「OSPFは、どのようにして遠隔ネットワークへの経路を学習しますか?」と質問されました。 ネイバー、LSA、LSDB、SPFという4つの言葉を使って説明してください。
説明例を見る
OSPFでは、まずHelloパケットで隣接ルーターを見つけてネイバー関係を作ります。 次に、リンク状態を表すLSAを交換し、同じエリア内のネットワーク構成をLSDBとして共有します。 各ルーターはLSDBをもとにSPF計算を行い、宛先までの最適経路をルーティングテーブルへ登録します。
まとめ
- OSPFは、リンクステート型の動的ルーティングプロトコル
- Helloで隣接ルーターを見つけ、ネイバー関係を形成する
- LSAを交換し、同じエリア内でLSDBを同期する
- 各ルーターはLSDBをもとにSPF計算を行う
- OSPFはコストを使い、基本的に小さい経路を優先する
- Area 0はバックボーンエリアである
- Cisco IOSのOSPFプロセスIDは隣接ルーターと一致不要
- networkコマンドはローカルインターフェースを照合してOSPFを有効化する
- 障害時は、物理状態、直結通信、OSPFインターフェース、ネイバー、LSDB、経路表の順に確認する
OSPFの基本は、「ネイバーを作る」「地図を共有する」「自分で最短経路を計算する」の3点です。

コメント