并非所有域名服务器都会被查找

并非所有域名服务器都会被查找

所以我有多个域名服务器/etc/resolv.conf,但考虑到它们出现的顺序,我是否能够解析我的公司 VPN 主机名:当 VPN 的 DNS 位于我本地的 DNS 之前时,我是能够解析企业主机。当我的本地名称服务器是第一个时,我不是能够解析企业主机。

我不认为这是有意的行为,因为在向我扔东西之前必须测试所有名称服务器NXDOMAIN

我如何使所有名称服务器处于活动状态(第一次失败时不返回),以便该顺序无关紧要?

答案1

在 DNS 中,NXDOMAIN 消息并不完全是失败。这是,或者至少应该是,您所请求的域不存在的完全有效的信息。错误可能是“我不知道”或“我不允许告诉你”或“[沉默直到超时]”。

在 中/etc/resolv.conf,期望是所有配置的名称服务器都是相同的。也就是说,它们都应该对 DNS 信息具有相同的访问权限:它们都应该能够解析您可能需要解析的任何名称。

如果不是这样,那么传统的 Unix 风格/etc/resolv.conf就不够了。许多人尝试通过调整文件中 DNS 服务器的顺序来实现您想要的目的,但都失败了:但事实并非如此。

相反,您通常需要设置一个 DNS 解析器/缓存/代理,可以配置一些规则,例如“如果您需要解析的名称属于以下之一这些域,然后询问其中之一这些服务器;如果名字在域,然后使用服务器;对于其他一切,请使用那些服务器。”

例如,您可以dnsmasq在以下位置设置并编写类似的内容dnsmasq.conf

no-resolv
server=/corporate-domain.com.example/10.1.2.3
rev-server=10.1.0.0/16,10.1.2.3
server=/google.com/8.8.8.8
server=9.9.9.9

这意味着:

  • 忽略/etc/resolv.conf(以防止循环)
  • 使用名称服务器 10.1.2.3 解析corporate-domain.com.example域中的任何名称以及 10.1.0.0/16 网络中 IP 地址的任何反向查询
  • 使用 8.8.8.8 解析域中的任何google.com名称
  • 对于其余所有内容,请使用 9.9.9.9。

一旦您进行了dnsmasq这样的配置,您就可以配置/etc/resolv.confonly nameserver 127.0.0.1,将所有本地 DNS 请求重定向到本地dnsmasq.

如果您的本地名称服务器是 BIND,您可以使用以下区域声明执行相同操作type forward

zone "corporate-domain.com.example" {
    type forward;
    forwarders { 10.1.2.3; };
};

zone "1.10.in-addr.arpa" {
    type forward;
    forwarders { 10.1.2.3; };
}; 

zone "google.com" {
    type forward;
    forwarders { 8.8.8.8; 8.8.4.4; }; 
};

options {
    forwarders { 9.9.9.9; };
    forward only;
};

这实现了与上面配置完全相同的结果dnsmasq,但 BIND 配置语法有点冗长。

答案2

作为尝试更改 DNS 顺序或类似方法的替代方法:

如果您控制 VPN,您可以拦截端口 53/UDP 和端口 53/TCP 中的 DNS 请求,并将这些请求重定向到您选择的 DNS 服务器,而不是让客户端决定与哪个 DNS 服务器通信(某种程度上) 。

这样,当在 VPN 内部时,您可以强制客户端与能够解析公司主机的 DNS 服务器通信。

举个例子:我曾经管理过几个 VPN 服务器,其中有大约 4000 名使用个人电脑和手机的 BYOD VPN 用户。

由于我们国家在 DNS 级别进行审查,许多人手动插入 8.8.8.8 作为他们的 DNS 首选服务器。

通常,这些用户的症状是他们无法打开公司私人地址。

我有几个选择:

  • 任一帮助台都会取出 8.8.8.8 地址,当用户想要访问黑名单地址时,他们会自愿或心不在焉地插入这些地址,然后我们将回到第 0 格;
  • 或者,我可以拦截 VPN 中的 DNS 调用,无论它们正在谈论什么 DNS 地址,并将 DNS 查询重定向到公司 DNS 服务器地址。

相关内容