OSPF

OSPF

IOS12.2 OSPF Configuration Guide

  • リンクステートなプロトコル
  • 各ルータがリンクの状態をやりとり(LSA)し、ネットワーク全体で同じデータベースを作成、維持していく。そのデータベースから、各ルータは最短経路を計算し、経路選択を行う。
  • エリアという概念
    • ルータのI/F(ネットワーク)がエリアに割り当てられる。すなわちエリア境界はルータ。
    • バックボーンエリア(エリア0)を中心
    • すべてのエリアはバックボーンエリア(エリア0)に隣接していなければならない。
    • ABR (Area Border Router)
      • 少なくとも1つのinterfaceがarea 0、かつ少なくとも1つのinterfaceがarea 0以外にあるrouter
    • ASBR (Automous System Boundary Router)
      • 少なくとも1つのinterfaceがospfのareaにあり、かつ他のrouting protocolからospfにredistributeするrouter
    • Stub Area
      • Redistributed route (ospf external route Type 5)はこのarea内にadvertiseされない。
      • OSPF inter-area routes(Type 3)はadvertiseされる。
      • ABRはこのstub areaにdefault routeをadvertise。
      • area x stub (areaの全てのrouterでstub設定)
    • Totally Stubby Area
      • Redistibuted route (Type 5)とOSPF inter-area route (Type 3)はこのarea内にadvertiseされない。
      • ABRはこのTotally Stubby Areaにdefault routeをadvertise
      • area x stub no-summary (ABRにno-summary設定)
    • Not So Stubby Area (NSSA)
      • ASBRでRedistributed routes (Type 5)はType 7に変換されこのエリアへ。ABRはType 7をType 5に変換しArea 0へ。
      • (Area 0からのType 5 routeはABRはNSSAにadvertiseしない)
      • ABRはdefault routeをこのエリアにadvertiseしない。
      • area x nssa (areaの全てのrouterで設定)
    • Totally Not So Stubby Area
      • ASBRでRedistributed routes (Type 5)はType 7に変換されこのエリアへ。ABRはType 7をType 5に変換しArea 0へ。
      • (Area 0からのType 5 routeはABRはNSSAにadvertiseしない)
      • ABRはdefault routeをこのエリアにadvertise。
      • OSPF inter-area route (Type 3)はこのエリアにadvertiseされない。
        (他のOSPFエリアに行くためにデフォルトルートが使われる)
      • area x nssa no-summary (ABRにno-summary設定)
  • DR (Designated Router)
    • multi-access networkで、他のOSPF routerにLSAを配布する役目をするrouter。
    • highest priority (default = 1)なrouterか、highestなloopback address, highestなphysical interface addressをもつrouterが一つ選択される。
    • OSPFをconfigする前に、かならずloopback interfaceのconfigをすること!
  • BDR (Backup ADesignated Router)
    • DRのbackup。DRが落ちたらかわりにBDRがDRになる。
  • DROTHER
    • DRでもBDRでもないrouter
  • Adjacency
    • 隣接関係を確立すること。multi-access networkでは、全てのOSPF routerはDR/BDRとadjacentな関係を築く。
    • neighborは単に隣にある関係のこと。
  • 経路選定
    • エリア毎にshortest pathを計算
    • まずarea 0までのshortest path
    area 0を横断するshortest path
    • 宛先ネットワークまでのshortest path

設定

OSPFを動作させる

OSPFプロセスを動作させ、OSPFを動作させるインターフェースを指定する。インターフェースの指定はネットワークで指定し、ネットワークコマンドで入れたものの中に含まれるIPアドレスを持ったインターフェースでOSPFのパケットをやりとりするようになる

Router(config)# router ospf process-id
Router(config-router)# network ip-address wildcard-mask area area-id

プロセスIDは任意の数字でよい。同一ルータで複数のOSPFプロセスを動かすこともできるが、通常はしない。ネットワークはwildcardで範囲指定していくので注意。

OSPF Network Type

Adjacencyを確立するために重要。

Router(config-if)# ip ospf network { broadcast | non-broadcast
| point-to-point | { point-to-multipoint [ non-broadcast ] } }

大きく2つの系統に分かれる。それぞれの系統ではAdjancyを確立できる。系が違うとだめ。同じ系なら、Hello/DeadをあわせればAdjancy確立できる。

  • Broadcast/NBMA系
    • DRの選出を行う
      • priority -> router-idの順。大きいほうがDRになる。
      • loopbackがあれば、その中で一番大きいI/Fアドレス。なければそれ以外での一番大きいI/Fアドレス。
      • router-idは自由に設定可能。識別子なので、ユニークでさえあればよい。IPアドレッシングとは無関係(ただ、わかりやすように設定する)
    • Broadcast
      • Helloはマルチキャスト(224.0.0.5)
      • Hello/Deadは10/40s
    • NBMA
      • Helloはユニキャスト。従ってneighborコマンドがないとHelloを送出できない。
      • Hello/Deadは30/120s
      • Hub routerがDRになるように。他のルータのpriorityを0にする。
  • Point-to-Point/Point-to-Multipoint/Point-to-Multipoint-NBMA系
    • DRの選出を行わない
    • Point-to-Point
      • Helloはマルチキャスト(224.0.0.5)
      • Hello/Deadは10/40s
    • Point-to-Multipoint
      • Helloはマルチキャスト(224.0.0.5)
      • Hello/Deadは30/120s
      • neighbor毎にcost設定が可能
        • Router(config-router)# neighbor ip-address cost cost
    • Point-to-Multipoint NBMA
      • Helloはユニキャスト。従ってneighborコマンドがないとHelloを送出できない。
      • Hello/Deadは30/120s

NBMAではneighbor設定しなければ自分からはhello送れないが、来れば返せるようになる。また、通常リンク毎にコストの設定がされるが、neighbor指定でコスト設定もできる。

Router(config-router)# neighbor ip-address [cost number]

OSPF interfaceパラメータ設定

OSPFはリンクステートデータベースを同期させなければいけないため、隣接関係を確立し、維持していかなければならない。従って、そのためのタイマ値をあわせなければならない。

Router(config-if)# ip ospf hello-interval seconds
Router(config-if)# ip ospf dead-interval seconds 

hello-intervalを設定すると、自動的にその4倍の値でdead-intervalが設定される。但し、dead-intervalを設定したからといって、その1/4にhello-intervalは設定されないので注意。

NBMAネットワークではDRを選出するが、ハブルータがDRにならないとスポークルータ間ではLSAの交換ができないのでデータベース同期ができなくなってしまう。ハブルータをDRに強制的にさせるために、プライオリティを設定する。プライオリティが大きいほうがDRに選出される可能性が高くなり、0でDR選出候補にあがらなくなる。(従って、スポークでは0を設定する)

Router(config-if)# ip ospf priority number-value

経路計算の際、OSPFはリンクのコストをメトリックとして、そのコストが小さいところを最適経路とする。通常はインターフェースの帯域から自動的にコストが計算されるが、手動で設定もできる。

Router(config-if)# ip ospf cost cost 

LSA送ってそのACKが返ってこない場合、LSAの再送を行う。その再送間隔。
Router(config-if)# ip ospf retransmit-interval seconds 

LSAがリンクを通って相手に届くまでの時間。
Router(config-if)# ip ospf transmit-delay seconds 

OSPFエリアパラメータ設定

現実的には相当でかいネットワークでない限りエリアに分割することはないそうだが、当然試験では細かくエリア分割される・・

エリアをスタブエリアにするにはABRで設定。

Router(config-router)# area area-id stub [no-summary]

no-summaryキーワードつけると、Totally-Stubエリアになる。

スタブエリアにはそのエリアから出るためのデフォルトルートが注入されるが、そのデフォルトルートのコスト値を設定するには、

Router(config-router)# area area-id default-cost cost 

スタブエリアにはOSPF外部経路(type=5 LSA)は注入できない(つまりスタブエリア内ではredistributeはできない)が、その必要があるときはエリアをNSSAにしてあげる。もちろんABRにて設定。

Router(config-router)# area area-id nssa [no-redistribution]
                       [default-information-originate] 

no-redistributionキーワードで、NSSAエリアに外部ルートをredistributeしない。
default-information-originateキーワードで、デフォルトルートをNSSAエリアに注入する。

経路集約

OSPFで経路集約を行う時は、ABRかASBRで行う(他ではだめ)

ABRでの経路集約、つまりエリアでの経路集約は、

Router(config-router)# area area-id range ip-address mask
                       [advertise | not-advertise][cost cost] 

ASBRでの経路集約、つまり外部経路を集約するには、

Router(config-router)# summary-address {{ip-address mask} | 
                       {prefix mask}} [not-advertise][tag tag]

集約すると、null0へのstatic routeが自動でできる。これを作らないようにするには、

Router(config-router)# no discard route { external | internal }

ただし、複数ルータで同じ集約をしている場合、これいれるとループになるので注意。

認証

OSPFの認証は、エリア認証とインターフェース認証の2通り。エリア認証では、そのエリアすべてのルータが認証が必要になる。インターフェース認証では接続されているルータ間のみ。

エリア認証では、まずエリア認証の宣言し、インターフェースで認証キーを設定する。

Router(config-router)# area area-id authentication [ message-digest ] 
Router(config-if)# ip ospf authentication-key key
Router(config-if)# ip ospf message-digest-key key-id md5 key

message-digestキーワードでMD5使っての認証、つけなければクリアテキスト認証になる。認証キー設定は、クリアテキスト(ip ospf authentication-key)とMD5(ip ospf message-digest-key)と異なるので注意。両端で同じ設定を入れること。

インターフェース認証でも、まず認証するぞ宣言をし、同様に認証キーの設定を行う。

Router(config-if)# ip ospf authentication
Router(config-if)# ip ospf authentication-key key
Router(config-if)# ip ospf message-digest-key key-id md5 key

バーチャルリンク

OSPFはエリア0を通じてエリア間のLSA交換を行う。つまり、エリア間を接続するには、エリア0を通らなければならない。もっと端的にいうと、ABRは必ずエリア0に直接つながっていないといけないが、なんらかの原因でエリア0につながってないときはバーチャルリンク使ってエリア0につなげる。

設定は、バーチャルリンクをはる「エリア」に設定する。

Router(config-router)# area area-id virtual-link router-id 

router-idは、バーチャルリンクをはる対向ABRのルータIDを指定。router-idは、ループバックアドレスがあればその中の一番大きいもの、なければ一番大きいインターフェースアドレスからデフォルトでは自動で設定されるが、再起動すると変わってしまう可能性もあるので、必ず固定で設定しておく。

Router(config-router)# router-id ip-address

ip-addressと書いたが、IPアドレスライクな32bitの識別子。OSPFネットワークで一意であればよいが、まあわかりやすいように設定しているループバックアドレスにでもしておけばよいのでは。

このrouter-idへの到達性はこのバーチャルリンクには関係はない。

通常、OSPFネイバに対する設定はインターフェースに設定するが、同じようにバーチャルリンクに設定できる。特にエリア0認証するときは、バーチャルリンクはエリア0の延長になるので忘れないように注意する。

Router(config-router)# area area-id virtual-link router-id
                       [authentication [message-digest | null]]
                       [hello-interval seconds]
                       [retransmit-interval seconds]
                       [transmit-delay seconds]
                       [dead-interval seconds]
                       [[authentication-key key] |
                        [message-digest-key key-id md5 key]] 

デフォルトルートの注入

OSPFドメインにデフォルトルートを注入するには、ASBRにて設定。OSPFに0.0.0.0/0はredistributeできないので、この設定が必要。

Router(config-router)# default-information originate [always]
                       [metric metric-value] [metric-type type-value]
                       [route-map map-name]

alwaysキーワードで、0.0.0.0/0を持ってなくてもデフォルト流せる。またroute-mapで、ある監視ネットワークにmatchしたら、set interfaceで設定したインターフェースにdefault流すようなconditional default-route advertiseなんてこともできる。

DNS Lookup

showコマンドで、Router-IDなどIPアドレスじゃなくて名前で表示。

Router(config)# ip ospf name-lookup 

Default Metric

OSPFはリンクコストをデフォルトでインターフェース帯域によって自動計算する。コスト=帯域/100M。例えば、100Mbps Ethernetでコスト=1になり、それ以上の帯域だとみんな1になってしまう。この分母を変えるには、

Router(config-router)# auto-cost reference-bandwidth ref-bw 

auto-costでコスト計算式変えるときは全ルータで変更すること。

Administrative Distance

OSPFのデフォルトADは110。CCIEラボではループ防止のためにADによる操作ができるようになっておく。

OSPFでは種別毎にADを変えられる。

Router(config-router)# distance ospf {[intra-area dist1]
                       [inter-area dist2] [external dist3]} 

Passive Interface

OSPF Helloを送出しない。つまりadjacencyをそのインターフェースで確立しない。

Router(config-router)# passive-interface interface

経路計算タイマ

トポロジが変わってからSPF計算を開始するまでの時間(spf-delay)、SPF計算を行う間隔spf-holdtime) の調整。

Router(config-router)# timers spf spf-dely spf-holdtime

On-Demand Circuit

Dialerなどのインターフェースで、OSPF Hello、LSAフラッディングによるリンクアップを防ぐ。これ設定したインターフェースからHelloを送らない、またそこから受け取ったAdjacencyがagingしない、そしてLSAがagingしなくなる。トポロジ変更でダイアルするようになる。

Router(config-if)# ip ospf demand-circuit

基本的にBRIの片方のみで設定。Adjネゴシエーション時にネゴして、demand-circuitを両端で認識するはず。(但し、あるISDNシミュレータ使うとネゴできない場合があるようなので注意)

またコスト調整して、通常BRIをトラフィックが流れないようにしておくこと。

BRIでPPPのときは、ホストルートが注入され、リンクフラップする。これを防ぐには

Router(config-if)# no peer neighbor route

LSA Group Pacing

従来LSAのリフレッシュは30分毎に一度にやっていて、瞬間的にルータ負荷が高くなってしまった。そこで各LSA毎にタイマをもち、リフレッシュさせることにしたが、これだとLSAパケットが多くなりすぎてこれまたよくない。

そこで、ある時間毎に少しずつまとめてリフレッシュを行う。デフォルト4分。

Router(config-router)# timers lsa-group-pacing seconds

OSPF LSA Floodingの防止

Broadcast/Non-broadcast/Point-to-Pointネットワークではインターフェース単位で

Router(config-if)# ip ospf database-filter all out

Point-to-Multipointネットワークではネイバを指定できる (ネイバ毎に必要ならP2Mにすべし)

Router(config-router)# neighbor ip-address database-filter all out

LSA Floodingを減少

リフレッシュでのLSA Floodingを抑制。

Router(config-if)# ip ospf flood-reduction

MOSPF LSA Packetを無視

MOSPF LSA (Type=6 LSA)はCiscoルータはサポートしていないが、このType6 LSAを受け取るとsyslogに出力してうざいので、それを軽減する。

Router(config-router)# ignore lsa mospf

LSA Throtting

OSPFのconvrgenceをミリ秒単位で調整(12.3Tから)

Router(config-router)# timers throttle lsa all start-interval hold-interval max-interval
Router(config-router)# timers lsa arrival milliseconds

TIPS

  • ループバックアドレスは/32のホストルートでOSPFに注入される。設定されているマスクでOSPFに注入するには、ネットワークタイプをpoint-to-pointに。
  • エリア認証したらVirtual-Linkを忘れないこと。特にarea 0 authentication宣言。
  • RIPのpassive-interfaceように、経路情報を受けるだけしたい時はpassiveしちゃうとAdj確立できず受け取れないので、LSAだけフィルタする。
    Router(config-if)# ip ospf database-filter all out
  • OSPF adjが確立するためには、MTU長が等しくないといけない。
    • 自分より大きいMTU長のDBDをうけると、リセットしてDBDを再送してしまう
      -> adjあがらない
    • MTUをあわせるか、MTUが小さいほうに下記設定
      Router(config-if)# ip ospf mtu-ignore

トラックバック(0)

トラックバックURL: http://blog.kslabs.net/mt/mt-tb.cgi/244

KsLabs ?

ネットワークの技術的なことを中心に、日頃考えていることなどつらつらと記していきたいと思います。

ご意見・ご感想など
ks.networks@gmail.com

Twitter Updates

Powered by Movable Type 5.04

From TestKing

BlogPeople

BLOG PET

From Google