OSPFのプロセス起動と基本設定
OSPFをルータで使えるようにするためには、まずルータ上で「OSPFプロセス」を立ち上げる必要があります。Ciscoルータでは、1台の機器の中で複数のOSPFプロセスを並行して動かすことが可能です。このとき、それぞれのプロセスを区別するために「プロセスID」という番号を設定します。
プロセスIDは1から65535までの範囲で自由に決められますが、重要なのはこの番号は自分のルータ内部だけで意味を持つという点です。つまり、隣のルータとプロセスIDを揃える必要はありません。ただし、運用や管理をしやすくするためには、周囲のルータと統一しておくのが一般的です。
OSPFプロセスを立ち上げるコマンド
(config)# router ospf process-id
例えば、プロセスIDを「1」として起動する場合は次のようになります。
(config)# router ospf 1
もしプロセスを停止させたい場合には「no」を付けて次のように入力します。
(config)# no router ospf 1
OSPFを有効化するインターフェースとエリア指定
プロセスを起動しただけではOSPFはまだ動作しません。実際にどのインターフェースでOSPFを使うのか、さらにそのインターフェースがどのエリアに属するのかを指定する必要があります。これを設定するために使うのが networkコマンド です。
設定コマンドの形式
(config-router)# network address wildcard-mask area area-id
ここでの引数の意味は次の通りです。
- address
OSPFを有効化したいインターフェースを、ネットワークアドレスまたはそのインターフェースに設定されたIPアドレスで指定します。 - wildcard-mask
どの部分のIPアドレスをチェックするのかを指定します。サブネットマスクの「逆」のような考え方で、0ならチェックする、1なら無視するというルールがあります。 - area-id
そのインターフェースを属させたいエリア番号を指定します。特に基本となる「エリア0(バックボーンエリア)」は必ず覚えておきましょう。
設定例
ルータのインターフェースに 172.16.1.1/24 が割り当てられており、それをエリア0で有効化する場合の例です。
(config-router)# network 172.16.1.0 0.0.0.255 area 0
または、IPアドレスそのものを指定してもかまいません。
(config-router)# network 172.16.1.1 0.0.0.0 area 0
ワイルドカードマスクの考え方
ワイルドカードマスクはOSPF設定で必ず出てくる重要な概念です。32ビットの数値をドットで区切った形で書き、次のルールで動作します。
- 0 のビット → 指定したIPアドレスのビットを「確認する」
- 1 のビット → 指定したIPアドレスのビットを「無視する」
たとえば、0.0.0.255 は「最初の3オクテットは厳密に確認し、最後のオクテットは無視する」という意味になります。これはサブネットマスク /24 と同じ範囲を表します。
OSPFのステータス確認方法
OSPFの設定を行ったら、きちんと動作しているかどうかを確認することが重要です。Cisco IOSでは、複数の「show」コマンドを使うことで、プロセス全体の状況からインターフェースごとの詳細まで確認することができます。ここでは試験でもよく問われる代表的なコマンドを整理していきましょう。
show ip protocols で確認できる内容
このコマンドは、ルータで現在動作しているルーティングプロトコルの概要を表示します。OSPFだけでなく、RIPやEIGRPなども含めて一覧できるのが特徴です。
出力例から確認できる代表的なポイントは以下の通りです。
① 起動しているルーティングプロトコルが OSPF のプロセス1であることが分かる
② このルータのルータID(例:1.1.1.1)が表示される
③ 所属しているエリアの情報。標準エリアに属しており、スタブやNSSAには含まれていないことを確認できる
④ 同一コストの経路を保持できる数(デフォルトは4)。これが「等コストロードバランシング」の上限数
⑤ OSPF設定で入力した network コマンドの内容を表示
⑥ OSPFのコスト計算式で使われる分子(デフォルトは100Mbps)
⑦ エリア内でLSAを交換しているルータの一覧。IOSのバージョンによっては自分自身も表示される
⑧ OSPFのアドミニストレーティブディスタンス(AD値、デフォルト110)
show ip ospf で確認できる内容
このコマンドは、OSPFプロセス全体に関する情報をまとめて表示します。プロセスIDやルータID、エリア情報など、プロトコル全般の動作状態を把握するのに便利です。
主な確認ポイントは次の通りです。
① 動作している OSPF プロセスIDが表示される
② 所属しているエリア情報が表示される(標準エリアか、スタブ/NSSAかも分かる)
③ エリア0に関する情報の見出し
④ エリア0に属するインターフェースの数
⑤ エリア認証の有無(no authentication=認証なし)
⑥ SPF(最短経路探索)アルゴリズムの実行回数
show ip ospf interface で確認できる内容
OSPFを動かしている各インターフェースの動作状況を確認するには、このコマンドを使います。どのエリアに属しているのか、DR/BDRの選出状況、Hello/Deadタイマーなどが確認できるため、トラブルシューティングにも欠かせません。
主な表示内容は次の通りです。
① インターフェースのIPアドレスと所属エリア
② プロセスID、ルータID、ネットワークタイプ、インターフェースのコスト値
(例:Ethernetは「BROADCAST」、シリアルのポイントツーポイントは「POINT_TO_POINT」)
③ このインターフェースのOSPFプライオリティ値、および自分がDR/BDR/DROTHERのどれに該当するか
④ このセグメントで選出されたDRのルータIDとIPアドレス
⑤ このセグメントで選出されたBDRのルータIDとIPアドレス
⑥ Helloタイマー、Deadタイマー、Waitタイマー、Retransmitタイマーの値
⑦ ネイバー関係を持つルータの数と、アジャセンシーが確立しているルータの数
⑧ 確立したアジャセンシーの詳細(相手ルータIDや、相手がDRであることなど)
特に「Hello/Deadタイマー」「DR/BDRの選出状況」「ネットワークタイプ」は試験でも繰り返し出題される重要ポイントです。ここを見てOSPFが正常に動いているかどうかを判断できるようにしましょう。
OSPFのステータス確認コマンド
OSPFの動作が正しく行われているかどうかは、「show」コマンドで確認できます。ここではネイバー関係やLSDB、ルーティングテーブルの確認方法を整理していきます。試験でも出題頻度が高い部分なので、コマンドの役割と出力内容をしっかり押さえておきましょう。
show ip ospf neighbor
このコマンドは、ルータが認識しているOSPFネイバーの一覧を表示します。隣接関係(ネイバーシップ)の状態や、DR/BDRの選出状況を確認するために使われます。
表示内容のポイントは以下の通りです。
① ネイバールータのルータID
② ネイバールータのOSPFプライオリティ値
③ ネイバー状態(FULLならLSDBを交換済み、DROTHER同士なら2Wayで止まる)
同時に、ネイバールータがDR・BDR・DROTHERのどれであるかも表示される
④ Deadタイマー(Helloパケットが途絶えるとこの時間でネイバーDownと判定。LANのデフォルトは40秒)
⑤ ネイバールータのIPアドレス
⑥ 自分側のインターフェース(例:FastEthernet1)
試験では「ネイバー状態(Full、2Wayなど)」「DR/BDRの役割」が問われやすいため、出力の意味を理解しておく必要があります。
また、特定のネイバーの詳細を知りたい場合は以下のようにルータIDを指定します。
show ip ospf neighbor 2.2.2.2
この場合、次のような情報が得られます。
① ネイバーのルータIDとIPアドレス
② ネイバーを認識している自分のインターフェースとエリア情報
③ ネイバーのプライオリティ値と状態(例:FULL/DROTHERなど)
④ そのセグメントのDRとBDRのIPアドレス(ポイントツーポイントでは0.0.0.0と表示)
⑤ Deadタイマーの残り時間
⑥ ネイバー確立からの経過時間
show ip ospf database
リンクステートデータベース(LSDB)の要約情報を確認するコマンドです。OSPFはLSAを使ってネットワークの情報を共有しますが、その集まりを確認できます。
表示内容の主な項目は以下です。
① 自分のルータIDとプロセス番号
② LSAタイプ1(ルータLSA)の見出し
③ ルータLSAを生成したルータのルータID
④ ルータLSAを通知したルータのルータID
⑤ LSAを受信してからの経過時間
⑥ シーケンス番号(更新のバージョン番号のようなもの)
⑦ チェックサム(エラーチェック用)
⑧ リンク数
⑨ LSAタイプ2(ネットワークLSA)の見出し
⑩ ネットワークLSAを生成したDRのIPアドレス
より詳細を見たい場合は、LSAタイプごとに次のコマンドを使います。
- ルータLSAの詳細 →
show ip ospf database router - ネットワークLSAの詳細 →
show ip ospf database network
show ip route
ルーティングテーブルを確認するコマンドです。OSPFが実際に学習した経路がここに反映されます。出力では、各エントリの先頭に「O」と表示されることで、OSPF由来のルートだと分かります。
表示内容の確認ポイントは以下の通りです。
① 情報源(OSPFの場合は「O」)
② 宛先ネットワークアドレス
③ アドミニストレーティブディスタンス(OSPFは110)
④ メトリック値(OSPFでは「コスト値」)
⑤ ネクストホップアドレス
⑥ そのルートを受信してからの経過時間
⑦ パケットを転送するための出力インターフェース
例えば「192.168.2.0/24 の経路を OSPF で学習し、コストが 2、ネクストホップが 10.0.0.2」といった情報をここで確認できます。
OSPFのデバッグ確認方法
OSPFの動作を深く確認したいときには debugコマンド を利用します。通常のshowコマンドでは状態や結果を確認することはできますが、通信そのものの流れを追うことはできません。debugはその詳細をリアルタイムで表示できる強力な手段です。ただし、CPUに大きな負荷を与えるため、試験環境や検証環境以外では使用しないのが原則です。利用したら必ず undebug all で停止することを忘れないようにしましょう。
debug ip ospf events
このコマンドは、OSPFルータが送信・受信しているOSPFパケットの概要を確認できます。ネイバーが確立しないときに「そもそもパケットが届いているのか」を確認するのに有効です。
表示される例としては次のようなものがあります。
① 自ルータのFastEthernet 1から、エリア0の192.168.1.1としてHelloパケットを224.0.0.5へ送信している
② ルータID 2.2.2.2 からHelloパケットを受信している
つまり、送受信の有無を大まかに確認する用途に向いています。
debug ip ospf packet
こちらはOSPFパケットの受信詳細を表示するコマンドです。イベントよりもさらに細かい内容を解析できます。
フィールドの意味は以下の通りです。
- v:OSPFのバージョン(IPv4は2、IPv6は3)
- t:パケットタイプ(1=Hello、2=DBD、3=LSR、4=LSU、5=LSAck)
- l:パケットの長さ(バイト数)
- rid:送信元ルータのルータID
- aid:エリアID(0.0.0.0 はエリア0を意味する)
- chk:チェックサム
- aut:認証タイプ(0=なし、1=クリアテキスト、2=MD5)
- auk:認証キー
- keyed:MD5認証時のキーID
debug ip ospf adj
このコマンドは、ネイバー関係の確立プロセスを詳細に確認できます。インターフェースをリンクアップさせたとき、OSPFルータ同士がどのように関係を築いていくのかを追跡できます。
典型的な出力の流れは次の通りです。
① Helloパケットの送受信で2Way Stateへ
② DRとBDRが選出される
③ Exstart Stateへ移行
④ マスター・スレーブの関係を決定
⑤ Exchange StateでDBD、LSR、LSUをやり取りしLSDBを同期
⑥ 同期が完了しFull Stateへ到達
よくあるOSPFデバッグエラーメッセージ
OSPFネイバーが確立しないときに表示される典型的なエラーメッセージと原因は次の通りです。
① OSPF: Mismatched hello parameters
Helloタイマーの値が一致していない
② OSPF-4-ERRRCV: mismatch area ID
エリアIDが一致していない
③ OSPF: Mismatch Authentication type
認証タイプ(none / clear / MD5)が一致していない
④ OSPF: Mismatch Authentication Key
認証パスワードが一致していない
これらは試験問題でもそのまま出題されることが多く、特に エリアIDの不一致 と Helloタイマーの不一致 は頻出です。トラブルシューティングの際のチェックポイントとして必ず覚えておきましょう。
OSPFのルータID設定
OSPFでは、各ルータを識別するために「ルータID」を使用します。ルータIDは32ビット値で、通常はIPアドレスのように4つのオクテットで表記します。
手動で指定する場合は次のコマンドを利用します。
(config-router)# router-id 1.1.1.1
ただし、この設定を省略しても自動的に以下の優先順位でルータIDが決まります。
- router-id コマンドで明示的に指定された値
- ループバックインターフェースのIPアドレス(最も大きいものが選ばれる)
- アクティブな物理インターフェースの中で最も大きいIPアドレス
そのため、router-id コマンドは必須ではありませんが、設計の明確化やトラブル時の特定を容易にするために手動で設定するのが実務的には望ましいです。
注意点として、router-id を変更した場合はOSPFプロセスの再起動が必要です。再起動は clear ip ospf process またはルータの再起動によって行いますが、その際に通信が切断されるので実運用では注意が必要です。
OSPFプライオリティの設定
ブロードキャスト型やマルチアクセス型のネットワーク(例:Ethernet)では、OSPFはDR(指定ルータ)とBDR(バックアップ指定ルータ)を選出します。選出はインターフェースに設定されている「プライオリティ値」に基づいて行われます。
デフォルト値は「1」で、値が高い方が優先されます。0に設定すると、そのインターフェースは必ずDROTHERとなり、DRやBDRには選ばれません。
(config-if)# ip ospf priority 255
この例では、GigabitEthernet 0/1 のプライオリティ値を255に設定しています。
OSPFコスト値の設定
OSPFの経路選択は「コスト値」を基準に行われます。コスト値はデフォルトでリンクの帯域幅から計算されます。
計算式は以下の通りです。
コスト値 = 参照帯域幅 ÷ インターフェース帯域幅
デフォルトの参照帯域幅は「100Mbps」です。
代表的な計算結果は以下の通りです。
| インターフェース帯域幅 | コスト値 |
|---|---|
| 64Kbps | 1562 |
| 128Kbps | 781 |
| 1.544Mbps (T1) | 64 |
| 10Mbps | 10 |
| 100Mbps | 1 |
| 1Gbps | 1 |
1Gbpsリンクでは計算上「0.1」になりますが、整数値しか扱えないため実際には「1」として扱われます。
コストを手動で設定する方法
(config-if)# ip ospf cost 10
この例では、インターフェースにコスト10を手動で割り当てています。
参照帯域幅を変更する方法
ネットワーク全体でコストの基準を見直したいときは、参照帯域幅を変更します。
(config-router)# auto-cost reference-bandwidth 1000
この設定により、参照帯域幅が1000Mbps(1Gbps)となり、10Mbpsのリンクはコスト100、100Mbpsはコスト10、1Gbpsはコスト1として計算されます。
ただし、この設定はネットワーク全体で揃えないと不整合が発生するため、大規模ネットワークでは推奨されません。
帯域幅設定による調整
OSPFコストは show interfaces で表示される「BW Kbit/sec」の値を基準に計算されるため、インターフェースの帯域を bandwidth コマンドで変更するとコストに影響を与えることができます。
(config-if)# bandwidth 2048
この場合、帯域を2048kbpsとして扱い、そこからコストを再計算します。ただし、この方法は副次的な設定変更となるため、実際の設計ではあまり使われません。
OSPFのロードバランシング
OSPFはリンクステート型のルーティングプロトコルで、宛先ネットワークまでの経路を「コスト値」によって選択します。もし複数の経路が同じコストで到達できる場合、それらを同時にルーティングテーブルに格納し、トラフィックを分散して転送することができます。これを 等コストマルチパス(ECMP:Equal-Cost Multi-Path) と呼びます。
例えば、宛先 172.16.4.0/24 に対して、R2経由とR3経由のどちらもコスト値が「2」であるならば、ルーティングテーブルには2つの経路が同時に登録され、OSPFルータはロードバランシングを行います。
デフォルトの挙動
OSPFでは、等コスト経路が存在する場合、デフォルトで最大4つの経路をルーティングテーブルに保持できます。これにより、トラフィックが複数のリンクへ分散され、回線の利用効率が向上します。
ただし、この「最大数」は調整可能で、環境によって変更することが可能です。
等コストパスの最大数を設定する方法
(config-router)# maximum-paths value
- value:1~16 の範囲で指定
- デフォルト値:4
設定例:最大値を10に変更する場合
(config)# router ospf 1
(config-router)# maximum-paths 10
この設定により、OSPFルータは最大で10本までの等コスト経路をルーティングテーブルに格納できます。
OSPFのアップデート送信制御
OSPFでは、隣接ルータがいるかどうかに関わらず、OSPFを有効化したインターフェースからは常にHelloパケットが送信されます。これは隣接関係を確立するための基本動作ですが、例えばPCしか接続されていないネットワークに対しては無駄なHelloを送り続けることになります。
このような場合に使用するのが passive-interfaceコマンド です。これを設定すると、指定したインターフェースからはOSPFのHelloパケットやルーティングアップデートが送信されなくなります。ただし、そのインターフェースのネットワーク情報自体はOSPFに広告されるため、ルーティングテーブルには正しく反映されます。
設定例(特定のインターフェースで送信を止める場合)
(config)# router ospf 1
(config-router)# passive-interface GigabitEthernet0/0
この設定では、GigabitEthernet0/0 からはHelloパケットが送信されなくなります。PCなどのエンドデバイスが接続されたネットワークに適用するのが典型的です。
L3スイッチ環境での運用
L3スイッチのように複数のVLANインターフェースをOSPFに参加させる場合、隣接ルータが存在するインターフェースは一部だけで、それ以外はほとんどがエンドデバイス用のネットワークというケースが多いです。
その場合、1つずつ passive-interface を適用していくのは効率が悪いため、全てのインターフェースを一括でパッシブ化する passive-interface default を使うのが一般的です。その上で、OSPFネイバー関係を持つインターフェースだけを no passive-interface で除外します。
設定例(VLAN10のみ隣接ルータが存在する場合)
Catalyst(config)# router ospf 1
Catalyst(config-router)# network 172.16.10.254 0.0.0.0 area 0
Catalyst(config-router)# network 172.16.20.254 0.0.0.0 area 0
Catalyst(config-router)# network 172.16.30.254 0.0.0.0 area 0
Catalyst(config-router)# network 172.16.40.254 0.0.0.0 area 0
Catalyst(config-router)# passive-interface default
Catalyst(config-router)# no passive-interface vlan10
この場合、すべてのインターフェースがパッシブ化され、VLAN10だけがOSPFネイバーを形成できるように設定されています。