Sie können dies mit Netzwerk-Namespaces unter GNU / Linux tun.
So führen Sie OpenVPN und eine einzelne Anwendung in einem separaten Namespace aus:
Erstellen Sie den Net Network Namespace:
ip netns add myvpn
Starten Sie das Loopback-Interface im Namespace (sonst funktionieren viele Dinge nicht wie erwartet ...)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Erstellen Sie virtuelle Netzwerkschnittstellen, über die OpenVPN (im Namespace) auf das reale Netzwerk zugreifen kann, und konfigurieren Sie die Schnittstelle im Namespace (vpn1), um die Schnittstelle außerhalb des Namespace (vpn0) als Standardgateway zu verwenden
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
Aktivieren Sie IPv4-Routing und NAT für die Schnittstelle im Namespace. Da es sich bei meiner Standardschnittstelle um eine drahtlose Schnittstelle handelt, verwende ich in iptables für die ausgehende Schnittstelle wl + (das möglicherweise mit wlan0, wlp3s0 usw. übereinstimmt). Wenn Sie eine kabelgebundene Schnittstelle verwenden, sollten Sie wahrscheinlich en + (oder br + für eine überbrückte Schnittstelle) verwenden.
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
Konfigurieren Sie den Nameserver für die Verwendung im Namespace
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Fast fertig, jetzt sollten wir vollen Netzwerkzugriff im Namespace haben
ip netns exec myvpn ping www.google.com
Starten Sie schließlich OpenVPN im Namespace
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Sobald sich tun0 im Namespace befindet, können Sie das gewünschte Programm starten!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
QUELLE Artikel.
Außerdem gibt es im Quellartikel ein Wrapper-Skript, das Sie an Ihre Bedürfnisse anpassen können.