課題:「フラットネットワーク」におけるパフォーマンスの限界
多くのネットワーク管理者は、まずすべてのルーターをエリア0(Area 0)に配置することからOSPFの導入を開始します。小規模なラボや、5台程度のルーターで構成されるスタートアップのオフィスであれば、これで完璧に動作します。しかし、エッジゲートウェイとして動作するLinuxベースのルーターが50台、100台、200台と増えていくにつれ、この「フラット」な設計は限界を迎え始めます。
ある150ノードの商用環境では、リモート拠点の1Gbpsリンクが1つフラッピング(不安定な切断と再接続)しただけで、コアルーターのCPU使用率が10%から95%に跳ね上がるのを目の当たりにしました。単一のOSPFエリア内のすべてのルーターは同一のリンク状態データベース(LSDB)を保持する必要があるため、いかなる変更も全ルーターにわたる最短パス優先(SPF)計算をトリガーします。その結果、10〜15秒のコンバージェンス遅延が発生し、本来パケットを転送すべきハードウェアのリソースが、マップの再計算に浪費されてしまうのです。
根本原因:LSDBের肥大化とSPFの負荷増大
この問題は、OSPFがリンク状態広告(LSA)を処理する方法に起因します。シングルエリア構成では、すべてのノードが自律システム全体のすべてのリンクの正確な状態を把握します。5ホップ離れた場所でサブネットがダウンすると、タイプ1 LSAが組織内のすべてのルーターにフラッディング(一斉送信)されます。
ネットワークが成長するにつれ、次の3つの現象が発生します。
- メモリの枯渇: 5,000以上のプレフィックスを持つLSDBは数百メガバイトのRAMを消費し、古いLinuxノードや軽量なVMに負荷をかけます。
- 計算負荷: ノードとリンクの数が増えるにつれ、ダイクストラアルゴリズム(SPF)の負荷が著しく増大します。
- 不安定性: 1本の光ファイバーパッチケーブルの接触不良が「ルーティングストーム」を引き起こし、ネットワーク全体を不安定にする可能性があります。
解決策:階層型設計
この問題は、フラットなトポロジーから階層的なトポロジーへ移行することで解決できます。ネットワークを複数のエリアに分割することで、詳細なトポロジー情報を特定の境界内に閉じ込めます。バックボーン(エリア0)だけが、他のエリアへの集約されたパスを把握していればよい状態にします。
ここでエリア境界ルーター(ABR)が翻訳者の役割を果たします。ABRはローカルエリアからの詳細なタイプ1およびタイプ2 LSAを受け取り、それらを1つのタイプ3サマリーLSAに凝縮して、ネットワークの残りの部分に伝えます。
アプローチの比較:シングルエリア vs マルチエリア
| 機能 | シングルエリア(フラット) | マルチエリア(階層型) |
|---|---|---|
| LSDBサイズ | 全トポロジー(大) | 集約済み(小) |
| SPFの影響 | グローバルな再計算 | エリア内に限定 |
| 設定 | 単純 | 中程度 |
| 拡張性 | 50〜80ルーターが限界 | 1000ノード以上をサポート |
メリットとデメリット
メリット:
- エッジルーターのCPUとRAMのオーバーヘッドを削減。
- SPFがマップの一部に対してのみ実行されるため、コンバージェンスが高速化。
- 障害の封じ込めにより、ローカルなリンクフラップがコアに影響を与えるのを防ぐ。
デメリット:
- 効果的な集約のために、厳格なIPアドレッシング計画が必要。
- すべての非バックボーンエリアは、エリア0への物理的または論理的なパスを持つ必要がある。
推奨構成
標準的なエンタープライズの階層構造は、通常ハブアンドスポークモデルに従います。
- エリア0(バックボーン): すべてのABRが接続される高速コア。
- 通常エリア(例:エリア10): 特定の外部ルーティングデータを必要とする地域オフィス。
- スタブエリア(例:エリア20): リソースの限られた拠点。これらのエリアは外部(ASBR)ルートを破棄し、代わりに単純なデフォルトルートを使用します。
実装ガイド:FRRoutingによるマルチエリアOSPF
Ubuntu 22.04上でFRRouting (FRR) を実行する3つのLinuxノードを使用します。Router-ABRはエリア0とエリア1を橋渡しします。Router-Backboneはエリア0に、Router-Branchはエリア1に配置します。
1. FRRoutingのインストール
すべてのノードで以下のコマンドを実行し、ルーティングスイートをインストールします。
sudo apt update
sudo apt install frr -y
/etc/frr/daemonsを開き、ospfd=yesに設定して、サービスを再起動します。
sudo systemctl restart frr
2. バックボーンルーター(エリア0)の設定
FRRシェルに入ります。このルーターはバックボーンのトラフィックのみを処理します。
# vtysh
conf t
router ospf
ospf router-id 1.1.1.1
network 10.0.0.0/30 area 0
exit
write memory
3. エリア境界ルーター(ABR)の設定
ABRは最も重要なノードです。両方のエリアを接続し、エリア0のルーティングテーブルをクリーンに保つためにルート集約を行います。
# vtysh
conf t
router ospf
ospf router-id 2.2.2.2
network 10.0.0.0/30 area 0
network 192.168.10.0/24 area 1
# エリア1のすべてのサブネットを1つのアドバタイズメントに集約
area 1 range 192.168.10.0/24
exit
write memory
4. スタブエリア(拠点ルーター)の設定
エリア1をスタブ(Stub)として定義することで、外部LSAが拠点ルーターにフラッディングされるのを防ぎます。これにより、ローカルのルーティングテーブルを軽量に保つことができます。
# vtysh
conf t
router ospf
ospf router-id 3.3.3.3
network 192.168.10.0/24 area 1
area 1 stub
exit
write memory
注意:ABR側でも area 1 stub コマンドを適用する必要があります。スタブフラグが一致しない場合、ネイバー関係は確立されません。
階層構造の検証
Router-Branch のルーティングテーブルを確認し、階層構造が機能しているかチェックします。
show ip route ospf
正しく設定されていれば、ABRを指すデフォルトルート (0.0.0.0/0) が表示されます。他のエリアからの個別のルートが50個も表示されることはありません。Backbone Router で集約状況を確認します。
show ip ospf database summary
エリア1内部の個別のリンク状態ではなく、192.168.10.0/24 に対する単一のタイプ3 LSAが表示されるはずです。
SPFタイマーの最適化
標準のOSPF設定は、大規模なLinuxベースのネットワークにはアグレッシブすぎる場合があります。リンク障害時のCPU枯渇を防ぐために、SPF計算にわずかな遅延を追加します。
conf t
router ospf
timers throttle spf 5000 10000 10000
exit
これはFRRに対し、最初の計算まで5秒待機し、ホールドタイムを10秒に制限するよう指示します。これは、不安定なワイヤレスバックホールや接触不良のファイバーリンクがある環境において、重要なセーフティネットとなります。
まとめ
マルチエリアOSPF設計への移行は、Linuxルーティングをスケールさせるための最も効果的な方法です。集約のためのABRとエッジのためのスタブエリアを使用することで、ハードウェアへの計算負荷を軽減できます。初期設計には手間がかかりますが、階層化されたネットワークは、肥大化したフラットなエリア0よりもはるかに保守が容易です。

