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

OSPFの外部経路(スタティックの再配布)

目次

OSPFの外部経路とは

これまでの記事では、1つのOSPFドメインの中だけで経路を交換してきました。実際のネットワークでは、OSPFで動いていない範囲(スタティックルートで到達する先、別のルーティングプロトコルが動いている範囲、インターネット側)への経路もOSPFに載せる必要があります。

OSPFの外から持ち込んだ経路を「外部経路(External Route)」、持ち込む操作を「再配布(Redistribution)」、再配布を行うルータを「ASBR(Autonomous System Boundary Router、AS境界ルータ)」と呼びます。ASBRは外部経路をAS External-LSA(Type 5)に変換し、エリアをまたいでAS全体へフラッディングします。

用語説明
ASBROSPFの外から経路を持ち込むルータ。Router-LSAに「AS境界ルータ」のフラグが立つ
AS External-LSA(Type 5)外部経路を表すLSA。エリアの境界を越えてAS全体に広がる(スタブエリアを除く)
メトリックタイプ E1 / E2外部経路のコストの数え方。E1はASBRまでの内部コストを加算し、E2は加算しない
シードメトリックASBRが外部経路に付ける初期メトリック。IOS XRのredistributeでは既定20
Forwarding Address外部宛てのトラフィックを実際に渡す先。0.0.0.0ならASBR自身に送る

この記事では、スタティックルートの再配布を題材に、Type 5 LSAの中身、E1とE2の違い、そしてASBRが2台あるときにどちらの経路が選ばれるかを実機で確認します。Forwarding Addressの詳細は別記事で解説します。

検証構成

Cisco IOS XR(XRd 26.1.1)のルータ7台で、2つの独立したOSPFドメインを作りました。ドメインA(router ospf 1)とドメインB(router ospf 2)は、R3–R11間とR4–R12間の2本のリンクで物理的につながっていますが、このリンク上ではOSPFの隣接を張っていません(各ドメインでpassive enableにしています)。つまりドメインAからドメインBの経路は、再配布しない限り見えません。

項目内容
ドメインArouter ospf 1 エリア0。R1・R2・R3・R4
ドメインBrouter ospf 2 エリア0。R11・R12・R13
ASBRになるルータドメインA側はR3とR4、ドメインB側はR11とR12
外部経路の宛先ドメインAから見ると13.13.13.13/32(R13のLoopback0)、ドメインBから見ると1.1.1.1/32(R1のLoopback0)
観測点R1(両ASBRから距離が違う位置)。疎通確認はR1とR13でping / traceroute
リンクのコストすべてのリンクとLoopback0が既定のコスト1。IOS XRの既定の参照帯域幅は100 Mbpsで、Gigabit Ethernetはこれを超えるためコストが1になる。STEP 4以降のみ、R2のGigabitEthernet0/0/0/2(R4向け)をcost 10に設定する

境界リンクをpassive enableでOSPFに入れている理由は2つあります。隣接を張らないので2つのドメインは独立したままですが、172.16.3.0/24172.16.4.0/24が各ドメイン内に広告されるため、tracerouteの中間ホップに戻り経路ができて経路が読めます。また、この状態ではForwarding Addressが0.0.0.0になるため、外部経路の基本動作に集中できます。

検証は次の10段階(STEP 0〜9)で進めます。各STEPで7台すべてから取得したshow出力・syslog・running-configは、記事末尾の検証Configおよびshow結果にまとめました。

STEP操作結果
0初期状態(再配布なし)R1はドメインBの経路を知らない。pingは失敗
1R3とR11で相互にスタティックを再配布Type 5が出現。両方向でping / tracerouteが通る
2R3をmetric-type 1(E1)に観測点によってメトリックが変わる
3R3をE2に戻すどの観測点でも同じメトリックに戻る
4R2のR4向けにcost 10、R4とR12も再配布(同じシードメトリック20)Type 5が2つ。ASBRまでのコストで決まる
5R4のシードメトリックを15に下げるR4経由に切り替わる
6R3をmetric-type 1(E1・20)にE1が優先されR3経由に戻る
7R4もmetric-type 1(E1・15)に合計で比較され、R3経由のまま
8R3でdefault-information originate alwaysデフォルトルートがType 5で配布される
9すべて削除(最終状態)初期状態に復旧

再配布する前(STEP 0)

R1にはドメインBの経路が1つもありません。13.13.13.13宛てのpingは失敗し、tracerouteもR1自身が!N(宛先ネットワークに到達不能)を返して終わります。

STEP 0 R1 再配布前
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 07:43:23.632 UTC

% Network not in table

RP/0/RP0/CPU0:R1#ping 13.13.13.13 source 1.1.1.1 count 2
Sun Sep  6 07:43:23.767 UTC
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 13.13.13.13 timeout is 2 seconds:
..
Success rate is 0 percent (0/2)
RP/0/RP0/CPU0:R1#traceroute 13.13.13.13 source 1.1.1.1
Sun Sep  6 07:43:28.625 UTC

Type escape sequence to abort.
Tracing the route to 13.13.13.13

 1  1.1.1.1 !N  *  !N 

このときR1が学習しているのはドメインA内の経路と、境界リンクの2つのセグメントだけです。

STEP 0 R1 OSPFで学習した経路
RP/0/RP0/CPU0:R1#show route ospf
Sun Sep  6 07:40:10.467 UTC

O    2.2.2.2/32 [110/2] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/3] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0
O    4.4.4.4/32 [110/3] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0
O    10.0.23.0/24 [110/2] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0
O    10.0.24.0/24 [110/2] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0
O    172.16.3.0/24 [110/3] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0
O    172.16.4.0/24 [110/3] via 10.0.12.2, 00:00:30, GigabitEthernet0/0/0/0

スタティックを再配布してASBRにする(STEP 1)

R3にドメインBの宛先へのスタティックルートを設定し、それをOSPFに再配布します。戻り経路も必要なので、R11でも同じことを逆向きに行います。

STEP 1 R3に投入した設定
router static
 address-family ipv4 unicast
  13.13.13.13/32 172.16.3.11
 !
!
router ospf 1
 redistribute static
!
STEP 1 R11に投入した設定(戻り経路)
router static
 address-family ipv4 unicast
  1.1.1.1/32 172.16.3.3
 !
!
router ospf 2
 redistribute static
!
IOS XRのBGPではneighborにroute-policyが必須ですが、OSPFのredistributeはroute-policyなしで動きます(XRd 26.1.1で確認)。フィルタしたい場合にroute-policyを付けます。

再配布したR3は、show ospfに「AS境界ルータである」と表示されるようになります。

STEP 1 R3 ASBRになったことの確認
RP/0/RP0/CPU0:R3#show ospf
Sun Sep  6 07:46:25.276 UTC

 Routing Process "ospf 1" with ID 3.3.3.3
 Role: Primary Active
 NSR (Non-stop routing) is Enabled
 Supports only single TOS(TOS0) routes
 Supports opaque LSA
 It is an autonomous system boundary router

R1のLSDBには、R3が生成したType 5のLSAが現れます。この記事で何度も見ることになる4つのフィールドが並んでいます。

STEP 1 R1 Type 5 LSAの中身
RP/0/RP0/CPU0:R1#show ospf database external
Sun Sep  6 07:45:46.443 UTC


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

		Type-5 AS External Link States

  Routing Bit Set on this LSA
  LS age: 106
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: 13.13.13.13 (External Network Number)
  Advertising Router: 3.3.3.3
  LS Seq Number: 80000001
  Checksum: 0x352b
  Length: 36
  Network Mask: /32
	Metric Type: 2 (Larger than any link state path)
	TOS: 0 
	Metric: 20 
	Forward Address: 0.0.0.0
	External Route Tag: 0
フィールド意味
Link State ID13.13.13.13外部経路のネットワーク番号
Advertising Router3.3.3.3この経路を持ち込んだASBR
Metric Type2E2。ASBRまでの内部コストを加算しない
Metric20シードメトリック。IOS XRのredistributeの既定値
Forward Address0.0.0.0トラフィックはASBR(R3)へ送る

ルーティングテーブルにはtype extern 2として入り、show route ospfではO E2と表示されます。

STEP 1 R1 外部経路の詳細
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 07:45:47.816 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 20, type extern 2
  Installed Sep  6 07:44:03.182 for 00:01:44
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 20
  No advertising protos. 

疎通も取れました。tracerouteはR2→R3→R11→R13と4ホップで、境界リンクの172.16.3.11もホップとして見えています

STEP 1 R1 → R13 の疎通
RP/0/RP0/CPU0:R1#ping 13.13.13.13 source 1.1.1.1 count 3
Sun Sep  6 07:45:10.691 UTC
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 13.13.13.13 timeout is 2 seconds:
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 12/15/21 ms
RP/0/RP0/CPU0:R1#traceroute 13.13.13.13 source 1.1.1.1
Sun Sep  6 07:45:11.638 UTC

Type escape sequence to abort.
Tracing the route to 13.13.13.13

 1  10.0.12.2 6 msec  3 msec  4 msec 
 2  10.0.23.3 7 msec  22 msec  6 msec 
 3  172.16.3.11 10 msec  9 msec  9 msec 
 4  10.1.11.13 13 msec  *  18 msec 

戻り方向も同じ構成なので、R13からR1へも到達します。

STEP 1 R13 → R1 の疎通
RP/0/RP0/CPU0:R13#ping 1.1.1.1 source 13.13.13.13 count 3
Sun Sep  6 07:45:18.563 UTC
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 1.1.1.1 timeout is 2 seconds:
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 11/13/15 ms
RP/0/RP0/CPU0:R13#traceroute 1.1.1.1 source 13.13.13.13
Sun Sep  6 07:45:19.532 UTC

Type escape sequence to abort.
Tracing the route to 1.1.1.1

 1  10.1.11.11 6 msec  4 msec  7 msec 
 2  172.16.3.3 7 msec  9 msec  7 msec 
 3  10.0.23.2 11 msec  10 msec  10 msec 
 4  10.0.12.1 14 msec  *  21 msec 

E1とE2の違い(STEP 2・3)

外部経路のメトリックの数え方には2種類あります。

メトリックタイプ表示コストの数え方
External Type 2(E2)O E2シードメトリックそのまま。 ASBRまでの内部コストを加算しない
External Type 1(E1)O E1シードメトリック+ASBRまでの内部コスト。 OSPF内部の経路と同じ尺度で比較できる

R3の再配布をmetric-type 1に変更して、ASBRからの距離が違う2台(R1はR3までコスト2、R2はコスト1)で見比べます。

STEP 2 R3に投入した設定
router ospf 1
 redistribute static metric-type 1
!
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 07:50:04.397 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 22, type extern 1
  Installed Sep  6 07:48:50.086 for 00:01:14
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 22
  No advertising protos. 
RP/0/RP0/CPU0:R2#show route 13.13.13.13/32
Sun Sep  6 07:50:27.611 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 21, type extern 1
  Installed Sep  6 07:48:50.079 for 00:01:37
  Routing Descriptor Blocks
    10.0.23.3, from 3.3.3.3, via GigabitEthernet0/0/0/1
      Route metric is 21
  No advertising protos. 

同じLSA(シードメトリック20)を見ているのに、R1では22、R2では21になりました。それぞれ20 + 220 + 1で、ASBRまでの内部コストが足されています。

E2に戻すと、どちらも20で揃います。

RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 07:53:53.531 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 20, type extern 2
  Installed Sep  6 07:52:59.278 for 00:00:54
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 20
  No advertising protos. 
RP/0/RP0/CPU0:R2#show route 13.13.13.13/32
Sun Sep  6 07:54:16.928 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 20, type extern 2
  Installed Sep  6 07:52:59.271 for 00:01:17
  Routing Descriptor Blocks
    10.0.23.3, from 3.3.3.3, via GigabitEthernet0/0/0/1
      Route metric is 20
  No advertising protos. 

E2は「OSPFの外の距離」を表す値で、AS内のどこから見ても同じです。一方E1はAS内の距離を含むので、観測点によって変わります。どちらを使うべきかは後述の設計上の注意で整理します。

外部経路のパス選択

ここからが本題です。同じ外部プレフィックスを2台のASBRが広告しているとき、どちらが選ばれるのかを確かめます。

ASBRまでのコストを確認する

パス選択の判断材料になる「ASBRまでの内部コスト」はshow ospf border-routersで確認できます。R1から見ると、R3までが2、R4までが11です(R2のR4向けインタフェースにコスト10を設定したため)。

STEP 4 R1 ASBRまでのコスト
RP/0/RP0/CPU0:R1#show ospf border-routers
Sun Sep  6 07:58:29.441 UTC

OSPF 1 Internal Routing Table

Codes: i - Intra-area route, I - Inter-area route

i 3.3.3.3 [2] via 10.0.12.2, GigabitEthernet0/0/0/0, ASBR , Area 0, SPF 8
i 4.4.4.4 [11] via 10.0.12.2, GigabitEthernet0/0/0/0, ASBR , Area 0, SPF 8

以降のSTEPでは、この R3まで2 / R4まで11 という差を使って判定ルールを切り分けていきます。

同じE2が2つある場合(STEP 4)

R4にもR3と同じプレフィックスを、同じシードメトリック20・同じE2で再配布させます。

STEP 4 R4に投入した設定
router static
 address-family ipv4 unicast
  13.13.13.13/32 172.16.4.12
 !
!
router ospf 1
 redistribute static metric 20
!

LSDBにはType 5が2つ並びます。Advertising Routerだけが違い、メトリックは同じです。

STEP 4 R1 2台のASBRからのType 5
RP/0/RP0/CPU0:R1#show ospf database external
Sun Sep  6 07:58:28.845 UTC


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

		Type-5 AS External Link States

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

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

シードメトリックが同点なので、ASBRまでのコストが小さいR3側(2 < 11)が選ばれました。tracerouteもR3経由です。

STEP 4 R1 選ばれた経路
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 07:58:01.829 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 20, type extern 2
  Installed Sep  6 07:52:59.278 for 00:05:02
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 20
  No advertising protos. 
RP/0/RP0/CPU0:R1#traceroute 13.13.13.13 source 1.1.1.1
Sun Sep  6 07:58:01.959 UTC

Type escape sequence to abort.
Tracing the route to 13.13.13.13

 1  10.0.12.2 33 msec  4 msec  5 msec 
 2  10.0.23.3 8 msec  7 msec  7 msec 
 3  172.16.3.11 42 msec  10 msec  9 msec 
 4  10.1.11.13 13 msec  *  16 msec 

E2のシードメトリックが違う場合(STEP 5)

R4のシードメトリックを15に下げます。R4はASBRまでのコストが11で不利ですが、E2ではその内部コストは比較に使われません。

STEP 5 R4に投入した設定
router ospf 1
 redistribute static metric 15
!
STEP 5 R1 経路が切り替わる
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 08:02:12.442 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 15, type extern 2
  Installed Sep  6 08:01:27.256 for 00:00:45
  Routing Descriptor Blocks
    10.0.12.2, from 4.4.4.4, via GigabitEthernet0/0/0/0
      Route metric is 15
  No advertising protos. 
RP/0/RP0/CPU0:R1#traceroute 13.13.13.13 source 1.1.1.1
Sun Sep  6 08:02:12.635 UTC

Type escape sequence to abort.
Tracing the route to 13.13.13.13

 1  10.0.12.2 7 msec  6 msec  44 msec 
 2  10.0.24.4 8 msec  7 msec  7 msec 
 3  172.16.4.12 10 msec  8 msec  9 msec 
 4  10.1.12.13 14 msec  *  14 msec 

R4経由に切り替わり、tracerouteの2ホップ目以降が10.0.24.4 → 172.16.4.12 → 10.1.12.13に変わりました。

ここが重要な点です。もし内部コストを加算して比較しているなら、R3は20 + 2 = 22、R4は15 + 11 = 26となりR3が勝つはずです。実際にはR4が選ばれたので、E2の比較にはシードメトリックしか使われていないことが確認できます。

E1とE2が混在する場合(STEP 6)

R3だけをmetric-type 1(E1・シードメトリック20)に戻します。R3のメトリックは20 + 2 = 22で、R4のE2の15より大きい値です。

STEP 6 R3に投入した設定
router ospf 1
 redistribute static metric 20 metric-type 1
!
STEP 6 R1 E1が優先される
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 08:06:15.782 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 22, type extern 1
  Installed Sep  6 08:05:29.579 for 00:00:46
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 22
  No advertising protos. 
RP/0/RP0/CPU0:R1#traceroute 13.13.13.13 source 1.1.1.1
Sun Sep  6 08:06:15.990 UTC

Type escape sequence to abort.
Tracing the route to 13.13.13.13

 1  10.0.12.2 6 msec  5 msec  5 msec 
 2  10.0.23.3 8 msec  7 msec  7 msec 
 3  172.16.3.11 10 msec  9 msec  9 msec 
 4  10.1.11.13 12 msec  *  17 msec 

メトリックの数値は22(R3)対15(R4)でR4のほうが小さいのに、R3が選ばれました。 外部経路の比較では、メトリックを見る前にメトリックタイプで優先順位が決まります。E1はE2より常に優先されます。

E1が2つある場合(STEP 7)

R4もmetric-type 1(シードメトリック15)にします。両方がE1になったので、今度はメトリックで比較されます。

  • R3: 20 + 2 = 22
  • R4: 15 + 11 = 26
STEP 7 R4に投入した設定
router ospf 1
 redistribute static metric 15 metric-type 1
!
STEP 7 R1 合計で比較される
RP/0/RP0/CPU0:R1#show route 13.13.13.13/32
Sun Sep  6 08:10:17.038 UTC

Routing entry for 13.13.13.13/32
  Known via "ospf 1", distance 110, metric 22, type extern 1
  Installed Sep  6 08:05:29.579 for 00:04:47
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 22
  No advertising protos. 

tracerouteもR3経由のままです。

STEP 7 R1 traceroute
RP/0/RP0/CPU0:R1#traceroute 13.13.13.13 source 1.1.1.1
Sun Sep  6 08:10:17.805 UTC

Type escape sequence to abort.
Tracing the route to 13.13.13.13

 1  10.0.12.2 7 msec  5 msec  5 msec 
 2  10.0.23.3 8 msec  8 msec  7 msec 
 3  172.16.3.11 11 msec  10 msec  9 msec 
 4  10.1.11.13 13 msec  *  17 msec 

R4のほうがシードメトリックは小さい(15 < 20)のに、合計では負けてR3が選ばれました。

STEP 5とSTEP 7を並べると分かりやすいです。シードメトリックの組み合わせは20と15でまったく同じなのに、E2ならR4、E1ならR3と結果が逆になります。

STEPR3の広告R4の広告選ばれる理由
5E2 / 20E2 / 15R4シードメトリックだけで比較(15 < 20)
7E1 / 20E1 / 15R3内部コストを加算して比較(22 < 26)

同じ条件が並ぶとECMPになる(STEP 4のドメインB側)

ドメインB側も同じ構成になっています。R13から見ると、R11とR12が1.1.1.1/32同じE2・同じシードメトリック20で広告し、しかもR13から両ASBRまでの内部コストが同じ1です。この場合はどちらも選べないため、両方がルーティングテーブルに入ります(等コストマルチパス)

STEP 4 R13 外部経路が2本登録される
RP/0/RP0/CPU0:R13#show route 1.1.1.1/32
Sun Sep  6 08:00:52.365 UTC

Routing entry for 1.1.1.1/32
  Known via "ospf 2", distance 110, metric 20, type extern 2
  Installed Sep  6 07:57:10.361 for 00:03:42
  Routing Descriptor Blocks
    10.1.11.11, from 11.11.11.11, via GigabitEthernet0/0/0/0
      Route metric is 20
    10.1.12.12, from 12.12.12.12, via GigabitEthernet0/0/0/1
      Route metric is 20
  No advertising protos. 

パス選択のまとめ

ここで確認した順序は、Ciscoの実装が独自に決めたものではなく RFC 2328 Section 16.4 のステップ(6) に規定されているものです。RFCは(a)から(d)の順に評価すると定めています。

RFCの順序規定されている内容今回の検証
(a)エリア内経路・エリア間経路は、AS外部経路より常に優先される外部経路同士の比較なので今回は該当せず
(b)E1はE2より常に優先される(“Type 1 external paths are always preferred over type 2 external paths” — RFC 2328 Section 16.4)。すべてE2の場合は、広告されたType 2メトリック(シードメトリック)が小さい方を優先するSTEP 6(E1優先)とSTEP 5(シードメトリックで比較)
(c)まだ区別が付かずRFC1583Compatibilityが無効なら、ASBR/Forwarding Addressへ至るAS内部の経路の種別でSection 16.4.1に従って絞り込むR3もR4もエリア0のエリア内経路で到達するため、この段階では差が付かない
(d)まだ区別が付かなければコストで比較する。E1はForwarding Addressまでの距離+広告されたType 1メトリック(X+Y)Type 2メトリックが等しいE2同士はForwarding Addressまでの距離で比較するSTEP 7(E1の合計 22 対 26)とSTEP 4(E2同点時の距離 2 対 11)

同じ優先度と判定された経路は、ステップ(6)の冒頭の規定によりそのままエントリの経路リストに追加されます。これがドメインB側で観測した等コストマルチパスです。

RFCが比較対象としているのは「ASBRまでの距離」ではなくForwarding Addressまでの距離です。今回はすべてのType 5でForwarding Addressが0.0.0.0だったため、ステップ(3)の規定によりASBR自身が宛先になり、結果としてshow ospf border-routersが示すASBRまでのコストが比較に使われました。Forwarding Addressが非0のときに何が変わるかは別記事で解説します。

一方、次の値はRFCの規定ではなく実装が決めているものです。他ベンダーや他バージョンでは異なる可能性があるため、設計時は実機で確認してください。

項目IOS XR(XRd 26.1.1)での値
redistributeのシードメトリックの既定20
redistributeのメトリックタイプの既定E2(Type 2)
default-information originateのメトリックの既定1
外部経路のアドミニストレーティブディスタンス110(O E1 / O E2という表示形式もCisco独自)

デフォルトルートの生成(STEP 8)

個別のプレフィックスを再配布するかわりに、デフォルトルート(0.0.0.0/0)をType 5として配布することもできます。ASBRが「AS外はすべて自分に送れ」と広告する形です。

STEP 8 R3に投入した設定
router ospf 1
 default-information originate always
!

alwaysを付けているのは、R3自身がデフォルトルートを持っていなくても広告させるためです。付けない場合、R3のルーティングテーブルにデフォルトルートがあるときだけ広告されます。

STEP 8 R1 デフォルトルートを受信
RP/0/RP0/CPU0:R1#show route ospf
Sun Sep  6 08:14:25.707 UTC

O*E2 0.0.0.0/0 [110/1] via 10.0.12.2, 00:00:46, GigabitEthernet0/0/0/0
O    2.2.2.2/32 [110/2] via 10.0.12.2, 00:34:45, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/3] via 10.0.12.2, 00:34:45, GigabitEthernet0/0/0/0
O    4.4.4.4/32 [110/12] via 10.0.12.2, 00:17:45, GigabitEthernet0/0/0/0
O    10.0.23.0/24 [110/2] via 10.0.12.2, 00:34:45, GigabitEthernet0/0/0/0
O    10.0.24.0/24 [110/11] via 10.0.12.2, 00:17:45, GigabitEthernet0/0/0/0
O E1 13.13.13.13/32 [110/22] via 10.0.12.2, 00:08:56, GigabitEthernet0/0/0/0
O    172.16.3.0/24 [110/3] via 10.0.12.2, 00:34:45, GigabitEthernet0/0/0/0
O    172.16.4.0/24 [110/12] via 10.0.12.2, 00:17:45, GigabitEthernet0/0/0/0
RP/0/RP0/CPU0:R1#show route 0.0.0.0/0
Sun Sep  6 08:14:25.849 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  6 08:13:39.774 for 00:00:46
  Routing Descriptor Blocks
    10.0.12.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 1
  No advertising protos. 

O*E2*デフォルトルートの候補であることを示します。メトリックは1で、redistributeの既定値20とは別の既定値が使われる点に注意してください。show route 0.0.0.0/0にもcandidate default pathと出ています。

なおこの出力には、これまでのSTEPの結果も残っています。O E1 13.13.13.13/32 [110/22]がSTEP 7で選んだE1の外部経路、4.4.4.4/32[110/12]10.0.24.0/24[110/11]になっているのはSTEP 4で入れたcost 10の影響です。

設計上の注意

  • E2(既定)は「AS外までの距離」だけを表します。 AS内のどこから見ても同じ値になるので、複数のASBRのうち「どのASBRから出るか」をAS内の距離で決めたい場合に向きます(STEP 4の挙動)。
  • E1はAS内の距離を含めた総コストで比較したいときに使います。 ただし、E1とE2が混在するとメトリックの数値に関係なくE1が勝つため(STEP 6)、複数のASBRで再配布するならメトリックタイプは揃えるべきです。片方だけE1にすると、意図せずそちらに全部寄ります。
  • シードメトリックの既定値は20です。 複数のASBRで既定のまま再配布すると、STEP 4のようにASBRまでの内部コストだけで決まります。意図した振り分けをしたい場合は明示的に設定します。
  • 相互に再配布する構成ではループに注意します。 今回はドメインA・Bそれぞれがスタティックだけを再配布しているので問題になりませんが、双方でOSPFを相互に再配布すると経路が往復して不安定になることがあります。
  • ASBR自身は再配布元の経路を使い続けます。 R3のルーティングテーブルではスタティック(アドミニストレーティブディスタンス1)がOSPFの外部経路(110)より優先されるため、外部経路は入りません。観測はASBR以外のルータで行う必要があります。

Forwarding Addressについて

今回のすべてのSTEPで、Type 5 LSAのForward Address0.0.0.0でした。これは「この外部経路宛てのトラフィックはASBR自身に送れ」という意味です。

条件が揃うと、ASBRはここに自分ではない次ホップのアドレスを入れることがあり、そうなるとトラフィックはASBRを経由せずに直接その宛先へ向かいます。条件と挙動は別記事で解説します。

検証Configおよびshow結果

各STEPで7台すべてから、次の3種類をルータごとに分けて取得しています。検証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 border-routers / show route 13.13.13.13/32 / show route 1.1.1.1/32 / show ospf routes / show ospf trace events
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの(STEP 0のみ起動時からの全履歴)
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

疎通確認(ping / traceroute)は、意味のあるR1とR13でのみ..._trace.txtとして別途取得しています。

STEP 0:初期状態(再配布なし) — R1はドメインBの経路を知らない。pingは失敗

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 経路とping / R13 経路とping

STEP 1:R3とR11で相互にスタティックを再配布 — Type 5が出現。両方向でping / tracerouteが通る

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 経路とping/traceroute / R13 経路とping/traceroute

STEP 2:R3をmetric-type 1(E1)に — R1は22、R2は21(内部コストが加算される)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 経路とtraceroute

STEP 3:R3をE2に戻す — R1もR2も20

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 4:R2のR4向けにcost 10、R4とR12も再配布(E2・20) — Type 5が2つ。ASBRまでのコスト2のR3側が選ばれる

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 ASBRまでのコストとtraceroute / R13 経路とtraceroute

STEP 5:R4のシードメトリックを15に — R4経由に切り替わる(シードメトリックだけで比較)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 経路とtraceroute

STEP 6:R3をmetric-type 1(E1・20)に — E1が優先されR3経由に戻る

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 経路とtraceroute

STEP 7:R4もmetric-type 1(E1・15)に — 合計22 < 26でR3経由のまま

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 経路とType 5とtraceroute

STEP 8:R3でdefault-information originate alwaysO*E2 0.0.0.0/0が配布される

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 デフォルトルートの確認

STEP 9:再配布・スタティック・コスト設定を削除(最終状態) — 初期状態に復旧

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

追加取得: R1 復旧の確認

参考

RFCタイトル概要
RFC 2328OSPF Version 2AS External-LSA(Type 5)の定義(Section 12.4.4、A.4.5)。外部経路の計算とパス選択の規則(Section 16.4のステップ(3)〜(6))。ASBR/Forwarding Addressへの経路の優先順位(Section 16.4.1)。

関連記事