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
- 宛先ネットワークまでの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 costLSA送ってそのACKが返ってこない場合、LSAの再送を行う。その再送間隔。
Router(config-if)# ip ospf retransmit-interval secondsLSAがリンクを通って相手に届くまでの時間。
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
- 自分より大きいMTU長のDBDをうけると、リセットしてDBDを再送してしまう
トラックバック(0)
トラックバックURL: http://blog.kslabs.net/mt/mt-tb.cgi/244
