下面是我的nslookup正在做的事情:
ubuntu@ca:~$ time nslookup focal-250
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: focal-250.test
Address: 128.8.8.187
;; connection timed out; no servers could be reached
real 0m15.024s
user 0m0.005s
sys 0m0.018s
前六行(即正确的响应)立即打印,然后等待15秒“超时”。类似ping
的事情也是这样:暂停15秒,然后开始工作。
这是一个Ubuntu20.04LTS系统运行系统解析.唯一奇怪的是,它在其一个接口上有dnsmasq
侦听名称服务,该接口的地址被配置为自己的名称服务器:
ubuntu@ca:~$ resolvectl
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 3 (ens5)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 128.8.8.254
DNS Servers: 128.8.8.254
DNS Domain: test
Link 2 (ens4)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
DNS Domain: freesoft.org
ubuntu@ca:~$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
ens4 UP 192.168.4.183/24 fe80::e2c:d2ff:fe67:0/64
ens5 UP 128.8.8.254/24 fe80::e2c:d2ff:fe67:1/64
ubuntu@ca:~$ tail -5 /etc/dnsmasq.conf
listen-address=128.8.8.254
bind-interfaces
dhcp-range=128.8.8.101,128.8.8.200,12h
dhcp-authoritative
domain=test
ubuntu@ca:~$ tail -4 /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search test freesoft.org
它正在做我想做的事情,也就是回答".test“域的查询,但我不明白为什么在得到答案之后,它会延迟15秒。
发布于 2022-10-17 03:18:42
nslookup
将同时查询A和AAAA记录,因此如果A查询立即返回,而AAAA永远不会返回,那么nslookup
将立即打印响应,然后超时。
下面是我创建的关于128.8.8.254上的dnsmasq
服务器如何回答各种类型查询的表:
dig @128.8.8.254 A focal-250 immediate success (A record)
dig @128.8.8.254 A focal-250.test immediate success (A record)
dig @128.8.8.254 AAAA focal-250 immediate SERVFAIL
dig @128.8.8.254 AAAA focal-250.test 15 second timeout, no response
nslookup
的输出意味着它得到了A记录响应(前六行),然后超时等待AAAA记录。
我发现“修复”问题的一种方法是通过将dnsmasq
放在配置文件中,告诉test
域是权威的。现在它的表现如下:
dig @128.8.8.254 A focal-250 immediate success (A record)
dig @128.8.8.254 A focal-250.test immediate success (A record)
dig @128.8.8.254 AAAA focal-250 immediate SERVFAIL
dig @128.8.8.254 AAAA focal-250.test immediate NOERROR (no records)
nslookup
和ping
现在立即做出回应。
出于同样的原因,我还发现使dnsmasq
对in-addr.arpa
“权威”也是有用的:因此它返回一个立即的NOERROR,而不是超时。systemd-resolved
服务似乎使用了响应记录的服务器的答案,而不是没有响应的服务器:
ubuntu@ca:~$ dig +short @128.8.8.254 -x 18.165.83.71
ubuntu@ca:~$ dig +short @192.168.1.1 -x 18.165.83.71
server-18-165-83-71.iad55.r.cloudfront.net.
ubuntu@ca:~$ dig +short @127.0.0.53 -x 18.165.83.71
server-18-165-83-71.iad55.r.cloudfront.net.
发布于 2022-10-12 04:55:02
在我看来,nslookup有3次重试和5秒超时。这就解释了15秒的延迟。您可以通过在交互模式下启动nslookup
来验证(只需键入该名称并按enter键)。在这种模式下,您可以编写set all
,并得到nslookup
使用的所有选项(及其值)的列表。这可能是最简单的部分。
您说nslookup
给出了正确的答案,是的,但是联系到的DNS服务器(在/etc/ that中的服务器) 127.0.0.53
不是应答服务器。答案来自dnsmasq
服务器,为128.8.8.254,因为答案中的地址是该DHCP服务器范围内的地址。
除非您在focal-250.test
文件中有/etc/hosts
的地址。而你似乎没有。因此,从nslookup
的角度来看,发送给127.0.0.53
的地址请求没有得到答复,它被配置为重试。
困难的部分是解释来自systemd-resolved
的服务器是如何工作的。如果域名是完全限定的,换句话说,它有几个点,比如example.com
,解析很简单,它只是被发送到128.8.8.254
和 192.168.1.1 (我假设这是本地路由器)的上游DNS服务器(S),这是命令resolvectl
给出的。但是,如果名称没有点,作为您使用focal-250
的名称,则分辨率<#>可能首先转到LLMNR、MulticastDNS和/或Avahi系统,如果没有解析,则转到正常的DNS服务器。请阅读此处4.1点以获得对这个问题的非常简短的了解。
简而言之,您应该检测(并确保) DNS服务器正在解析短名称,而您实际上想要解决这些名称。dig @128.8.8.254 focal-250
、dig @192.168.1.1 focal-250
和dig @127.0.0.53 focal-250
应该告诉你哪个成功,并给出正确的答案。
注意:接口ens4
的配置不正确,因为桥地址被设置为192.168.4.183
,但是接口中的DNS服务器被设置为192.168.1.1
。
https://unix.stackexchange.com/questions/720570
复制相似问题