カスタム ルーティング テーブルを使用するようにルーティングを構成したのに、メイン テーブルが関係するのはなぜですか?

カスタム ルーティング テーブルを使用するようにルーティングを構成したのに、メイン テーブルが関係するのはなぜですか?

次のような状況があります:

- - - - - - -
| namespace |-------o      o------
- - - - - - -     vethY   ppp0
          vethX

どこ:

  • ppp0PPPインターフェースであり、IPアドレスは192.168.100.169/24です。
  • vethX名前空間内の仮想イーサネットインターフェースであり、そのIPアドレスは10.0.0.3/24です。
  • vethYは別の仮想イーサネットインターフェースであり、そのIPアドレスは10.0.0.5/24であり、名前空間のデフォルトゲートウェイでもあります。

実際、名前空間へのルーティング テーブルは次のようになります。

$ sudo ip netns exec my_namespace ip route
default via 10.0.0.5 dev vethX
10.0.0.0/24 dev vethX proto kernel scope link src 10.0.0.3

vethYこのシナリオでは、ポリシー ベース ルーティングを使用します。特に、ネットワーク パケットの着信インターフェイスがまたはインターフェイスである場合に、カスタム ルーティング テーブルを使用しますppp0

'という名前のカスタムルーティングテーブルを作成しましたT1' ファイルにエントリ "T1" を追加します/etc/iproute2/rt_tables
次に、この新しいルーティング テーブルをいつ使用するかをシステムに指示するポリシー ルーティング ルールを追加しました。
これで、ポリシー ルーティング ルールは次のようになります。

$ ip rule
0:      from all lookup local
32764:  from all iif ppp0 lookup T1
32765:  from all iif vethY lookup T1
32766:  from all lookup main
32767:  form all lookup default

次に、カスタムテーブルに次のルールを追加しました

$ ip route show table T1
default via 192.168.100.169 dev ppp0
10.0.0.0/24 dev vethY scope link
192.168.100.180 dev ppp0 scope link

最後の行は、ポイントツーポイント リンクのもう一方のエンドポイントを示しています。
また、メイン ルーティング テーブルは空です。

この設定では、名前空間内で 10.0.0.5 に ping しても、応答 (ARP 応答も) は受信されません。
要求パケットは vethY インターフェイスに到達しますが (Wireshark を使用して確認しました)、応答は生成されません。ARP
キャッシュが空の場合、ARP 要求が送信されても​​ ARP 応答は返されません。

代わりに、メイン テーブルにもルールを追加すると
10.0.0.0/24 dev vethY scope link
、すべてのパケットが正しく流れます。

このルールをメイン テーブルに追加しないと、なぜ応答が届かないのですか?
vethY または ppp0 からのすべてのパケットに T1 を使用するようにルーティングを構成しているのに、なぜメイン テーブルが関係しているのですか?

関連情報