Pode fazê-lo com espaços de nomes de rede no GNU/Linux.
Aqui está como executar OpenVPN e uma única aplicação num namespace separado:
Criar o namespace da rede:
ip netns add myvpn
Iniciar a interface de loopback no namespace (caso contrário muitas coisas não funcionam 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
Criar interfaces de rede virtuais que permitirão ao OpenVPN (no namespace) aceder à rede real, e configurar a interface no namespace (vpn1) para utilizar a interface fora do namespace (vpn0) como a sua 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
Permitir o encaminhamento IPv4 e NAT para a interface no namespace. Como a minha interface padrão é sem fios, utilizo wl+ (que pode corresponder a wlan0, wlp3s0, etc.). ) em iptables para a interface de saída; se usar uma interface com fios, deverá provavelmente 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
Configurar o nameserver 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 iniciar o OpenVPN no namespace
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Uma vez que o tun0 esteja no namespace, está 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 FONTE
Também existe um guião de embrulho no artigo de origem que pode adaptar às suas necessidades.