所以我有多个域名服务器/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.conf
only 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 服务器地址。