パスが間違っている - ネットワークに接続できません

パスが間違っている - ネットワークに接続できません

宛先が同じ2つのルートがある場合、システムは送信元アドレスと一致するルートを選択しないでください。fromキーワードを使用して、ルーティングテーブルにソースアドレス制限パスを追加しようとしています。

2001:db9:1::2たとえば、インターフェイスにアドレスを持つホストがありますe12001:db9:1::3以下のような一般的なパスを追加すると、ping6正常に動作します。

root@pc:/# ip -6 route add 2001:db9:1::3 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 dev e1  metric 1024

from次に、インターフェイスに割り当てられていないいくつかのソースアドレスを使用して、キーワードを使用してソース制限パスを追加します。

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:a::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

今すぐpingしようとすると、ネットワークに接続できないというメッセージが表示されます。システムが最初のソース制約項目が機能しないことを発見した場合は、2番目の項目を試して成功する必要がありますか?

興味深いことに、指定子がありますが、正しいソースアドレスを使用してパスを追加すると、正しいパスが選択され、frompingが成功します。

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:1::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:1::2 dev e1  metric 1024
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

(私も2001:db9:1::1ソースとして試してみましたが、まだ機能しているので、事前編成順序は重要ではありません。)したがって、ターゲットにソース制限パスが存在する場合、ソース制限がないパスは無視されるようです。

カーネル構成(バージョン4.9.13)を確認した結果、IPV6_SUBTREES有効になっています。どんなアイデアがありますか?

ベストアンサー1

同じルーティングテーブルで通常のパスとソースごとのパスを混在させると、予期しない動作が発生する可能性があります。これはLinuxカーネルソースコードのnet / ipv6 / Kconfigに記載されています。

config IPV6_SUBTREES
    bool "IPv6: source address based routing"
    depends on IPV6_MULTIPLE_TABLES
    ---help---
      Enable routing by source address or prefix.

      The destination address is still the primary routing key, so mixing
      normal and source prefix specific routes in the same routing table
      may sometimes lead to unintended routing behavior.  This can be
      avoided by defining different routing tables for the normal and
      source prefix specific routes.

      If unsure, say N.

ソース制限パスを別々のルーティングテーブルに配置すると、正しい動作が得られます。

おすすめ記事