如何使用 ufw 设置与 IP 无关的 VPN Kill Switch

如何使用 ufw 设置与 IP 无关的 VPN Kill Switch

一直在寻找答案,但一无所获。

像大多数聪明的互联网用户一样,我使用 VPN。如果我错了,你可以纠正我,但是当我设置 VPN(至少使用 OpenVPN 协议)时,网络路由如下所示:

app 1 -----
           |
app 2 -----+ ----- tun0 -----> outside world
           |
app 3------+

然后,如果 VPN 关闭:

app 1 -----
           |
app 2 -----+ -----------> outside world [No protection :(]
           |
app 3------+

其他 来源设置为允许来自tun0VPN IP 地址的流量。然而,在很多情况下,IP 地址是未知的或者是随机选择的(即用户随意选择的)。

我在这个问题上花了几个小时遇到的问题是我能够让它工作(只允许 tun0 到任何地方)但是仅有的如果 tun0 已经处于活动状态,并且仅有的在该连接会话期间。一旦我结束连接,规则就不允许任何流量通过,甚至无法连接到 VPN。

奇怪的是,Android 使这变得非常容易。我所需要做的就是安装 AFWall+(我最喜欢的 VPN),允许将网络连接到我的 VPN,然后仅允许来自我想要的应用程序的 VPN 连接。所有其他人都将被阻止,如果 VPN 出现故障,则不会允许任何流量通过。为什么这在 PC 上很难做到?

太长了;博士是否有 ufw 规则允许所有/部分流量​​到达 tun0,然后允许流量从 tun0 到达任何地方?

答案1

我会将其视为XY问题:您的目标 (X) 是让某些应用程序使用 VPN,并在 VPN 出现故障时停止互联网连接。你思考您需要(Y)使用防火墙规则和终止开关来执行此操作,但有一个更简单的解决方案:网络命名空间

因此,设置 OpenVPN 以tun在新的网络命名空间中创建接口(参见例如这个问题)。然后启动所有应仅通过此命名空间内的 VPN 访问互联网的应用程序(使用ip netns exec,请参阅上面的链接)。如果 VPN 出现故障,应用程序将无法再访问互联网。如果价格再次上涨,他们就可以再次访问。

作为奖励,在主命名空间中运行的任何应用程序仍然能够直接访问互联网,无需 VPN(因此连接速度更快)。

尝试使用防火墙规则来做到这一点会更加复杂,因为当然只有知道与 VPN 相关的所有 IP 地址后,才能设置防火墙规则。防火墙基于 IP 工作,因此没有办法解决这个问题。

我不知道 AFWall+ 实际上是做什么的(你有尝试找出答案吗?)。也许它在内部使用名称空间......

相关内容