คุณสามารถทำได้ด้วยเนมสเปซเครือข่ายบน 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 ใน namespace
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
แหล่งข่าว
นอกจากนี้ยังมีสคริปต์ตัวตัดในบทความต้นฉบับที่คุณสามารถปรับให้เข้ากับความต้องการของคุณ