Możesz to zrobić za pomocą sieciowych przestrzeni nazw w systemie GNU/Linux.
Oto jak uruchomić OpenVPN i pojedynczą aplikację w oddzielnej przestrzeni nazw:
Utwórz sieciową przestrzeń nazw net:
ip netns add myvpn
Uruchom interfejs loopback w przestrzeni nazw (w przeciwnym razie wiele rzeczy nie 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ślnej bramy
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ż mój domyślny interfejs jest bezprzewodowy, używam wl+ (co może odpowiadać wlan0, wlp3s0, itp. ) w iptables dla interfejsu wychodzącego; Jeśli używasz interfejsu przewodowego, powinieneś prawdopodobnie użyć en+ (lub br+ dla interfejsu zmostkowanego)
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 do użycia wewnątrz 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
W końcu uruchom OpenVPN w przestrzeni nazw
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Gdy tun0 jest już w przestrzeni nazw, możesz uruchomić program, który chciałeś!
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 wrapper, który możesz dostosować do swoich potrzeb.