私は、さまざまな種類の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>