如何通过 Linux 上的 OpenVPN 连接路由浏览器流量?

如何通过 Linux 上的 OpenVPN 连接路由浏览器流量?

我已经建立了 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 配置中以设置命名空间。

相关内容