メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. OSPF記事一覧/

OSPFのデフォルトルート

目次

OSPFのデフォルトルートとは

デフォルトルートは、宛先0.0.0.0・マスク0.0.0.0の経路です。すべての宛先に一致しますが、一致の長さが最も短いので、ほかに一致する経路があればそちらが使われます(RFC 2328 Section 11.1)。

OSPFでデフォルトルートを運べるLSAは決まっています。RFC 2328が認めているのは、AS外部LSA(Type 5)とスタブエリアのSummary-LSA(Type 3)だけです(Appendix C)。NSSAの中でType 7やType 3として運ぶ形は、NSSAを定めたRFC 3101が追加しました。

エリアの種類とデフォルトの入り方

どのLSAでデフォルトが入るかは、エリアの種類で決まります。IOS XRの動きをまとめると次のとおりです。

エリアの種類ABRが入れるデフォルトASBRが出したType 5のデフォルト
通常エリア入れない届く
スタブエリア / トータリースタブエリアType 3を自動で入れる(メトリックはdefault-cost届かない
NSSA既定では入れない。nssa default-information-originateでType 7(Pビットなし)届かない
トータリーNSSAType 3を入れる届かない

スタブエリアの動きはOSPFのスタブエリアとトータリースタブエリア、NSSAの動きはOSPFのNSSAとトータリーNSSAで、それぞれ実機で確かめています。この記事では、通常エリアでASBRが出すType 5のデフォルトを扱います。

ASBRが出すデフォルト

ASBRは、AS外へのデフォルトをLink State ID 0.0.0.0のType 5で広告します(RFC 2328 Section 12.4.4)。受け取ったルータにはO*E2(またはO*E1)の経路が入ります。広告したASBR自身には入りません。自分が出したType 5は、自分の経路計算に使わないからです(Section 16.4 (2))。

IOS XRではrouter ospfdefault-information originateで出します。alwaysの有無で動きが変わります。

設定Type 5を出す条件
default-information originate自分のルーティングテーブルに、OSPF以外から学んだ0.0.0.0/0があるときだけ。無くなれば取り消す
default-information originate alwaysデフォルトの有無にかかわらず出す

alwaysは、ASBR自身に出口が無くても広告を続けます。受け取ったルータはASBRまで運びますが、その先へは届きません。規格ではなくCiscoの実装の動きです。

route-policyを付けると、ポリシーの条件を満たすときだけ出します。IOS XRのルーティングポリシー(RPL)ではrib-has-routeで「その経路がルーティングテーブルにあるか」を条件にでき、条件の経路が消えれば、alwaysを付けていても取り消します

メトリックの既定は1、タイプの既定はE2で、metricmetric-typeで変えられます。複数のASBRがデフォルトを出したときは、通常の外部経路と同じ規則で選びます(Section 16.4 (4)〜(6))。

  • E2は外部コスト(metric)を先に比べ、同じならASBRまでのコストで決める
  • E1は、ASBRまでのコストと外部コストの合計で比べる
  • 条件がすべて並べばECMPになる

検証構成

CML上のXRd(IOS XR 26.1.1)6台の構成です。area 0にR1 - R3 - R4 - R2を直線に並べ、両端のR1とR2がASBRです。R1とR2はそれぞれISP1・ISP2あてのスタティックのデフォルトを持ちます。ISP1とISP2はOSPFを動かさず、どちらも192.0.2.1/32を持つので、どちらの出口を通ったかはtracerouteのホップで分かります

R3はR1に1ホップ・R2に2ホップ、R4はR2に1ホップ・R1に2ホップの位置です。全リンクのコストは1です。

STEP操作確かめること
0初期状態(R1・R2がスタティックのデフォルトを持つ)R3・R4にデフォルトが無く、192.0.2.1へ届かない
1R1にdefault-information originateType 5のデフォルトが出る。R1自身にはO*E2が入らない
2R1のスタティックのデフォルトを消すR1がType 5を取り消す
3R1をdefault-information originate alwaysにするスタティックが無くてもType 5が出るが、R1の先へ届かない
4R1のスタティックを戻し、alwaysを外すSTEP 1と同じ状態に戻る
5R2にもdefault-information originateデフォルトが2つ。R3はR1経由、R4はR2経由
6R1をmetric 5にする外部コストの小さいR2が優先され、R3もR2経由になる
7R1をmetric 2 metric-type 1、R2をmetric 1 metric-type 1にするE1は合計で比べる。R3はECMP、R4はR2経由
8R1にroute-policyを入れ、ISP1側のリンクがあるときだけ出す条件を満たすので、R1はType 5を出し続ける
9R1のISP1側をshutdownする(最終状態)条件の経路が消え、alwaysがあってもR1がType 5を取り消す

以降の節はSTEP順ではなく、テーマごとにまとめています。

条件付きの生成と取り消し

STEP 1でR1にdefault-information originateを入れると、R1はType 5のデフォルトを出します。Link State IDとNetmaskが0.0.0.0、メトリックは1、タイプはE2です。

STEP 1 R1 - R3間 No.3 LSU(R1のType 5のデフォルト)tshark -V
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: LS Update (4)
        Packet Length: 64
        Source OSPF Router: 1.1.1.1
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0xbbf7 [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    LS Update Packet
        Number of LSAs: 1
        LSA-type 5 (AS-External-LSA (ASBR)), len 36
            .000 0000 0000 0001 = LS Age (seconds): 1
            0... .... .... .... = Do Not Age Flag: 0
            Options: 0x20, (DC) Demand Circuits
                0... .... = DN: Not set
                .0.. .... = (O) Opaque: Not set
                ..1. .... = (DC) Demand Circuits: Supported
                ...0 .... = (L) LLS Data block: Not Present
                .... 0... = (N) NSSA: Not supported
                .... .0.. = (MC) Multicast: Not capable
                .... ..0. = (E) External Routing: Not capable
                .... ...0 = (MT) Multi-Topology Routing: No
            LS Type: AS-External-LSA (ASBR) (5)
            Link State ID: 0.0.0.0
            Advertising Router: 1.1.1.1
            Sequence Number: 0x80000001
            Checksum: 0x1d91
            Length: 36
            Netmask: 0.0.0.0
            1... .... = External Type: Type 2 (metric is larger than any other link state path)
            .000 0000 = TOS: 0
            Metric: 1
            Forwarding Address: 0.0.0.0
            External Route Tag: 1
上のtshark出力のパケット(No.3 LSU)のpcapをダウンロード

R3にはこのType 5からospf 1のデフォルトが入ります。広告したR1のデフォルトはスタティックのままです。

R1 STEP 1:show route 0.0.0.0/0
RP/0/RP0/CPU0:R1#show route 0.0.0.0/0
Tue Sep 15 05:52:58.724 UTC

Routing entry for 0.0.0.0/0
  Known via "static", distance 1, metric 0, candidate default path
  Installed Sep 15 05:40:59.322 for 00:11:59
  Routing Descriptor Blocks
    198.51.100.254
      Route metric is 0
  No advertising protos. 
R3 STEP 1:show route 0.0.0.0/0
RP/0/RP0/CPU0:R3#show route 0.0.0.0/0
Tue Sep 15 05:54:03.135 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 1, candidate default path
  Tag 1, type extern 2
  Installed Sep 15 05:52:03.776 for 00:01:59
  Routing Descriptor Blocks
    10.0.13.1, from 1.1.1.1, via GigabitEthernet0/0/0/0
      Route metric is 1
  No advertising protos. 

STEP 2でR1のスタティックのデフォルトを消すと、R1はType 5を取り消します。LS ageが3600(MaxAge)、メトリックが16777215(LSInfinity)のLSUです。

STEP 2 R1 - R3間 No.3 LSU(R1のType 5の取り消し)tshark -V
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: LS Update (4)
        Packet Length: 64
        Source OSPF Router: 1.1.1.1
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0xb8dd [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    LS Update Packet
        Number of LSAs: 1
        LSA-type 5 (AS-External-LSA (ASBR)), len 36
            .000 1110 0001 0000 = LS Age (seconds): 3600
            0... .... .... .... = Do Not Age Flag: 0
            Options: 0x20, (DC) Demand Circuits
                0... .... = DN: Not set
                .0.. .... = (O) Opaque: Not set
                ..1. .... = (DC) Demand Circuits: Supported
                ...0 .... = (L) LLS Data block: Not Present
                .... 0... = (N) NSSA: Not supported
                .... .0.. = (MC) Multicast: Not capable
                .... ..0. = (E) External Routing: Not capable
                .... ...0 = (MT) Multi-Topology Routing: No
            LS Type: AS-External-LSA (ASBR) (5)
            Link State ID: 0.0.0.0
            Advertising Router: 1.1.1.1
            Sequence Number: 0x80000002
            Checksum: 0x119d
            Length: 36
            Netmask: 0.0.0.0
            1... .... = External Type: Type 2 (metric is larger than any other link state path)
            .000 0000 = TOS: 0
            Metric: 16777215
            Forwarding Address: 0.0.0.0
            External Route Tag: 1
上のtshark出力のパケット(No.3 LSU)のpcapをダウンロード

STEP 3でalwaysを付けると、R1にデフォルトが無いままType 5が出ます。R1のルーティングテーブルにデフォルトはありません。

R1 STEP 3:show route 0.0.0.0/0
RP/0/RP0/CPU0:R1#show route 0.0.0.0/0
Tue Sep 15 06:03:54.334 UTC

% Network not in table

R3はこのType 5に従ってR1へ送りますが、R1の先に経路が無いので届きません。tracerouteはR1(10.0.13.1)で!N(到達不能)になります。

R3 STEP 3:192.0.2.1へのpingとtraceroute
RP/0/RP0/CPU0:R3#ping 192.0.2.1 source 3.3.3.3 count 50 timeout 1
Tue Sep 15 06:05:18.996 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.0.2.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)
RP/0/RP0/CPU0:R3#traceroute 192.0.2.1 source 3.3.3.3
Tue Sep 15 06:06:10.349 UTC

Type escape sequence to abort.
Tracing the route to 192.0.2.1

 1  10.0.13.1 !N  *  !N 

STEP 4でスタティックを戻してalwaysを外すと、STEP 1と同じ状態に戻ります。Type 5の中身は変わらないので、LSUは流れず、シーケンス番号も80000001のままです。

複数のASBRがデフォルトを出したら

STEP 5でR2にもdefault-information originateを入れると、area 0にType 5のデフォルトが2つ並びます。どちらもE2・メトリック1なので、ASBRまでのコストで決まります。R3のRouting Bit Set on this LSAは、1ホップ先のR1のLSAにだけ付いています。

R3 STEP 5:show ospf database external
RP/0/RP0/CPU0:R3#show ospf database external
Tue Sep 15 06:15:49.317 UTC


            OSPF Router with ID (3.3.3.3) (Process ID 1)

		Type-5 AS External Link States

  Routing Bit Set on this LSA
  LS age: 772
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: 0.0.0.0 (External Network Number)
  Advertising Router: 1.1.1.1
  LS Seq Number: 80000001
  Checksum: 0x1d91
  Length: 36
  Network Mask: /0
	Metric Type: 2 (Larger than any link state path)
	TOS: 0 
	Metric: 1 
	Forward Address: 0.0.0.0
	External Route Tag: 1

  LS age: 122
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: 0.0.0.0 (External Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000001
  Checksum: 0xfeab
  Length: 36
  Network Mask: /0
	Metric Type: 2 (Larger than any link state path)
	TOS: 0 
	Metric: 1 
	Forward Address: 0.0.0.0
	External Route Tag: 1

R3はR1経由、R4はR2経由のデフォルトを使います。

R3 STEP 5:show route 0.0.0.0/0
RP/0/RP0/CPU0:R3#show route 0.0.0.0/0
Tue Sep 15 06:15:51.159 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 1, candidate default path
  Tag 1, type extern 2
  Installed Sep 15 06:02:59.070 for 00:12:52
  Routing Descriptor Blocks
    10.0.13.1, from 1.1.1.1, via GigabitEthernet0/0/0/0
      Route metric is 1
  No advertising protos. 
R4 STEP 5:show route 0.0.0.0/0
RP/0/RP0/CPU0:R4#show route 0.0.0.0/0
Tue Sep 15 06:16:33.289 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 1, candidate default path
  Tag 1, type extern 2
  Installed Sep 15 06:13:49.408 for 00:02:43
  Routing Descriptor Blocks
    10.0.24.2, from 2.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 1
  No advertising protos. 

STEP 6でR1をmetric 5にすると、E2は外部コストを先に比べるので、R3もR2のデフォルトを選びます。R1に1ホップのR3が、R4とR2を経由します。

R3 STEP 6:show route 0.0.0.0/0
RP/0/RP0/CPU0:R3#show route 0.0.0.0/0
Tue Sep 15 06:20:26.082 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 1, candidate default path
  Tag 1, type extern 2
  Installed Sep 15 06:18:25.836 for 00:02:00
  Routing Descriptor Blocks
    10.0.34.4, from 2.2.2.2, via GigabitEthernet0/0/0/1
      Route metric is 1
  No advertising protos. 

STEP 7で両方をE1にし、R1をメトリック2、R2をメトリック1にします。E1はASBRまでのコストとの合計で比べます。R3はR1経由が2+1=3、R2経由が1+2=3で等しいので、2本のECMPになります。R4はR2経由が1+1=2で、1本だけです。

R3 STEP 7:show route 0.0.0.0/0
RP/0/RP0/CPU0:R3#show route 0.0.0.0/0
Tue Sep 15 06:25:11.220 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 3, candidate default path
  Tag 1, type extern 1
  Installed Sep 15 06:23:09.423 for 00:02:01
  Routing Descriptor Blocks
    10.0.13.1, from 1.1.1.1, via GigabitEthernet0/0/0/0
      Route metric is 3
    10.0.34.4, from 2.2.2.2, via GigabitEthernet0/0/0/1
      Route metric is 3
  No advertising protos. 
R4 STEP 7:show route 0.0.0.0/0
RP/0/RP0/CPU0:R4#show route 0.0.0.0/0
Tue Sep 15 06:25:55.665 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 2, candidate default path
  Tag 1, type extern 1
  Installed Sep 15 06:23:09.417 for 00:02:46
  Routing Descriptor Blocks
    10.0.24.2, from 2.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 2
  No advertising protos. 

route-policyで条件を付ける

STEP 8では、ISP1側のリンク(198.51.100.0/24)がルーティングテーブルにあるときだけデフォルトを出すポリシーをR1に入れました。

R1 STEP 8:show running-configのroute-policy
route-policy DEF-IF-ISP1
  if rib-has-route in (198.51.100.0/24) then
    pass
  endif
end-policy
R1 STEP 8:show running-configのrouter ospf 1(先頭)
router ospf 1
 router-id 1.1.1.1
 default-information originate always metric 2 metric-type 1 route-policy DEF-IF-ISP1

条件の経路があるので、R1はSTEP 7と同じType 5を出し続けます。

STEP 9でR1のISP1側のインタフェースをshutdownすると、198.51.100.0/24がルーティングテーブルから消えます。R1はalwaysが付いていてもType 5を取り消し、193ミリ秒後に取り消しのLSUが流れました。

R1 STEP 9:show loggingのインタフェースの行
RP/0/RP0/CPU0:Sep 15 06:32:48.044 UTC: ifmgr[155]: %PKT_INFRA-LINK-5-CHANGED : Interface GigabitEthernet0/0/0/0, changed state to Administratively Down 
STEP 9 R1 - R3間 No.2 LSU(R1のType 5の取り消し)tshark -V
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: LS Update (4)
        Packet Length: 64
        Source OSPF Router: 1.1.1.1
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0xc0d5 [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    LS Update Packet
        Number of LSAs: 1
        LSA-type 5 (AS-External-LSA (ASBR)), len 36
            .000 1110 0001 0000 = LS Age (seconds): 3600
            0... .... .... .... = Do Not Age Flag: 0
            Options: 0x20, (DC) Demand Circuits
                0... .... = DN: Not set
                .0.. .... = (O) Opaque: Not set
                ..1. .... = (DC) Demand Circuits: Supported
                ...0 .... = (L) LLS Data block: Not Present
                .... 0... = (N) NSSA: Not supported
                .... .0.. = (MC) Multicast: Not capable
                .... ..0. = (E) External Routing: Not capable
                .... ...0 = (MT) Multi-Topology Routing: No
            LS Type: AS-External-LSA (ASBR) (5)
            Link State ID: 0.0.0.0
            Advertising Router: 1.1.1.1
            Sequence Number: 0x80000004
            Checksum: 0x89a3
            Length: 36
            Netmask: 0.0.0.0
            0... .... = External Type: Type 1 (metric is specified in the same units as interface cost)
            .000 0000 = TOS: 0
            Metric: 16777215
            Forwarding Address: 0.0.0.0
            External Route Tag: 1
上のtshark出力のパケット(No.2 LSU)のpcapをダウンロード

R3のデフォルトは、R2経由の1本になりました。

R3 STEP 9:show route 0.0.0.0/0
RP/0/RP0/CPU0:R3#show route 0.0.0.0/0
Tue Sep 15 06:34:54.531 UTC

Routing entry for 0.0.0.0/0
  Known via "ospf 1", distance 110, metric 3, candidate default path
  Tag 1, type extern 1
  Installed Sep 15 06:32:48.240 for 00:02:06
  Routing Descriptor Blocks
    10.0.34.4, from 2.2.2.2, via GigabitEthernet0/0/0/1
      Route metric is 3
  No advertising protos. 

参考

文書内容
RFC 2328Section 11.1ルーティングテーブルの検索。デフォルトルートは一致の最も短い経路
RFC 2328Section 12.4.3.1スタブエリアへ入れるデフォルトのSummary-LSA
RFC 2328Section 12.4.4AS-external-LSAによるデフォルトルート
RFC 2328Section 16.4AS外部経路の計算。自分のLSAを使わないこと、E1とE2の比較
RFC 2328Appendix CDefaultDestination
RFC 3101Section 2.4NSSAへのType 7のデフォルト
RFC 3101Section 2.7NSSAでType 3のデフォルトを使う条件

検証Configおよびshow結果

各STEPで6台すべてから、次のファイルをルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 9のもの)。

ファイル内容
..._show.txtshow version / show interface description / show route / show route ospf / show ospf / show ospf interface / show ospf interface brief / show ospf neighbor / show ospf neighbor detail / show ospf database / show ospf database router / show ospf database network / show ospf statistics interface / show ospf database external / show ospf database external self-originate / show route 0.0.0.0/0 / show route static / show ospf database database-summary
..._log.txtそのSTEPの範囲だけに絞ったshow logging
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._trace.txtshow ospf trace spf_ext / show ospf trace adj_cycle / show ospf trace events / show ospf trace adj
..._ping.txtR3・R4から192.0.2.1へのpingtraceroute
..._commit.cfgそのSTEPで設定を変えたルータのshow configuration commit changes last 1

STEP 0:初期状態(R1・R2がスタティックのデフォルトを持つ)

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace--
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 1:R1にdefault-information originate

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 2:R1のスタティックのデフォルトを消す

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 3:R1をdefault-information originate alwaysにする

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 4:R1のスタティックを戻し、alwaysを外す

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 5:R2にもdefault-information originate

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace--
R2showlogruntrace-commit
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 6:R1をmetric 5にする

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 7:R1をmetric 2 metric-type 1、R2をmetric 1 metric-type 1にする

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace-commit
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 8:R1にroute-policyを入れ、ISP1側のリンクがあるときだけ出す

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 9:R1のISP1側をshutdownする(最終状態)

ルータshow出力syslogrunning-configtraceping投入した設定
R1showlogruntrace-commit
R2showlogruntrace--
R3showlogruntraceping-
R4showlogruntraceping-
ISP1showlogruntrace--
ISP2showlogruntrace--

STEP 0の前に、R1の候補設定でdefault-information originateのヘルプを採り、abortで捨てた記録(commitはしていない):precheck

パケットキャプチャーはSTEPごとに、R1 — R3とR4 — R2の2か所で取得しています。本文で引用したLSUは、STEP 1のNo.3、STEP 2のNo.3、STEP 9のNo.2(いずれもR1 — R3間)です。

STEPR1 — R3間R4 — R2間
0pcappcap
1pcappcap
2pcappcap
3pcappcap
4pcappcap
5pcappcap
6pcappcap
7pcappcap
8pcappcap
9pcappcap

関連記事