現代のネットワークインフラには、2つの相反するように見える仕事があります。
1つは、データを正しい目的地まで効率よく届けること。もう1つは、不正なアクセスを入り口でブロックして内部の資産を守ること。
この「つなぐ技術」と「守る技術」を両立させることが、インフラエンジニアとしての基本の仕事です。この記事では、経路を自動制御するプロトコルOSPF(Open Shortest Path First)と、不正なパケットを制御するACL(Access Control List)について、実務に直結する形で解説します。
1. なぜ自動的な経路制御が必要なのか

ネットワークが小規模なうちは、管理者が手動でルートを書き込むスタティックルーティングで対応できます。しかし拠点やデバイスが増えるにつれ、次のような問題が起きてきます。
- 回線が1本切れたときに、人間が手動で設定を修正するまで通信が止まる
- 拠点が増えるたびに設定作業が増え、ミスのリスクが上がる
- 24時間365日稼働するサービスを、人間の手作業だけで維持するのは現実的でない
こうした問題を解決するのが、ルータ同士が自律的に経路情報を交換するダイナミックルーティングです。その代表格として、多くの企業ネットワークやデータセンターで採用されているのがOSPFです。
2. OSPFの設計思想:全員が同じ地図を持つ
OSPFはリンクステート型と呼ばれるプロトコルで、従来のディスタンスベクタ型(距離と方向だけでルートを決める方式)より優れた特性を持っています。
各ルータが地図を自分で書く
OSPFでは、各ルータが自分のインターフェースの状態や隣接ルータの情報をLSA(Link State Advertisement)という形式でネットワーク内に広報します。各ルータは受け取ったLSAをLSDB(Link State Database)というデータベースに蓄積し、同じエリア内のルータはすべて完全に同一のLSDBを共有します。
そしてそのデータベースを元に、SPF(Shortest Path First)アルゴリズムで最短経路を計算します。全員が同じ最新の地図を持っているため、経路に矛盾が生じにくいことが大きな利点です。
| 比較項目 | ディスタンスベクタ型 | リンクステート型(OSPF) |
|---|---|---|
| 地図の持ち方 | 隣のルータからの情報のみ | ネットワーク全体のトポロジを保持 |
| 障害時の切り替え速度 | 遅い(情報が段階的に伝わる) | 速い(変化がすぐに全体へ伝播する) |
| 設定の複雑さ | シンプル | やや複雑だがスケーラブル |
3. ネイバー関係の構築:段階的な信頼の確認
OSPFでルータが動き始めると、まずHelloパケットをマルチキャストで送信して近隣のルータを探します。しかし、Helloが届いただけでは経路交換が始まりません。ネイバー(隣接関係)として認識されるには、次のパラメータが完全に一致している必要があります。
- Helloパケットの送信間隔(Helloインターバル)
- 相手が死んだとみなす時間(Deadインターバル)
- 所属するエリアのID
- 互いのサブネットマスク
これらが一致すると、ルータ間の関係は次のように段階を踏んで進んでいきます。
| 状態 | 意味 |
|---|---|
| Init | 相手からHelloを受信したが、まだ自分のIDが相手に届いていない |
| 2-Way | 互いに相手を認識できた状態 |
| Exchange | 互いのデータベースの要約情報を交換している |
| Full | LSDBの同期が完了し、完全な隣接関係が確立された状態 |
この「Full」ステートに達して初めて、ルーティングテーブルへの経路登録が行われます。段階的なプロセスを踏むことで、不完全な情報や設定ミスによる混乱を防いでいます。
4. DR/BDRとエリア設計:効率化のための仕組み
複数のルータが同じネットワークに接続されている環境(マルチアクセス環境)では、全員が1対1でLSAを交換するとトラフィックが爆発的に増えてしまいます。そこで導入されるのがDR(Designated Router:代表ルータ)とBDR(Backup Designated Router:バックアップ代表ルータ)という役割分担です。
他のルータはまずDRとBDRに情報を集め、DRが代表して全員へ配布することで、無駄なトラフィックを大幅に削減します。DRやBDRはインターフェースのプライオリティ値やルータIDの大きさを基準に選出されます。
エリア分割でさらに効率化
大規模なネットワークでは、ルータが多くなるほどLSDBのサイズも大きくなり、計算負荷も高まります。OSPFではエリアという概念でネットワークを分割することで、この問題に対処します。
- エリア0(バックボーンエリア)を中心に配置し、他のエリアはすべてエリア0に接続する
- エリア境界に置くABR(Area Border Router)が内部の詳細情報をエリア内に閉じ込め、他エリアへはシンプルに集約して伝える
- あるエリアのトラブルが他エリアへ波及しにくくなる
5. コストによる経路選定と等コスト負荷分散
OSPFが「どの経路が最も優れているか」を判断する指標をコストと呼びます。コストはインターフェースの通信速度(帯域幅)をもとに自動計算されます。
コストの計算式は次の通りです。
コスト = 10の8乗 ÷ 帯域幅(bps)
- 10Mbpsのリンク:コスト = 10
- 100Mbpsのリンク:コスト = 1
パケットが通過する全経路のコストを合計し、最も小さい値の経路がルーティングテーブルに登録されます。2つの経路の合計コストが同じ場合は、等コスト負荷分散が働き、両方の経路にパケットをバランスよく分散して回線効率を最大化します。
6. ACLとは:通過するパケットの検問所

経路が整備されただけでは、不正なアクセスも同じ道を通れてしまいます。そこで登場するのがACL(Access Control List)です。ルータのインターフェースを通過するパケットを1つずつ審査し、許可(permit)か拒否(deny)かを判定する仕組みです。
ACLの3つの基本原則
ACLを正しく扱うには、評価の基本ルールを理解することが不可欠です。
- 順次検索:リストは先頭の行から順番に1行ずつ評価される
- ファーストマッチ:どこかの行の条件に合致した瞬間、そのアクションが即座に実行され評価は終了する。それ以降の行は一切見られない
- 暗黙のdeny:どの行にも合致しなかったパケットは、リストの末尾に自動的に存在する「すべてを拒否する」という見えないルールによって破棄される
この原則があるため、行の並び順は非常に重要です。
【間違った並び順の例】
1行目:許可 すべての通信 ← 全員がここで通過してしまう
2行目:拒否 192.168.1.5 ← 一生実行されない
【正しい並び順の例】
1行目:拒否 192.168.1.5 ← 具体的な条件を上に
2行目:許可 すべての通信 ← 一般的な条件を下に
具体的(狭い)条件を上に、一般的(広い)条件を下に配置することが、ACLを扱う上での基本的な思考法です。
7. 標準ACLと拡張ACLの使い分け
ACLにはチェックする情報の細かさに応じて2種類あります。
| 種類 | チェックする情報 | 適した用途 |
|---|---|---|
| 標準ACL | 送信元IPアドレスのみ | 特定のホストやネットワーク全体からの通信を制限したい場合 |
| 拡張ACL | 送信元・宛先IP、プロトコル、ポート番号など | 特定のアプリケーションやサービスだけを細かく制御したい場合 |
適用場所のセオリー
どちらのACLも、適用する位置に正しいルールがあります。
- 標準ACLは宛先に近い場所に置く:送信元だけしか見ないため、早い段階でブロックすると他の宛先への正常な通信まで止めてしまう
- 拡張ACLは送信元に近い場所に置く:細かく条件を絞れるので、最初から不正と分かるパケットを出発点近くで止め、無駄なトラフィックを減らせる
8. ワイルドカードマスクによる対象範囲の指定
ACLでパケットの条件を記述する際、対象のネットワーク範囲を効率よく指定するためにワイルドカードマスクを使います。サブネットマスクとはビットの意味が逆になるため注意が必要です。
| マスクの種類 | ビット0の意味 | ビット1の意味 |
|---|---|---|
| サブネットマスク | ホスト部(チェックしない) | ネットワーク部(厳密にチェック) |
| ワイルドカードマスク | 厳密にチェックする | 何が来ても無視する |
たとえば、192.168.1.0 から 192.168.1.255 の256台を一括指定する場合、ワイルドカードマスクは「0.0.0.255」です。これは「上位24ビットは厳密に一致を確認し、末尾8ビットは何でも構わない」という意味になります。
特定の1台だけを指定したい場合はワイルドカードマスクを「0.0.0.0」とするか、「host 10.1.1.50」と書きます。また、すべてのIPアドレスを対象にする場合は「any」というキーワードを使います。
9. トラブルの原因を素早く切り分ける
どれほど正確に設計しても、設定ミスによるトラブルはゼロにはなりません。重要なのは、問題が起きたときに素早く原因を特定できるかどうかです。
OSPFで経路が学習されない場合の確認手順
- ネイバー関係が「Full」になっているかをコマンドで確認する
- Helloインターバル・DeadインターバルがルータBとルータA双方で一致しているか確認する
- 同じリンクで対向するインターフェース同士がエリアIDとサブネットマスクが一致しているか確認する
- ルータ間をつなぐインターフェースにpassive-interface(Helloパケットの送信停止)が誤って設定されていないか確認する
ACLで意図せずブロックしてしまう場合の典型的な原因
- 暗黙のdenyを忘れてリストの末尾に「permit any」を書かなかったため、特定の通信だけでなく全通信が止まってしまった
- インバウンド(パケットが入ってくる向き)とアウトバウンド(パケットが出ていく向き)を逆に設定してしまい、フィルターが全く機能しない、またはすべてを遮断してしまった
- 行の並び順を誤り、意図した拒否条件より先に広範な許可条件が来てしまった
管理アクセス自体をACLで守る
ACLはユーザーのトラフィックを制御するだけでなく、ルータそのものへのアクセスを制限するためにも使えます。
管理者のIPアドレスだけを許可した標準ACLを作成し、VTY(仮想回線)に適用することで、指定した管理者の端末からのSSH接続しか受け付けない、強固な設定が実現できます。不正なログイン試行はログイン画面が表示される前に切断されます。
まとめ:つなぐと守るは車の両輪

OSPFによる自律的な経路制御とACLによるアクセス制御は、一方が通信を広げ、もう一方が通信を絞るという、一見すると逆方向の仕組みに見えます。しかし両者をバランスよく組み合わせることで、高いパフォーマンスと強固なセキュリティを兼ね備えたネットワークが完成します。
この記事のポイントをまとめると、次のようになります。
- OSPFはルータ同士がLSAを交換してLSDBを共有し、SPFアルゴリズムで最短経路を計算する
- ネイバー関係はHello・Deadインターバル・エリアIDなどのパラメータが一致した場合のみ、Fullステートへ進む
- DR/BDRでマルチアクセス環境のトラフィックを削減し、エリア分割でスケーラブルな設計が可能になる
- 経路の優先度はコスト値が決め、等コストの場合は負荷分散が自動で働く
- ACLは先頭行から順番に評価され、最初に合致した行のアクションが即座に実行される
- 暗黙のdenyを常に意識し、具体的な条件を上に、一般的な条件を下に配置する
- 標準ACLは宛先近く、拡張ACLは送信元近くに適用するのがセオリー
- ワイルドカードマスクはサブネットマスクとビットの意味が逆で、1のビットがある部分を無視する
コマンドの暗記より、なぜその行をその順番に書くのか、パケットがルータを通過する際に何が起きているのかというロジックを理解することが、トラブルを素早く解決できるエンジニアへの近道です。

