我在我的客户端上使用多个操作系统(Ubuntu、Mint、Alpine、Windows 7-10),我想通过 VPN 访问我的家庭网络,例如在酒店,我想通过我的家庭互联网连接浏览互联网。
我读了一篇有趣的文章这里。它声称如果未建立 VPN 连接并且您有网络连接(例如 VPN 服务器未运行、客户端尚未连接等),那么您的客户端计算机将使用没有隧道的本地网络而不是 VPN。我想如果我由于某种原因与 VPN 服务器失去连接,并且我甚至不会意识到我发送了一半未加密的消息,也会发生同样的情况。有没有办法防止这种情况发生并强制客户端计算机上的每个应用程序仅使用 VPN 隧道?
我在这个主题中找到了几个类似的问题,例如特定于 Win7 的问题。我正在寻找一个通用解决方案。那么从理论上讲,在任何 Windows 和 Linux 系统上执行此操作的方法是什么(没有系统特定的细节),如果不可能,那么为什么?
答案1
一般做法是:
- 使用防火墙阻止发送不需要的数据包。
- 调整路由表,使得数据包永远不会经过直接路径。
第一种方法可以通过过滤来实现传出数据包基于其来源地址,因为 LAN 子网和 VPN 隧道的地址会有所不同。(当然,您需要为 VPN 客户端本身添加例外。)
第二种方法是删除现有的“默认”路由(0.0.0.0/0 或 ::/0),这样数据包将立即返回“网络不可达”错误。同样,您需要为 VPN 服务器设置例外,方法是添加一条非常狭窄的路由(甚至可能是 /32 或 /128)。
一些操作系统还支持“路由域”、“VRF”或“网络命名空间”,它们可以限制程序甚至可以访问哪些网络接口。看到– 因此您可以创建一个单独的命名空间只是为 VPN 客户端指定物理以太网接口。(其余程序将被迫使用剩余的接口,例如在 Linux 上,使用虚拟“veth”接口进行通信之间命名空间。