GNU/Linux上のネットワーク名前空間を使って行うことができます。
別々の名前空間で OpenVPN と単一のアプリケーションを実行する方法は以下の通りです:
ネットネットワーク名前空間を作成します。
ip netns add myvpn
ネームスペースでループバックインターフェースを開始します (そうしないと多くのことが期待通りに動作しません…)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
OpenVPN (ネームスペース内) が実際のネットワークにアクセスできるように仮想ネットワークインターフェースを作成します。を設定し、ネームスペース内のインターフェイス(vpn1)がネームスペース外のインターフェイス(vpn0)をそのデフォルトゲートウェイとして使用するように構成する
ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1
ネームスペース内のインターフェイスのIPv4ルーティングとNATを有効にする。デフォルトのインターフェイスは無線インターフェイスなので、アウトプットには iptables で wl+ (wlan0, wlp3s0 などと一致する可能性があります) を使用します。 )を使用しています。有線インターフェイスを使用している場合は、おそらく en+ (ブリッジドインターフェイスの場合は br+) を使用するべきでしょう。
iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1
ネームスペース内で使用するネームサーバを設定する
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
ほぼ完了。これで、名前空間
ip netns exec myvpn ping www.google.com
最後に名前空間
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
最後に名前空間
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
tun0 を起動したら、お望みのプログラムを起動する準備ができました!
0x1&
SOURCE article.
また、ソース記事にはあなたのニーズに合わせたラッパースクリプトがあります。