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

OSPFのバーチャルリンク

目次

バーチャルリンクとは

OSPFのバーチャルリンクは、エリア0(バックボーン)を論理的に延長する仕組みです。物理的にはエリア0に届かない場所へ、別のエリアを通り抜けてエリア0を伸ばします。

RFC 2328 Section 3.1は「バックボーンは常にすべてのエリア境界ルータ(ABR)を含み、連続していなければならない」と定めています。この前提が崩れる状況が2つあり、バーチャルリンクはその両方に効きます。

状況何が起きるか
バックボーンに接しないエリアがあるそのエリアのABRはエリア0に足を持たないため、経路が出入りしない
バックボーンが分断されたエリア0が2つ以上の断片に割れ、断片どうしが経路を交換できない

この記事では両方を実機で再現します。同じコマンドで設定しますが、結果として現れる経路の種別が違います。 そこがバーチャルリンクの性質をよく表しています。

設定と3つの制約

設定はトランジットエリアの配下に書き、引数には相手のルータIDを指定します。

バーチャルリンクの設定
router ospf <プロセス>
 area <トランジットエリア>
  virtual-link <相手のルータID>

制約が3つあります。いずれもRFC 2328に根拠があり、この記事で実機の挙動を確かめます。

  • 両端のABRに設定が要ります。 片側だけでは張られません
  • トランジットエリアはスタブにできません(Section 3.6)。スタブエリアは完全な経路情報を持たないためです
  • トランジットエリアを経由する経路のコストが、そのままバーチャルリンクのコストになります。 直接指定はしません

検証構成

R1 - R2 - R3 - R4の直線で、2つのラボを同じ4台で行います。ラボごとにエリアの割り当てだけを変えます。

項目ラボAラボB
R1 - R2エリア0エリア0
R2 - R3エリア1(トランジット)エリア1(トランジット)
R3 - R4エリア2エリア0
再現する状況バックボーンに接しないエリア分断されたバックボーン

ルータIDはR1が1.1.1.1、R2が2.2.2.2、R3が3.3.3.3、R4が4.4.4.4です。ソフトウェアはXRd 26.1.1です。

9つのSTEPで進めます。

STEP操作確かめること
0ラボAの初期状態R3がABRとして扱われない。R4に経路が1本も入らない
1R2側だけに設定張られない。コストは65535
2R3側にも設定確立して経路が通る。R3がABRになる
3トランジットエリアをスタブにするcommitが拒否される
4トランジット区間のコストを50にバーチャルリンクのコストが追随する
5コストとバーチャルリンクを削除エリア2が再び孤立する
6R3 - R4をエリア0へ移すバックボーンが分断される
7バーチャルリンクを設定分断が修復され、経路がエリア内経路になる
8初期構成へ戻すSTEP 0と同じ状態(最終状態)

ラボA:バックボーンに接しないエリアを救う

STEP 0:ABRに見えてABRではない

R3はエリア1とエリア2の2つに足を持っています。定義だけ見ればABRですが、show ospfにABRの行が出ません。

R2 はABRと表示される(STEP 0)
 Routing Process "ospf 1" with ID 2.2.2.2
 Role: Primary Active
 NSR (Non-stop routing) is Enabled
 Supports only single TOS(TOS0) routes
 Supports opaque LSA
 It is an area border router
 Maximum number of non self-generated LSA allowed 500000
    Current number of non self-generated LSA 3

同じ位置をR3で見ると、その行がありません。

R3 にはABRの行が無い(STEP 0)
 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
 Maximum number of non self-generated LSA allowed 500000
    Current number of non self-generated LSA 6
    Threshold for warning message 75%

エリア0に足が無いルータは、2つのエリアに属していてもABRとして扱われません。 RFC 2328がバックボーンにすべてのABRが含まれると定めているとおりの動きです。

結果はR4に現れます。R3との隣接はFULLなのに、OSPFの経路が1本もありません。

R4 は経路を1本も持たない(STEP 0)
RP/0/RP0/CPU0:R4#show route ospf
Fri Sep 11 23:47:49.499 UTC

% No matching routes found

STEP 1:片側だけでは張られない

R2にだけバーチャルリンクを設定します。

STEP 1で投入した設定(R2のみ)
(R2)
router ospf 1
 area 1
  virtual-link 3.3.3.3

インタフェースは作られますがis downのままです。コストには使えないことを示す 65535 が入ります

R2 片側だけでは down のまま(STEP 1)
Virtual Links for OSPF 1

Virtual Link OSPF_VL1 to router 3.3.3.3 is down
  Run as demand circuit
  DoNotAge LSA allowed.
  Transit area 1, Cost of using 65535
  Transmit Delay is 1 sec, State DOWN,
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5

この状態はsyslogに何も残りません。設定漏れに気づくにはshow ospf virtual-linksを見る必要があります。

STEP 2:両端に設定して確立する

R3にも設定します。

STEP 2で投入した設定(R3のみ)
(R3)
router ospf 1
 area 1
  virtual-link 2.2.2.2

is upに変わり、コストが1になりました。この1は設定値ではなく、R2からR3へエリア1の中を通る経路のコストです。

R2 確立した(STEP 2)
Virtual Links for OSPF 1

Virtual Link OSPF_VL1 to router 3.3.3.3 is up
  Run as demand circuit
  DoNotAge LSA allowed.
  Transit area 1, via interface GigabitEthernet0/0/0/1, Cost of using 1
  Transmit Delay is 1 sec, State POINT_TO_POINT,
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:03:282
    Adjacency State FULL (Hello suppressed)
    Number of DBD retrans during last exchange 0

Run as demand circuitAdjacency State FULL (Hello suppressed)にも注目してください。バーチャルリンクはデマンドサーキットとして動き、隣接が安定するとHelloを抑止します。そこを流れるLSAには(DNA)(DoNotAge)が付き、通常の1800秒のリフレッシュから外れます。

バーチャルリンクはエリア0のインタフェースとして数えられます。 show ospf interface briefにIPアドレスを持たないOSPF_VL1が、エリア0のP2Pとして並びます。

R2 OSPF_VL1 がエリア0のインタフェースとして並ぶ(STEP 2)
RP/0/RP0/CPU0:R2#show ospf interface brief
Fri Sep 11 23:53:52.018 UTC

* Indicates MADJ interface, (P) Indicates fast detect hold down state

Interfaces for OSPF 1

Interface          PID   Area            IP Address/Mask    Cost  State Nbrs F/C
Lo0                1     0               2.2.2.2/32         1     LOOP  0/0
OSPF_VL1           1     0                     -            1     P2P   1/1
Gi0/0/0/0          1     0               10.1.2.2/24        1     BDR   1/1
Gi0/0/0/1          1     1               10.2.3.2/24        1     DR    1/1

隣接も2つになります。同じR3が、バーチャルリンク経由と物理リンク経由の両方で現れます。

R2 同じ相手と2つの隣接を持つ(STEP 2)
Neighbor ID     Pri   State           Dead Time   Address         Interface
3.3.3.3         1     FULL/  -           -        10.2.3.3        OSPF_VL1
    Neighbor is up for 00:01:27
1.1.1.1         1     FULL/DR         00:00:33    10.1.2.1        GigabitEthernet0/0/0/0
    Neighbor is up for 00:10:18
3.3.3.3         1     FULL/BDR        00:00:32    10.2.3.3        GigabitEthernet0/0/0/1
    Neighbor is up for 00:09:11

R3側ではエリア数が2から3に増え、ABRの行が現れます。

R3 がABRになりエリアが3つになる(STEP 2)
 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 area border router
 Maximum number of non self-generated LSA allowed 500000
    Current number of non self-generated LSA 13

経路も通ります。R1はエリア2の4.4.4.4/32O IA(エリア間経路)として学びました。

R1 エリア2の経路が入った(STEP 2)
RP/0/RP0/CPU0:R1#show route ospf
Fri Sep 11 23:53:25.084 UTC

O    2.2.2.2/32 [110/2] via 10.1.2.2, 00:09:49, GigabitEthernet0/0/0/0
O IA 3.3.3.3/32 [110/3] via 10.1.2.2, 00:08:43, GigabitEthernet0/0/0/0
O IA 4.4.4.4/32 [110/4] via 10.1.2.2, 00:00:54, GigabitEthernet0/0/0/0
O IA 10.2.3.0/24 [110/2] via 10.1.2.2, 00:09:49, GigabitEthernet0/0/0/0
O IA 10.3.4.0/24 [110/3] via 10.1.2.2, 00:00:54, GigabitEthernet0/0/0/0

パケットで見ると、バーチャルリンクのHelloはユニキャストで、エリアIDは0.0.0.0です。同じ物理リンクをエリア1のHelloが224.0.0.5宛で流れているので、2種類が混在します。

No.13 バーチャルリンクのHello(エリアID 0.0.0.0、マスク 0.0.0.0)
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: Hello Packet (1)
        Packet Length: 48
        Source OSPF Router: 3.3.3.3
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0xc191 [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    OSPF Hello Packet
        Network Mask: 0.0.0.0
        Hello Interval [sec]: 10
        Options: 0x32, (DC) Demand Circuits, (L) LLS Data block, (E) External Routing
            0... .... = DN: Not set
            .0.. .... = (O) Opaque: Not set
            ..1. .... = (DC) Demand Circuits: Supported
            ...1 .... = (L) LLS Data block: Present
            .... 0... = (N) NSSA: Not supported
            .... .0.. = (MC) Multicast: Not capable
            .... ..1. = (E) External Routing: Capable
            .... ...0 = (MT) Multi-Topology Routing: No
        Router Priority: 1
        Router Dead Interval [sec]: 40
        Designated Router: 0.0.0.0
        Backup Designated Router: 0.0.0.0
        Active Neighbor: 2.2.2.2
    OSPF LLS Data Block
        Checksum: 0xfff6
        LLS Data Length: 12 bytes
        Extended options TLV
            TLV Type: 1
            TLV Length: 4
            Options: 0x00000001, (LR) LSDB Resynchronization
                .... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
                .... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
上のtshark出力のパケット(No.13 Hello)のpcapをダウンロード

エリア0側のリンクでは、R3が出したLSAがまとめて流れ込みます。Summary-LSAが4本で、エリア2の4.4.4.410.3.4.0が含まれています。

エリア0側に流れたLS Update(R1 - R2)
    6 2026-09-12 08:52:25.502271     10.1.2.2 → 224.0.0.5    OSPF 198 LS Update
    7 2026-09-12 08:52:25.552975     10.1.2.2 → 224.0.0.5    OSPF 122 LS Update
    8 2026-09-12 08:52:25.588217     10.1.2.2 → 224.0.0.5    OSPF 98 LS Update
   10 2026-09-12 08:52:30.395777     10.1.2.2 → 10.1.2.1     OSPF 98 LS Update

No.6 の中身を見ると、R3が出したLSAが5つ入っています。先頭はR3自身のRouter-LSAで、Number of Links: 0 です。バーチャルリンクしか持たないエリア0のLSAなので、この時点ではリンクが数えられていません。 残り4つがSummary-LSAで、エリア2の4.4.4.410.3.4.0が含まれます。

No.6 の先頭部分(LSAが5つ、DoNotAgeが立つ)
        Auth Data (none): 0000000000000000
    LS Update Packet
        Number of LSAs: 5
        LSA-type 1 (Router-LSA), len 24
            .000 0000 0000 1011 = LS Age (seconds): 11
            1... .... .... .... = Do Not Age Flag: 1
            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: Router-LSA (1)
            Link State ID: 3.3.3.3
            Advertising Router: 3.3.3.3
            Sequence Number: 0x80000001
            Checksum: 0xbb6e
            Length: 24
            Flags: 0x01, (B) Area border router
                0... .... = (H) Host: No
                ..0. .... = (S) Shortcut-capable ABR: No
                ...0 .... = (N) NSSA translation: No
                .... 0... = (W) Wild-card multicast receiver: No
                .... .0.. = (V) Virtual link endpoint: No
                .... ..0. = (E) AS boundary router: No
                .... ...1 = (B) Area border router: Yes
            Number of Links: 0
        LSA-type 3 (Summary-LSA (IP network)), len 28
上のtshark出力のパケット(No.6 LS Update)のpcapをダウンロード

STEP 3:トランジットエリアはスタブにできない

エリア1をスタブにしようとすると、commitの時点で拒否されます。

STEP 3で投入を試みた設定
(R2)
router ospf 1
 area 1
  stub

commitが通りません。理由がそのまま返ります。

R2 commitが拒否された(STEP 3)
RP/0/RP0/CPU0:R2(config-ospf-ar)#commit

Sat Sep 12 00:28:37.001 UTC

% Failed to commit one or more configuration items during a pseudo-atomic operation. All changes made have been reverted. Please issue 'show configuration failed [inheritance]' from this session to view the errors
RP/0/RP0/CPU0:R2(config-ospf-ar)#show configuration failed

Sat Sep 12 00:28:44.920 UTC
!! SEMANTIC ERRORS: This configuration was rejected by 
!! the system due to semantic errors. The individual 
!! errors with each failed configuration command can be 
!! found below.

router ospf 1
 area 1
  stub
!!% 'OSPF' detected the 'warning' condition 'Error: The specified area cannot be a stub or nssa as it contains a virtual link'
 !
!
end

理由がそのまま返ります。設定は巻き戻され、running-configには残りません。RFC 2328 Section 3.6の制約が、投入時点で弾かれる形で実装されています。

STEP 4:コストはトランジットエリアが決める

両端のトランジット側インタフェースにコスト50を入れます。

STEP 4で投入した設定(両端に入れる)
(R2)
router ospf 1
 area 1
  interface GigabitEthernet0/0/0/1
   cost 50

(R3)
router ospf 1
 area 1
  interface GigabitEthernet0/0/0/0
   cost 50

バーチャルリンクのコストが1から50に変わりました。バーチャルリンクにコストを直接設定することはできません。 区間のエリア内コストがそのまま入ります。

R2 コストが50に追随した(STEP 4)
Virtual Links for OSPF 1

Virtual Link OSPF_VL1 to router 3.3.3.3 is up
  Run as demand circuit
  DoNotAge LSA allowed.
  Transit area 1, via interface GigabitEthernet0/0/0/1, Cost of using 50
  Transmit Delay is 1 sec, State POINT_TO_POINT,

STEP 5:外すと元に戻る

コストとバーチャルリンクを削除すると、R4は再び経路を失います。ラボAはここで終わりです。

ラボB:分断されたバックボーンを修復する

STEP 6:バックボーンを分断する

R3 - R4をエリア2からエリア0へ移します。エリア0が左右2つの断片に割れ、間にエリア1が挟まる形になります。

STEP 6で投入した設定(R3 - R4をエリア0へ移す)
(R3)
router ospf 1
 no area 2
 area 0
  interface GigabitEthernet0/0/0/1

(R4)
router ospf 1
 no area 2
 area 0
  interface Loopback0
   passive enable
  !
  interface GigabitEthernet0/0/0/0

R1とR4は互いのループバックを学べません。 どちらも隣のABRまでは見えているのに、反対側の断片が欠けています。

R1 は 4.4.4.4 を持たない(STEP 6)
RP/0/RP0/CPU0:R1#show route ospf
Sat Sep 12 00:37:50.651 UTC

O    2.2.2.2/32 [110/2] via 10.1.2.2, 00:54:15, GigabitEthernet0/0/0/0
O IA 3.3.3.3/32 [110/3] via 10.1.2.2, 00:03:23, GigabitEthernet0/0/0/0
O IA 10.2.3.0/24 [110/2] via 10.1.2.2, 00:03:23, GigabitEthernet0/0/0/0
R4 は 1.1.1.1 を持たない(STEP 6)
RP/0/RP0/CPU0:R4#show route ospf
Sat Sep 12 00:39:06.002 UTC

O IA 3.3.3.3/32 [110/2] via 10.3.4.3, 00:01:43, GigabitEthernet0/0/0/0
O IA 10.2.3.0/24 [110/2] via 10.3.4.3, 00:01:43, GigabitEthernet0/0/0/0

ラボAとは症状が違います。 ラボAではR4の経路が0本でしたが、ここでは2本あります。隣のABRとエリア1の情報は届くのに、その先のバックボーン断片だけが欠ける形です。切り分けの手がかりになります。

STEP 7:バーチャルリンクで再結合する

設定はラボAとまったく同じです。

STEP 7で投入した設定(ラボAのSTEP 1・2と同じ)
(R2)
router ospf 1
 area 1
  virtual-link 3.3.3.3

(R3)
router ospf 1
 area 1
  virtual-link 2.2.2.2

経路が戻ります。注目すべきは種別です。 4.4.4.4/32O IA ではなく、エリア内経路の O になりました

R1 4.4.4.4 がエリア内経路として入った(STEP 7)
RP/0/RP0/CPU0:R1#show route ospf
Sat Sep 12 00:41:18.055 UTC

O    2.2.2.2/32 [110/2] via 10.1.2.2, 00:57:42, GigabitEthernet0/0/0/0
O IA 3.3.3.3/32 [110/3] via 10.1.2.2, 00:06:50, GigabitEthernet0/0/0/0
O    4.4.4.4/32 [110/4] via 10.1.2.2, 00:01:12, GigabitEthernet0/0/0/0
O IA 10.2.3.0/24 [110/2] via 10.1.2.2, 00:06:50, GigabitEthernet0/0/0/0
O    10.3.4.0/24 [110/3] via 10.1.2.2, 00:01:12, GigabitEthernet0/0/0/0
R4 も 1.1.1.1 をエリア内経路として学ぶ(STEP 7)
RP/0/RP0/CPU0:R4#show route ospf
Sat Sep 12 00:42:32.032 UTC

O    1.1.1.1/32 [110/4] via 10.3.4.3, 00:02:21, GigabitEthernet0/0/0/0
O    2.2.2.2/32 [110/3] via 10.3.4.3, 00:02:21, GigabitEthernet0/0/0/0
O IA 3.3.3.3/32 [110/2] via 10.3.4.3, 00:05:09, GigabitEthernet0/0/0/0
O    10.1.2.0/24 [110/3] via 10.3.4.3, 00:02:21, GigabitEthernet0/0/0/0
O IA 10.2.3.0/24 [110/2] via 10.3.4.3, 00:05:09, GigabitEthernet0/0/0/0

ラボAでは同じ宛先がO IAでした。メトリックはどちらも4で同じなのに種別だけが違います。

宛先ラボAラボB
R1から見た4.4.4.4/32O IA メトリック4O メトリック4

バーチャルリンクがエリア0の一部として働き、2つの断片が1つのエリア0に戻ったためです。 エリア1経由の3.3.3.3/3210.2.3.0/24は、エリア間経路なのでO IAのままです。

理由はパケットに出ます。エリア0側のリンクに流れるLSAが、ラボAとは違います。

R4自身のRouter-LSAがエリア0へ届く(STEP 7)
        Auth Data (none): 0000000000000000
    LS Update Packet
        Number of LSAs: 2
        LSA-type 1 (Router-LSA), len 48
            .000 0000 1010 0110 = LS Age (seconds): 166
            1... .... .... .... = Do Not Age Flag: 1
            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: Router-LSA (1)
            Link State ID: 4.4.4.4
            Advertising Router: 4.4.4.4
            Sequence Number: 0x80000002
            Checksum: 0x6660
            Length: 48
            Flags: 0x00
                0... .... = (H) Host: No
                ..0. .... = (S) Shortcut-capable ABR: No
                ...0 .... = (N) NSSA translation: No
                .... 0... = (W) Wild-card multicast receiver: No
                .... .0.. = (V) Virtual link endpoint: No
                .... ..0. = (E) AS boundary router: No
                .... ...0 = (B) Area border router: No
            Number of Links: 2
上のtshark出力のパケット(No.6 LS Update)のpcapをダウンロード

ラボAで届いたのはR3が作ったSummary-LSA(Type 3)だけでした。ラボBでは、R4自身が出したRouter-LSA(Type 1)とNetwork-LSA(Type 2)がR1まで届きます。フラグは 0x00 で、ABRですらない普通のルータのLSAです。2つの断片のリンクステートデータベースが統合されたことを意味します。エリア内経路になるのはこのためです。

STEP 8:初期構成へ戻す

エリアの割り当てとバーチャルリンクを元に戻すと、STEP 0と同じ状態になります。

設計上の注意

  • バーチャルリンクは応急処置です。 RFC 2328 Section 15も恒久的な設計ではなく、バックボーンの連続性を保てない場合の手段として位置づけています。物理的にエリア0へ接続できるなら、そちらを直すほうが確実です
  • トランジットエリアをスタブやNSSAにできません。 将来そのエリアをスタブにしたくなったとき、バーチャルリンクが邪魔になります
  • コストを直接指定できません。 経路を調整したいときは、トランジットエリア内のコストを変えることになり、そのエリアの通常の経路にも影響します
  • 片側だけの設定は気づきにくいです。 syslogに何も出ないので、show ospf virtual-linksで明示的に確認します

実機の挙動とRFCの差

RFC 2328 Section 12.4.1は、Router-LSAのVビットについて「そのエリアをトランジットエリアとするバーチャルリンクの終端であるとき、かつそのときに限り立てる」と定めています。Section 16.1で、このビットからエリアのTransitCapabilityを判定します。

XRd 26.1.1では、このビットが立ちませんでした。 バーチャルリンクがis upかつAdjacency State FULLの状態で、両端ルータのトランジットエリア側Router-LSAは次のとおりです。

トランジットエリア(エリア1)のRouter-LSA。Vビットが立っていない
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: LS Update (4)
        Packet Length: 76
        Source OSPF Router: 3.3.3.3
        Area ID: 0.0.0.1
        Checksum: 0x346a [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 1 (Router-LSA), len 48
            .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: Router-LSA (1)
            Link State ID: 3.3.3.3
            Advertising Router: 3.3.3.3
            Sequence Number: 0x80000004
            Checksum: 0xeee7
            Length: 48
            Flags: 0x01, (B) Area border router
                0... .... = (H) Host: No
                ..0. .... = (S) Shortcut-capable ABR: No
                ...0 .... = (N) NSSA translation: No
                .... 0... = (W) Wild-card multicast receiver: No
                .... .0.. = (V) Virtual link endpoint: No
                .... ..0. = (E) AS boundary router: No
                .... ...1 = (B) Area border router: Yes
            Number of Links: 2
            Type: Stub     ID: 3.3.3.3         Data: 255.255.255.255 Metric: 1
                Link ID: 3.3.3.3 - IP network/subnet number
                Link Data: 255.255.255.255
                Link Type: 3 - Connection to a stub network
                Number of Metrics: 0 - TOS
                0 Metric: 1
            Type: Transit  ID: 10.2.3.2        Data: 10.2.3.3        Metric: 1
                Link ID: 10.2.3.2 - IP address of Designated Router
                Link Data: 10.2.3.3
                Link Type: 2 - Connection to a transit network
                Number of Metrics: 0 - TOS
                0 Metric: 1

パケットの生バイトでもフラグは0x01(Bビットのみ)で、Vビットの0x04は含まれていません。ラボBのようにトランジットエリアがバックボーンの通過経路になる構成でも、経路計算は正常に動きました。 このビットが立たないことによる実害は観測していません。理由は追っていません。

検証Configおよびshow結果

各STEPで4台すべてから取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 8のもの)。

ファイル内容
..._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 virtual-links / show ospf border-routers / show ospf database router self-originate / show ospf trace events
..._log.txtそのSTEPの範囲だけに絞ったshow logging
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._cfg.txtそのSTEPで投入した設定。 configureからcommitまでの記録に、装置が返すshow configuration commit changes last 1の差分を付けたもの。設定を入れたルータの分だけあります

STEP 0:ラボAの初期状態 — R3がABRとして扱われず、R4に経路が1本も入らない

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun

STEP 1:R2側だけに設定 — 張られない。コストは65535

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogruncfg
R3showlogrun
R4showlogrun

STEP 2:R3側にも設定 — 確立して経路が通る。R3がABRになる

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogrun
R3showlogruncfg
R4showlogrun

STEP 3:トランジットエリアをスタブにする — commitが拒否される

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogruncfg
R3showlogrun
R4showlogrun

STEP 4:トランジット区間のコストを50に — バーチャルリンクのコストが追随する

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogruncfg
R3showlogruncfg
R4showlogrun

STEP 5:コストとバーチャルリンクを削除 — エリア2が再び孤立する

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogruncfg
R3showlogruncfg
R4showlogrun

STEP 6:R3 - R4をエリア0へ移す — バックボーンが分断される

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogrun
R3showlogruncfg
R4showlogruncfg

STEP 7:バーチャルリンクを設定 — 分断が修復され、経路がエリア内経路になる

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogruncfg
R3showlogruncfg
R4showlogrun

STEP 8:すべて初期構成へ戻す(最終状態) — STEP 0と同じ状態

ルータshow出力syslogrunning-config投入した設定
R1showlogrun
R2showlogruncfg
R3showlogruncfg
R4showlogruncfg

キャプチャーはラボAの確立時とラボBの修復時に、トランジット側(R2 - R3)とエリア0側(R1 - R2)の両方で取りました。

ラボA 確立時のトランジット側(STEP 2)

ラボA 確立時のエリア0側(STEP 2)

ラボB 修復時のトランジット側(STEP 7)

ラボB 修復時のエリア0側(STEP 7)

参考

RFCタイトル概要
RFC 2328OSPF Version 2バックボーンが連続していること(Section 3.1)、スタブエリアにバーチャルリンクを通せないこと(Section 3.6)、バーチャルリンクの定義とコストの決まり方(Section 15)、Router-LSAのVビット(Section 12.4.1)。

関連記事