web-dev-qa-db-ja.com

プレフィックスを直接アナウンスするピアがない場合、BGPは特定のプレフィックスに対してアウトバウンドピアを優先します(デフォルトルートで処理されます)

2つのBGPピアに接続しています。どちらも、デフォルト+それぞれ約30Kのプレフィックスを含むフィルター処理されたテーブルを提供します(完全なテーブルではありません)。受信するプレフィックスについては、BGPにプレフィックス長アルゴリズムを使用させて最適なルートを選択します。受信しないプレフィックス(つまり、「デフォルト」が適用される)の場合、BGPピア1を優先します。問題は、どちらのBGPピアからも受信しない(つまり、デフォルトが適用される)特定のプレフィックスの場合です。通常のピア1ではなく、BGPピア2を優先したいと思います簡単に静的ルートを使用してこれを行うことができますが、静的ルートを追加すると、正しく聞こえません。ピア2のルーターに向けてルーティングすると、ルートがドロップすると、静的ルートが「固定」され、そのプレフィックスにトラフィックをプッシュできなくなります。同じことを行うBGPメカニズムを見つけることができれば、BGPピア2へのルートを優先できますが、そのルートが利用できない場合は、BGPピア1へのルートが使用されます。

アウトバウンドルートを操作するために、受信したプレフィックスへのアウトバウンドトラフィックに等しいローカルプリファレンスを設定するルートマップを使用しているため、BGPのデフォルトのプレフィックスリスト長アルゴリズムが使用され、アウトバウンドに高いプリファレンスを設定しています。 BGPピア1の「デフォルト」ルートを使用するトラフィック。

残念ながら、ルートマップを使用して特別なプレフィックスに対してこれを行う方法がわかりません。そのプレフィックスを持つオブジェクトがシステムに存在しないためです。両方のBGPピアに関する限り、「デフォルト」ルートで処理されます。

ルーティングにQuaggaを使用しているため、使用可能なプロトコルはBGPだけではありません。シスコスタイルのソリューションも問題ありません。基本的な知識が不足していると思われるため、正しい方向にナッジすることで自分の道を見つけることができます。

これが私のbgpd.confファイルで、個人情報を削除するために編集されています。うまくいけば、私はそれをやり過ぎなかった:

router bgp 12345
 bgp router-id 10.0.0.1
 network 10.0.0.0/24
 redistribute connected
 !
 neighbor 10.0.1.1 remote-as 22222
 neighbor 10.0.1.1 ebgp-multihop 3
 neighbor 10.0.1.1 next-hop-self
 neighbor 10.0.1.1 distribute-list distrib-out out
 neighbor 10.0.1.1 route-map INBGP1 in
 !
 neighbor 10.0.2.1 remote-as 11111
 neighbor 10.0.2.1 ebgp-multihop 10
 neighbor 10.0.2.1 next-hop-self
 neighbor 10.0.2.1 distribute-list distrib-out out
 neighbor 10.0.2.1 route-map INBGP2 in
!
access-list distrib-out permit 10.0.0.0/24
!
access-list is-default permit 0.0.0.0/0 exact-match
!
route-map INBGP2 permit 10
 set metric 2
 set ip next-hop 89.121.231.73
 on-match next
!
route-map INBGP2 permit 20
 match ip address is-default
 set local-preference 101
 on-match goto 1000
!
route-map INRTC permit 30
 set local-preference 110
 set metric 1
!
route-map INBGP2 permit 10
 set metric 1
 on-match next
!
route-map INBGP1 permit 20
 match ip address is-default
 set local-preference 200
 on-match goto 1000
!
route-map INBGP1 permit 30
 set local-preference 110
 set metric 1
1
Cosmin Prund

ピア2へのルートのためにのみピア2に行くネクストホップを持つスタティックルートを追加します。そうすれば、そのルートを受信して​​いる限り、スタティックルートはピア2を指します。しかし、2番目にそのルートを失います。 、既存のフェイルオーバーはそれを反転します。

Pick anyピア2に向かうルートですが、ピア2に到達できない場合は消えます。次に、選択したルートでカバーされるネクストホップでカバーするトラフィックの静的ルートを追加します。これにより、2番目のルートに一致するトラフィックが最初のルートを追跡します。

たとえば、トラフィックを制御するプレフィックスが216.152.32.0/24であるとします。 216.152.32.0/24への静的ルートを作成し、そのネクストホップを選択します。これは静的ルートであるため、216.152.32.0/24へのトラフィックはそのネクストホップにルーティングされます(これ以上特定のルートがない場合はありません)。そのため、問題は適切なネクストホップを選択することになります。

ピア2へのリンクがアップしているときはトラフィックを一方通行にし、そのリンクが機能していないときはトラフィックを一方通行にする必要があります。したがって、そのプロパティを持つネクストホップを選択する必要があります。原則として、ピア2から動的に受信するルート内のIPはすべて機能します。そのトラフィックは、そのルートがある場合はピア2に移動し、ない場合はデフォルトに従ってピア1に移動します。 (デフォルトがフェイルオーバー用に適切に設定されていると仮定します。)

理想的には、ピア2にとって「コア」であるが、接続ポイントに近すぎないルートを選択します。ピア1にフリップオーバーしたくないので、ピア2の「コア」にします。ノードが分離された場合、ピア2をフェイルオーバーする必要があるため、近すぎないようにします。いくつかのランダムなサイトへのtracerouteを実行すると、近くの都市でコアルーターを見つけることができる場合があります。 、バックボーン上。それで十分です。

3
David Schwartz

静的ルートを含まない、問題に対する簡単な解決策があります。それを掘り下げる前に、私はあなたの説明の1つの意味論的側面に触れたいと思います。 最長プレフィックス一致ルール はBGPとは何の関係もありません。あなたはBGPパス選択アルゴリズムについて考えるべきです。すべてのベンダーは、このアルゴリズムに独自の調整を加えています。ただし、ほとんどはCiscoの algorithm と非常によく似ています。

サイトからISPへの方向のトラフィックを完全に制御できます。ローカルプリファレンスまたはMulti-Exit-Discriminators(MED)を使用して、この方向のルーティングに影響を与えることができます。簡単にするために、どちらか一方を使用することをお勧めします。このポリシーは、ISPから送信されるプレフィックス(つまり、インバウンドポリシー)に実装します。

1)ローカルプリファレンス-最も高いローカルプリファレンスが優先されます(デフォルトのローカルプリファレンスは100です)。ローカルプリファレンスはBGPベストパスソリューションの初期段階にあり、AS_LENGTHの前に評価されます。プロバイダーは、ローカル設定のプレフィックスを送信できません。ローカルプリファレンスはASの境界を越えません。

2)MED-最も低いMEDが優先されます。プロバイダーは、プレフィックスでMEDを送信する場合があります。 Ciscoルータでは、有効にしない限り、MEDはMED = 0として扱われません。 bgp bestpathmed行方不明-最悪。 MEDは、BGPパス選択アルゴリズムのAS_LENGTHの後に評価されます。

Ciscoの BGPケーススタディ を読むことをお勧めします。また、BGPとその使用法の詳細については、Sam Halabi著の本 Internet Routing Architectures を強くお勧めします。

0
Jeff Loughridge