在 OpenVPN 上拆分 DNS

在 OpenVPN 上拆分 DNS

我发现了一些与此相关的旧帖子,但它们似乎已经有好几年了。例如 openVPN - 分割隧道 DNS 优先级

我在 Windows 上。
我使用本地 DNS 连接到本地网络。
我使用 OpenVPN 连接到另一个网络,该网络在 *.example.com 上有可用资源。

是否有可能为 *.example.com 设置一个 DNS,为其他所有设置另一个 DNS?我知道我可以在我的机器上设置本地 DNS 来解决这个问题,或者在我的本地 hosts 文件中输入 example.com 的所有主机名。

答案1

我在 Windows 10 上使用 OpenVPN,我已经解决这个问题一段时间了,使用其他人建议的接口度量方法只取得了部分成功。我已经使用“OpenVPN GUI v11.13.0.0”一段时间了。

文章@till 链接让我大吃一惊。标题为“使用 DNS 解析区域时拆分 DNS”的部分具有神奇的效果:

请注意,并非所有 OpenVPN 客户端都支持此功能,并且不同版本的 OpenVPN 的行为也存在一些差异。使用 OpenVPN Connect v3 客户端软件可以实现最佳效果。

当您使用 split-DNS 时,您将不会在 ipconfig 或 ifconfig 输出中看到正在推送的 DNS 服务器。DNS 服务器不会在网络接口配置级别实现。相反,它将在 DNS 系统中的 DNS 解析策略表中实现。

文章中提到了V3 客户端以及一些有用的命令:

netsh namespace show effectivepolicy
ipconfig /all

但事实证明,在 Windows 7+ 上,如果您有权访问管理员 PowerShell,则会显示以下策略:

Get-DnsClientNrpt(Global|Policy|Rule)
Add-DnsClientNrptRule -Namespace ".domainfromvpn.com" -NameServers "192.168.0.100"
Remove-DnsClientNrptRule -Namespace ".domainfromvpn.com"

其中“.domainfromvpn.com”是您想要通过 OpenVPN DNS 查找的特殊域,而 192.168.0.100 是该内部 DNS 服务器的(推送路由)IP。

我现在在 Windows 10 机器上使用 OpenVPN Connect v3 运行 Split-DNS,通过远程/内部 DNS 在 VPN 连接上进行单域解析。

答案2

恐怕这是不可能的,因为 DNS 解析器会独立完成您要解析的工作......

在 Windows 上,有一个“功能”,即接口上的默认度量也用于与用于解析的 DNS 服务器相关的优先级(顺序)设置。因此,根据您计划使用的 DNS 服务器(如果是本地服务器或 VPN 可访问网络),您应该在建立连接之前在 TAP 接口上设置默认度量。

唯一的选择可能是(取决于解析器的具体行为)在 VPN 上设置 DNS 服务器以仅解析特定域而不进行递归。因此,一旦 DNS 服务器不提供“针对其余区域”的答案,系统上的本地 DNS 解析器可能会尝试下一个 DNS 服务器。因此,可以肯定的是,一旦 VPN 的 DNS 服务器(至少对于视图而言)将进行递归,则不会使用其他 DNS 服务器……无论如何,DNS 解析器端(客户端)的这种行为可能会因实施而异 :-(。

答案3

大多数 VPN 客户端都具有在打开 VPN 连接时覆盖 DNS 服务器设置的设置,但这会将所有 DNS 查询转发到公司 DNS 服务器。只有在运行 VPN 的计算机上运行 DNS 服务器时,才有可能为不同的域设置不同的条件转发器。

答案4

每当我更新 OpenVPN 时我似乎都必须弄清楚这一点,因此以下是我在撰写本文时在最新版本 2.5.4-I603 上发现的内容。

通常,使用“block-outside-dns”选项强制所有 DNS 查询通过 VPN 来解决此问题。但是,就我而言,我家里有本地 Intranet,其中也有我想访问的设备,而我的 VPN DNS 对这些设备一无所知。

我的默认网关必须保留为本地路由器,但我的 VPN 服务器会将 VPN 网络路由推送到客户端,因此这不是问题。我只需要在 ISP DNS 之前查询我的 VPN DNS,这样那些具有公共 IP 地址的主机(拆分 DNS)以及仅存在于 VPN 网络上的主机将返回 VPN IP 地址。

为了实现这一点,我的 OpenVPN 接口必须具有最低的“接口度量”,不要与“路由度量”混淆,我总是这样做。

您可以从命令行设置接口度量,然后这是一个很好的例子

这也可以通过 OpenVPN 客户端配置文件完成:

script-security 2
route-up 'c:\\windows\\system32\\cmd.exe /c netsh interface ipv4 set interface %dev_idx% metric=5'

不幸的是,即使使用最新版本的 OpenVPN,这也需要管理员权限。

相关内容