OSPFはネットワークエンジニアが現場で必ず扱う動的ルーティングプロトコルです。特に「エリア設計」を正しく理解しているかどうかで、ネットワークの安定性やトラブルシューティング効率が大きく変わります。この記事では、OSPFエリアの概念から実際の設定コマンド、現場でよく使うマルチエリア構成まで、実務目線でわかりやすく解説します。

現場での体験談

以前、製造業のお客様先でWANの再設計を担当したとき、全拠点を単一のOSPFエリアで構成していたために、ルーターのCPUが高騰してしまうトラブルに遭遇しました。原因はSPFアルゴリズムの再計算が頻繁に発生していたことで、マルチエリア構成に変更したところCPU使用率が約60%から10%以下に改善しました。OSPFエリア設計の重要性をこのとき痛感しました。

OSPFとは何か?基本を押さえよう

OSPF(Open Shortest Path First)はIETF標準の動的ルーティングプロトコルで、RFC 2328(OSPFv2)として定義されています。リンクステート型プロトコルであり、各ルーターがネットワーク全体のトポロジ情報(LSDB:リンクステートデータベース)を持ち、ダイクストラ法(SPFアルゴリズム)を使って最短パスを計算します。

RIPのような距離ベクタ型プロトコルと異なり、ホップ数ではなくコスト値(帯域幅ベース)でメトリックを決定するため、より細かなトラフィックエンジニアリングが可能です。大規模ネットワークでの採用実績が多く、企業WAN・データセンター・ISPバックボーンなど幅広い環境で使われています。

OSPFの主な特徴

OSPFはコンバージェンス(経路収束)が速く、ネットワーク変化をすぐに全ルーターへ伝播させることができます。また、ネットワークをエリアという単位で分割することで、LSDBのサイズを小さくして各ルーターの負荷を軽減できます。VLSM(可変長サブネットマスク)にも対応しており、CIDRとの親和性も高いです。認証機能も備えており、なりすましによるルーティング攻撃を防ぐことができます。

図1: OSPFと他のルーティングプロトコルのメトリック比較

OSPF(コスト)
高精度
EIGRP(複合)
高精度
IS-IS(メトリック)
中精度
RIP(ホップ数)
低精度
OSPFエリアの概念と種類

OSPFのエリアとは、ルーターとリンクの集まりをグループ化したものです。エリアを分割することで、LSAの伝播範囲を制限し、各ルーターが保持しなければならないトポロジ情報を削減できます。これがOSPFのスケーラビリティを支える核心的な仕組みです。

バックボーンエリア(Area 0)

Area 0はOSPFのバックボーンエリアと呼ばれ、すべてのエリアがArea 0に接続される必要があります。マルチエリア構成では、すべての非バックボーンエリアはABR(Area Border Router)を通じてArea 0に直接または仮想リンクで接続しなければなりません。この制約がOSPFネットワーク設計の基本となります。

スタブエリア(Stub Area)

スタブエリアはAS外部LSA(Type-5 LSA)を受け取らないエリアです。外部経路は代わりにデフォルトルートで代替されます。インターネットへの接続点が1つしかないような末端の拠点エリアに最適で、ルーターのメモリとCPUを大幅に節約できます。

Totally Stubbyエリア

Totally StubbyエリアはCisco独自の機能で、スタブエリアよりさらに制限が強く、エリア間LSA(Type-3 LSA)も受け取りません。ABRからのデフォルトルートのみを受信します。エリア内のルーターが非常にシンプルで、外部への経路判断はすべてABRに任せる構成に適しています。

NSSAエリア(Not-So-Stubby Area)

NSSAはスタブエリアの変形で、AS外部LSAは受け取りませんが、エリア内にASBR(AS境界ルーター)を持てる点が異なります。NSSAではType-7 LSAという独自のLSAを使って外部経路をエリア内でフラッディングし、ABRでType-5 LSAに変換してArea 0に伝播させます。支店サイトにブランチルーターがあり、そこからスタティックルートを再配送したい場合に活用します。

エリア種別Type-5 LSAType-3 LSAASBR許可主な用途
Normal(通常)○ 受信○ 受信○ 可一般的なエリア
Stub✗ ブロック○ 受信✗ 不可末端拠点、出口が1つ
Totally Stubby✗ ブロック✗ ブロック✗ 不可最小構成の末端拠点
NSSA✗ ブロック○ 受信○ 可再配送が必要な末端拠点
OSPFルーターの役割(DR・BDR・ABR・ASBR)
DR(Designated Router)とBDR

マルチアクセスネットワーク(EthernetなどのLAN)上では、すべてのルーターが互いにネイバー関係を結ぶとフラッディングが爆発的に増えます。これを防ぐためにDR(Designated Router)とBDR(Backup Designated Router)を選出します。DRだけがすべてのルーターとFull状態になり、LSAのフラッディングを代表して行います。BDRはDRの障害に備えたバックアップです。

DRの選出はOSPFプライオリティ(デフォルト1)で行われ、同じ場合はRouter IDが高いルーターが選ばれます。プライオリティを0に設定するとDR/BDR選出に参加しません。Ciscoルーターではloopbackインターフェースを作成するとそのIPがRouter IDになるため、意図的にRouter IDを制御できます。

ABR(Area Border Router)

ABRは複数のエリアに属するルーターで、エリア間でLSAを変換・伝播させる役割を担います。各エリアのLSDBを保持し、Summary LSA(Type-3)を生成してエリア間経路情報を交換します。マルチエリア構成の要となるルーターで、性能とメモリに余裕のある機器を選定することが重要です。

ASBR(AS Boundary Router)

ASBRはOSPFドメインと外部のルーティングドメイン(BGP、EIGRP、スタティックルート等)との境界に位置するルーターです。外部経路をOSPFに再配送(redistribute)する役割を担い、Type-5 LSAを生成してOSPFドメイン全体に伝播させます。インターネット接続ルーターやマルチプロトコル環境で登場します。

OSPFコスト値の計算と調整方法

OSPFのコスト値はインターフェースの帯域幅から自動計算されます。計算式は以下の通りです。

コスト = 参照帯域幅 / インターフェース帯域幅
デフォルト参照帯域幅 = 100Mbps(100,000,000 bps)

例:
  FastEthernet(100Mbps): 100,000,000 / 100,000,000 = 1
  Ethernet(10Mbps):       100,000,000 / 10,000,000  = 10
  GigabitEthernet(1Gbps): 100,000,000 / 1,000,000,000 = 0.1 → 1(最小値)
  Serial(1.544Mbps T1):   100,000,000 / 1,544,000    ≈ 64
⚠ 注意

GigabitEthernetや10Gbpsなどの高速インターフェースでは、デフォルト参照帯域幅100Mbpsではすべてコスト1になってしまいます。帯域幅の差をOSPFに正しく反映させるには、auto-costコマンドで参照帯域幅を引き上げる必要があります。

! 参照帯域幅を10Gbps(10000Mbps)に変更(router ospfモード)
Router(config-router)# auto-cost reference-bandwidth 10000

! インターフェース個別にコストを手動設定
Router(config-if)# ip ospf cost 10

! 現在のコスト値確認
Router# show ip ospf interface GigabitEthernet0/0
GigabitEthernet0/0 is up, line protocol is up
  Internet Address 192.168.1.1/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 10.0.0.1, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State DR, Priority 1
OSPFの基本設定コマンド(Cisco IOS)

ここからは実際のCisco IOSでのOSPF設定手順を解説します。シングルエリア構成から始め、マルチエリア構成まで段階的に説明します。

シングルエリア(Area 0のみ)の基本設定
! OSPFプロセスを起動(プロセスID 1はローカルな意味のみ)
Router(config)# router ospf 1

! Router IDを手動で設定(推奨)
Router(config-router)# router-id 1.1.1.1

! ネットワークをOSPFに参加させる
! networkコマンド: ワイルドカードマスクで対象IPを指定
Router(config-router)# network 192.168.1.0 0.0.0.255 area 0
Router(config-router)# network 10.0.0.0 0.0.0.3 area 0

! パッシブインターフェース設定(ユーザーLAN側はHello送信不要)
Router(config-router)# passive-interface GigabitEthernet0/1

! 参照帯域幅の調整(10G環境)
Router(config-router)# auto-cost reference-bandwidth 10000
マルチエリア構成の設定

3拠点構成(本社Area 0、支社AエリアArea 1、支社BエリアArea 2)を例に、ABRの設定を示します。

! ===== ABRルーター(本社コアルーター)=====
Router-ABR(config)# router ospf 1
Router-ABR(config-router)# router-id 10.255.255.1
Router-ABR(config-router)# network 10.0.0.0 0.0.0.3 area 0
Router-ABR(config-router)# network 172.16.0.0 0.0.0.3 area 1
Router-ABR(config-router)# auto-cost reference-bandwidth 10000

! ===== 支社AのルーターArea 1内 =====
Router-Branch-A(config)# router ospf 1
Router-Branch-A(config-router)# router-id 10.255.255.2
Router-Branch-A(config-router)# network 172.16.0.0 0.0.0.3 area 1
Router-Branch-A(config-router)# network 192.168.10.0 0.0.0.255 area 1
Router-Branch-A(config-router)# passive-interface GigabitEthernet0/1
Router-Branch-A(config-router)# auto-cost reference-bandwidth 10000
スタブエリアの設定
! === スタブエリア設定(ABR側とエリア内ルーター両方に設定が必要)===
Router-ABR(config)# router ospf 1
Router-ABR(config-router)# area 2 stub

Router-Branch-B(config)# router ospf 1
Router-Branch-B(config-router)# area 2 stub

! Totally Stubbyにする場合(ABR側のみ no-summaryを追加)
Router-ABR(config-router)# area 2 stub no-summary

! NSSAに設定する場合
Router-ABR(config-router)# area 2 nssa
Router-Branch-B(config-router)# area 2 nssa
OSPFネイバー確立の仕組みとトラブルシューティング

OSPFのネイバー関係はHelloパケットの交換によって確立されます。ネイバーが上がらない場合のトラブルシューティングは、以下の確認事項を順番にチェックするのが効率的です。

ネイバーが確立されない主な原因

OSPFネイバーが確立するには、接続する両ルーター間でHello間隔とDead間隔が一致している必要があります。またエリアIDが一致していること、認証設定が一致していること、MTUサイズが一致していることも必須条件です。これらが一致していないとネイバーはExchangeやLoadingの状態で止まってしまいます。

! ネイバーの状態確認
Router# show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
10.255.255.2      1   FULL/DR         00:00:31    172.16.0.2      Gi0/1
10.255.255.3      1   FULL/BDR        00:00:38    172.16.0.3      Gi0/1

! ネイバーが確立しない場合の詳細確認
Router# show ip ospf interface GigabitEthernet0/1
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
  DR: 172.16.0.2   BDR: 172.16.0.3

! Hello/Dead間隔を変更する(両端で一致させること)
Router(config-if)# ip ospf hello-interval 5
Router(config-if)# ip ospf dead-interval 20

! MTU不一致をOSPFで無視する設定
Router(config-if)# ip ospf mtu-ignore

! OSPF認証(MD5)設定
Router(config-if)# ip ospf authentication message-digest
Router(config-if)# ip ospf message-digest-key 1 md5 MySecretKey
ルーティングテーブルとOSPFデータベースの確認
! OSPFルート確認
Router# show ip route ospf
O        10.0.0.4/30 [110/2] via 10.0.0.2, 00:12:34, GigabitEthernet0/0
O IA     192.168.10.0/24 [110/3] via 10.0.0.2, 00:12:34, GigabitEthernet0/0
O E2     0.0.0.0/0 [110/1] via 10.0.0.2, 00:05:10, GigabitEthernet0/0

! ルート種別: O=エリア内 / O IA=エリア間 / O E1=外部Type1 / O E2=外部Type2

! OSPFデータベース(LSDB)確認
Router# show ip ospf database
OSPFエリア設計のベストプラクティス

図2: エリアあたりの推奨ルーター数と設計の考え方

~50台(小規模)
シングルエリア可
50〜200台(中規模)
マルチエリア推奨
200台以上(大規模)
階層設計・ルート集約必須
設計項目推奨・ベストプラクティス備考
エリアあたりのルーター数50台以下を目安にするSPF再計算の負荷軽減
Router IDLoopbackで手動設定意図しないRouter ID変更を防止
ルート集約ABRでエリア間集約を実施LSDBサイズ削減・安定性向上
認証MD5認証を有効化不正ルーターからの保護
参照帯域幅環境の最大速度に合わせて設定全ルーターで統一すること
末端エリアStub/Totally Stubbyを活用拠点ルーターの負荷軽減
ABRでのルート集約設定
! ABRでArea 1のルートを集約してArea 0に広告
Router-ABR(config)# router ospf 1
Router-ABR(config-router)# area 1 range 192.168.8.0 255.255.248.0

! ASBRでの外部ルート集約
Router-ASBR(config-router)# summary-address 10.0.0.0 255.0.0.0

! 集約後の確認
Router# show ip route ospf
O IA  192.168.8.0/21 [110/2] via 10.0.0.1, 00:15:21, GigabitEthernet0/0
OSPFタイマー調整とBFDによる高速障害検出

OSPFのデフォルトDead時間は40秒(ブロードキャストネットワーク)です。これはネットワーク障害から経路切り替えまでに最大40秒かかることを意味します。高可用性が求められる環境では、タイマーを短縮するかBFD(Bidirectional Forwarding Detection)と組み合わせて高速化が必要です。

! OSPFタイマーの短縮(Hello 2秒、Dead 8秒)
Router(config-if)# ip ospf hello-interval 2
Router(config-if)# ip ospf dead-interval 8

! BFDとOSPFの連携
Router(config-if)# bfd interval 300 min_rx 300 multiplier 3
Router(config-router)# bfd all-interfaces

! OSPFのSPFタイマー調整
Router(config-router)# timers throttle spf 50 200 5000

! LSAのフラッディング抑制
Router(config-router)# timers throttle lsa 50 100 5000
よくあるOSPFトラブルと対処法
ネイバーが2-Way止まりの場合

2-Way状態で止まる場合、DR/BDRでないルーター同士(DROther)は正常な状態です。ただし予期せず2-Wayになっている場合は、DR/BDR選出の問題やプライオリティ設定のミスが原因のことがあります。

ExStartやExchangeで止まる場合

ExStartやExchangeで止まる場合、MTUの不一致が最も多い原因です。一方が1500バイト、もう一方がジャンボフレーム(9000バイト)などに設定されていると、DBDパケットが正しく交換できません。ip ospf mtu-ignoreを設定するか、両端のMTUを統一してください。

経路が学習されているのに通信できない場合

ルーティングテーブルには経路があるのに通信できないケースでは、ACLやNATの設定ミス、もしくはRPF(Reverse Path Forwarding)チェックが原因のことがあります。またエリア間の集約設定でNull0ルートが生成され、それがパケットをドロップしている場合もあります。

! OSPFデバッグ(本番環境では慎重に使用)
Router# debug ip ospf events
Router# debug ip ospf adj

! デバッグ停止
Router# undebug all

! プロセスの再起動(ネイバーがリセットされるので注意)
Router# clear ip ospf process
Reset ALL OSPF processes? [no]: yes
まとめ

OSPFはエリア設計が設計の肝です。バックボーンエリア(Area 0)を中心に、末端拠点にはStubやTotally Stubbyを活用することで、ルーターの負荷を大幅に削減できます。DR/BDR・ABR・ASBRの役割を理解し、コスト値と参照帯域幅の設定を適切に行うことが、安定したOSPFネットワーク運用の基本です。トラブルシューティングではshow ip ospf neighborとshow ip ospf interfaceを最初に確認し、MTU不一致やタイマー不一致を疑う習慣を持ちましょう。エリア集約を活用してスケーラブルなネットワーク設計を目指してください。