Vous pouvez le faire avec des espaces de noms réseau sur GNU / Linux.
Voici comment exécuter OpenVPN et une seule application dans un espace de noms distinct:
Créez l'espace de noms du réseau net:
ip netns add myvpn
Démarrez l'interface de bouclage dans l'espace de noms (sinon beaucoup de choses ne fonctionnent pas comme prévu…)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Créez des interfaces réseau virtuelles qui permettront à OpenVPN (dans l'espace de noms) d'accéder au réseau réel et configurez l'interface dans l'espace de noms (vpn1) pour utiliser l'interface hors de l'espace de noms (vpn0) comme passerelle par défaut
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
Activez le routage IPv4 et le NAT pour l'interface dans l'espace de noms. Comme mon interface par défaut est une interface sans fil, j'utilise wl + (qui peut correspondre à wlan0, wlp3s0, etc.) dans iptables pour l'interface sortante; si vous utilisez une interface filaire, vous devriez probablement utiliser en + (ou br + pour une interface pontée)
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
Configurer le serveur de noms à utiliser à l'intérieur de l'espace de noms
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Presque terminé, nous devrions maintenant avoir un accès complet au réseau dans l'espace de noms
ip netns exec myvpn ping www.google.com
Enfin, démarrez OpenVPN dans l'espace de noms
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Une fois que tun0 est en place dans l'espace de noms, vous êtes prêt à démarrer le programme que vous vouliez!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
Article SOURCE.
Il existe également un script wrapper dans l'article source que vous pouvez adapter à vos besoins.