宛先が同じ2つのルートがある場合、システムは送信元アドレスと一致するルートを選択しないでください。from
キーワードを使用して、ルーティングテーブルにソースアドレス制限パスを追加しようとしています。
2001:db9:1::2
たとえば、インターフェイスにアドレスを持つホストがありますe1
。2001: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番目の項目を試して成功する必要がありますか?
興味深いことに、指定子がありますが、正しいソースアドレスを使用してパスを追加すると、正しいパスが選択され、from
pingが成功します。
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.
ソース制限パスを別々のルーティングテーブルに配置すると、正しい動作が得られます。