特定のネットワーク名前空間のみのOpenVPNを介してすべてのトラフィックをフィードする
特定のプロセスとの間のすべてのトラフィックとトラフィックのみがVPNを通過するように、VPNを設定しようとしています(OpenVPNを使用)。他のプロセスは引き続き物理デバイスを直接使用する必要があります。Linuxでこれを行う方法は、ネットワーク名前空間を使用することだと理解しています。 OpenVPNを通常どおりに使用する(つまり、クライアントからのすべてのトラフィックをVPNに送り込む)場合、正常に機能します。具体的には、次のようにOpenVPNを起動します。 # openvpn --config destination.ovpn --auth-user-pass credentials.txt (destination.ovpnの編集バージョンは、この質問の最後にあります。) トンネルデバイスを名前空間に制限するスクリプトを作成する次のステップに固執しています。私が試してみました: トンネルデバイスを名前空間に直接配置する # ip netns add tns0 # ip link set dev tun0 netns tns0 # ip netns exec tns0 ( ... commands to bring up tun0 as usual ... ) これらのコマンドは正常に実行されますが、ネームスペース内で生成されたトラフィック(たとえば、ip netns exec tns0 traceroute -n 8.8.8.8)はブラックホールに陥ります。 「仮想イーサネット(veth)インターフェースのみをネットワーク名前空間に割り当てることができる(まだ)ことを前提に(これは、真に不当に不必要なAPI制限に対して今年の賞を受賞)、vethペアとブリッジを作成し、名前空間にvethペアの一方の端を配置します。これは、床にトラフィックを落とすことさえしません:それは、私が橋にトンネルを入れることを許しません![編集:これは、タップデバイスのみをブリッジに配置できるためです。ネットワーク名前空間に任意のデバイスを配置できないこととは異なり、実際には理にかなっています。ブリッジとはイーサネット層の概念です。残念ながら、私のVPNプロバイダーはタップモードでOpenVPNをサポートしていないため、回避策が必要です。] # ip …