クイックダウンロード:
LOCAL_PREFは、アウトバウンドトラフィックエンジニアリングにおいて最も強力なBGP属性であり、すべてのiBGPピア間で共有され、最初に評価されるため、パス選択においてAS_PATH、MED、およびその他のほとんどの属性よりも優先されます。
-
LOCAL_PREFは、外部ピアからルートを受信したルーターに設定され、その後すべてのiBGPピアに伝播されます。1つのルーターのポリシーを変更すると、AS全体にわたって送信トラフィックがシフトする可能性があります。
-
デフォルト値は100ですが、値が大きいほど推奨されます。一方のパスを200に設定し、もう一方を100のままにしておくことで、プライマリ/バックアップの関係が明確に確立されます。
-
LOCAL_PREFは外部ASからは見えません。eBGPネイバーにアドバタイズされる前にルートから削除されます。
-
組織全体でLOCAL_PREFのスケールを標準化し(例:200=プライマリ、150=セカンダリ、100=バックアップ)、それを文書化して、どのエンジニアでも設定だけでルーティングの意図を理解できるようにしてください。
BGPは、同種のプロトコルの中でも独特なルーティングプロトコルです。OSPFやEIGRPなどの内部ゲートウェイプロトコル(IGP)はメトリックを使用して最適なパスを決定しますが、BGPは一連の属性を使用して特定の宛先への最適なパスを選択します。これらの属性は、次のホップを決定するために特定の順序で検査されます。
BGPは、特定の順序で一連の属性を順に調べて「優先パス」を決定するように設計されています。特定の宛先に対して、その宛先へのパスが2つ以上ある場合、各パスの各属性が比較され、最適なルートが決定されます。特定の属性で同点の場合は、次の属性が比較され、いずれかのパスが優先されるまで続きます。これらのBGP属性により、メトリックに基づいて最短パスを選択するだけでなく、トラフィックの転送方法や転送先の自律システム(AS)をより細かく制御できます。
最初に調べられる属性は、ローカルプリファレンス(Local Preference)と呼ばれ、LOCAL_PREFと表記されることが多い。この属性は、単一のAS内の内部BGP(iBGP)ピア間で交換される。これは、ローカルASから別のAS内の特定のプレフィックスに到達するための、最も優先されるアウトバウンドパスを決定するために使用される。特定のプレフィックスのローカルプリファレンスが高いほど、そのプレフィックスは優先される。
Cisco の BGP 実装では、LOCAL_PREF よりも先に最初に検査されるパラメータは Weight であることに注意してください。一部のベンダーは Weight の使用を採用していますが、これは BGP 仕様の公式な部分ではありません。 RFC 4271厳密に言えば、重みはBGP属性とは言えません。なぜなら、重みは設定されたルーターに対してのみローカルに意味を持ち、BGPアップデートには決して含まれないからです。
重要な概念のまとめ
以下の表は、LOCAL_PREF属性の最も重要な特性の一部をまとめたものです。
| 優先アウトバウンドパス | LOCAL_PREF属性は、ローカルASからの優先アウトバウンドパスを決定するために使用されます。 |
| iBGPピア間で共有 | LOCAL_PREFは、AS内のiBGPピア間で共有される属性です。 |
| よく知られており、裁量権を持つ | この属性はすべてのBGPスピーカーによって認識可能である必要がありますが、BGPアップデートに含めることは必須ではありません。 |
| eBGPピア間で共有されることはありません | eBGPピアからLOCAL_PREF属性を受信したBGPルータは、それを無視しなければならない(BGPコンフェデレーションの場合を除く)。 |
| 32ビット値 | LOCAL_PREFは32ビットで表される正の整数で、デフォルト値は100です。 |
| 地元での最優先投票が勝利する | LOCAL_PREFの値が高いほど、そのルートの優先度が高くなります。 |
説明
BGPは、AS(自律システム)の階層構造を利用してその機能を実現します。一般的なシナリオでは、各AS内ではIGP(内部ゲートウェイプロトコル)を用いてルーティングが行われ、AS間のルーティングはBGPによって決定されます。したがって、ローカルAS外の特定の宛先に到達しようとする場合、BGPはeBGPピアリングパケットをどの経路で送信すれば宛先に到達できるかを判断する必要があります。
LOCAL_PREFの概念的理解
LOCAL_PREF は、ローカル AS から特定の宛先に到達するために使用される出口ポイントを決定するために使用される BGP 属性です。次の図をご覧ください。AS 100 には、R1 と R2 を介してローカル AS 外の宛先に到達するための 2 つの「出口ポイント」があることに注意してください。d オブジェクトは、特定のプレフィックスを発信する権限を持つ AS を示します。RPKI とともに、これらのテクノロジーは、インターネット ルーティングに対するハイジャックや悪意のある攻撃を軽減するのに役立つメカニズムを導入します。

AS 200に存在する195.25.0.0/23ネットワークは、隣接するASにアドバタイズされます。これらのアドバタイズはAS 100に到達するため、AS 100内のルータは195.25.0.0/23ネットワークへのBGP学習パスを持つことになります。
図には、AS 100 内にある一連の iBGP ピアも示されています。これらのルータは、宛先ネットワークが存在する AS 200 へトラフィックを転送できます。転送経路は 2 つあります。1 つは AS 150 との eBGP ピアリングを使用する R1 経由、もう 1 つは AS 190 との eBGP ピアリングを使用する R2 経由です。AS 100 の管理者として、195.25.0.0/23 宛てのすべてのトラフィックを AS 150 経由で送信したいとします。そのため、この宛先の LOCAL_PREF を R1 経由で 500、R2 経由で 350 に設定します。LOCAL_PREF の値が大きい方が優先されるため、このネットワーク宛てのトラフィックは R1 経由でルーティングされます。
LOCAL_PREFはどのように変更されますか?
上記の例から、LOCAL_PREFがルーティングにどのように影響するかを概念的に理解できます。しかし、実際にどのように、そしてどこに適用されるのでしょうか?LOCAL_PREFの値を変更する方法はいくつかあります。
- 接頭辞別: これは上記の例で行われたことです。BGPピア間でBGPアップデートが共有される場合、特定のプレフィックスのLOCAL_PREFは、さまざまな修飾子を使用して変更できます。
- 近隣住民別: 特定の隣接ノードのLOCAL_PREFを変更することで、その隣接ノードを介してすべてのプレフィックスがより高いLOCAL_PREFを取得するようにすることが可能です。
上記の2つのシナリオについては、以下の例で詳しく説明します。
構成例
以下の例は、LOCAL_PREFをデフォルト値から変更して、仮想的なAS 50からの送信トラフィックの経路に影響を与える方法を示しています。これらの例では、Cisco IOSルータを使用していることに注意してください。次の図をご覧ください。

次の点に注意してください。
- 4台のルーターには、以下のルーターIDが割り当てられます。
- R1:1.1.1.1
- R2:2.2.2.2
- R3:3.3.3.3
- R4:4.4.4.4
- R2、R3、およびR4は、AS 50内でiBGPピアになりました。
- R1はR2およびR4とeBGPピアリングを確立した。
- R1は、1.1.1.0/24というプレフィックスをR2とR4の両方にアドバタイズしている。
- R3は、iBGPピアリングを介してR2とR4の両方から1.1.1.0/24プレフィックスについて学習します。
- LOCAL_PREFは、AS 50内で共有されるすべてのルートに対してデフォルト値の100に設定されます。
R3のBGPテーブルを見てみましょう。
R3#show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i1.1.1.0/24 4.4.4.4 0 100 0 60 i
*>i 2.2.2.2 0 100 0 60 iご覧のとおり、R2とR4はどちらも1.1.1.0/24ネットワークに到達するための次ホップ候補としてリストされています。また、両方のパスのBGPテーブルにおけるLocPrfの値は、デフォルト値の100に設定されている点にもご注意ください。
では、R3はどちらのパスを最適パスとして選択するのでしょうか?BGP属性のリストを見ると、2つのパスで最初に異なる属性はルーターIDです。BGPは、それ以前のすべての属性が同じ場合、ルーターIDが最も小さい方を最適パスとして選択します。
show ip bgp neighbors コマンドを使用すると、BGP ネイバーのルーター ID を確認できます。この例では、R2 と R4 のルーター ID が、上記の Next Hop 列の値と同じになっています。これは常に当てはまるわけではありませんが、この設定では当てはまります。
上記のとおり、「>」記号が2行目に表示されています。これは、2.2.2.2の次のホップであるR2が、R4ではなく、1.1.1.0/24へのトラフィックのルーティングに使用されることを示しています。
BGPネイバーのLOCAL_PREFを変更する
AS 50 の外部へ向かうすべてのトラフィックが R2 ではなく R4 を経由して送信されるようにしたいとします。この動作は、特定のネイバーに割り当てられているローカル優先度を変更することで指定できます。つまり、R4 が、ローカル AS からの他の出口よりも高い LOCAL_PREF を持っていることを、更新メッセージ内で R3 に通知するように設定できるのです。
そのためには、R4に以下の設定を適用します。
R4(config)#router bgp 50
R4(config-router)#bgp default local-preference 300このコマンドは、R4が属するAS 50のBGP設定に実際に適用されます。このコマンドは、R4のデフォルトのLOCAL_PREFを300に設定します。R2のLOCAL_PREFはデフォルト値の100のままであり、R4は新しい高いLOCAL_PREF値をiBGPネイバーに通知するため、AS内のすべてのiBGPネイバーは、すべてのプレフィックスにおいてR2よりもR4を優先します。
R3のBGPテーブルをもう一度見てみましょう。
R4#show ip bgp
BGP table version is 3, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i1.1.1.0/24 4.4.4.4 0 300 0 60 i
* i 2.2.2.2 0 100 0 60 i最初の行のLocPrfの値に注目してください。これはR4のLocPrfが300であるのに対し、R2のLocPrfはデフォルト値の100のままであることを示しています。また、「>」記号はR4が優先ネクストホップであることを示しています。
R4がiBGPピアリングを介してAS 50にアドバタイズするすべてのルートは、LOCAL_PREF値が300になります。
しかし、R4がアドバタイズするすべてのプレフィックスではなく、特定のプレフィックスに対してのみLOCAL_PREFを変更したい場合はどうすればよいでしょうか?
特定のプレフィックスのLOCAL_PREFを変更する
まず、前のセクションでR4に適用したLOCAL_PREFの変更を削除しましょう。
R4(config)#router bgp 50
R4(config-router)#no bgp default local-preference 300トポロジーも少し変更してみましょう。例えば、次のように。

11.11.11.0/24 ネットワークの LOCAL_PREF を変更せずに、1.1.1.0/24 ネットワークの LOCAL_PREF を変更してみましょう。そのためには、ルートマップを使用します。
R3の初期BGPテーブルを見てみましょう。LOCAL_PREFにはデフォルト値が設定されています。
R3#show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i1.1.1.0/24 4.4.4.4 0 100 0 60 i
*>i 2.2.2.2 0 100 0 60 i
* i11.11.11.0/24 4.4.4.4 0 100 0 60 i
*>i 2.2.2.2 0 100 0 60 i予想通り、1.1.1.1/24 と 11.11.11.0/24 のプレフィックスは、以前と同様にルーター ID により R2 を経由するパスを優先します。
それでは、1.1.1.0/24 プレフィックスの LOCAL_PREF を変更して、この宛先へのパケットが R4 を経由してルーティングされるようにするルートマップを設定しましょう。設定変更は R4 に適用されます。そのためには、以下の手順を実行する必要があります。
- 特定のプレフィックスに一致するアクセスリスト(ACL)を作成します。
- ACL内のIPアドレスに一致するルートマップを作成し、LOCAL_PREFに新しい値を設定します。
- そのルートマップをeBGPピアリングに適用して、一致するプレフィックスのLOCAL_PREFの値を変更します。
R4(config)#ip access-list standard LP_MATCH
R4(config-std-nacl)#permit 1.1.1.0 0.0.0.255
R4(config-std-nacl)#exit
R4(config)#
R4(config)#route-map LOCALPREF permit 10
R4(config-route-map)#match ip address LP_MATCH
R4(config-route-map)#set local-preference 300
R4(config-route-map)#exit
R4(config)#
R4(config)#router bgp 60
R4(config-router)#neighbor 10.10.21.1 route-map LOCALPREF in上記の内容について説明します。R4がR1(ネイバー10.10.21.1)からBGPアップデートを受信すると、そのBGPアップデートに含まれるACLに一致するプレフィックスのネクストホップのLOCAL_PREFが300に設定されます。「in」キーワードは、ルートマップが受信するBGPアップデートにのみ適用されることを示しています。R4からR1へのBGPアップデートなど、送信するBGPアップデートは影響を受けません。
したがって、R4が1.1.1.0/24へのルートをiBGPネイバーにアドバタイズする場合、LOCAL_PREF値として300をアドバタイズします。一方、11.11.11.0/24ネットワークをアドバタイズする場合は、デフォルトのLOCAL_PREF値である100を維持します。
R3における結果として生成されたBGPテーブルを見てみましょう。
R3#show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i1.1.1.0/24 4.4.4.4 0 300 0 60 i
* i 2.2.2.2 0 100 0 60 i
* i11.11.11.0/24 4.4.4.4 0 100 0 60 i
*>i 2.2.2.2 0 100 0 60 iご覧のとおり、R4 によって通知された LOCAL_PREF 値が 300 であるプレフィックスは 1.1.1.0/24 のみであるため、R4 がネクストホップとして選択され、11.11.11.0/24 プレフィックスは R2 を経由するルーティングを維持します。
注意事項
ローカル設定を使用してルーティングを変更する場合は、以下の点に注意してください。
- LOCAL_PREF属性はよく知られています。 これは、すべてのBGPルーターがこれらの値を受信し、正しく解釈できる必要があることを意味します。
- LOCAL_PREF属性は任意です。 これは、この値が設定されていなくてもBGPアップデートが送信される可能性があることを意味します。iBGPピアがLOCAL_PREF値が設定されていないBGPアップデートを受信した場合、デフォルト値として100が使用されます。
- LOCAL_PREF属性は、eBGPピア間のアップデート内でアドバタイズしてはなりません。 この場合、eBGPピアはそれを無視しなければならない。
クライアントの声
LOCAL_PREF属性は送信トラフィックに影響を与えることを覚えておいてください。これは、以下に説明するように、多くのシナリオで役立ちます。
マルチホーミング
ネットワークのエッジでBGPを実行している大規模企業は、複数のISPを経由してインターネットに接続する場合があります。これはマルチホーミングと呼ばれます。LOCAL_PREFを使用することで、マルチホーミング環境における送信トラフィックを調整し、目的のトラフィックパターンを確保できます。例えば、特定の宛先のLOCAL_PREFを変更することで、ISP間の負荷分散を実現できます。あるいは、一方のISPを主要な送信パスとし、もう一方のISPをバックアップとしてのみ使用するようにルーティングを設定することも可能です。
ISP間ルーティング
LOCAL_PREFを調整することで、ISP間のトラフィックパターンが望ましい動作に合致するようにすることもできます。BGPは最適なパスではなく、優先パスに関するものであることを覚えておいてください。この優先パスは、必ずしも最速または最も効率的なパスとは限りませんが、コスト、ISP間の合意、トラフィック量契約など、他の理由で優先される場合があります。
結論
ローカルプリファレンスは、ルーティングをきめ細かく変更して優先パスを選択できるようにする強力なBGP属性です。最初にチェックされる属性であるため、BGPルーティングの効率を高め、望ましくないルーティングにつながる可能性のある他の属性を上書きすることができます。主に送信トラフィックの変更に使用されますが、隣接するASを管理するエンティティ間の適切な合意があれば、受信トラフィックにも影響を与えることができます。
送信ルーティングポリシーが正しく機能していることを確認してください。
LogicMonitorは、ネットワークチームにアクティブなパスとルーティングテーブルの状態をリアルタイムで可視化するため、LOCAL_PREFポリシーがトラフィックを正しいアップストリームにルーティングしていることを確認でき、予期せぬ変更が発生した場合にもそのずれを検知できます。
よくあるご質問
BGP LOCAL_PREFとは何ですか?
LOCAL_PREF(ローカルプリファレンス)は、AS内から別のAS内の宛先への優先アウトバウンドパスを示すために使用される、よく知られた任意BGP属性です。これはiBGPピア間でのみ共有され、外部BGPネイバーには伝播されません。LOCAL_PREFの値が大きいほど、そのパスの優先度が高くなります。ほとんどのプラットフォームでは、デフォルト値は100です。
LOCAL_PREFとMEDの違いは何ですか?
LOCAL_PREFとMEDは正反対の役割を果たします。LOCAL_PREFは送信トラフィックを制御し、AS内のルータに対し、宛先へのトラフィック送信時に使用する出口ポイントを指示します。MED(Multi Exit Discriminator)は受信トラフィックに影響を与え、近隣ASに送信され、トラフィック送信時に使用するエントリポイントを示唆します。LOCAL_PREFはiBGP専用ですが、MEDは外部の近隣ASに伝達されます。
LOCAL_PREFのデフォルト値は何ですか?
ほとんどのBGP実装におけるデフォルトのLOCAL_PREF値は100です。2つのパスを比較する場合、LOCAL_PREF値が大きい方のパスが優先されます。両方のパスのLOCAL_PREF値が同じ場合、BGPはパス選択順序の次の属性(AS_PATHの長さ)に進みます。プライマリパスをすべて200、バックアップパスをすべて100に設定することは、明確なプライマリ/バックアップルーティングポリシーを作成するための一般的な慣例です。
LOCAL_PREFは近隣のASから見えますか?
いいえ。LOCAL_PREFはiBGP専用の属性であり、eBGPネイバーに送信される前にルートアドバタイズメントから削除されます。外部ASはLOCAL_PREFの値を見ることができないため、LOCAL_PREFの変更は自身のAS内のルーティングにのみ影響します。外部ASがトラフィックをルーティングする方法に影響を与えるには、MEDやAS_PATHのプレフィックスなど、eBGPセッション間で共有される属性を使用する必要があります。




