首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么nslookup会返回一个响应,然后超时?

为什么nslookup会返回一个响应,然后超时?
EN

Unix & Linux用户
提问于 2022-10-11 15:11:32
回答 2查看 837关注 0票数 0

下面是我的nslookup正在做的事情:

代码语言:javascript
运行
复制
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侦听名称服务,该接口的地址被配置为自己的名称服务器:

代码语言:javascript
运行
复制
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
代码语言:javascript
运行
复制
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
代码语言:javascript
运行
复制
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
代码语言:javascript
运行
复制
ubuntu@ca:~$ tail -4 /etc/resolv.conf 

nameserver 127.0.0.53
options edns0 trust-ad
search test freesoft.org

它正在做我想做的事情,也就是回答".test“域的查询,但我不明白为什么在得到答案之后,它会延迟15秒。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-10-17 03:18:42

nslookup将同时查询A和AAAA记录,因此如果A查询立即返回,而AAAA永远不会返回,那么nslookup将立即打印响应,然后超时。

下面是我创建的关于128.8.8.254上的dnsmasq服务器如何回答各种类型查询的表:

代码语言:javascript
运行
复制
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域是权威的。现在它的表现如下:

代码语言:javascript
运行
复制
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)

nslookupping现在立即做出回应。

出于同样的原因,我还发现使dnsmasqin-addr.arpa“权威”也是有用的:因此它返回一个立即的NOERROR,而不是超时。systemd-resolved服务似乎使用了响应记录的服务器的答案,而不是没有响应的服务器:

代码语言:javascript
运行
复制
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.
票数 1
EN

Unix & Linux用户

发布于 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-250dig @192.168.1.1 focal-250dig @127.0.0.53 focal-250应该告诉你哪个成功,并给出正确的答案。

注意:接口ens4的配置不正确,因为桥地址被设置为192.168.4.183,但是接口中的DNS服务器被设置为192.168.1.1

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/720570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档