Je kunt het doen met netwerk namespaces op GNU/Linux.
Hier is hoe je OpenVPN en een enkele applicatie in een aparte namespace kunt draaien:
Maak de net netwerk namespace:
ip netns add myvpn
Start de loopback interface in de namespace (anders werken veel dingen niet zoals verwacht…)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Maak virtuele netwerk interfaces die OpenVPN (in de namespace) toegang geven tot het echte netwerk, en configureer de interface in de namespace (vpn1) om de interface buiten de namespace (vpn0) te gebruiken als standaard gateway
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
Activeer IPv4 routing en NAT voor de interface in de namespace. Aangezien mijn standaard interface een draadloze interface is, gebruik ik wl+ (wat overeen kan komen met wlan0, wlp3s0, enz. ) in iptables voor de uitgaande interface; Als je een bedrade interface gebruikt, moet je waarschijnlijk en+ gebruiken (of br+ voor een gebridgde interface)
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
Configureer de nameserver om binnen de namespace te gebruiken
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Bijna klaar, nu zouden we volledige netwerk toegang moeten hebben in de namespace
ip netns exec myvpn ping www.google.com
Start tenslotte OpenVPN in de namespace
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Als tun0 eenmaal draait in de namespace, ben je klaar om het programma te starten dat je wilde!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
BRON artikel.
Er is ook een wrapper script in het bron artikel dat je kunt aanpassen voor je behoeften.