次のような状況があります:
- - - - - - -
| namespace |-------o o------
- - - - - - - vethY ppp0
vethX
どこ:
ppp0
PPPインターフェースであり、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 を使用するようにルーティングを構成しているのに、なぜメイン テーブルが関係しているのですか?