我已经在 Debian9 设备上使用 Bind9 设置了内部 DNS,以便我的同事可以调用我们的公共云基础设施主机名来连接到他们私有接口上的服务器。
我在 Debian 9 设备上设置了一个 OpenVPN 服务器,以便我的同事可以从其私有接口访问我们的公共云基础设施。我希望他们使用他们的主机名连接到服务器,所以我设置了一个 Bind9 DNS 服务器。出于安全原因,我不允许在此服务器上进行递归。我的同事需要在连接到 VPN 时访问互联网。
当我将 DNS 和域配置推送到 Windows 客户端时,我会:
可以使用互联网但不能解析服务器的主机名(注释 block-outside-dns):客户端仅使用 ISP 的 DNS
可以解析服务器主机名但不能使用互联网(取消注释的 block-outside-dns):客户端仅使用内部 DNS
我猜问题出在这样一个事实:如果可以访问,Windows 只会尝试一个 DNS,而不会尝试其他接口上的其他 DNS。有没有办法让 Windows 客户端使用内部 DNS 进行 VPN 通信,使用 ISP 的 DNS 进行互联网通信?除了允许内部 DNS 服务器上的递归之外,我别无选择吗?
OpenVPN DNS 配置:
push "dhcp-option DNS X.X.X.X"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DOMAIN mydomain.com"
push "register-dns"
push "block-outside-dns"
- - - - - - - - - - - - - 编辑 - - - - - - - - - - - - - -
因此,显然,Windows 只能请求一个 DNS 来解析名称。如果第一个 DNS 给出否定响应,它就不会尝试另一个 DNS。就我而言,这意味着当我尝试连接到服务器的主机名时,Windows 将询问 ISP 的 DNS,而不会询问内部 DNS。我能想到的唯一解决方法是使用 FQDN 连接到服务器,我尽量避免这样做,因为它可能很长。我也可以允许内部 DNS 上的递归,但我尽量避免这样做,因为我不希望所有 DNS 查询都路由到内部 DNS。
答案1
不幸的是,您需要让内部 DNS 为您的客户端解析查询才能使其正常工作。但是,您可以这样设置,让它们使用内部 DNS 解析所有内容,但您只将流量隧道传输到内部 IP 范围。这样,您的客户端会获得 DNS 查询答案,但它们将使用其正常的上行链路实际将流量发送到 Internet 上的远程主机。