Você pode fazer isso com namespaces de rede no GNU / Linux.
Veja como executar o OpenVPN e um único aplicativo em um namespace separado:
Crie o namespace de rede da rede:
ip netns add myvpn
Inicie a interface de loopback no namespace (caso contrário, muitas coisas não funcionarão como esperado ...)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Crie interfaces de rede virtual que permitirão que o OpenVPN (no namespace) acesse a rede real e configure a interface no namespace (vpn1) para usar a interface fora do namespace (vpn0) como seu gateway padrão
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
Ative o roteamento IPv4 e o NAT para a interface no namespace. Como minha interface padrão é sem fio, eu uso o wl + (que pode corresponder a wlan0, wlp3s0, etc.) no iptables para a interface de saída; se você usar uma interface com fio, provavelmente deve usar en + (ou br + para uma interface em ponte)
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
Configure o servidor de nomes para usar dentro do namespace
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Quase pronto, agora devemos ter acesso total à rede no namespace
ip netns exec myvpn ping www.google.com
Finalmente inicie o OpenVPN no namespace
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Quando o tun0 estiver no namespace, você estará pronto para iniciar o programa que deseja!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
artigo da SOURCE.
Além disso, há um script de wrapper no artigo de origem que você pode adaptar para suas necessidades.