OSPFでデフォルトルートが配布されない原因と対処法
OSPF環境で、インターネット接続ルータから内部ルータへデフォルトルートを配布したい場合、次のコマンドを使用します。
router ospf 1
default-information originate
しかし、このコマンドを設定したにもかかわらず、ほかのルータにデフォルトルートが配布されないことがあります。
この記事では、その原因と対処法をCisco IOSの設定例で解説します。
検証構成
次の構成を使用します。
インターネット
|
192.0.2.1
|
192.0.2.2
R1
10.0.12.1/30
|
10.0.12.2/30
R2
R1はインターネットへ接続する境界ルータです。
R1とR2の間ではOSPFが動作しています。R1からR2へデフォルトルートを配布することが目的です。
OSPFの基本設定
R1には次の設定を行います。
R1(config)# router ospf 1
R1(config-router)# router-id 1.1.1.1
R1(config-router)# network 10.0.12.0 0.0.0.3 area 0
R1(config-router)# default-information originate
R2には次の設定を行います。
R2(config)# router ospf 1
R2(config-router)# router-id 2.2.2.2
R2(config-router)# network 10.0.12.0 0.0.0.3 area 0
OSPFネイバーが確立していることを確認します。
R2# show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 1 FULL/DR 00:00:32 10.0.12.1 GigabitEthernet0/0
ところが、R2のルーティングテーブルを確認しても、デフォルトルートがありません。
R2# show ip route
Gateway of last resort is not set
原因:R1自身がデフォルトルートを持っていない
default-information originateは、設定しただけで必ずデフォルトルートを生成するコマンドではありません。
通常は、OSPFルータ自身のルーティングテーブルにデフォルトルートが存在する場合に限り、その経路をOSPFへ配布します。
R1のルーティングテーブルを確認します。
R1# show ip route 0.0.0.0
% Network not in table
R1自身がデフォルトルートを持っていないため、R2にもデフォルトルートが配布されていません。
対処法1:R1にデフォルトルートを設定する
R1に、インターネット側をネクストホップとするスタティックデフォルトルートを設定します。
R1(config)# ip route 0.0.0.0 0.0.0.0 192.0.2.1
R1のルーティングテーブルを確認します。
R1# show ip route 0.0.0.0
Routing entry for 0.0.0.0/0
Known via "static", distance 1, metric 0
Routing Descriptor Blocks:
* 192.0.2.1
これで、R1のルーティングテーブルにデフォルトルートが登録されました。
R2でも確認します。
R2# show ip route ospf
O*E2 0.0.0.0/0 [110/1] via 10.0.12.1, 00:00:08, GigabitEthernet0/0
R1から配布されたデフォルトルートが、O*E2として登録されています。
O:OSPFで学習した経路*:デフォルトルート候補E2:OSPF外部タイプ2の経路
対処法2:alwaysを指定する
R1がデフォルトルートを持っていない状態でも、強制的にデフォルトルートを配布する方法があります。
R1(config)# router ospf 1
R1(config-router)# default-information originate always
alwaysを追加すると、R1のルーティングテーブルにデフォルトルートが存在しなくても、OSPFへ0.0.0.0/0を配布します。
R2# show ip route ospf
O*E2 0.0.0.0/0 [110/1] via 10.0.12.1, 00:00:05, GigabitEthernet0/0
alwaysを安易に使うとブラックホールが発生する
alwaysを使えば簡単にデフォルトルートを配布できますが、注意が必要です。
R1が実際にはインターネットへ到達できない状態でも、R2は引き続きR1をデフォルトゲートウェイとして使用します。その結果、R2から送信されたパケットがR1で破棄される「ブラックホール」が発生する可能性があります。
本番環境では、単純にalwaysを指定するのではなく、IP SLAやトラッキングを組み合わせて、上位回線へ到達できる場合だけデフォルトルートを有効にする方法があります。
IP SLAを使って到達性を監視する
R1から上位ネットワークのIPアドレスへ定期的にICMP Echoを送信します。
R1(config)# ip sla 1
R1(config-ip-sla)# icmp-echo 192.0.2.1 source-interface GigabitEthernet0/1
R1(config-ip-sla-echo)# frequency 5
R1(config-ip-sla-echo)# exit
R1(config)# ip sla schedule 1 life forever start-time now
続いて、IP SLAの結果をトラッキングします。
R1(config)# track 1 ip sla 1 reachability
スタティックデフォルトルートにトラックを関連付けます。
R1(config)# ip route 0.0.0.0 0.0.0.0 192.0.2.1 track 1
OSPFには通常のdefault-information originateを設定します。
R1(config)# router ospf 1
R1(config-router)# default-information originate
この構成では、次のように動作します。
- IP SLAが上位ルータへの到達性を監視する
- 到達可能な場合は、R1にデフォルトルートが登録される
- R1がOSPFでデフォルトルートを配布する
- 到達不能になると、R1のデフォルトルートが削除される
- OSPFによるデフォルトルートの配布も停止する
IP SLAの状態は次のコマンドで確認できます。
R1# show ip sla statistics
R1# show track 1
OSPFのE1とE2の違い
default-information originateによって配布されるデフォルトルートは、デフォルトではE2経路になります。
E2では、OSPFドメイン内部を通過するコストが、外部経路のメトリックに加算されません。一方、E1では、外部メトリックにOSPF内部コストが加算されます。
E1として配布する場合は、次のように設定します。
R1(config)# router ospf 1
R1(config-router)# default-information originate metric-type 1
メトリックも指定できます。
R1(config-router)# default-information originate metric 50 metric-type 1
R2では、次のように表示されます。
R2# show ip route ospf
O*E1 0.0.0.0/0 [110/51] via 10.0.12.1, 00:00:06, GigabitEthernet0/0
複数の出口ルータが存在し、出口までのOSPF内部コストも含めて経路を選択させたい場合は、E1が適しています。
まとめ
default-information originateを設定してもデフォルトルートが配布されない場合は、まずOSPFを設定したルータ自身が0.0.0.0/0を持っているか確認します。
show ip route 0.0.0.0
ポイントは次の3つです。
default-information originateは、原則として自分が持つデフォルトルートをOSPFへ配布するalwaysを付けると、デフォルトルートがなくても強制的に配布する- 実環境ではIP SLAとtrackを組み合わせると、到達不能時のブラックホールを防ぎやすい
OSPFネイバーが正常なのにデフォルトルートだけ学習できない場合は、ネイバー関係ではなく、ASBR側のルーティングテーブルを確認することが重要です。