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

OSPFの経路集約

目次

経路集約とは

マルチエリアとABRで、エリアを分けてもABRはプレフィックスの数だけType 3を出すことを確認しました。エリアの中に/32のループバックが100個あれば、Type 3も100個が隣のエリアへ流れ、それを受け取った全ルータのルーティングテーブルに100本の経路が載ります。これをまとめて1本にするのが経路集約(Summarization)です。

集約の効果は「LSDBのLSAが減る」と説明されることが多いのですが、実際に効くのはルーティングテーブル(RIB)と転送テーブル(FIB)の経路数が減ることです。LSAはOSPFプロセスのメモリの話にとどまりますが、経路数は転送ハードウェアの容量とテーブルの書き換え量に直結します。この記事でも実測して確かめます。

OSPFで集約できるのはABRとASBRの2か所だけです。エリアの内部や、バックボーンの途中にいるルータでは集約できません。エリア内はすべてのルータが同じLSDBを持つ前提で動いているため、途中で情報を削ると計算結果が食い違ってしまうからです。

種類実行する場所IOS XRのコマンド対象
エリア間集約ABRarea <ID> 配下のrange <プレフィックス>エリア内経路 → Type 3
外部経路の集約ASBRrouter ospf 直下のsummary-prefix <プレフィックス>再配布した経路 → Type 5 / Type 7

この記事では、7台の3エリア構成でエリア2の5つのループバックをABRで1本に再配布した4つの外部経路をASBRで1本にまとめ、集約LSAのメトリックがどう決まるのか、構成要素が落ちるとどうなるのか、集約の副作用は何かを実機で確認します。

検証構成

スタブエリアの記事と同じ3エリア構成に、集約する素材を足しました。

項目内容
集約するエリア内経路R11の10.2.0.1/3210.2.0.2/32、R12の10.2.0.3/3210.2.0.4/32、R13の10.2.0.5/32(すべてエリア2、passive enable
集約先(ABR)R3・R4で10.2.0.0/24にまとめる
集約する外部経路R1が再配布する192.168.16.0/2417.0/2418.0/2419.0/24(Null0のスタティック)
集約先(ASBR)R1で192.168.16.0/22にまとめる
集約しないもの192.168.1.0/24(外部経路)。集約したものとの違いを比べるために残す
集約範囲の中の実体R1のLoopback4に192.168.16.1/32集約範囲に実在する宛先として使う
観測点R2(エリア外=集約後を受け取る側)とR13(エリア内=集約の影響を受けない側)

R11の設定は次のようになっています。集約対象のループバックもOSPFのエリア2に入れています。

R11 show running-config(router ospf 1の部分、起動時)
router ospf 1
 router-id 11.11.11.11
 area 2
  interface Loopback0
   passive enable
  !
  interface Loopback2
   passive enable
  !
  interface Loopback3
   passive enable
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
  interface GigabitEthernet0/0/0/1
   network point-to-point
  !
 !
!

集約前の状態(STEP 0)

まず集約していない状態です。R2(エリア0)から見ると、エリア2の5つの/32が個別のエリア間経路として並び、R1の外部経路も4つ個別に並んでいます。5つのコストが3・3・5・5・4とばらついている点を覚えておいてください。集約LSAのメトリックを決める材料になります。

STEP 0 R2 show route ospf(集約前)
RP/0/RP0/CPU0:R2#show route ospf
Mon Sep  7 22:00:06.098 UTC

O    1.1.1.1/32 [110/2] via 10.0.12.1, 00:03:33, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/2] via 10.0.23.3, 00:04:20, GigabitEthernet0/0/0/1
O    4.4.4.4/32 [110/2] via 10.0.24.4, 00:04:11, GigabitEthernet0/0/0/2
O IA 10.1.11.0/24 [110/3] via 10.0.23.3, 00:04:05, GigabitEthernet0/0/0/1
O IA 10.1.12.0/24 [110/4] via 10.0.23.3, 00:03:39, GigabitEthernet0/0/0/1
O IA 10.2.0.1/32 [110/3] via 10.0.23.3, 00:04:05, GigabitEthernet0/0/0/1
O IA 10.2.0.2/32 [110/3] via 10.0.23.3, 00:04:05, GigabitEthernet0/0/0/1
O IA 10.2.0.3/32 [110/5] via 10.0.23.3, 00:03:38, GigabitEthernet0/0/0/1
O IA 10.2.0.4/32 [110/5] via 10.0.23.3, 00:03:38, GigabitEthernet0/0/0/1
O IA 10.2.0.5/32 [110/4] via 10.0.23.3, 00:03:39, GigabitEthernet0/0/0/1
O IA 11.11.11.11/32 [110/3] via 10.0.23.3, 00:04:05, GigabitEthernet0/0/0/1
O IA 12.12.12.12/32 [110/5] via 10.0.23.3, 00:03:38, GigabitEthernet0/0/0/1
O IA 13.13.13.13/32 [110/4] via 10.0.23.3, 00:03:39, GigabitEthernet0/0/0/1
O IA 172.16.3.0/24 [110/2] via 10.0.23.3, 00:04:20, GigabitEthernet0/0/0/1
O IA 172.16.4.0/24 [110/11] via 10.0.24.4, 00:04:11, GigabitEthernet0/0/0/2
O E2 192.168.1.0/24 [110/20] via 10.0.12.1, 00:03:33, GigabitEthernet0/0/0/0
O E2 192.168.16.0/24 [110/20] via 10.0.12.1, 00:03:33, GigabitEthernet0/0/0/0
O E2 192.168.17.0/24 [110/20] via 10.0.12.1, 00:03:33, GigabitEthernet0/0/0/0
O E2 192.168.18.0/24 [110/20] via 10.0.12.1, 00:03:33, GigabitEthernet0/0/0/0
O E2 192.168.19.0/24 [110/20] via 10.0.12.1, 00:03:33, GigabitEthernet0/0/0/0

到達性も確認しておきます。10.2.0.1(エリア2のループバック)と192.168.16.1(R1のLoopback4)には届き、192.168.19.1192.168.19.0/24の中だが実体がない)には届きません。

STEP 0 R2 ping(集約前)
RP/0/RP0/CPU0:R2#ping 10.2.0.1 source 2.2.2.2
Mon Sep  7 21:59:23.400 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.0.1 timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/7/9 ms
RP/0/RP0/CPU0:R2#ping 192.168.16.1 source 2.2.2.2
Mon Sep  7 21:59:24.313 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.16.1 timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/7 ms
RP/0/RP0/CPU0:R2#ping 192.168.19.1 source 2.2.2.2
Mon Sep  7 21:59:25.296 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.19.1 timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

ABRで集約する(STEP 1)

エリア2に接続する2台のABR(R3・R4)で、10.2.0.0/24の範囲を設定します。

STEP 1で投入した設定
(R3・R4の2台とも)
router ospf 1
 area 2
  range 10.2.0.0/24

R2から見ると5つの/32が消え、10.2.0.0/24の1本になりました。LSDBを見ると、R3が出した集約LSAのメトリックは4、R4は13です。

STEP 1 R2 show route ospf と show ospf database summary 10.2.0.0(先頭部分)
RP/0/RP0/CPU0:R2#show route ospf
Mon Sep  7 22:03:40.100 UTC

O    1.1.1.1/32 [110/2] via 10.0.12.1, 00:07:07, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/2] via 10.0.23.3, 00:07:54, GigabitEthernet0/0/0/1
O    4.4.4.4/32 [110/2] via 10.0.24.4, 00:07:45, GigabitEthernet0/0/0/2
O IA 10.1.11.0/24 [110/3] via 10.0.23.3, 00:07:39, GigabitEthernet0/0/0/1
O IA 10.1.12.0/24 [110/4] via 10.0.23.3, 00:07:13, GigabitEthernet0/0/0/1
O IA 10.2.0.0/24 [110/5] via 10.0.23.3, 00:00:31, GigabitEthernet0/0/0/1
O IA 11.11.11.11/32 [110/3] via 10.0.23.3, 00:07:39, GigabitEthernet0/0/0/1
O IA 12.12.12.12/32 [110/5] via 10.0.23.3, 00:07:12, GigabitEthernet0/0/0/1
O IA 13.13.13.13/32 [110/4] via 10.0.23.3, 00:07:13, GigabitEthernet0/0/0/1
O IA 172.16.3.0/24 [110/2] via 10.0.23.3, 00:07:54, GigabitEthernet0/0/0/1
O IA 172.16.4.0/24 [110/11] via 10.0.24.4, 00:07:45, GigabitEthernet0/0/0/2
O E2 192.168.1.0/24 [110/20] via 10.0.12.1, 00:07:07, GigabitEthernet0/0/0/0
O E2 192.168.16.0/24 [110/20] via 10.0.12.1, 00:07:07, GigabitEthernet0/0/0/0
O E2 192.168.17.0/24 [110/20] via 10.0.12.1, 00:07:07, GigabitEthernet0/0/0/0
O E2 192.168.18.0/24 [110/20] via 10.0.12.1, 00:07:07, GigabitEthernet0/0/0/0
O E2 192.168.19.0/24 [110/20] via 10.0.12.1, 00:07:07, GigabitEthernet0/0/0/0
RP/0/RP0/CPU0:R2#show ospf database summary 10.2.0.0
Mon Sep  7 22:03:40.301 UTC


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

		Summary Net Link States (Area 0)

  Routing Bit Set on this LSA
  LS age: 33
  Options: (No TOS-capability, DC)
  LS Type: Summary Links (Network)
  Link State ID: 10.2.0.0 (Summary Network Number)
  Advertising Router: 3.3.3.3
  LS Seq Number: 80000001
  Checksum: 0xbc64
  Length: 28
  Network Mask: /24
	TOS: 0 	Metric: 4 

  LS age: 18

このメトリックの決まり方には規格の変遷があります。R3から各構成要素までのコストは10.2.0.1が2、10.2.0.2が2、10.2.0.5が3、10.2.0.310.2.0.4が4で、集約LSAのメトリック4はその最大値です。

規格規定
RFC 2328(現行)Section 12.4.3「cost equal to the largest cost of any of the component networks」=最大
RFC 1583(旧版)Section 12.4.3「cost equal to the smallest cost of any of the component networks」=最小
XRd 26.1.1の実測4=最大。RFC 2328に従っている

集約したABRには、Null0への破棄経路ができます。集約範囲に含まれるが実際には存在しない宛先へのパケットを、ここで捨ててループを防ぐためのものです。アドミニストレーティブディスタンスは254で、この動作はRFCの規定ではなく実装によるものです。

STEP 1 R3 show route | include Null0
RP/0/RP0/CPU0:R3#show route | include Null0
Mon Sep  7 22:03:43.840 UTC
O IA 10.2.0.0/24 [254/0] via 0.0.0.0, 00:00:35, Null0

このときバックボーン側(R2 - R3間)に流れたLS Updateが、集約の動作をそのまま示しています。添付のキャプチャーのNo.4が集約LSA(メトリック4)の出現、No.5が個別の5本をまとめて取り消すLS Updateです。取り消しはLS Age 3600(MaxAge)とMetric: 16777215(LSInfinity)の組み合わせで行われます。

No.4 LS Update(集約LSAの出現)tshark -V
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: LS Update (4)
        Packet Length: 56
        Source OSPF Router: 3.3.3.3
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0x8a29 [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 3 (Summary-LSA (IP network)), len 28
            .000 0000 0000 0001 = LS Age (seconds): 1
            0... .... .... .... = Do Not Age Flag: 0
            Options: 0x22, (DC) Demand Circuits, (E) External Routing
                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
                .... ..1. = (E) External Routing: Capable
                .... ...0 = (MT) Multi-Topology Routing: No
            LS Type: Summary-LSA (IP network) (3)
            Link State ID: 10.2.0.0
            Advertising Router: 3.3.3.3
            Sequence Number: 0x80000001
            Checksum: 0xbc64
            Length: 28
            Netmask: 255.255.255.0
            TOS: 0
            Metric: 4
上のtshark出力のパケット(No.4 集約LSAのLSU)のpcapをダウンロード

取り消し側は5つのLSAが1パケットに入っています。tsharkの一覧で見ると次のとおりです。

キャプチャーのLS Update一覧(tshark の ospf.msg == 4 フィルタ)
    4  13.044742    10.0.23.3 → 224.0.0.5    OSPF 90 LS Update
    5  13.149976    10.0.23.3 → 224.0.0.5    OSPF 202 LS Update
   10  27.555663    10.0.23.2 → 224.0.0.5    OSPF 90 LS Update
   11  27.668405    10.0.23.2 → 224.0.0.5    OSPF 202 LS Update
上の一覧のNo.5(個別5本をまとめて取り消すLSU)のpcapをダウンロード

構成要素が1つ落ちたら(STEP 2)

集約の効果が一番はっきり出るのがここです。R11のLoopback2(10.2.0.1/32)を落とします。

STEP 2で投入した設定
(R11)
interface Loopback2
 shutdown

R2から見た10.2.0.0/24コストもLSAも一切変わりません。エリアの外へは「何も起きていない」ように見えます。ただし10.2.0.1へのpingは通らなくなり、10.2.0.2は通ります。安定と引き換えに、到達性の変化も隠れるということです。

STEP 2 R2 show route / show ospf database summary(先頭部分)
RP/0/RP0/CPU0:R2#show route 10.2.0.0/24
Mon Sep  7 22:07:35.738 UTC

Routing entry for 10.2.0.0/24
  Known via "ospf 1", distance 110, metric 5, type inter area
  Installed Sep  7 22:03:08.925 for 00:04:26
  Routing Descriptor Blocks
    10.0.23.3, from 3.3.3.3, via GigabitEthernet0/0/0/1
      Route metric is 5
  No advertising protos. 
RP/0/RP0/CPU0:R2#show ospf database summary 10.2.0.0
Mon Sep  7 22:07:35.900 UTC


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

		Summary Net Link States (Area 0)

  Routing Bit Set on this LSA
  LS age: 268
  Options: (No TOS-capability, DC)
  LS Type: Summary Links (Network)
  Link State ID: 10.2.0.0 (Summary Network Number)
  Advertising Router: 3.3.3.3
STEP 2 R2 ping(同じ出力の後半)
  LS age: 267
  Options: (No TOS-capability, DC)
  LS Type: Summary Links (Network)
  Link State ID: 10.2.0.0 (Summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000001
  Checksum: 0xe43f
  Length: 28
  Network Mask: /24
	TOS: 0 	Metric: 5 

RP/0/RP0/CPU0:R2#ping 10.2.0.1 source 2.2.2.2
Mon Sep  7 22:07:36.641 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.0.1 timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
RP/0/RP0/CPU0:R2#ping 10.2.0.2 source 2.2.2.2
Mon Sep  7 22:07:47.613 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.0.2 timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/8/10 ms

一方、エリアの中は素直に反応します。同じエリア2にいるR13では、個別経路がすぐに消えます。集約はあくまで「エリアの外へ出すときの話」です。

STEP 2 R13 show route 10.2.0.1/32(エリア内では消える)
RP/0/RP0/CPU0:R13#show route 10.2.0.1/32
Mon Sep  7 22:07:51.571 UTC

% Network not in table

構成要素が全部落ちたら(STEP 3)

残りの4つも落とすと、集約LSA自体が消えます。

STEP 3で投入した設定
(R11のLoopback3、R12のLoopback2・Loopback3、R13のLoopback2)
interface LoopbackN
 shutdown
STEP 3 R2 show route 10.2.0.0/24 と show ospf database summary 10.2.0.0
RP/0/RP0/CPU0:R2#show route 10.2.0.0/24
Mon Sep  7 22:12:03.931 UTC

% Network not in table

RP/0/RP0/CPU0:R2#show ospf database summary 10.2.0.0
Mon Sep  7 22:12:04.217 UTC


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

ABRのNull0の破棄経路も同時に消えます。RFC 2328のSection 12.4.3は「広告していた宛先が到達不能になったらMaxAgeにしてフラッディングし直す」と定めており、構成要素が1つでも生きていれば集約LSAは出続け、全部消えたときだけ取り消されるという動作になります。

STEP 3 R3 show route | include Null0(破棄経路も消える)
RP/0/RP0/CPU0:R3#show route | include Null0
Mon Sep  7 22:12:08.043 UTC

集約せずに隠す(STEP 4)

rangeにはnot-advertiseを付けられます。集約LSAも出さず、個別のLSAも出さない、つまりそのエリアの外から完全に隠す動作です。まず構成要素を復旧してから設定します。

STEP 4で投入した設定
(R11・R12・R13のループバックを no shutdown で復旧してから)

(R3・R4の2台とも)
router ospf 1
 area 2
  range 10.2.0.0/24 not-advertise
STEP 4 R2 show route(集約も個別も見えない)
RP/0/RP0/CPU0:R2#show route 10.2.0.0/24
Mon Sep  7 22:16:44.339 UTC

% Network not in table

RP/0/RP0/CPU0:R2#show route 10.2.0.1/32
Mon Sep  7 22:16:44.515 UTC

% Network not in table

RP/0/RP0/CPU0:R2#ping 10.2.0.1 source 2.2.2.2
Mon Sep  7 22:16:44.696 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.0.1 timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

エリアの中では変わらず到達できます。RFC 2328のSection 12.4.3も「DoNotAdvertiseのときはType 3を抑止し、構成ネットワークは他エリアから隠される」と規定しています。

STEP 4 R13 show route 10.2.0.1/32(エリア内は健在)
RP/0/RP0/CPU0:R13#show route 10.2.0.1/32
Mon Sep  7 22:16:58.253 UTC

Routing entry for 10.2.0.1/32
  Known via "ospf 1", distance 110, metric 2, type intra area
  Installed Sep  7 22:15:33.422 for 00:01:24
  Routing Descriptor Blocks
    10.1.11.11, from 11.11.11.11, via GigabitEthernet0/0/0/0
      Route metric is 2
  No advertising protos. 

ASBRで外部経路を集約する(STEP 5)

not-advertiseを通常のrangeに戻したうえで、今度はASBR側です。R1が再配布している4つの/24192.168.16.0/22にまとめます。

STEP 5で投入した設定
(R3・R4は range を通常に戻す)
router ospf 1
 area 2
  range 10.2.0.0/24

(R1)
router ospf 1
 summary-prefix 192.168.16.0/22

R2の外部経路が4本から1本になりました。集約していない192.168.1.0/24はそのまま個別に残っています。

STEP 5 R2 show route ospf(外部経路が1本に)
RP/0/RP0/CPU0:R2#show route ospf
Mon Sep  7 22:20:53.996 UTC

O    1.1.1.1/32 [110/2] via 10.0.12.1, 00:24:21, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/2] via 10.0.23.3, 00:25:08, GigabitEthernet0/0/0/1
O    4.4.4.4/32 [110/2] via 10.0.24.4, 00:24:59, GigabitEthernet0/0/0/2
O IA 10.1.11.0/24 [110/3] via 10.0.23.3, 00:24:53, GigabitEthernet0/0/0/1
O IA 10.1.12.0/24 [110/4] via 10.0.23.3, 00:24:27, GigabitEthernet0/0/0/1
O IA 10.2.0.0/24 [110/5] via 10.0.23.3, 00:00:42, GigabitEthernet0/0/0/1
O IA 11.11.11.11/32 [110/3] via 10.0.23.3, 00:24:53, GigabitEthernet0/0/0/1
O IA 12.12.12.12/32 [110/5] via 10.0.23.3, 00:24:26, GigabitEthernet0/0/0/1
O IA 13.13.13.13/32 [110/4] via 10.0.23.3, 00:24:27, GigabitEthernet0/0/0/1
O IA 172.16.3.0/24 [110/2] via 10.0.23.3, 00:25:08, GigabitEthernet0/0/0/1
O IA 172.16.4.0/24 [110/11] via 10.0.24.4, 00:24:59, GigabitEthernet0/0/0/2
O E2 192.168.1.0/24 [110/20] via 10.0.12.1, 00:24:21, GigabitEthernet0/0/0/0
O E2 192.168.16.0/22 [110/20] via 10.0.12.1, 00:00:13, GigabitEthernet0/0/0/0
RP/0/RP0/CPU0:R2#show ospf database external 192.168.16.0
Mon Sep  7 22:20:54.198 UTC

ASBRにもNull0の破棄経路ができます。Sで始まるのが再配布元のスタティック、O E2 ... [254/0] ... Null0が集約による破棄経路です。

STEP 5 R1 show route | include Null0
RP/0/RP0/CPU0:R1#show route | include Null0
Mon Sep  7 22:20:58.112 UTC
S    192.168.1.0/24 is directly connected, 00:24:46, Null0
O E2 192.168.16.0/22 [254/0] via 0.0.0.0, 00:00:17, Null0
S    192.168.16.0/24 is directly connected, 00:24:46, Null0
S    192.168.17.0/24 is directly connected, 00:24:46, Null0
S    192.168.18.0/24 is directly connected, 00:24:46, Null0
S    192.168.19.0/24 is directly connected, 00:24:46, Null0

集約の副作用(ブラックホール)

集約すると、集約範囲の中にあるが実際には存在しない宛先へのパケットも、集約したルータまで引き寄せられます。そしてそこでNull0に捨てられます。R13から2つの宛先へpingを打つと違いがはっきり出ます。

  • 192.168.16.1 … R1のLoopback4として実在する → 届く
  • 192.168.19.1192.168.19.0/24の中だが実体がない → 届かない(R1のNull0で落ちる)
STEP 5 R13 ping / traceroute(集約範囲内の実在しない宛先)
RP/0/RP0/CPU0:R13#ping 192.168.16.1 source 13.13.13.13
Mon Sep  7 22:25:40.945 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.16.1 timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 13/14/19 ms
RP/0/RP0/CPU0:R13#ping 192.168.19.1 source 13.13.13.13
Mon Sep  7 22:25:41.993 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.19.1 timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
RP/0/RP0/CPU0:R13#traceroute 192.168.19.1 source 13.13.13.13 maxttl 5
Mon Sep  7 22:25:53.044 UTC

Type escape sequence to abort.
Tracing the route to 192.168.19.1

 1  10.1.11.11 5 msec  62 msec  6 msec 
 2  172.16.3.3 8 msec  7 msec  7 msec 
 3  10.0.23.2 10 msec  10 msec  10 msec 
 4   *  *  * 
 5   *  *  * 

tracerouteは10.0.23.2(R2)まで進んだあと無応答になります。R1まで届いてNull0で捨てられているためです(maxttl 5で打ち切っています)。集約前はそもそも192.168.19.0/24が個別に広告されていたので同じ結果ですが、集約したことで「範囲内の未使用アドレス全部」がこの動作になる点が違います。

復旧(STEP 6)

ABRのrangeとASBRのsummary-prefixを外すと、元の個別経路に戻ります。

STEP 6で投入した設定(最終状態)
(R3・R4)
router ospf 1
 area 2
  no range 10.2.0.0/24

(R1)
router ospf 1
 no summary-prefix 192.168.16.0/22
STEP 6 R2 show route ospf(復旧後)
RP/0/RP0/CPU0:R2#show route ospf
Mon Sep  7 22:27:30.191 UTC

O    1.1.1.1/32 [110/2] via 10.0.12.1, 00:30:57, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/2] via 10.0.23.3, 00:31:44, GigabitEthernet0/0/0/1
O    4.4.4.4/32 [110/2] via 10.0.24.4, 00:31:35, GigabitEthernet0/0/0/2
O IA 10.1.11.0/24 [110/3] via 10.0.23.3, 00:31:29, GigabitEthernet0/0/0/1
O IA 10.1.12.0/24 [110/4] via 10.0.23.3, 00:31:03, GigabitEthernet0/0/0/1
O IA 10.2.0.1/32 [110/3] via 10.0.23.3, 00:00:52, GigabitEthernet0/0/0/1
O IA 10.2.0.2/32 [110/3] via 10.0.23.3, 00:00:52, GigabitEthernet0/0/0/1
O IA 10.2.0.3/32 [110/5] via 10.0.23.3, 00:00:52, GigabitEthernet0/0/0/1
O IA 10.2.0.4/32 [110/5] via 10.0.23.3, 00:00:52, GigabitEthernet0/0/0/1
O IA 10.2.0.5/32 [110/4] via 10.0.23.3, 00:00:52, GigabitEthernet0/0/0/1
O IA 11.11.11.11/32 [110/3] via 10.0.23.3, 00:31:29, GigabitEthernet0/0/0/1
O IA 12.12.12.12/32 [110/5] via 10.0.23.3, 00:31:02, GigabitEthernet0/0/0/1
O IA 13.13.13.13/32 [110/4] via 10.0.23.3, 00:31:03, GigabitEthernet0/0/0/1
O IA 172.16.3.0/24 [110/2] via 10.0.23.3, 00:31:44, GigabitEthernet0/0/0/1
O IA 172.16.4.0/24 [110/11] via 10.0.24.4, 00:31:35, GigabitEthernet0/0/0/2
O E2 192.168.1.0/24 [110/20] via 10.0.12.1, 00:30:57, GigabitEthernet0/0/0/0
O E2 192.168.16.0/24 [110/20] via 10.0.12.1, 00:00:21, GigabitEthernet0/0/0/0
O E2 192.168.17.0/24 [110/20] via 10.0.12.1, 00:00:21, GigabitEthernet0/0/0/0
O E2 192.168.18.0/24 [110/20] via 10.0.12.1, 00:00:21, GigabitEthernet0/0/0/0

ルーティングテーブルはどれだけ小さくなるか

経路集約の効果としてLSDBのLSAが減ることがよく挙げられますが、運用で効いてくるのは各ルータのルーティングテーブル(RIB)と転送テーブル(FIB)のエントリ数が減ることです。LSAの数はOSPFプロセスのメモリとSPF計算の話ですが、経路数は転送ハードウェアの容量(FIBやTCAM)そのものと、経路が変わったときに書き換える量に直結します。

R2(エリア0)でshow routeの合計を数えると次のとおりです。

状態show routeの合計うちOSPF経路エリア2の/32外部の/24
集約なし(STEP 0)272055
ABRで集約(STEP 1)23161(集約)5
not-advertise(STEP 4)221505
ABR+ASBRで集約(STEP 5)20131(集約)2
復旧(STEP 6)272055

5本と4本を1本ずつにまとめただけで、ルーティングテーブルは27エントリから20エントリへ、26%減りました。実際のネットワークではエリアごとに数百から数千のプレフィックスを持つことも珍しくなく、それがそのまま全台のFIBを消費します。集約はここを直接削ります。

削れるのは集約したルータだけではありません。集約されたLSAを受け取る側のルータでも同じだけ減ります。

ルータ位置集約なし(STEP 0)ABR+ASBRで集約(STEP 5)
R2エリア0(ABRの隣)2720
R1エリア1(ASBR自身)2724
R13エリア2の内部2623

R13はエリア2の中にいるので10.2.0.x/32は個別に持ったままですが、外部経路を集約した分は効いて3エントリ減っています。集約は「その先にいるルータすべてのテーブル」を小さくします

副次的な効果として、エリア内でプレフィックスが上下してもエリア外のLSDBが変わらなくなるため(STEP 2)、エリア外でSPFが走らなくなるという利点もあります。

設計上の注意

  • 集約できるアドレス設計が前提。 エリアごとに連続したアドレスブロックを割り当てておかないと1本にまとまりません。OSPFはABRとASBRでしか集約できないので、後から詰めるのは大変です
  • メトリックは構成要素の最大になる(RFC 2328)。一番遠い構成要素のコストが代表値になるため、集約するとエリア外から見た距離が実際より遠くなることがあります
  • 範囲内の未使用アドレスはブラックホールになる。 集約したルータのNull0で落ちます。これはループ防止として意図された動作ですが、トラブルシュート時に「経路はあるのに届かない」と見えるので、集約の範囲は意識しておく必要があります
  • not-advertiseはフィルタとして使える。 特定の範囲だけをエリア外へ出したくないときに使いますが、その範囲への到達性も失われます
  • スタブ/NSSAとは目的が違う。 スタブエリアNSSAは「入れない」仕組み、集約は「まとめる」仕組みです。組み合わせて使えます

IOS XRの設定コマンド

コマンド入れる場所意味
range <プレフィックス>ABRarea <ID>配下そのエリアのエリア内経路をまとめてType 3を1本にする
range <プレフィックス> not-advertiseABRarea <ID>配下まとめずに隠す(Type 3を出さない)
summary-prefix <プレフィックス>ASBRrouter ospf直下再配布した外部経路をまとめてType 5を1本にする
設定例(ABRのR3とASBRのR1)
(ABR)
router ospf 1
 area 2
  range 10.2.0.0/24
 !
!

(ASBR)
router ospf 1
 summary-prefix 192.168.16.0/22
!

rangeそのエリアに接続するABR全台に入れます。1台でも入れ忘れると、そのABR経由では個別のType 3が流れ続け、集約した意味がなくなります。IOS XEではarea <ID> range <アドレス> <マスク>summary-address <アドレス> <マスク>になります。設定例は別記事で解説します。

検証Configおよびshow結果

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

ファイル内容
..._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 summary / show ospf database external / show ospf border-routers / show ospf routes / show route 10.2.0.0/24 / show route 10.2.0.1/32 / show route 192.168.16.0/22 / show route 192.168.16.0/24 / show route 192.168.1.0/24 / show ospf trace events
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

最終状態は集約をすべて外した状態です。

STEP 0:集約なし — エリア2の/32が5本、外部経路が4本そのまま流れている

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

このSTEPではR2からping、R3からNull0の確認も取得しています。

STEP 1:R3・R4にarea 2 range 10.2.0.0/24 — 5本が1本に。集約LSAのメトリックは構成要素の最大(4)

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

このSTEPではR2 の show route ospf と show ospf database summaryR3 の Null0の確認R2 の pingも取得しています。

STEP 2:R11のLoopback2をshutdown — 集約LSAは変化しないが、その宛先には届かなくなる

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

このSTEPではR2 の show route / database / pingR13 の エリア内から見た個別経路も取得しています。

STEP 3:構成要素5つをすべてshutdown — 集約LSAとNull0の破棄経路が消える

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

このSTEPではR2 の show route / databaseR3 の Null0の確認も取得しています。

STEP 4:構成要素を復旧しrange ... not-advertise — 集約も個別も出さず、エリア外から隠す

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

このSTEPではR2 の show routeR13 の エリア内から見た個別経路も取得しています。

STEP 5:rangeを戻し、R1にsummary-prefix 192.168.16.0/22 — 外部経路が4本から1本に

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

このSTEPではR2 の show route ospf と show ospf database externalR1 の Null0の確認R13 の ping / tracerouteも取得しています。

STEP 6:rangesummary-prefixを削除(最終状態) — 個別経路に復帰

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

このSTEPではR2 の show route ospf と pingも取得しています。

キャプチャーはバックボーン側(R2 - R3間)で、STEP 1の集約を挟んで取得しました(フィルタはip proto 89)。

ABRで集約したとき(STEP 1)のキャプチャーをダウンロード

参考

RFCタイトル概要
RFC 2328OSPF Version 2エリアアドレス範囲の定義(Section 3.5)。範囲に対するsummary-LSAの生成、コストは構成要素の最大、DoNotAdvertise、到達不能時のMaxAgeフラッシュ(Section 12.4.3)。
RFC 1583OSPF Version 2(旧版)同じSection 12.4.3でコストは構成要素の最小と規定していた。現行のRFC 2328で最大に変わっている。

関連記事