我想做以下事情(如果可能的话):
正常使用 1 个浏览器(比如 Firefox) - 所有流量都使用我的 VPN。有另一个浏览器(比如 Chrome),所有流量都会绕过 VPN。
我已经使用 OpenVPN 设置了带有 VPN 的 PC,并且我了解如何添加静态路由,以便对特定 IP 地址的访问将绕过 VPN。
我认为我想做的可能是通过设置一个(Squid)代理服务器来路由 VPN 之外的所有流量,然后配置 Chrome 浏览器以使用该代理服务器。除非有更好/更简单的方法?
但是我不知道如何完成这个并配置 Squid/routes 尽管做了很多阅读和实验(我不是网络专家),我也无法找到任何资源来告诉我如何(或者如果可能的话) .
任何帮助或信息链接表示赞赏。
我认为最好的办法是不改变您当前的设置,而是利用Linux 命名空间。为方便起见,您可以使用 nsjail 或 Firejail 等工具。
这个想法是为应该绕过 VPN 的其他浏览器设置一个专用的命名空间,并使用它自己的路由规则。这就是您所需要的,更改路由规则,使其使用您的常规以太网接口,而不是 OpenVPN 创建的 tun 接口。
另一个好处是隔离您的应用程序。通过限制他们的范围和他们能够看到的资源,您可以有效地将它们彼此隔离。
在这里使用 Firejail 是我粗略的做法 - 我鼓励您阅读文档以将配置微调到所需的结果。Firejail 为常见应用程序提供了即用型配置文件,因此它可以立即开始对您的浏览器和其他应用程序进行沙盒处理。
还有一个 GUI 配置工具(firetools),但我的建议是仅使用一个应用程序尝试 Firejail,而不是重新配置整个环境。
这是一个使用Python的 PoC (假设您安装了netifaces包)。
如您所见,Python 只看到一个接口(除了环回接口)。eth0-11182 当然是一个只存在于当前命名空间中的虚拟接口。
推荐阅读:Firefox 沙盒指南
我没有使用过
squid
,但据我了解,它只是一个常规代理,因此通过将其安装在您的计算机上,它仍然遵循您的操作系统路由规则。我会尝试以下设置:
配置此设置后,您的浏览器默认不会使用 VPN,您可以将其中一个配置为使用服务器的 OpenVPN 子网地址通过代理服务器。
注意 1:您必须通过 OpenVPN 子网地址而不是其公共 IP 使用代理。
注意2:不允许从 OpenVPN 子网外部到代理服务器端口的流量,可以使用 iptables 来实现,或者使用您的云提供商规则不打开端口
更新:
当使用外部 VPN 服务(例如:nordVPN)时,您无法访问运行 OpenVPN 服务器的机器,这使得上述解决方案无效,因为您无法在运行 OpenVPN 服务器的机器上安装任何东西。
可以在本地子网中的另一台设备中安装代理服务,并且某些路由器(例如:mikrotik)提供此功能。但这将使解决方案仅在此设置的特定位置上工作。
感谢到目前为止的所有想法和评论。我还没有(尚未)
firejail
使用激活的 VPN(@Anonymous 建议)。但我跟进了@ofirule 链接的建议,特别是这个使用控制组的答案。该答案有一个完整的 shell 脚本的链接,可以自动执行所有操作,但我想至少从一开始就手动执行操作,这样我就可以跟进并确保我确切知道我在更改什么。因此,按照那里的手册操作方法,我将在下面发布我为其他人所做的事情。
请注意,我的网络接口被命名为enp0s31f6并且我的网关 IP 是192.168.0.1我认为这是唯一两个可能需要对其他人进行更改的特定内容:
我(还)不完全理解以上所有内容,但它有效!:-) 通过
cgexec
命令运行 firefox 我可以在 VPN 处于活动状态的情况下在 firefox 中检查我的 IP,并且可以看到它报告的是我的实际公共 IP 而不是 VPN IP。我还通过运行在使用 VPN 时遇到问题的无线电流媒体服务证明了这种方法有效 - 现在绕过 VPN 完全可以正常工作。