読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。
AS から外へ出る出口が複数あるとき、どの出口を使うかを AS 内で揃えるのが Local Preference(LOCAL_PREF)です。値は iBGP ピアに伝わり、AS 内のルータは値の大きい出口を選びます。
この記事では、Local Preference の特徴を整理したあと、Cisco ルータで bgp default local-preference と route-map による設定を試し、AS 内のルータが選ぶ出口がどう変わるかを確認します。
- Local Preference の特徴(iBGP ピアに伝わる、大きい方を優先、既定値は 100)
bgp default local-preferenceで出口を切り替える方法- route-map で、受け取る経路やプレフィックスごとに Local Preference を設定する方法
Local Preference とは
Local Preference は、AS からどの出口を通って外へ出るかを決めるための BGP のパス属性です。同じ AS 内の iBGP ピアには伝わりますが、eBGP ピア(他の AS)には送られません。同じプレフィックスに複数の経路があるとき、値が大きい経路を優先します。
| 項目 | 内容 |
|---|---|
| 属性の種類 | Well-known Discretionary(すべての BGP ルータが認識するが、UPDATE に含めるかは任意) |
| 既定値 | 100 |
| 優先する経路 | 大きい方 |
| 伝わる範囲 | 同じ AS 内の iBGP ピア(eBGP ピアには送らない) |
| ベストパス選択での順番 | 2番目(Cisco ルータでは Weight の次。AS_PATH の長さより先に比べる) |
| 制御できる通信 | 自分の AS から外へ出ていく通信(どの出口を使うか) |
- Weight は Cisco 独自の値で、設定したルータの中だけで有効です。Local Preference は AS 内の iBGP ピアに伝わるので、AS 全体で同じ出口を選ばせることができます。
- AS_PATH プリペンドは、他の AS から自分の AS へ入ってくる通信の入り口を選ばせる方法です。Local Preference は、自分の AS から出ていく通信の出口を決めます。
検証環境の構成と設定
検証の概要
AS5 の R5 が、ループバック 5.5.5.5/32 を AS236 の R2 と R3 へ広告します。R2、R3、R6 はすべて AS236 に所属し、R6 は R2 と R3 の両方から 5.5.5.5/32 を iBGP で受け取ります。Local Preference を変えて、R6 がどちらの出口(R2 か R3)を選ぶかを確認します。
| ルータ | AS | 役割 |
|---|---|---|
| R5 | AS5 | ループバック 5.5.5.5/32(後で 55.55.55.55/32 を追加)を AS236 へ広告する |
| R2、R3 | AS236 | AS236 の出口ルータ。R5 と eBGP、R6 と iBGP でピアを張る |
| R6 | AS236 | R2 と R3 から受け取った経路を比べ、どちらの出口を使うかを決める |
AS236 の中は EIGRP で経路を交換し、R6 から R2・R3 と、R2・R3 の外側のネットワーク(192.168.25.0/24、192.168.35.0/24)に届くようにしています。R2 と R3 は eBGP で受け取った経路を Next Hop(R5 のアドレス)を変えずに R6 へ送るので、R6 からその Next Hop に届かないと経路を使えません。
外側のネットワークを IGP に入れない場合は、R2 と R3 で neighbor 192.168.26.6 next-hop-self のように設定し、Next Hop を自分のアドレスに書き換えて R6 へ送ります。詳しくは Next-Hop-Self の記事 を参照してください。
BGP ピアを設定する
R5 は、ループバック 5.5.5.5/32 を広告し、R2 と R3 との eBGP ピアを設定します。
R5
R5(config)# router bgp 5
R5(config-router)# neighbor 192.168.25.2 remote-as 236
R5(config-router)# neighbor 192.168.35.3 remote-as 236
R5(config-router)# network 5.5.5.5 mask 255.255.255.255
R2 は、R5(AS5)との eBGP ピアと、R6(AS236)との iBGP ピアを設定します。
R2
R2(config)# router bgp 236 R2(config-router)# neighbor 192.168.25.5 remote-as 5 R2(config-router)# neighbor 192.168.26.6 remote-as 236
R3 も同様に、R5(AS5)との eBGP ピアと、R6(AS236)との iBGP ピアを設定します。
R3
R3(config)# router bgp 236 R3(config-router)# neighbor 192.168.35.5 remote-as 5 R3(config-router)# neighbor 192.168.36.6 remote-as 236
R6 は、R2 と R3(どちらも AS236)との iBGP ピアを設定します。
R6
R6(config)# router bgp 236 R6(config-router)# neighbor 192.168.26.2 remote-as 236 R6(config-router)# neighbor 192.168.36.3 remote-as 236
Local Preferenceの動作確認
既定値(100)のまま R6 の経路を確認する
何も変更していない状態で、R6 の BGP テーブルを確認します。この時点では、どの経路の Local Preference も既定値の 100 です。
R6
R6# show ip bgp
BGP table version is 2, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* i 5.5.5.5/32 192.168.35.5 0 100 0 5 i
*>i 192.168.25.5 0 100 0 5 i
| 表示 | 意味 |
|---|---|
| Network 5.5.5.5/32 | R5 が広告したループバック |
| Next Hop | 192.168.35.5 は R3 経由、192.168.25.5 は R2 経由の経路。どちらも R5 のアドレスで、R2・R3 は Next Hop を変えずに R6 へ送っている |
| LocPrf 100 | どちらの経路も Local Preference は既定値の 100 |
| i | iBGP で受け取った経路 |
| *>i | ベストパス。R2 経由(192.168.25.5)の経路が選ばれている |
R6
R6# show ip bgp 5.5.5.5 BGP routing table entry for 5.5.5.5/32, version 2 Paths: (2 available, best #2, table default) Not advertised to any peer 5 192.168.35.5 (metric 307200) from 192.168.36.3 (3.3.3.3) Origin IGP, metric 0, localpref 100, valid, internal rx pathid: 0, tx pathid: 0 5 192.168.25.5 (metric 307200) from 192.168.26.2 (2.2.2.2) Origin IGP, metric 0, localpref 100, valid, internal, best rx pathid: 0, tx pathid: 0x0
| 表示 | 意味 |
|---|---|
| (metric 307200) | Next Hop までの IGP(EIGRP)のメトリック。R2 経由も R3 経由も同じ |
| from 192.168.26.2 (2.2.2.2) | R2 から受け取った経路。括弧内は R2 のルータID |
| localpref 100 | Local Preference。どちらも 100 |
| internal, best | iBGP で受け取った経路で、ベストパスに選ばれている |
Local Preference、AS_PATH、Origin、MED、Next Hop までの IGP メトリックがすべて同じなので、比較は最後のほうまで進みます。どちらも iBGP の経路なので、最後に経路をくれたピアのルータIDを比べ、小さい R2(2.2.2.2)の経路が選ばれています。
bgp default local-preference で R3 を優先する
R3 で、Local Preference の既定値を 1000 に変えます。
R3
R3(config)# router bgp 236
R3(config-router)# bgp default local-preference 1000
bgp default local-preference 1000 を設定すると、R3 が eBGP で受け取った経路(と自分で生成した経路)に付ける Local Preference の既定値が 1000 になります。その値が iBGP ピアの R6 へ伝わります。route-map などで個別に値を付けた経路を除き、R3 のすべての経路が対象です。
設定後、BGP セッションをソフトクリアして経路を送り直します。
R3
R3# clear ip bgp * soft
clear ip bgp * soft は、セッションを切断せずに経路の送受信だけをやり直します。clear ip bgp * と違い、通信を止めずに設定を反映できます。
R6 の BGP テーブルを確認します。
R6
R6# show ip bgp
BGP table version is 3, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 5.5.5.5/32 192.168.35.5 0 1000 0 5 i
* i 192.168.25.5 0 100 0 5 i
R6
R6# show ip bgp 5.5.5.5 BGP routing table entry for 5.5.5.5/32, version 3 Paths: (2 available, best #1, table default) Not advertised to any peer 5 192.168.35.5 (metric 307200) from 192.168.36.3 (3.3.3.3) Origin IGP, metric 0, localpref 1000, valid, internal, best rx pathid: 0, tx pathid: 0x0 5 192.168.25.5 (metric 307200) from 192.168.26.2 (2.2.2.2) Origin IGP, metric 0, localpref 100, valid, internal
R3 経由(192.168.35.5)の経路の Local Preference が 1000 になり、R6 はこの経路をベストパスに選びました。Local Preference は AS_PATH やルータIDより先に比べるので、R3 経由の経路が優先されます。
この構成では、R2 と R3 は iBGP ピアではありません。iBGP で受け取った経路は他の iBGP ピアへ送らないので、R6 は R3 の経路を R2 へ渡しません。そのため R2 は自分の eBGP 経路を使い続け、Local Preference の影響を受けるのは R6 だけです。AS 全体で同じ出口を選ばせるには、iBGP フルメッシュ か ルートリフレクタ で、すべてのルータに経路が届くようにします。
route-map で Local Preference を設定する
次に、route-map を使って、R3 が R5 から受け取る経路の Local Preference を 900 にします。
R3
R3(config)# route-map SETLocPrf permit 10 R3(config-route-map)# set local-preference 900 R3(config-route-map)# exit R3(config)# R3(config)# router bgp 236 R3(config-router)# neighbor 192.168.35.5 route-map SETLocPrf in R3(config-router)# exit R3(config)# exit
| 設定 | 意味 |
|---|---|
| route-map SETLocPrf permit 10 | match がないので、すべての経路が対象になる |
| set local-preference 900 | Local Preference を 900 にする |
| neighbor 192.168.35.5 route-map SETLocPrf in | R5 から受け取る(in 方向の)経路に route-map を適用する |
R3
R3# clear ip bgp * soft
R6
R6# show ip bgp
BGP table version is 4, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 5.5.5.5/32 192.168.35.5 0 900 0 5 i
* i 192.168.25.5 0 100 0 5 i
R3 経由の経路の Local Preference が 900 になりました。STEP 3 の bgp default local-preference 1000 は残っていますが、route-map の set local-preference で値を付けた経路には既定値は使われず、900 になります。900 でも R2 経由の 100 より大きいので、R6 は引き続き R3 経由の経路を選びます。
特定のプレフィックスだけ Local Preference を変える
ACL と route-map を組み合わせて、特定のプレフィックスだけ Local Preference を変えます。R5 にループバック 55.55.55.55/32 を追加し、この経路だけ Local Preference を 555 にします。
R5
R5(config)# int loopback 55
R5(config-if)# ip add 55.55.55.55 255.255.255.255
R5(config)# router bgp 5
R5(config-router)# network 55.55.55.55 mask 255.255.255.255
R3 で、55.55.55.55/32 に一致する ACL を作ります。
R3
R3(config)# access-list 1 permit 55.55.55.55 0.0.0.0
STEP 4 で作った route-map SETLocPrf を変更します。
R3
R3(config)# route-map SETLocPrf permit 10 R3(config-route-map)# match ip address 1 R3(config-route-map)# set local-preference 555 R3(config)# route-map SETLocPrf permit 1000
| 設定 | 意味 |
|---|---|
| route-map SETLocPrf permit 10 | STEP 4 で作ったシーケンス 10 を編集する |
| match ip address 1 | ACL 1(55.55.55.55/32)に一致した経路だけを対象にする |
| set local-preference 555 | STEP 4 の set local-preference 900 を 555 に置き換える |
| route-map SETLocPrf permit 1000 | match も set もないシーケンス。ACL に一致しなかった経路を何も変えずに許可する(これがないと、最後の暗黙の deny で捨てられる) |
route-map を R5 のネイバーに適用し(STEP 4 と同じ設定)、ソフトクリアします。
R3
R3(config)# router bgp 236
R3(config-router)# neighbor 192.168.35.5 route-map SETLocPrf in
R3
R3# clear ip bgp * soft
R6 の BGP テーブルを確認します。
R6
R6# show ip bgp
BGP table version is 12, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* i 5.5.5.5/32 192.168.25.5 0 100 0 5 i
*>i 192.168.35.5 0 1000 0 5 i
* i 55.55.55.55/32 192.168.25.5 0 100 0 5 i
*>i 192.168.35.5 0 555 0 5 i
| プレフィックス | R3 経由の LocPrf | 理由 | R6 のベストパス |
|---|---|---|---|
| 5.5.5.5/32 | 1000 | route-map のシーケンス 1000 で何も変えずに許可され、bgp default local-preference 1000 の値になった | R3 経由 |
| 55.55.55.55/32 | 555 | シーケンス 10 の ACL に一致し、set local-preference 555 が適用された | R3 経由 |
プレフィックスごとに違う値を付けられることが確認できました。どちらも R2 経由の 100 より大きいので、ベストパスはどちらも R3 経由です。55.55.55.55/32 だけ R2 経由にしたい場合は、100 より小さい値を付けます。
まとめ
| 設定(R3) | 対象 | R6 で見える R3 経由の LocPrf | R6 のベストパス |
|---|---|---|---|
| なし(既定値) | — | 100 | R2 経由(ルータIDが小さい) |
bgp default local-preference 1000 | R3 が eBGP で受け取るすべての経路 | 1000 | R3 経由 |
| route-map(set のみ)を in で適用 | R5 から受け取るすべての経路 | 900 | R3 経由 |
| route-map(ACL で一致した経路だけ set) | 55.55.55.55/32 だけ | 55.55.55.55/32 は 555、5.5.5.5/32 は 1000 | どちらも R3 経由 |
Local Preference は、AS 内の iBGP ピアに伝わり、値の大きい出口が選ばれます。出口ルータで値を付けると、AS 内のルータがその出口を使うようになります。route-map で設定するときは、対象外の経路が捨てられないよう、最後に match のない permit を入れておきます。
コメント