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

BGP ORIGIN属性

目次

ORIGINとは

ORIGIN(Type code 1)は、その経路がどうやってBGPに入ったかを示すパス属性です。BGPパス属性とベストパス選択で解説したとおりwell-known mandatoryに分類され、UPDATEには必ず含まれます。値は1バイトで、経路をBGPに持ち込んだルータが決めます。

一度付いた値は、経路が他のASへ伝わっても自動的には書き換わりません。受け取ったルータは「この経路はもともとどういう素性で入ってきたのか」を知ることができます。

3つの値

名前意味
0IGPBGPを動かしているルータ自身が、AS内部の経路として明示的にBGPへ入れた。
1EGPBGPの前身であるEGP(RFC 904)から学習した。EGPは使われていないため、現在の運用で見ることはない。
2Incomplete上記以外の方法でBGPに入った。再配布(redistribute)で入れた経路がこれにあたる。

show bgpの出力では、凡例のOrigin codesのとおり各行の末尾1文字で表されます。IGPiEGPeIncomplete?です。

show bgp の凡例(IOS XR)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.3.0/24     0.0.0.0                  0         32768 i
Path列の先頭にあるi*>iの3文字目)はステータスコードの「internal(iBGPで学習した)」で、行末のiとは別物です。行末の1文字だけがORIGINを表します。

どの操作でどの値になるか

BGPへの入れ方ORIGIN
networkで明示的に指定するIGPi
aggregate-addressで集約経路を生成するIGPi
redistributeで他プロトコル・スタティック・接続経路から再配布するIncomplete?

networkは「この経路をBGPで広告する」と管理者が1つずつ宣言する方法で、意図が明確なためIGPになります。redistributeは他プロトコルが持っている経路をまとめてBGPへ流し込む方法で、BGPから見ると素性が分からないためIncompleteになります。

ベストパス選択での位置づけ

同じプレフィックスに複数の経路がある場合、ベストパス選択5段階目ORIGINが比較されます。小さいほうが優先されるため、次の順に優先されます。

IGP(0) < EGP(1) < Incomplete(2)

実際の運用では、ORIGINにたどり着く前にLOCAL_PREFAS_PATHの長さで決着することがほとんどです。ORIGINが効くのは、それより前の段階がすべて同点になったときに限られます。同じプレフィックスをAS内の2箇所から、一方はnetworkで、もう一方はredistributeでBGPに入れた場合などが該当します。

eBGPへ広告するときにORIGINをIGPに揃える

自AS発の経路をBGPへ入れる基本はnetwork(またはaggregate-address)で、この場合は最初からORIGINIGPになります。ORIGINを意識せずに済む一番の方法は、自AS発の経路をこの方法で入れることです。

一方、運用の都合でredistributeを使っていると、同じ自AS発の経路でもi?が混在します。これは自AS内部の都合にすぎませんが、受け取った隣のASではORIGINがベストパス選択の比較対象になるため、自AS内の設定変更(networkからredistributeへの切り替えなど)が他ASの経路選択に影響することがあります。これを避けたい場合の選択肢として、eBGPへ出すときにルートポリシーでIGPへ揃える方法があります。

ORIGINの書き換えは「経路がどうやってBGPに入ったか」という情報を消す操作でもあります。必須の設定ではなく、?の混在が問題になる場合の対処と考えてください。とくに他のASから受け取った経路(トランジット)に適用すると、他ASが付けたORIGINまで潰してしまいます。

もっとも単純な書き方は、そのピアへ出すすべての経路をIGPにするものです。

IOS XR すべての経路のORIGINをIGPに揃える
route-policy EBGP-OUT
  set origin igp
  pass
end-policy
!
router bgp <AS番号>
 neighbor <eBGPピアのアドレス>
  address-family ipv4 unicast
   route-policy EBGP-OUT out
  !
 !
!
IOS XE すべての経路のORIGINをIGPに揃える
route-map EBGP-OUT permit 10
 set origin igp
!
router bgp <AS番号>
 address-family ipv4
  neighbor <eBGPピアのアドレス> activate
  neighbor <eBGPピアのアドレス> route-map EBGP-OUT out

IOS XRのpass、IOS XEのpermit 10matchなし)はどちらも「すべての経路を通す」意味です。ここを書き忘れると経路がまったく広告されなくなるので注意してください。

ただしこの形はトランジット経路にも効いてしまいます。自AS発の経路だけに限定するには、AS_PATHが空であること(^$)を条件にします。 eBGPへ広告する際のAS_PATHへの自AS番号の追加はルートポリシーの評価より後に行われるため、出方向のポリシーから見ると自AS発の経路はAS_PATHが空です。プレフィックスで指定する方法と違い、広告するアドレスが増減しても設定を直す必要がありません。

IOS XR 自AS発の経路だけIGPに揃える
as-path-set LOCAL-ORIGIN
  ios-regex '^$'
end-set
!
route-policy EBGP-OUT
  if as-path in LOCAL-ORIGIN then
    set origin igp
  endif
  pass
end-policy
IOS XE 自AS発の経路だけIGPに揃える
ip as-path access-list 1 permit ^$
!
route-map EBGP-OUT permit 10
 match as-path 1
 set origin igp
!
route-map EBGP-OUT permit 20

IOS XEのpermit 20は、条件に一致しなかった経路をそのまま通すための空エントリです。これが無いと、自AS発以外の経路がすべて破棄されます。

実機での検証

XRd(IOS XR 26.1.1)6台のラボで、次の2点を確認します。

  1. 他の比較項目がすべて同点のとき、ORIGINがベストパスを決めること
  2. eBGP出方向のポリシーでORIGINを書き換えると何が起きるか(全経路に適用した場合と、^$で自AS発に限定した場合の違い)
ORIGIN属性の検証トポロジ。AS 65001(R1・R2・R3、R2がルートリフレクタ)の両端に、AS 65004(R6)とAS 65002(R4)・AS 65003(R5)が接続している

同じプレフィックス192.168.99.0/24を、AS 65001の2箇所から別々の方法でBGPへ入れています。

R1(192.168.99.0/24 を network で入れる → i)
router bgp 65001
 address-family ipv4 unicast
  network 192.168.1.0/24
  network 192.168.99.0/24
 !
R3(同じプレフィックスを redistribute static で入れる → ?)
router static
 address-family ipv4 unicast
  192.168.99.0/24 Null0
 !
!
router bgp 65001
 address-family ipv4 unicast
  network 192.168.3.0/24
  redistribute static
 !

R2はルートリフレクタなので、この2つの経路を同時に受け取ります。

さらにAS 65004(R6)からは、iの経路と?の経路を1つずつ受け取っています。これらはAS 65001を通過するトランジット経路として、STEP 3以降で使います。

R6(192.168.6.0/24 は i、192.168.66.0/24 は ?)
router static
 address-family ipv4 unicast
  192.168.66.0/24 Null0
 !
!
router bgp 65004
 address-family ipv4 unicast
  network 192.168.6.0/24
  redistribute static
 !

STEP 0:ORIGINがベストパスを決める

R2のBGPテーブルです。192.168.99.0/24だけ2行あり、末尾のProcessed 8 prefixes, 9 pathsのとおり8プレフィックスに対して9パスを保持しています。

R2 show bgp(STEP 0)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*>i192.168.1.0/24     10.0.0.1                 0    100      0 i
*> 192.168.2.0/24     0.0.0.0                  0         32768 i
*>i192.168.3.0/24     10.0.0.3                 0    100      0 i
*>i192.168.4.0/24     10.3.4.4                 0    100      0 65002 i
*>i192.168.5.0/24     10.3.4.4                      100      0 65002 65003 i
*>i192.168.6.0/24     10.1.6.6                 0    100      0 65004 i
*>i192.168.66.0/24    10.1.6.6                 0    100      0 65004 ?
*>i192.168.99.0/24    10.0.0.1                 0    100      0 i
* i                   10.0.0.3                 0    100      0 ?

Processed 8 prefixes, 9 paths

2行目はNetwork欄が空白ですが、これは1行上と同じプレフィックスであることを示します。先頭が*>の行(ネクストホップ10.0.0.1=R1、行末i)がベストパスで、>が付かない* iの行(ネクストホップ10.0.0.3=R3、行末?)は有効だが選ばれなかったパスです。

プレフィックスを指定すると、経路ごとの詳細が見えます。192.168.99.0/24には2つのパスがあり、Origin IGPのPath #1(R1から)がbestOrigin incompleteのPath #2(R3から)は選ばれていません。

R2 show bgp 192.168.99.0/24(STEP 0)
RP/0/RP0/CPU0:R2#show bgp 192.168.99.0/24

Sat Sep  5 12:11:21.522 UTC
BGP routing table entry for 192.168.99.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 15           15
Last Modified: Sep  5 12:09:04.774 for 00:02:16
Paths: (2 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Local, (Received from a RR-client)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 15
  Path #2: Received by speaker 0
  Not advertised to any peer
  Local, (Received from a RR-client)
    10.0.0.3 (metric 2) from 10.0.0.3 (10.0.0.3)
      Origin incomplete, metric 0, localpref 100, valid, internal
      Received Path ID 0, Local Path ID 0, version 0

ベストパス選択の1〜4段階目を確認すると、すべて同点です。

順序比較項目Path #1(R1)Path #2(R3)結果
1WEIGHT00同点
2LOCAL_PREF100100同点
3自身が生成した経路どちらもiBGPで学習どちらもiBGPで学習同点
4AS_PATHの長さ0(AS内で生成)0(AS内で生成)同点
5ORIGINIGPIncompletePath #1が優先

5段階目のORIGINで決着しています。

STEP 1:iの経路を消すと?が選ばれる

ORIGINが決め手になっていることを確かめるため、R1からnetworkを外してiの経路を消します。

R1 に投入した設定(STEP 1)
router bgp 65001
 address-family ipv4 unicast
  no network 192.168.99.0/24
 !
!

R2のベストパスは、R3から受け取ったOrigin incompleteの経路に切り替わりました。

R2 show bgp 192.168.99.0/24(STEP 1)
RP/0/RP0/CPU0:R2#show bgp 192.168.99.0/24

Sat Sep  5 12:15:34.272 UTC
BGP routing table entry for 192.168.99.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 16           16
Last Modified: Sep  5 12:14:04.774 for 00:01:29
Paths: (1 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Local, (Received from a RR-client)
    10.0.0.3 (metric 2) from 10.0.0.3 (10.0.0.3)
      Origin incomplete, metric 0, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 16

この変化は隣のAS 65004(R6)からも見えます。行末がiから?に変わりました。

R6 show bgp(STEP 0 → STEP 1 の差分)
(STEP 0)*> 192.168.99.0/24    10.1.6.1                 0             0 65001 i
(STEP 1)*> 192.168.99.0/24    10.1.6.1                               0 65001 ?

AS 65001内の「どちらの方法でBGPに入れたか」という違いが、そのまま隣のASに伝わっていることが分かります。このあとのSTEP以降は、R1のnetwork 192.168.99.0/24を元に戻した状態(STEP 2)から始めます。

STEP 3:出方向ポリシーで全経路のORIGINをIGPにする

R3からR4(AS 65002)へのeBGPに、すべての経路のORIGINIGPにするポリシーを適用します。

R3 に投入した設定(STEP 3)
route-policy EBGP-OUT-ALL
  set origin igp
  pass
end-policy
!
router bgp 65001
 neighbor 10.3.4.4
  address-family ipv4 unicast
   route-policy EBGP-OUT-ALL out
  !
 !
!

R3がR4へ広告している経路のAS Path列(末尾1文字がORIGIN)を、適用前後で比較します。

R3 show bgp neighbors 10.3.4.4 advertised-routes(STEP 2 → STEP 3)
(STEP 2:ポリシー適用前)
Network            Next Hop        From            AS Path
192.168.1.0/24     10.3.4.3        10.0.0.2        65001i
192.168.2.0/24     10.3.4.3        10.0.0.2        65001i
192.168.3.0/24     10.3.4.3        Local           65001i
192.168.6.0/24     10.3.4.3        10.0.0.2        65001 65004i
192.168.66.0/24    10.3.4.3        10.0.0.2        65001 65004?
192.168.99.0/24    10.3.4.3        Local           65001?

Processed 6 prefixes, 6 paths

(STEP 3:EBGP-OUT-ALL 適用後)
Network            Next Hop        From            AS Path
192.168.1.0/24     10.3.4.3        10.0.0.2        65001i
192.168.2.0/24     10.3.4.3        10.0.0.2        65001i
192.168.3.0/24     10.3.4.3        Local           65001i
192.168.6.0/24     10.3.4.3        10.0.0.2        65001 65004i
192.168.66.0/24    10.3.4.3        10.0.0.2        65001 65004i
192.168.99.0/24    10.3.4.3        Local           65001i

Processed 6 prefixes, 6 paths

自AS発の192.168.99.0/24?からiになったのは狙いどおりですが、AS 65004から受け取ったトランジット経路192.168.66.0/24まで?からiに書き換わっています。AS 65004が付けたORIGINの情報が、AS 65001を通過したことで失われました。

書き換えは2つ先のAS 65003(R5)からも見えます。

R5 show bgp(STEP 3)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0/24     10.4.5.4                               0 65002 65001 i
*> 192.168.2.0/24     10.4.5.4                               0 65002 65001 i
*> 192.168.3.0/24     10.4.5.4                               0 65002 65001 i
*> 192.168.4.0/24     10.4.5.4                 0             0 65002 i
*> 192.168.5.0/24     0.0.0.0                  0         32768 i
*> 192.168.6.0/24     10.4.5.4                               0 65002 65001 65004 i
*> 192.168.66.0/24    10.4.5.4                               0 65002 65001 65004 i
*> 192.168.99.0/24    10.4.5.4                               0 65002 65001 i

Processed 8 prefixes, 8 paths

STEP 4:自AS発の経路だけIGPに揃える

AS_PATHが空であること(^$)を条件に加えて、自AS発の経路だけを対象にします。

R3 に投入した設定(STEP 4)
as-path-set LOCAL-ORIGIN
  ios-regex '^$'
end-set
!
route-policy EBGP-OUT-LOCAL
  if as-path in LOCAL-ORIGIN then
    set origin igp
  endif
  pass
end-policy
!
router bgp 65001
 neighbor 10.3.4.4
  address-family ipv4 unicast
   route-policy EBGP-OUT-LOCAL out
  !
 !
!

R3がR4へ広告している経路です。

R3 show bgp neighbors 10.3.4.4 advertised-routes(STEP 4)
RP/0/RP0/CPU0:R3#show bgp neighbors 10.3.4.4 advertised-routes

Sat Sep  5 12:30:48.096 UTC
Network            Next Hop        From            AS Path
192.168.1.0/24     10.3.4.3        10.0.0.2        65001i
192.168.2.0/24     10.3.4.3        10.0.0.2        65001i
192.168.3.0/24     10.3.4.3        Local           65001i
192.168.6.0/24     10.3.4.3        10.0.0.2        65001 65004i
192.168.66.0/24    10.3.4.3        10.0.0.2        65001 65004?
192.168.99.0/24    10.3.4.3        Local           65001i

Processed 6 prefixes, 6 paths

自AS発の192.168.99.0/24iに揃い、トランジット経路の192.168.66.0/24?のまま残りました。R5から見ても同じです。

R5 show bgp(STEP 4)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0/24     10.4.5.4                               0 65002 65001 i
*> 192.168.2.0/24     10.4.5.4                               0 65002 65001 i
*> 192.168.3.0/24     10.4.5.4                               0 65002 65001 i
*> 192.168.4.0/24     10.4.5.4                 0             0 65002 i
*> 192.168.5.0/24     0.0.0.0                  0         32768 i
*> 192.168.6.0/24     10.4.5.4                               0 65002 65001 65004 i
*> 192.168.66.0/24    10.4.5.4                               0 65002 65001 65004 ?
*> 192.168.99.0/24    10.4.5.4                               0 65002 65001 i

Processed 8 prefixes, 8 paths

advertised-routesAS Path列には65001が付いた状態で表示されますが、この65001はポリシーの評価より後に付加されます。ポリシーから見たAS_PATHは空だったため^$に一致し、set origin igpが適用されました。一方192.168.66.0/24はポリシー評価の時点でAS_PATH65004だったため一致せず、ORIGINが保たれています。

192.168.1.0/24(R1のnetwork)や192.168.2.0/24(R2のnetwork)もAS_PATHが空なので^$に一致しますが、もともとORIGINIGPなので見た目は変わりません。

検証Configおよびshow結果

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

ファイル内容
..._show.txtshow version / show interface description / show route / show route bgp / show bgp / show bgp summary / show bgp <プレフィックス>(8プレフィックス分) / show bgp neighbors <ピア> advertised-routes / show bgp neighbors <ピア> routes / show bgp neighbor / show bgp update-group / show rpl route-policy / show ospf neighbor
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

最終状態(STEP 4)でas-path-set LOCAL-ORIGINroute-policy EBGP-OUT-LOCALが入っているのはR3だけです(STEP 3で使ったEBGP-OUT-ALLはSTEP 4で削除しています)。

STEP 0:初期状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 1:R1のnetwork 192.168.99.0/24を削除した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 2:R1のnetwork 192.168.99.0/24を戻した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 3:R3にEBGP-OUT-ALLを適用した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 4:R3にEBGP-OUT-LOCALを適用した状態(最終状態)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

参考

資料タイトル概要
RFC 4271A Border Gateway Protocol 4 (BGP-4)4.3節でORIGINの3つの値を、9.1.2.2節でベストパス選択における比較順序を定義。
RFC 904Exterior Gateway Protocol Formal SpecificationORIGINの値EGPが指すプロトコルの仕様。現在は使われていない。
IANABorder Gateway Protocol (BGP) Parametersパス属性のType codeなど、BGPで使われる番号の割り当て一覧。

関連記事