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

dga*_*gan 2 dns linux-mint resolv.conf

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

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

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

tel*_*coM 5

在 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
Run Code Online (Sandbox Code Playgroud)

这意味着:

  • 忽略/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;
};
Run Code Online (Sandbox Code Playgroud)

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