Bạn có thể làm điều đó với các không gian tên mạng trên GNU / Linux.
Đây là cách chạy OpenVPN và một ứng dụng trong một không gian tên riêng biệt:
Tạo không gian tên mạng:
ip netns add myvpn
Bắt đầu giao diện loopback trong không gian tên (nếu không, nhiều thứ không hoạt động như mong đợi)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Tạo giao diện mạng ảo cho phép OpenVPN (trong không gian tên) truy cập mạng thực và định cấu hình giao diện trong không gian tên (vpn1) để sử dụng giao diện ngoài không gian tên (vpn0) làm cổng mặc định của nó
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
Cho phép định tuyến IPv4 và NAT cho giao diện trong không gian tên. Vì giao diện mặc định của tôi là giao diện không dây, tôi sử dụng wl + (có thể khớp với wlan0, wlp3s0, v.v.) trong iptables cho giao diện gửi đi; nếu bạn sử dụng giao diện có dây, có lẽ bạn nên sử dụng en + (hoặc br + cho giao diện bắc cầu)
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
Cấu hình máy chủ tên để sử dụng bên trong không gian tên
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Gần xong, bây giờ chúng ta nên có quyền truy cập mạng đầy đủ trong không gian tên
ip netns exec myvpn ping www.google.com
Cuối cùng bắt đầu OpenVPN trong không gian tên
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Khi tun0 xuất hiện trong không gian tên, bạn đã sẵn sàng bắt đầu chương trình bạn muốn!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
Bài viết NGUỒN.
Ngoài ra, có một kịch bản trình bao bọc trong bài viết nguồn bạn có thể điều chỉnh cho nhu cầu của mình.