在我的网络中我有:
- mikrotik 路由器 (
10.0.0.1
) 带有静态 DNS 条目myhost.mydomain.com
->10.0.0.4
- 作为上游 DNS
10.0.0.128
使用的adguard 服务器 ( )10.0.0.1
- DHCP 将其
10.0.0.128
作为主要 DNS。
我在 Ubuntu 机器上遇到了非常奇怪的 DNS 解析情况:
[21:22:18][root@ubuntu]:~# nslookup myhost.mydomain.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: myhost.mydomain.com
Address: 10.0.0.4
** server can't find myhost.mydomain.com: NXDOMAIN
所以 - 名称解析为 10.0.0.4,但不知何故它仍然说NXDOMAIN
- 这是怎么回事?
更奇怪的是,当我登录到我的域名注册商并添加一个CNAME
指向的*.mydomain.com
条目mydomain.com
(解析为我的托管服务提供商的 IP)时 - 我看到的是:
[21:58:04][root@ubuntu]:~# nslookup myhost.mydomain.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: myhost.mydomain.com
Address: 10.0.0.4
myhost.mydomain.com canonical name = mydomain.com.
但是,从我的日常驱动程序(macOS)中我没有遇到这个问题:
[20:46:57][shalak@shalak-mac]:~$ nslookup myhost.mydomain.com
Server: 10.0.0.128
Address: 10.0.0.128#53
Non-authoritative answer:
Name: myhost.mydomain.com
Address: 10.0.0.4
这里发生了什么?
答案1
那么 - 名称解析为 10.0.0.4,但不知何故它仍然显示 NXDOMAIN - 这是怎么回事?
nslookup 使二查询:一个用于A
记录,另一个用于AAAA
记录(IPv6 地址)。通常,两个查询要么成功,要么失败(无论域具有哪种地址 - 没有 IPv6 地址只意味着空的成功答案)。
但有些解析器(尤其是一些广告拦截器)误解了 DNS 协议,只要请求的记录类型不存在,就会回复 NXDOMAIN,即使名称通常存在。(事实上,我记得 Adguard 就是这样做的故意地,以“阻止 IPv6 泄漏”之类的。)
使用nslookup -q=A
和nslookup -q=AAAA
比较结果。
使用数据包捕获工具来验证 Adguard 是否从上游(即来自 Mikrotik)接收 NXDOMAIN 或者是否自行决定发明响应。(如果是 Mikrotik,请确保您正在运行最新的固件。)
答案2
这是 RouterOS 7.7 中的一个错误 - 我花了 2 天时间对其进行故障排除 :( 解决方案:降级或安装 7.8beta3
来自 7.8b3 的变更日志:
*) dns - 当上游服务器上未配置或找不到适当类型记录时,以“NOERROR”响应静态域名的 DNS 请求;