自建 DNS,不打开递归解析,无法正常使用。

2024-08-18 23:13:45 +08:00
 sikeer

请教大家一个问题:

  1. 我在家里用群晖搭建了一个 DNS (地址为:192.168.1.2 ),这个 DNS 只用来解析一个域名:123.test.com 解析为自身( 192.168.1.2 ),并且这个解析只对家里的 LAN 上的设备有效

  2. 我在家里的手机上和电脑上,配置 DNS 为:192.168.1.2 ,223.5.5.5

  3. 我的想法是:任何 DNS 查询,首先到 192.168.1.2 ,如果是查询 123.test.com ,则应答,如果是其它域名,则不应答,由下一个 223.5.5.5 去应答。因此我在 192.168.1.2 上不启用剃归解析

4.结果是:nslookup 123.test.com 192.168.1.2 时,正常应答,但是,nslookup 123.test.com 时,无法正常解析 123.test.com. ping 123.test.com 也不行。

5.但是如果将递归解析打开,则一切正常。

请问大家,为什么?

2922 次点击
所在节点    DNS
16 条回复
Internet0User
2024-08-18 23:20:59 +08:00
递归解析 顾名思义嘛
要是不太了解的话可以看看递归解析的原理,相信你应该就明白了
szlytlyt
2024-08-19 00:19:43 +08:00
用户:如果主 dns 没有查到记录,会自动去备用 dns 查询吗

ChatGPT 说:
通常情况下,如果主 DNS 服务器响应了查询请求但没有找到对应的记录,Windows 系统不会自动切换到备 DNS 服务器进行查询。这是因为从技术上讲,主 DNS 已经正确地响应了请求,只是没有对应的记录。

换句话说,只有在主 DNS 服务器无法响应(如超时或连接失败)时,系统才会自动切换到备 DNS 。如果主 DNS 成功响应但没有找到记录,系统不会去备 DNS 再次查询。
yshtcn
2024-08-19 00:46:58 +08:00
因为递归解析才是你需要的功能。
nuk
2024-08-19 01:09:38 +08:00
因为 nslookup 不是递归查询,但是 windows 系统的 dns 客户端是递归查询,另外主 dns 只解析一个域名不会导致网络很慢吗。
Kobayashi
2024-08-19 02:00:05 +08:00
这什么和什么,你用的什么 DNS 服务软件、配置都没说啊,就一句群晖。
yinmin
2024-08-19 02:00:56 +08:00
nslookup 123.test.com 能看到具体使用了哪个 dns 服务器的。另外,windows 配置里的主 dns 、副 dns 不是依次使用,而是随机使用的。
flynaj
2024-08-19 02:27:12 +08:00
用 smartDNS ,DNS 填几个进去,会自动解析最快的
ho121
2024-08-19 08:13:55 +08:00
> 我的想法是:任何 DNS 查询,首先到 192.168.1.2 ,如果是查询 123.test.com ,则应答,如果是其它域名,则不应答,由下一个 223.5.5.5 去应答。

建议楼主确认一下您所用的系统,DNS 查询是不是这个逻辑,很可能不是您所想的逻辑。

> 但是如果将递归解析打开,则一切正常。

如果递归解析打开了,您自建的 DNS 服务器变成了全功能 DNS 服务器了,当然能解析任意域名。
cleanery
2024-08-19 09:14:52 +08:00
递归解析才是大多数 dns 的工作状态啊
你 dns 里没有该网站的缓存, 它自然要递归请求上级的 dns, 最后找到权威 dns
ShinichiYao
2024-08-19 09:24:20 +08:00
主 DNS 不响应才会转到备用 DNS ,主 DNS 活着的不会去备用 DNS 查
FengMubai
2024-08-19 09:36:11 +08:00
你这种情况没必要自建, 直接 dnsmasq 追加 host
mainjzb
2024-08-19 10:09:31 +08:00
我估计是 windows 会定期检测一些域名,比如 www.msftconnecttest.com:80
根据 windows 的内部判断,你的第一个 DNS 完全不可用。所以默认启用了第二个 DNS 。
如果你开了递归解析。第一个 DNS 就能访问到检测域名了,就使用了第一个 DNS 。
bingoup886
2024-08-19 10:14:04 +08:00
你的 dns 服务器解决了缓存穿透的问题:如果没有 value ,则缓存一个空值(有效),所以才不会走其他服务器了啊
sikeer
2024-08-20 09:16:45 +08:00
谢谢大家回复!
我用的是群晖自带的 DNS 服务套件。
当我把递归解析关闭时:

$nslookup 123.test.com 的回复是:

;; Got recursion not available from 192.168.1.2, trying next server
Server: 223.5.5.5
Address: 223.5.5.5#53

** server can't find 123.test.com: NXDOMAIN


但是用下面的命令:
$nslookup 123.test.com 192.168.1.2
Server: 192.168.1.2
Address: 192.168.1.2#53

Name: 123.test.com
Address: 192.168.1.2

我是在 macOS 上测试,并且在测试之前已经清空了 DNS 缓存
sudo dscacheutil -flushcache;
sudo killall -HUP mDNSResponder
sikeer
2024-08-20 09:19:30 +08:00
我在群晖 DNS 套件上的 ZONE 配置是:

123.test.com A 192.168.1.2
123.test.com NS ns.123.test.com
ns.123.test.com A. 192.168.1.2
sikeer
2024-08-20 09:21:04 +08:00
我的 MACOS 的系统 DNS 设置为:
192.168.1.2
223.5.5.5

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1065947

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX