Це можна зробити за допомогою мережевих просторів імен у 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
Стаття ДЖЕРЕЛА.
У статті-джерелі також є сценарій обгортки, який ви можете адаптувати під свої потреби.