Você pode fazer isso com namespaces de rede no GNU / Linux.
Veja como executar o OpenVPN e um único aplicativo em um espaço para nome separado:
Crie o namespace da rede líquida:
ip netns add myvpn
Inicie a interface de loopback no espaço para nome (caso contrário, muitas coisas não funcionam como o 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 espaço de nomes) acesse a rede real e configure a interface no espaço de nomes (vpn1) para usar a interface fora do espaço de nomes (vpn0) como 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
Habilite o roteamento IPv4 e o NAT para a interface no espaço para nome. Como minha interface padrão é sem fio, uso wl + (que pode corresponder a wlan0, wlp3s0 etc.) em iptables para a interface de saída; se você usa uma interface com fio, provavelmente deve usar en + (ou br + para uma interface com 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 espaço para nome
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 espaço para nome
ip netns exec myvpn ping www.google.com
Por fim, inicie o OpenVPN no espaço para nome
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Quando tun0 estiver no namespace, você estará pronto para iniciar o programa que queria!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
Artigo SOURCE.
Também há um script de wrapper no artigo de origem que você pode adaptar às suas necessidades.