BGP Local Preferenceを使いこなす!Ciscoルータでの設定手順と確認

音声で聞く

読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。

AS から外へ出る出口が複数あるとき、どの出口を使うかを AS 内で揃えるのが Local Preference(LOCAL_PREF)です。値は iBGP ピアに伝わり、AS 内のルータは値の大きい出口を選びます。

この記事では、Local Preference の特徴を整理したあと、Cisco ルータで bgp default local-preference と route-map による設定を試し、AS 内のルータが選ぶ出口がどう変わるかを確認します。

この記事でわかること
  1. Local Preference の特徴(iBGP ピアに伝わる、大きい方を優先、既定値は 100)
  2. bgp default local-preference で出口を切り替える方法
  3. 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)を選ぶかを確認します。

AS5AS2365.5.5.5/3255.55.55.55/32(後で追加)R5R2R3R6.5.5.2.3.2.3.6.6192.168.25.0/24eBGP192.168.35.0/24eBGP192.168.26.0/24iBGP192.168.36.0/24iBGPAS236 内は EIGRP で到達性を確保
図1 検証構成
ルータAS役割
R5AS5ループバック 5.5.5.5/32(後で 55.55.55.55/32 を追加)を AS236 へ広告する
R2、R3AS236AS236 の出口ルータ。R5 と eBGP、R6 と iBGP でピアを張る
R6AS236R2 と 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/32R5 が広告したループバック
Next Hop192.168.35.5 は R3 経由、192.168.25.5 は R2 経由の経路。どちらも R5 のアドレスで、R2・R3 は Next Hop を変えずに R6 へ送っている
LocPrf 100どちらの経路も Local Preference は既定値の 100
iiBGP で受け取った経路
*>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 100Local Preference。どちらも 100
internal, bestiBGP で受け取った経路で、ベストパスに選ばれている
R2 が選ばれた理由

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 経由の経路が優先されます。

R5eBGPR3:bgp default local-preference 1000LocPrf 1000 を付けて送るiBGPLocPrf 1000大きいのでベストパスR5eBGPR2:設定なしLocPrf 100(既定値)で送るiBGPLocPrf 100ベストパスにならないR6 が受け取る経路5.5.5.5 宛ての通信は R6 → R3 → R5 の順に流れる
図2 Local Preference の伝わり方と通信の流れ
注意

この構成では、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 10match がないので、すべての経路が対象になる
set local-preference 900Local Preference を 900 にする
neighbor 192.168.35.5 route-map SETLocPrf inR5 から受け取る(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 10STEP 4 で作ったシーケンス 10 を編集する
match ip address 1ACL 1(55.55.55.55/32)に一致した経路だけを対象にする
set local-preference 555STEP 4 の set local-preference 900 を 555 に置き換える
route-map SETLocPrf permit 1000match も 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/321000route-map のシーケンス 1000 で何も変えずに許可され、bgp default local-preference 1000 の値になったR3 経由
55.55.55.55/32555シーケンス 10 の ACL に一致し、set local-preference 555 が適用されたR3 経由

プレフィックスごとに違う値を付けられることが確認できました。どちらも R2 経由の 100 より大きいので、ベストパスはどちらも R3 経由です。55.55.55.55/32 だけ R2 経由にしたい場合は、100 より小さい値を付けます。

まとめ

設定(R3)対象R6 で見える R3 経由の LocPrfR6 のベストパス
なし(既定値)—100R2 経由(ルータIDが小さい)
bgp default local-preference 1000R3 が eBGP で受け取るすべての経路1000R3 経由
route-map(set のみ)を in で適用R5 から受け取るすべての経路900R3 経由
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 を入れておきます。

コメント