我已经建立了 OpenVPN 连接,但我不想通过它发送所有流量。
我当前的路由表如下所示:
$ ip route
default via 192.168.88.1 dev enp7s0 proto dhcp metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
192.168.88.0/24 dev enp7s0 proto kernel scope link src 192.168.88.29 metric 100
目标是路由具体的程序通过tun0
,第一个候选程序当然是——浏览器。
大家对如何做到这一点有什么想法吗?
我知道iptables基于 PID 的源路由,但每次生成新进程时都需要重新创建 iptables 规则。而且由于浏览器的每个选项卡都是一个新进程……我真的无法想象这一切如何完成。
下一个想法是使用本地 socks 代理,然后运行 say google-chrome --proxy-server="socks5://127.0.0.1:1080"
。
这与 SSH 隧道配合使用效果很好,因为它ssh
可以充当 SOCKS 代理。但是,我找不到可以在没有 SSH 隧道的情况下以相同方式工作的代理程序:即公开 SOCKS 接口并通过 路由所有流量tun0
。您能推荐一些吗?
答案1
您可以使用 iproute2 和运行浏览器或其他程序的用户的 uid。例如:
ip route add table 502 default dev tun0
lp rule add uidrange 1000-1002 table 502
答案2
在以隧道作为默认网关的新网络命名空间中运行您想要通过 VPN 路由的程序。
您可能需要重新配置您的电脑,以便浏览器的 .desktop 文件(以及任何其他应该使用 VPN 的程序)运行脚本来控制行为,并将脚本添加到您的 openvpn 配置中以设置命名空间。