Możesz to zrobić z sieciowymi przestrzeniami nazw w systemie GNU / Linux.
Oto jak uruchomić OpenVPN i pojedynczą aplikację w oddzielnej przestrzeni nazw:
Utwórz przestrzeń nazw sieci:
ip netns add myvpn
Uruchom interfejs pętli zwrotnej w przestrzeni nazw (w przeciwnym razie wiele rzeczy nie będzie działać zgodnie z oczekiwaniami…)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Utwórz wirtualne interfejsy sieciowe, które pozwolą OpenVPN (w przestrzeni nazw) uzyskać dostęp do prawdziwej sieci, i skonfiguruj interfejs w przestrzeni nazw (vpn1), aby używać interfejsu poza przestrzenią nazw (vpn0) jako domyślną bramą
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
Włącz routing IPv4 i NAT dla interfejsu w przestrzeni nazw. Ponieważ moim domyślnym interfejsem jest interfejs bezprzewodowy, używam wl + (który może pasować do wlan0, wlp3s0 itd.) W iptables dla interfejsu wychodzącego; jeśli używasz interfejsu przewodowego, prawdopodobnie powinieneś użyć en + (lub br + dla interfejsu pomostowego)
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
Skonfiguruj serwer nazw, aby używał go w przestrzeni nazw
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Prawie gotowe, teraz powinniśmy mieć pełny dostęp do sieci w przestrzeni nazw
ip netns exec myvpn ping www.google.com
Na koniec uruchom OpenVPN w przestrzeni nazw
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Gdy tun0 znajdzie się w przestrzeni nazw, jesteś gotowy, aby uruchomić żądany program!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
Artykuł ŹRÓDŁOWY.
W artykule źródłowym znajduje się również skrypt opakowania, który można dostosować do własnych potrzeb.