
私は次のような状況にあります。
- - - - - - -
| 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を使用するようにルートを設定しましたが、基本テーブルが関連しているのはなぜですか?