Contents
OSPF
OSPF (Open Shortest Path First)は以下の特徴があります。
- リンクステートルーティングプロトコル
リンクステート型のルーティングプロトコルのため、リンクステート情報を交換します。
ディスタンスベクター型よりも高速なコンバージェンスを実現します。
(ルートまたはメトリックに変更があった場合、トリガーアップデートによって変更情報を通知し、LSDB、ルーティングテーブルに反映させます。⇒高速) - クラスレスルーティングプロトコル
VLSM(variable length subnet mask)可変長サブネットマスクや不連続サブネットをサポートし、アドレスを効率的に使用できます。 - メトリックはコスト
メトリックには、リンクの帯域幅をもとにしたコストを使用しています。 - エリアの概念による階層型ルーティング
不安定なネットワークによる影響もエリア内のルータに抑えることができ、コンバージョンも高速になります。
エリアの境界ではルート情報を1つに集約することができ、ルーティングテーブルのサイズも小さくなり、ルーティングのオーバーヘッドも減少します。
LSA
OSPFルータはルーティングテーブルではなく、LSA(Link State Advertisement:リンク状態広告)と呼ばれるリンクステート情報を交換します。
LSAはLSDB( Link State Database :トポロジテーブル)に格納されます。
各ルータはLSDBに格納されたLSAからネットワーク全体のトポロジ図を把握しています。
OSPFはネイバーを検出すると、LSAを交換し合いSPFアルゴリズムを用いて最適パスを計算します。
<OSPFのテーブル>
- ネイバーテーブル‥認識しているネイバーのリスト
- LSDB(トポロジテーブル)‥LSAを格納したデータベース
- ルーティングテーブル‥実際のルーティングで使用される最適ルートのリスト
<OSPFのパケット>
Hello | ネイバー関係を確立、維持するためのパケット |
DBD | DataBase Description。LSDBに含まれるLSAのリストをネイバーに提示し、同期するためのパケット |
LSR | Link State Request。ネイバーにLSAを要求するためのパケット |
LSU | Link State Update。ネイバーから要求されたLSAを送信するためのパケット |
LSAck | Link State Acknowledgement。DBDやLSUの受信による確認応答 |
※OSPFルータがトポロジデータベースの構築および維持するために必要な情報
⇒Helloパケット、LSA
Helloパケット
Helloパケットは、224.0.0.5のマルチキャストアドレスで定期的に送信されます。
<Helloパケットに含まれる情報>
- ルータID
- ネットワークマスク
- Hello/Deadインターバル
- ネイバーリスト
- エリアID
- OSPFプライオリティ
- DR/BDRのIPアドレス
- 認証パスワード
- スタブエリアフラグ
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-25-8.59.06.png)
<2台のOSPFルータ間でLSDBの同期を完了するまでの手順>
- DOWN状態…起動直後、Helloパケットをまだ受信していない状態
- INIT状態…受信したHelloパケット内のネイバーリストに自身のルータIDがなく、双方向通信は確立していない状態
- 2WAY状態…双方でHelloパケットを受信し、お互いに存在を認識した状態、双方向通信が確立
- EXSTART状態…先にDBDパケットの送信を開始するルータ(マスター)と後からDBDを送信するルータ(スレーブ)を決定している状態
- EXCHANGE状態…自身のLSDBで保持しているLSAのリスト(要求情報)を提示している状態です。
- LOADING状態…自身のLSDBに存在しないLSA情報があれば、LSAパケットを送信して要求します。
- FULL状態…必要なLSA情報を全て受け取り、LSDBが完全に同期された状態
<ネイバー関係の確立>
- Helloインターバル
- Deadインターバル
- エリアID
- サブネットマスク
- 認証パスワード
- スタブエリアフラグ
※ルータIDが重複しているとネイバー関係を確立できません。
OSPFの設定
基本的なOSPFの設定は、次の2つの手順になります。
- OSPFプロセスの有効化
- OSPFを有効にするインターフェイスとエリアの設定
<①OSPFプロセスの有効化>
OSPFを有効化するには、以下のコマンドを使用します。
(config)#router ospf < process-id >
プロセスID
- プロセスIDとは、1台のルータ上で複数のOSPFプロセスを起動するときに、データベース内の情報を識別するための番号です。
- プロセスIDは1〜65535の中から任意の番号を指定
<②OSPFを有効にするインターフェイスの指定>
インターフェイスでOSPFを有効化すると、OSPFパケットが送受信されます。また、そのインターフェイスのネットワークアドレスは、OSPFネットワークの一部としてアドバタイズされます。
- network コマンド
- ip ospf コマンド
OSPFを有効化するインターフェイスの指定(ワイルドカードマスクとともに指定します。)
(config-router)#network < address > < wildcard-mask > area < area-id >
*address…ネットワークアドレス、サブネットアドレス、インターフェイスのIPアドレスのいずれか
インターフェイスでOSPFを有効化する
(config)#router ospf < process-id >
(config)interface < interface >
(config-if)#ip ospf < process-id > area < area-id >
DR、BD
OSPFでは、イーサネットのようなマルチアクセスネットワークでDRと、BDRが選出されます。
- DR (Designated Router)…LSAの交換を取りまとめる代表ルータ
- BDR(Backup Designated Router)…DRのバックアップとして動作するルータ
- DROTHER…プライオリティは0、0だとDR、BDRに選出されない
プライオリティ
- OSPFルーターのランク付けに使用する
- 0~255の範囲で任意に設定できます。初期値は1です。
- ルーター全体で一つの値を設定するのではなく、インターフェースごとに個別の値を設定します。
- プライオリティは0、0だとDR、BDRに選出されない
OSPFプライオリティの設定
Router(config-if)#ip ospf priority < priority >
<DRとBDRの選出方法>
DRとBDRはセグメントごとに選出されます。
- OSPFプライオリティ値が最も大きいルータがDRになる。
2番目に大きいルータがBDRになる。 - OSPFプライオリティ値が同じ場合、ルータIDが最も大きいルータがDR、2番目に大きいルータがBDR。
<ルータIDの決定優先順>
- router-idコマンドで手動で定義
- ループバックインターフェースがあれば最も大きいIPアドレスがルータID
- ルータのアクティブな物理インターフェース上で最も大きいIPアドレスがルータID
※ただし、ルータIDが決まった後にルータIDとして優先的に採用される別の値が設定されてもルータIDは変わりません。ルータIDを変更したい場合はOSPF(プロセス)を再起動する必要があります。
ループバックインターフェイス
管理者が自由に作成できる仮想的なインターフェイスです。
<DRとBDRの動作>
- 224.0.0.5‥全OSPFルータ宛
- 224.0.0.6‥DR、BDR宛
OSPFネットワークタイプ
OSPFではリンクの種類に応じて、次の5つのネットワークタイプが定義されています。
- ポイントツーポイント
- ブロードキャストマルチアクセス
- NBMA(ノンブロードキャストマルチアクセう)
- ポイントツーマルチポイント
- ポイントツーマルチアクセスノンブロードキャスト
■OSPFのネットワークタイプの設定(インターフェイスコンフィグレーションモード)
(config)#interface [ インターフェイス ]
(config-if)#ip ospf network [ broadcast | point-to point ]
5つのNBMAモード | ネイバー検出 | DR/BDR選出 | 適切なトポロジー | ip ospf network – | Hello/Dead |
---|---|---|---|---|---|
NBMA | 手動 | 有 | フルメッシュ | non-broadcast | 30/120 |
ブロードキャスト | 自動 | 有 | フルメッシュ | broadcast | 10/40 |
ポイントツーポイント | 自動 | 無 | スター ( サブInterface使用 ) | point-to-point | 10/40 |
ポイントツーマルチポイント | 自動 | 無 | スター | point-to-multipoint | 30 |
ポイントツーマルチポイント (Non Broadcast ) | 手動 | 無 | スター | point-to-multipoint nonbroadcast | 30 |
マルチエリアのOSPF
OSPF階層構造
- バックボーンエリア…エリア間のトラフィックを中継するエリア。エリア0を設定するとバックボーンエリアとして認識される。
- 標準エリア…バックボーンエリア以外のエリア。必ずバックボーンエリアに接続していなければならない。
- スタブエリア…無駄なLSAトラフィックを少なくするために考えられたエリア。ASBRから再配布された外部ルート(LSA5)を受信せず、スタブエリアとの接続点にいるABRがスタブエリアに注入してくれたデフォルトルートを使用して、非OSPFネットワークにアクセスする。※スタブエリアは、ASBRの配置不可。仮想リンク設定不可。バックボーンでは不可。
![](https://ntorelabo.com/wp-content/uploads/2022/09/Group-15.png)
OSPFルータのタイプ | 説明 |
---|---|
内部ルータ | 内部ルータは、全てのインターフェースを同じエリアに接続しているルータ。 |
バックボーンルータ | バックボーンルータは、1つ以上のインターフェースをバックボーンエリアに接続しているルータ。 |
ABR ( Area Border Router) | エリア境界ルータ。ABRは、異なるエリアを接続しているルータ。ABRではエリアごとの LSDB を 保持しており、エリア間のルーティングを行う。ABRでは異なるエリアのリンクステート情報を集約 して内部ルータに通知するので内部ルータのLSDBのサイズは縮小できる。集約ルートはABRで設定。 |
ASBR ( AS Boundary Router ) | AS境界ルータ。ASBRは、1つ以上のインターフェースが外部ASのルータと接続しているルータ。 外部ASのルータとは、例えばRIPを稼働しているルータなどの非OSPFネットワークにいるルータ。 ASBRにルート再配送をすることにより、OSPFネットワークと非OSPFネットワークとが通信できる。 |
OSPFのメトリック
宛先ネットワークまでの各インターフェイスのコストの合計値になります。
デフォルトのコスト = 基準帯域幅100(Mbps) ÷ インターフェイスの帯域幅(Mbps)
下記コマンドによって基準帯域幅(デフォルトの100Mbpsから)やインターフェースの帯域幅を変更する場合がある
例)基準帯域幅を「10000Mbps」に設定
auto-cost reference-bandwidth 10000
例)インターフェイス帯域幅を「10000000Kbps」に設定
bandwidth 10000000
【負荷分散】
同じ宛先の最小メトリックのルートが複数ある場合、その複数ルートを使ってパケット送信します。
OSPFのコマンド
モード | プロント | 説明 |
---|---|---|
ユーザモード | > | Pingなどの一部のコマンドしか使用できないモード |
特権EXECモード | # | 設定などの情報を確認できるモード |
グローバル コンフィグレーションモード | (config)# | デバイス本体に関する設定を行うモード |
ライン コンフィグレーションモード | (config-line)# | アクセス回線に関係する設定を行うモード |
インターフェイス コンフィグレーションモード | (config-if)# | インターフェイスに関係する設定を行うモード |
ルータ コンフィグレーションモード | (config-router)# | ルーティングプロトコルの設定を行うモード |
■OSPFの有効化(ルータコンフィグレーションモード)
(config)#router ospf [ プロセスID ]
(config-router)#network [ アドレス ] [ ワイルドカードマスク ] area [ エリアID ]
プロセスID | 1~65535の中から任意の番号を指定。(OSPFの内部処理のために使用される番号なので、他のルータと一致させる必要はない) |
アドレス | OSPFを有効にしたいインターフェイスのネットワークアドレス、またはIPアドレスを指定 |
ワイルドカードマスク | アドレスを読み取るためのワイルドカードマスク |
エリアID | 所属させるエリアIDを指定(シングルエリアOSPFの場合は0を指定) |
■OSPFの有効化(インターフェイスコンフィグレーションモード)
(config)#interface [ インターフェイス ]
(config-if)#ip ospf [ プロセスID ] area [ エリアID ]
■LSDBの情報を確認する
#show ip ospf database
■OSPFルートの検証
show ip routeコマンドを使用してルーティングテーブルを確認します。最後にospfを付加すると、OSPFルートのみ確認できます。
#show ip route [ ospf ]
<OSPFを確認するコマンド>
■ルータID、タイマー、接続しているエリア、SPFアルゴリズムの実行回数、LSA情報など表示
#show ip ospf
■ネイバーを確認
#show ip ospf neighbor
■OSPFが動作するインターフェイスの情報を確認
コスト、OSPFプライオリティ、Hello/Deadインターバル*、インターフェイスのアドレス、DR/BDRのルータIDとIPアドレス、エリアID*などを確認できます。
#show ip ospf interface [ brief ]
(※brief‥OSPFが有効なインターフェイスの要約情報を表示)
*ネイバー確立
Router1# show ip ospf interface xxxx
xxxx is up, line protocol is up
Internet Address xx.xx.xx.xx/xx, Area x
Process ID 1, Router ID xxx.xxx.xx.x, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State BDR, Priority 1
Designated Router (ID) xxx.xx.xx.xx, Interface address 10.10.10.2
Backup Designated router (ID) xxx.xxx.xx.xx, Interface address 10.10.10.1
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:06
Index 1/1, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 2, maximum is 2
Last flood scan time is 0 msec, maximum is 4 msec
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 172.16.10.1 (Designated Router)
Suppress hello for 0 neighbor(s)
#show ip ospf | ルータID、タイマー、接続しているエリア、 SPFアルゴリズムの実行回数、LSA情報 |
#show ip ospf neighbor | |
#show ip ospf interface [ brief ] | コスト、OSPFプライオリティ、Hello/Deadインターバル、インターフェイスのアドレス、DR/BDRのルータIDとIPアドレス、エリアID (※brief‥OSPFが有効なインターフェイスの要約情報を表示) |
![](https://ntorelabo.com/wp-content/uploads/2022/09/kkkkkkkk38868.jpg)
![](https://ntorelabo.com/wp-content/uploads/2022/09/kkk38868.jpg)
■MTU不一致の検出を停止
MTU不一致によるネイバー関係の問題を解決
ip ospf mtu-ignore
■基準帯域幅の設定
デフォルトは100Mbs
(config)#router ospf [ プロセスID ]
(config-router)#auto-cost reference-bandwidth [ 基準帯域幅 ]
■インターフェイスの帯域幅の設定
コストを算出する際に参照する帯域幅を変更
(config)#interface [ インターフェイス ]
(config-if)#bandwidth [ 帯域幅 ]
基準帯域幅(Mbps) | 1〜4292967の中から指定 |
インターフェイスの帯域幅(kbps) | 1〜1000000の中から指定 |
OSPFのコスト | 基準帯域幅÷インターフェイスの帯域幅 ※必ず整数値で小数点以下は切り捨て |
■ハロータイムを設定するコマンド
switch(config)#spanning-tree vlan { VLAN番号 } { タイマーの種類 } { 秒 }
タイマーの種類…hello-time 、max-age 、foward-time いずれか指定
パッシブインターフェイス
パッシブインターフェイスを設定すると、特定のインターフェイス上でOSPFルーティングアップデートの送受信を制御できます。
パッシブインタフェイスが有効になると、OSPFのパケットの送信は停止されます。Helloパケットも送信されなくなりネイバー関係が確立されることもありません。
■パッシブインターフェイスの設定
設定すると、特定のインターフェイス上でOSPFパケットの送信が停止されます。不要なトラフィックを抑えることができます。
(config-router)#passive-interface { <interface-id> | default }
(※brief‥OSPFが有効なインターフェイスの要約情報を表示)
OSPFデフォルトルートの配布
OSPFでデフォルトルートをアドバタイズ(通知)するには、default-information originateコマンドを使用します。
※デフォルトルートは、ルーティングテーブルに登録されていないネットワーク宛のパケットを転送する際に使用します。
OSPFデフォルトルートの配布
(config-router)#default-information originate [ always ]
・always…自身のルーティングテーブルにデフォルトルートが存在しない状態でも、常にOSPFデフォルトルートを生成する(オプション)
OSPFv3
OSPFv3はOSPFv2に変更を加えたIPv6対応版です。
- Ipv6ヘッダ内のネクストヘッダは89
- 新しく2つのLSAを定義
- IPsecによって、より安全な認証を行う
■OSPFv3の基本設定
- OSPFv3プロセスの起動
(config)#ipv6 router ospf < process-id >
(config-rtr)# - ルータIDの設定
(config-rtr)#router-id <router-id> - インターフェイスでOSPfv3の有効化
(config-if)#ipv6 ospf <process-id> area <area-id>
■OSPFルートが学習しているか確認
show ipv6 route