我发现了一些关于这个的旧线程,但它们似乎已经有几年了。例如 openVPN - 分割隧道 DNS 优先级
我在 Windows 上。
我使用本地 DNS 连接到本地网络。
我使用 OpenVPN 连接到另一个网络,该网络在 *.example.com 上有可用的资源。
甚至可以为 *.example.com 使用一个 DNS,而为其他所有内容使用另一个 DNS?我知道我可以在我的机器上设置一个本地 DNS 来解决它,或者在我的本地主机文件中输入 example.com 的所有主机名。
我发现了一些关于这个的旧线程,但它们似乎已经有几年了。例如 openVPN - 分割隧道 DNS 优先级
我在 Windows 上。
我使用本地 DNS 连接到本地网络。
我使用 OpenVPN 连接到另一个网络,该网络在 *.example.com 上有可用的资源。
甚至可以为 *.example.com 使用一个 DNS,而为其他所有内容使用另一个 DNS?我知道我可以在我的机器上设置一个本地 DNS 来解决它,或者在我的本地主机文件中输入 example.com 的所有主机名。
恐怕这是不可能的,因为 DNS 解析器会根据您正在解析的内容独立完成工作......
在 Windows 上,有一个“功能”,即接口上的默认度量也用于与用于解析的 DNS 服务器相关的优先级(顺序)设置。因此,根据您计划使用的 DNS 服务器(如果是本地服务器或 VPN 可访问网络),您应该在建立连接之前在 TAP 接口上设置默认指标。
唯一的选择可能是(取决于解析器的特定行为)在 VPN 上设置 DNS 服务器以仅解析特定域而不进行递归。因此,一旦 DNS 服务器没有为“其余区域”提供答案,系统上的本地 DNS 解析器可能会尝试下一个 DNS 服务器。因此,可以肯定的是,一旦 VPN 的 DNS 服务器(至少对于视图)将执行递归,其他 DNS 服务器将不会被使用......无论如何,DNS 解析器端(客户端)的这种行为可能会因实现而异:-(。
大多数 VPN 客户端都有一个设置,可以在您打开 VPN 连接时覆盖 DNS 服务器设置,但这会将所有 DNS 查询转发到公司 DNS 服务器。只有在运行 VPN 的机器上运行 DNS 服务器时,才能为不同的域使用不同的条件转发器。
当您连接到 OpenVPN VPN 时,有一些 VPN 客户端可以正确实现拆分 DNS。使用这些客户端,我可以同时连接到多个远程 OpenVPN VPN,并为每个 VPN 连接中的每个域使用不同的 DNS。
对于 Windows 和 MacOS,您可以使用Viscosity。它不是免费的,但它可以工作。
在现代 linux 桌面中,我使用 Ubuntu,当您为 NetworkManager 和您的桌面添加适当的软件包时,默认情况下会激活拆分 DNS(NetworkManager 具有与 systemd-resolved 对话以在每个连接处设置适当拆分 dns 的所有魔力)。
每当我更新 OpenVPN 时,我似乎都必须弄清楚这一点,所以这是我在撰写本文时发现的最新版本 2.5.4-I603。
通常,使用强制所有 DNS 查询通过 VPN 的“block-outside-dns”选项可以解决此问题。然而,在我的情况下,我家中有本地 Intranet 以及我想要访问的设备,而我的 VPN DNS 对它们一无所知。
我的默认网关必须保留我的本地路由器,但我的 VPN 服务器将 VPN 网络路由推送到客户端,因此这不是问题。我只需要在我的 ISP DNS 之前查询我的 VPN DNS,以便为那些具有公共 IP 地址的主机以及仅存在于 VPN 网络上的主机返回 VPN IP 地址。
要做到这一点,我的 OpenVPN 接口必须具有最低的“接口指标”,以免与我一直使用的“路由指标”混淆。
您可以从命令行设置 Interface Metric,这是一个很好的示例,说明了如何做到这一点。
这也可以从 OpenVPN 客户端配置文件中完成:
不幸的是,即使使用最新的 OpenVPN 版本,这也需要管理员权限。