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

OSPFのAS外部経路のForwarding Address

目次

OSPFのAS外部経路のForwarding Address

AS External-LSA(Type 5)にはForwarding Addressというフィールドがあります。ここが0.0.0.0なら、その外部宛てのパケットは広告したASBRへ送られます。非ゼロなら、ASBRを経由せずそのアドレスへ直接送られます

この記事では、Forwarding Addressが何のためにあるのか、経路計算でどう扱われるのかをRFC 2328で確認し、IOS XRが非ゼロの値を入れる条件を実機で確かめます。Type 5 LSAの全体像とE1 / E2の違いはOSPFの外部経路で解説しています。

何のためにあるのか

RFC 2328のSection 2.3は、OSPFを動かしていない外部ルータと1台のASBRだけがBGPを話している構成を例に挙げています。

この状況に対処するため、OSPFはAS境界ルータがAS-external-LSAに「forwarding address」を指定できるようにしている。上の例では、ルータRT7は、パケットをRTXへ直接送るべき宛先について、RTXのIPアドレスをforwarding addressとして指定する。 (RFC 2328 Section 2.3)

同じセグメントに他のOSPFルータが並んでいるとき、この指定が無ければ、それらのルータはASBRを経由する余計な1ホップを踏みます。Forwarding Addressを入れておけば、外部ルータへ直接転送できます。

RFC 2328は非ゼロの値について「別のAutonomous Systemに属するルータを指すべき」(脚注24)としか述べていません。どういうときに非ゼロを入れるかは実装が決めます

経路計算での扱い

Section 16.4のステップ(3)は、Forwarding Addressを次のように扱うと定めています。

forwarding addressが0.0.0.0に設定されている場合、パケットはASBR自身へ送られるべきである。(中略)forwarding addressが非ゼロの場合、ルーティングテーブルでforwarding addressを引く。一致するルーティングテーブルのエントリは、エリア内経路かエリア間経路でなければならない。そのような経路が無ければ、このLSAには何もせず、リストの次へ進む。 (RFC 2328 Section 16.4 (3))

非ゼロのForwarding Addressには2つの条件が付きます。エリア内経路かエリア間経路で引けること、そして続くステップ(4)のコストがASBRまでではなくForwarding Addressまでの距離になることです。外部経路で引けるだけのアドレスを指していると、そのLSAは計算に使われません。

同じ経路を2台が出したとき

Section 12.4.4.1は、2台のASBRが宛先・コスト・非ゼロのForwarding AddressのそろったLSAを出した場合の規則を決めています。

互いに到達可能な2台のルータが、機能的に等価なAS-external-LSA(すなわち同じ宛先、コスト、非ゼロのforwarding address)を出した場合、OSPFルータIDの大きいほうが出したLSAを使う。ルータIDの小さいほうは自分のLSAをフラッシュしてよい。 (RFC 2328 Section 12.4.4.1)

どちらが広告してもルーティングの結果は同じなので、LSDBを小さくするための規則です。

IOS XRが非ゼロを入れる条件

IOS XR(XRd 26.1.1)は、再配布した経路のネクストホップのアドレスをForwarding Addressに入れます。実機で確かめると、条件は次の3つでした(後半の検証でこの順に確認します)。

条件満たさないとき
ネクストホップのあるインタフェースがOSPFに入っている0.0.0.0
そのインタフェースがpassiveでない0.0.0.0
そのインタフェースのネットワークタイプがbroadcastpoint-to-multipointでは0.0.0.0

3つめは、経路計算の条件と合わせて読むと理由が分かります。point-to-multipointのインタフェースは、そのセグメントのサブネットではなく自分のアドレスの/32だけをRouter-LSAに載せるため、他のルータはForwarding Addressを引けません。引けないアドレスを入れてもLSAが使われないだけなので、0.0.0.0にするほうが正しく動きます。

実機での検証

検証環境

検証構成: LAN上にR1(ASBR)・R2・R3とOSPFを動かさない外部ルータX、R2の先にR4

R1・R2・R3と、OSPFを動かしていない外部ルータXが1つのLAN(10.0.123.0/24)に並びます。R1だけが192.0.2.0/24のスタティック(ネクストホップはXの10.0.123.100)を持ち、これを再配布します。R4はR2の先の観測点です。

R1 - R4のコスト50の回り道は、R1のLAN側をpassiveにしたりOSPFから外したりしてもR1が孤立しないようにするためのものです。R4からXへの距離は、R2経由なら11、R1経由なら51になります。

検証のSTEP

STEP操作確かめること
0初期状態(再配布なし)192.0.2.0/24がどのルータにも無い
1R1でredistribute staticForwarding AddressがXのアドレスになり、各ルータがXへ直接転送する
2R1のLAN側をpassive enable0.0.0.0になり、転送がR1経由に戻る
3LAN側をpoint-to-multipointにする0.0.0.0のまま。Forwarding Addressを引けないネットワークタイプ
4R1のLAN側をOSPFから外す0.0.0.0。OSPFに入っていないインタフェース
5R1のLAN側を戻し、R2にも同じ経路を再配布ルータIDの小さいR1が自分のLSAを取り下げる
6すべて既定に戻す(最終状態)

Forwarding Addressが入る(STEP 1)

R1が再配布した直後の、R4から見たType 5 LSAです。

STEP 1 R4 show ospf database external 192.0.2.0
RP/0/RP0/CPU0:R4#show ospf database external 192.0.2.0
Tue Sep 22 16:38:55.137 UTC


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

		Type-5 AS External Link States

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

広告元はR1(1.1.1.1)で、Forwarding Addressに入っているのはXのアドレス10.0.123.100)です。R4はこのアドレスをルーティングテーブルで引きます。

STEP 1 R4 show route 10.0.123.0/24
RP/0/RP0/CPU0:R4#show route 10.0.123.0/24
Tue Sep 22 16:38:53.786 UTC

Routing entry for 10.0.123.0/24
  Known via "ospf 1", distance 110, metric 11, type intra area
  Installed Sep 22 16:18:47.770 for 00:20:06
  Routing Descriptor Blocks
    10.0.24.2, from 3.3.3.3, via GigabitEthernet0/0/0/0
      Route metric is 11
  No advertising protos. 

エリア内経路(type intra area)として引けているので、Section 16.4 (3)の条件を満たします。この経路のコスト11が、外部経路の計算に使われる距離です。

R4の192.0.2.0/24と、そこへのtracerouteです。

STEP 1 R4 show route 192.0.2.0/24
RP/0/RP0/CPU0:R4#show route 192.0.2.0/24
Tue Sep 22 16:38:53.149 UTC

Routing entry for 192.0.2.0/24
  Known via "ospf 1", distance 110, metric 20, type extern 2
  Installed Sep 22 16:33:43.895 for 00:05:09
  Routing Descriptor Blocks
    10.0.24.2, from 1.1.1.1, via GigabitEthernet0/0/0/0
      Route metric is 20
  No advertising protos. 
STEP 1 R4 traceroute 192.0.2.1
RP/0/RP0/CPU0:R4#traceroute 192.0.2.1 source 4.4.4.4 timeout 1 probe 3 maxttl 4
Tue Sep 22 16:35:49.692 UTC

Type escape sequence to abort.
Tracing the route to 192.0.2.1

 1  10.0.24.2 6 msec  5 msec  5 msec 
 2  10.0.123.100 29 msec  *  15 msec 
STEP 1 R2 traceroute 192.0.2.1
RP/0/RP0/CPU0:R2#traceroute 192.0.2.1 source 2.2.2.2 timeout 1 probe 3 maxttl 4
Tue Sep 22 16:35:36.267 UTC

Type escape sequence to abort.
Tracing the route to 192.0.2.1

 1  10.0.123.100 20 msec  *  8 msec 
STEP 1 R3 traceroute 192.0.2.1
RP/0/RP0/CPU0:R3#traceroute 192.0.2.1 source 3.3.3.3 timeout 1 probe 3 maxttl 4
Tue Sep 22 16:35:42.749 UTC

Type escape sequence to abort.
Tracing the route to 192.0.2.1

 1  10.0.123.100 8 msec  *  8 msec 

R4は10.0.24.2(R2)を通り、次のホップがもうXです。同じLANにいるR2とR3は1ホップでXに届いています。どのルータもASBRのR1を経由していません

LANを流れたLink State Updateの中身です。添付のキャプチャー(STEP 1のR1 - LAN間)のNo.4にあたります。

STEP 1 No.4 LSU(R1 → 224.0.0.6)tshark -V の LS Update の部分
    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: 192.0.2.0
            Advertising Router: 1.1.1.1
            Sequence Number: 0x80000001
            Checksum: 0x1bd4
            Length: 36
            Netmask: 255.255.255.0
            1... .... = External Type: Type 2 (metric is larger than any other link state path)
            .000 0000 = TOS: 0
            Metric: 20
            Forwarding Address: 10.0.123.100
            External Route Tag: 0
上のtshark出力のパケット(No.4 LSU)のpcapをダウンロード

LSA本体は36バイトで、Forwarding Addressは4バイトのフィールドです。showの表示と同じ値が入っています。

passiveにすると0.0.0.0になる(STEP 2)

R1のLAN側をpassive enableにしました。

STEP 2 R1 commitされた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Tue Sep 22 16:40:07.129 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
 area 0
  interface GigabitEthernet0/0/0/0
   passive enable
  !
 !
!
end
STEP 2 R4 show ospf database external 192.0.2.0
RP/0/RP0/CPU0:R4#show ospf database external 192.0.2.0
Tue Sep 22 16:45:23.746 UTC


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

		Type-5 AS External Link States

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

Forwarding Addressが0.0.0.0になりました。パケットはASBRのR1へ送られます。

STEP 2 R4 traceroute 192.0.2.1
RP/0/RP0/CPU0:R4#traceroute 192.0.2.1 source 4.4.4.4 timeout 1 probe 3 maxttl 4
Tue Sep 22 16:42:13.853 UTC

Type escape sequence to abort.
Tracing the route to 192.0.2.1

 1  10.0.14.1 7 msec  5 msec  50 msec 
 2  10.0.123.100 11 msec  *  10 msec 

R4はまずR1(10.0.14.1、コスト50の回り道)へ行き、そこからXへ渡しています。passiveにするとLANの隣接も無くなるので、この構成ではR1へ回り道を通ることになります。ASBRを経由する1ホップが増えた形です。

point-to-multipointでも0.0.0.0(STEP 3)

passiveを外し、R1・R2・R3のLAN側をpoint-to-multipointに変えました。

STEP 3 R1 commitされた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Tue Sep 22 16:46:34.480 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
 area 0
  interface GigabitEthernet0/0/0/0
   network point-to-multipoint
   no passive enable
  !
 !
!
end
STEP 3 R4 show ospf database external 192.0.2.0
RP/0/RP0/CPU0:R4#show ospf database external 192.0.2.0
Tue Sep 22 16:52:59.985 UTC


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

		Type-5 AS External Link States

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

隣接は張れていますが、Forwarding Addressは0.0.0.0のままです。R4からLANのアドレスを引いてみます。

STEP 3 R4 LANのアドレスを引く
RP/0/RP0/CPU0:R4#show route 10.0.123.0/24
Tue Sep 22 16:52:58.646 UTC

% Network not in table
RP/0/RP0/CPU0:R4#show route 10.0.123.100/32
Tue Sep 22 16:52:58.845 UTC

% Network not in table

どちらも引けません。point-to-multipointのインタフェースはサブネットをRouter-LSAに載せないためです。仮に10.0.123.100がForwarding Addressに入っていても、Section 16.4 (3)の条件を満たさないのでこのLSAは使われません。

OSPFに入っていないインタフェース(STEP 4)

ネットワークタイプを戻し、R1のLAN側をOSPFから外しました。

STEP 4 R1 commitされた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Tue Sep 22 16:54:24.665 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
 area 0
  no interface GigabitEthernet0/0/0/0
 !
!
end
STEP 4 R4 show ospf database external 192.0.2.0
RP/0/RP0/CPU0:R4#show ospf database external 192.0.2.0
Tue Sep 22 17:00:38.150 UTC


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

		Type-5 AS External Link States

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

0.0.0.0です。R1はLANのアドレスを持ったままですが、そのインタフェースがOSPFに入っていないので、Forwarding Addressには使われません。

同じLSAを2台が出したとき(STEP 5)

R1のLAN側をOSPFへ戻したうえで、R2にも同じスタティックを入れて再配布しました。

STEP 5 R2 commitされた設定
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Tue Sep 22 17:01:58.392 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router static
 address-family ipv4 unicast
  192.0.2.0/24 10.0.123.100
 !
!
router ospf 1
 redistribute static
!
end

R1 - R4間のキャプチャーで、2つのLSAの動きを並べます。左から、時刻・送信元・広告元・シーケンス番号・LS Age・Forwarding Addressです。

STEP 5 R1 - R4間のType 5 LSA(tsharkで抽出)
2026-09-23T02:01:50.801048000+0900	10.0.14.1	1.1.1.1	0x80000003	1	10.0.123.100
2026-09-23T02:01:51.793437000+0900	10.0.14.4	1.1.1.1,1.1.1.1	0x8000000a,0x80000003	1,1	
2026-09-23T02:01:57.598710000+0900	10.0.14.4	2.2.2.2	0x80000001	2	10.0.123.100
2026-09-23T02:01:57.921569000+0900	10.0.14.1	1.1.1.1	0x80000004	3600	10.0.123.100
2026-09-23T02:01:59.602586000+0900	10.0.14.1	2.2.2.2,2.2.2.2	0x80000001,0x8000000b	2,2	
2026-09-23T02:01:59.925625000+0900	10.0.14.4	1.1.1.1,1.1.1.1,3.3.3.3	0x80000004,0x8000000b,0x80000002	3600,1,2	

3行目でR2(2.2.2.2)が同じ宛先・コスト・Forwarding Addressの自分のLSAを出し、その0.32秒後の4行目で、R1が自分のLSA(1.1.1.1、シーケンス番号0x80000004)をLS Age 3600で流しています。ルータIDの小さいR1が取り下げた形で、Section 12.4.4.1のとおりです。

上の4行目のパケット(No.10 LSU)のpcapをダウンロード

R1に自分が出したType 5が残っていないことを確認します。

STEP 5 R1 show ospf database external self-originate
RP/0/RP0/CPU0:R1#show ospf database external self-originate
Tue Sep 22 17:04:52.900 UTC


            OSPF Router with ID (1.1.1.1) (Process ID 1)
STEP 5 R4 show ospf database external 192.0.2.0
RP/0/RP0/CPU0:R4#show ospf database external 192.0.2.0
Tue Sep 22 17:07:50.280 UTC


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

		Type-5 AS External Link States

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

R4が持っているのはR2のLSAだけです。Forwarding Addressは同じなので、転送先はR1が出していたときと変わりません。

設計上の注意

  • Forwarding Addressを効かせたいなら、ネクストホップのあるインタフェースをOSPFに入れ、passiveにしない。外部ルータと隣接を張りたくない場合、passiveにするとForwarding Addressも失われる
  • 外部ルータのアドレスは、エリア内経路かエリア間経路で引ける必要がある。スタティックやBGPで引けるだけでは、そのLSAは経路計算に使われない

検証Configおよびshow結果

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

ファイル内容
..._show.txtshow version / show interface description / show route / show route ospfshow ospf系一式(interface / neighbor / database / database router / database external / database external self-originate / border-routers)、show route 192.0.2.0/24 / show cef 192.0.2.0/24 / show route 10.0.123.0/24 / show route 10.0.123.100/32show configuration commit list。X(OSPFなし)はshow ipv4 interface brief / show arp / show route static
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._trace.txtshow ospf trace all | include 192.0.2show ospf trace errors(R1〜R4)
..._ping.txtR2・R3・R4から192.0.2.1へのping(50発)とtraceroute
..._commit.cfgそのSTEPでcommitされた設定(show configuration commit changes last 1

設定を変えていないSTEPとルータにはcommit.cfgがありません。最終状態は初期状態と同じで、どのルータも192.0.2.0/24を再配布していません。

STEP 0:初期状態(再配布なし)

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntrace
R2showlogruntraceping
R3showlogruntraceping
R4showlogruntraceping
Xshowlogrun

STEP 1:R1で192.0.2.0/24を再配布

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntracecommit
R2showlogruntraceping
R3showlogruntraceping
R4showlogruntraceping
Xshowlogrun

STEP 2:R1のLAN側をpassiveにする

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntracecommit
R2showlogruntraceping
R3showlogruntraceping
R4showlogruntraceping
Xshowlogrun

STEP 3:LAN側をpoint-to-multipointにする

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntracecommit
R2showlogruntracepingcommit
R3showlogruntracepingcommit
R4showlogruntraceping
Xshowlogrun

STEP 4:R1のLAN側をOSPFから外す

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntracecommit
R2showlogruntracepingcommit
R3showlogruntracepingcommit
R4showlogruntraceping
Xshowlogrun

STEP 5:R1のLAN側を戻し、R2にも同じ経路を再配布

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntracecommit
R2showlogruntracepingcommit
R3showlogruntraceping
R4showlogruntraceping
Xshowlogrun

STEP 6:すべて既定に戻す(最終状態)

ルータshow出力syslogrunning-configtracepingcommit
R1showlogruntracecommit
R2showlogruntracepingcommit
R3showlogruntraceping
R4showlogruntraceping
Xshowlogrun

パケットキャプチャーはSTEPごとに、LANのR1側とR1 - R4間で取得しています。

STEPR1-LAN間R1-R4間
0pcappcap
1pcappcap
2pcappcap
3pcappcap
4pcappcap
5pcappcap
6pcappcap

参考

出典参照した箇所
RFC 2328 OSPF Version 2Section 2.3(forwarding addressを設けた理由)、Section 12.4.4.1(機能的に等価なLSA)、Section 16.4 (3)(4)(外部経路の計算)、Appendix A.4.5(Type 5のフォーマット)、脚注24
実機Cisco IOS XR(XRd 26.1.1)。非ゼロを入れる条件はSTEP 1〜4で確認

関連記事