强制应用程序使用给定的 VPN 隧道

强制应用程序使用给定的 VPN 隧道

尝试让 Linux 机器上的特定用户的流量通过 VPN 隧道。尝试过不使用和使用 update-resolv-conf / dhcp-options

~$ cat /etc/openvpn/pia.conf 
client
dev tun
proto udp
remote nl.privateinternetaccess.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass credentials
comp-lzo
verb 1
reneg-sec 0

log-append /var/log/piavpn.log
script-security 2
daemon
route-nopull
route-up route-up.sh
keepalive 1 30
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4

~$ cat /etc/openvpn/route-up.sh 
#!/bin/sh
iptables -A OUTPUT -m owner --uid-owner debian-transmission \! -o tun0 -j REJECT

~$ sudo -u debian-transmission ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=58 time=92.4 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=58 time=72.6 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=58 time=60.8 ms

~$ sudo -u debian-transmission ping www.google.com
ping: unknown host www.google.com

答案1

我没有在您的脚本中看到任何 REDIRECT 规则,如果在 vpn 启动时通信不通过 tun0,您只是阻止了通信。

一种方法是使用 redsocks -http://darkk.net.ru/redsocks/

答案2

您希望将一个应用程序的所有流量重定向到 VPN 隧道。iptables 不是正确的工具。iptables 可以允许和阻止流量并执行网络地址转换。您希望重定向应用程序的所有流量。这是另一层。如果您想控制单个应用程序的流量,则需要使用 SOCKS 代理之类的机制。这仅在应用程序也支持 SOCKS 代理时才有效。

相关内容