Вы можете сделать это с помощью сетевых пространств имен в GNU/Linux.
Вот как запустить OpenVPN и отдельное приложение в отдельном пространстве имен:
Создайте пространство имен в сети:
ip netns add myvpn
Запустите петлевой интерфейс в пространстве имен (в противном случае многие вещи работают не так, как ожидалось…)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Создайте виртуальные сетевые интерфейсы, которые позволят OpenVPN (в пространстве имен) получить доступ к реальной сети, и настройте интерфейс в пространстве имен (vpn1) для использования интерфейса из пространства имен (vpn0) в качестве шлюза по умолчанию.
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
Включите маршрутизацию IPv4 и NAT для интерфейса в пространстве имен. Поскольку мой интерфейс по умолчанию является беспроводным, я использую wl+ (который может соответствовать wlan0, wlp3s0 и т.д.) В iptables для исходящего интерфейса; если вы используете проводной интерфейс, вы, вероятно, должны использовать en+ (или br+ для мостового интерфейса)
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
Настройте сервер имен для использования внутри пространства имен
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Почти готово, теперь у нас должен быть полный доступ к сети в пространстве имен
ip netns exec myvpn ping www.google.com
Наконец запустите OpenVPN в пространстве имен
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Как только tun0 появится в пространстве имен, вы готовы запустить нужную программу!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
ИСТОЧНИК статьи.
Также в исходной статье есть скрипт-обертка, который вы можете адаптировать под свои нужды.