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ネイバー関係を確立、維持するためのパケット
DBDDataBase Description。LSDBに含まれるLSAのリストをネイバーに提示し、同期するためのパケット
LSRLink State Request。ネイバーにLSAを要求するためのパケット
LSULink State Update。ネイバーから要求されたLSAを送信するためのパケット
LSAckLink State Acknowledgement。DBDやLSUの受信による確認応答

※OSPFルータがトポロジデータベースの構築および維持するために必要な情報
Helloパケット、LSA

Helloパケット

Helloパケットは、224.0.0.5のマルチキャストアドレスで定期的に送信されます。

<Helloパケットに含まれる情報

  • ルータID
  • ネットワークマスク
  • Hello/Deadインターバル
  • ネイバーリスト
  • エリアID
  • OSPFプライオリティ
  • DR/BDRのIPアドレス
  • 認証パスワード
  • スタブエリアフラグ

<2台のOSPFルータ間でLSDBの同期を完了するまでの手順>

  1. DOWN状態…起動直後、Helloパケットをまだ受信していない状態
  2. INIT状態…受信したHelloパケット内のネイバーリストに自身のルータIDがなく、双方向通信は確立していない状態
  3. 2WAY状態…双方でHelloパケットを受信し、お互いに存在を認識した状態、双方向通信が確立
  4. EXSTART状態…先にDBDパケットの送信を開始するルータ(マスター)と後からDBDを送信するルータ(スレーブ)を決定している状態
  5. EXCHANGE状態…自身のLSDBで保持しているLSAのリスト(要求情報)を提示している状態です。
  6. LOADING状態…自身のLSDBに存在しないLSA情報があれば、LSAパケットを送信して要求します。
  7. FULL状態…必要なLSA情報を全て受け取り、LSDBが完全に同期された状態

<ネイバー関係の確立>

  • Helloインターバル
  • Deadインターバル
  • エリアID
  • サブネットマスク
  • 認証パスワード
  • スタブエリアフラグ

※ルータIDが重複しているとネイバー関係を確立できません。

OSPFの設定

基本的なOSPFの設定は、次の2つの手順になります。

  1. OSPFプロセスの有効化
  2. 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はセグメントごとに選出されます。

  1. OSPFプライオリティ値が最も大きいルータがDRになる。
    2番目に大きいルータがBDRになる。

  2. OSPFプライオリティ値が同じ場合、ルータIDが最も大きいルータがDR、2番目に大きいルータがBDR。

ルータIDの決定優先順

  1. router-idコマンドで手動で定義
  2. ループバックインターフェースがあれば最も大きいIPアドレスがルータID
  3. ルータのアクティブな物理インターフェース上最も大きい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
ブロードキャスト自動フルメッシュbroadcast10/40
ポイントツーポイント自動スター
( サブInterface使用 )
point-to-point10/40
ポイントツーマルチポイント自動スターpoint-to-multipoint30
ポイントツーマルチポイント
(Non Broadcast )
手動スターpoint-to-multipoint
nonbroadcast
30

マルチエリアのOSPF

OSPF階層構造

  • バックボーンエリア…エリア間のトラフィックを中継するエリア。エリア0を設定するとバックボーンエリアとして認識される。
  • 標準エリア…バックボーンエリア以外のエリア。必ずバックボーンエリアに接続していなければならない。
  • スタブエリア…無駄なLSAトラフィックを少なくするために考えられたエリア。ASBRから再配布された外部ルート(LSA5)を受信せず、スタブエリアとの接続点にいるABRがスタブエリアに注入してくれたデフォルトルートを使用して、非OSPFネットワークにアクセスする。※スタブエリアは、ASBRの配置不可。仮想リンク設定不可。バックボーンでは不可。

LSAにはいくつかのタイプがあり、その性質から特定のエリアないだけでフラッティングされるものがあります。

  • LSAタイプ1:ルータLSA
    全てのルータが生成、エリア内フラッディング
  • LSAタイプ2:ネットワークLSA
    DRルータが生成、エリア内フラッディング
  • LSAタイプ3:ネットワーク集約LSA
    ABRルータが生成、OSPFドメイン全体フラッディング
  • LSAタイプ4:ASBR集約LSA
    ABRルータが生成、OSPFドメイン全体フラッディング
  • LSAタイプ5:AS外部LSA
    ASBRルータが生成、OSPFドメイン全体フラッディング
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 ]

プロセスID1~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が有効なインターフェイスの要約情報を表示)
■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の基本設定

  1. OSPFv3プロセスの起動
    (config)#ipv6 router ospf < process-id >
    (config-rtr)#
  2. ルータIDの設定
    (config-rtr)#router-id <router-id>
  3. インターフェイスでOSPfv3の有効化
    (config-if)#ipv6 ospf <process-id> area <area-id>

OSPFルートが学習しているか確認
show ipv6 route