强制通过 VPN 出站流量,但仍允许本地连接

强制通过 VPN 出站流量,但仍允许本地连接

我有一台运行 VPN 客户端的 Linux VM,我想确保所有新的出站互联网连接都通过 VPN 隧道,同时还允许本地网络设备连接到它。此 VM 连接到互联网,还必须与其他 2 台本地 VM 通信。如果 VPN 中断,VM 的互联网连接也会中断(但本地网络仍允许连接,因此我可以通过 SSH 进入并重新启动服务)。

OpenVPN 创建了一个tun0接口,据我所知,这只是一个通过我的 VM NIC 在 UDP 端口 1198 上运行的虚拟适配器ens160

我可以通过添加和删除防火墙过滤规则(确保允许 dns/ssh/icmp)来实现,但我对网络不太熟悉,无法自己设计这个正确地

  • 使用 iptables 实现这一目标的最佳方法是什么?
  • 我是否需要使用 nat 表,或者只需过滤器就能完成此操作?
  • 我是否应该使用tun0ens160通过端口 1198 来定位出站连接?或者两者兼而有之?
  • 是否可以将连接源作为给定的服务/应用程序?
  • 我是否还需要启用拆分隧道以使 LAN 连接正常工作?如何操作?
  • 在 2022 年,除了 iptables 之外,还有什么更好的解决方案吗?

我通常很擅长自己解决问题,只是需要有人给我指明正确的方向。请给出解释或有用的文档链接。甚至一些我可以搜索的关键字:我在网上找不到任何与我的特定需求相关的内容。

https://serverfault.com/a/403943/976907 这个答案接近我需要的,但我的 VPN 服务器没有静态私有 IP,OpenVPN 连接设置为域名和端口。他们还提到了关于路由恢复为默认路由的警告,而我对物联网的信心不足,让我想要更多信息。

https://community.openvpn.net/openvpn/wiki/IgnoreRedirectGateway 我发现这可能与此相关,但我不是 100% 清楚重定向网关是什么,也找不到对我有意义的定义。

答案1

听起来你陷入了 FUD 中。默认情况下,在 Linux 上,OpenVPN 不会覆盖 LAN 路由(即前缀长度 > 0 的路由),即使使用redirect-gateway或等效路由也是如此。(这更多的是 Linux 的特性,而不是 OpenVPN 的特性。)因此,它或多或少是开箱即用的“拆分隧道”。

唯一需要策略路由等解决方案的情况是,您需要主机回复来自 Internet 的某些流量(即来自 VPN 路由(如新的默认路由)的源 IP),而不是通过隧道/VPN,而是通过物理 NIC/LAN 网关。(通常这仅适用于充当某些服务器的 VPN 客户端的情况面向公众

至于目标中的“终止开关”部分,您实际上只需要创建一个要遍历的链-o ens160OUTPUT在那里,您可以添加所需的例外情况(例如,与 匹配的封装 VPN 流量-p tcp --dport 1198),并使用最终 / 后备规则结束该链DROP

在这种情况下,我认为您的 VPN 服务器是否具有“固定”IP 并不重要,除非您有偏执狂,担心某些恶意软件或其他东西非常具体,以至于它们使用与 VPN 完全相同的目标端口来泄露您的数据。(问题是,这种担心没有多大意义,因为恶意软件采取的路径几乎与其目标无关?我的意思是,恶意软件保护并不是终止开关的目的,不是吗?)

相关内容