予期しないパスの選択

予期しないパスの選択

複数のコンピュータのDebian LinuxでFRRを使用してBGPを実行しています。私の質問は最終的にFRR / BGP設定に関連しているかもしれませんが、Linuxカーネルで特定のIPv6ルーティングが発生する理由をより基本的なレベルで理解しようとしています。

「a1」と「a2」とピアリングされるシステム「a3」があります。 「a1」と「a2」はパスリフレクタであり、どちらもa3にデフォルトゲートウェイを提供します。ここでは、a3のIPv6ルーティングテーブルを見ることができます。

root@a3:~# ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2602:fbbc:0:2::/64 dev vxbr2 proto kernel metric 256 pref medium
2602:fbbc:0:65::/64 dev vxbr101 proto kernel metric 256 pref medium
2602:fbbc:1:1::/64 dev 000_bridge proto kernel metric 256 pref medium
fe80::/64 dev 000_bridge proto kernel metric 256 pref medium
fe80::/64 dev vnet7 proto kernel metric 256 pref medium
fe80::/64 dev vxbr101 proto kernel metric 256 pref medium
fe80::/64 dev vxbr2 proto kernel metric 256 pref medium
fe80::/64 dev vnet40 proto kernel metric 256 pref medium
fe80::/64 dev vnet43 proto kernel metric 256 pref medium
fe80::/64 dev vnet46 proto kernel metric 256 pref medium
fe80::/64 dev vnet47 proto kernel metric 256 pref medium
fe80::/64 dev vnet54 proto kernel metric 256 pref medium
fe80::/64 dev vnet57 proto kernel metric 256 pref medium
fe80::/64 dev vnet58 proto kernel metric 256 pref medium
fe80::/64 dev vnet63 proto kernel metric 256 pref medium
fe80::/64 dev 001_bridge proto kernel metric 256 pref medium
default nhid 36 proto bgp metric 20 pref medium
    nexthop via 2602:fbbc:1:1::1 dev 000_bridge weight 1
    nexthop via 2602:fbbc:1:1::2 dev 000_bridge weight 1

私が理解しているように、下の読み取りの近くの行は、default nhid 36 proto bgp metric 20 pref medium36番で示されているネクストホップエントリがデフォルトパスとして使用され、これには2つの別々のエントリ(1つはfor2602:fbbc:1:1::1と1つはfor)が含まれていることを示しています2602:fbbc:1:1::2

次のホップテーブルは次のとおりです。

root@a3:~# ip nexthop
id 15 dev 001_bridge scope host proto zebra
id 16 dev 000_bridge scope link proto zebra
id 26 dev vxbr2 scope link proto zebra
id 27 dev vxbr101 scope link proto zebra
id 31 via 2602:fbbc:1:1::1 dev 000_bridge scope link proto zebra
id 32 via 10.1.0.1 dev 001_bridge scope link proto zebra
id 36 group 31/37 proto zebra
id 37 via 2602:fbbc:1:1::2 dev 000_bridge scope link proto zebra

だから私はここの順序のために(次のホップリストでより速く、番号が低く、シーケンスで最初のものであるid 36 group 31/37 proto zebra2602:fbbc:1:1::1、デフォルトゲートウェイとして選択されると思いましたが、そうではありません。任意のパブリックIPv6アドレスを検索すると、次のようになります。

root@a3:~# ip -6 route get 2001:4860:4860::8888
2001:4860:4860::8888 from :: via 2602:fbbc:1:1::2 dev 000_bridge proto bgp src 2602:fbbc:1:1::a3 metric 20 pref medium

Traceroute6やその他の利用可能なツールを使用して確認できます。2602:fbbc:1:1::1 ではなく、2602:fbbc:1:1::2 は間違いなくゲートウェイとして選択されました。理由はわかりません。

また、ip -6 route show cache出力は提供されておらip -6 route flush cacheず、影響はありません。したがって、ルートキャッシュには関係がないようです。次のいずれかに設定されたカスタムルールがないようです。

root@a3:~# ip -6 rule show
0:  from all lookup local
32766:  from all lookup main

この問題を解決するには、BGP 設定をさらに調整する必要があります。しかし、Linuxでルーティングを実行する方法の観点から、この問題の原因は何であるかを知っている人はいますか? (この問題を解決するためにどのパラメータを調整できるかについてのアイデアはありますか?)

ベストアンサー1

これはマルチパスパスです。両方のゲートウェイが使用され、1つのゲートウェイに優先順位はありませんが、特定の宛先(およびその他の要素)の場合は、同じゲートウェイを使用してそれを使用するトラフィックを妨げません。したがって、ターゲットがほとんど使用されていないかテストされている場合、あるゲートウェイが他のゲートウェイよりも優先される可能性があります。

マルチパスルーティングは、「簡単な」構文を使用して直接設定するか、およびを使用してip route add ... nexthop ... nexthop ...より新しく強力な構文を使用して設定できます。ip nexthop add id XXX ...ip route add ... nhid XXX

ここで、Route nhid 36は、id 31とid 37のnexthopグループであるnexthop id 36を選択します。彼らはグループに均等に参加します(特定の重みが設定されていないため)。

アルゴリズムは使用するゲートウェイを選択します。特定の目的地へ:デフォルトは、次の説明に従ってハッシュしきい値アルゴリズムです。代替(弾力性)アルゴリズムに関する文書そしてRFC 2992。このアルゴリズムは以下を保証します。一般的に2 つのゲートウェイが使用されますが、特定の宛先の場合は常に同じゲートウェイが使用されます。

さまざまな宛先アドレスへのルートを比較することでこれを確認できます。たとえば、OPの基本ルーティングを模倣するモデル構成では、ループ(bashおよびjq)は以下を提供します。

# for i in 2001:db8::{{0..9},{a..f}}; do ip -6 -json route get $i; done | jq -j '.[] | .dst, " via ", .gateway, "\n"'
2001:db8:: via 2602:fbbc:1:1::1
2001:db8::1 via 2602:fbbc:1:1::2
2001:db8::2 via 2602:fbbc:1:1::2
2001:db8::3 via 2602:fbbc:1:1::2
2001:db8::4 via 2602:fbbc:1:1::2
2001:db8::5 via 2602:fbbc:1:1::1
2001:db8::6 via 2602:fbbc:1:1::1
2001:db8::7 via 2602:fbbc:1:1::1
2001:db8::8 via 2602:fbbc:1:1::2
2001:db8::9 via 2602:fbbc:1:1::1
2001:db8::a via 2602:fbbc:1:1::1
2001:db8::b via 2602:fbbc:1:1::1
2001:db8::c via 2602:fbbc:1:1::2
2001:db8::d via 2602:fbbc:1:1::2
2001:db8::e via 2602:fbbc:1:1::2
2001:db8::f via 2602:fbbc:1:1::1

他のシステムの結果は異なる場合がありますが、通常、両方のゲートウェイが均等に使用され、フローの中断を最小限に抑えるために、ターゲットごとに1つのゲートウェイのみが使用されます(パスのファイアウォールは、ストリームの一部のみを表示する代わりにストリーム全体を見る必要があります)。 。

ハッシュは実際にターゲットに基づいているだけでなく、ソース、プロトコル、その他のプロパティも使用できます(たとえば、上記のコマンドを追加すると、結果は変更、再ipproto tcp選択ip route getudp変更されませipv6-icmpん)。tcp

おすすめ記事