アプリケーション固有のルーティング

アプリケーション固有のルーティング

私は、さまざまな種類のVPNをサポートするUbuntu Linuxワークステーション(Astrrill)で独自のVPNクライアントを使用しています。 VPNタイプの1つは、tun0接続時に仮想インターフェイスを作成するOpenVPNです。

混乱するのは、クライアントがOpenVPNを選択するときにVPNを介して自分のコンピュータ上の特定のアプリケーションからのトラフィックのみをルーティングすることを選択できますが、他のアプリケーションからのトラフィックはVPNを使用せずに物理ネットワークコンピュータを通過させることです。相互作用。

Linuxでは、ルーティングがどのように機能するかをどの程度知っていると思いましたが、このVPNクライアントがアプリケーションによって異なるトラフィックをルーティングする方法を見たり理解したりすることはできません。

このアプリケーション固有のルーティングを有効にすると、クライアントがルーティングテーブルに次のエントリを追加することがわかりますが、それ以外は何も表示されません。

198.18.32.0/21 dev tun0  proto kernel  scope link  metric 950

単一の IPTables ルールがないため、IPTables では実行されません。

それがどのように行われるかを知っている人はいますか?

答え1

LinuxでNameSpacesを設定すると、これを実現できます。ここでは、さまざまなプロセスに対してさまざまなネットワークまたはパスを持つことができます。
たとえば、
testという名前の新しい名前空間を作成するには、次のようにします。
ip netns add test

ネットワークインターフェイス(またはトンネルインターフェイス)を割り当てます。
ip link set tun0 netns test

ネットワークインタフェースは、一度に1つの名前空間でのみ有効にできます。

この名前空間でプログラムを実行するには、次のようにします。
ip netns exec test <command to run against that namespace>

ip net-ns 氏に関する更なる情報
名前空間の詳細

関連情報