nslookup이 응답을 반환한 후 시간 초과되는 이유는 무엇입니까?

nslookup이 응답을 반환한 후 시간 초과되는 이유는 무엇입니까?

이것이 내 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

처음 6줄(즉, 올바른 응답)이 즉시 인쇄된 다음 15초의 "시간 초과"가 기다립니다. 유사한 기능 ping도 동일합니다. 15초 동안 일시 중지한 다음 작업을 시작합니다.

이것은 systemd-resolved를 실행하는 Ubuntu 20.04 LTS 시스템입니다. 유일한 이상한 점은 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초 동안 응답하지 않는 이유를 이해할 수 없습니다.

답변1

nslookupA 및 AAAA 레코드가 모두 쿼리되므로 A 쿼리가 즉시 반환되고 AAAA가 반환되지 않으면 nslookup즉시 응답이 인쇄되고 시간 초과가 발생합니다.

dnsmasq다음은 128.8.8.254의 서버가 다양한 유형의 쿼리에 응답하는 방법을 보여주는 표입니다 .

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

출력은 nslookupA 레코드 응답(처음 6개 라인)을 받은 다음 AAAA 레코드 대기 시간이 초과됨을 의미합니다.

이 문제를 "수정"하는 한 가지 방법 은 해당 구성 파일을 넣어 도메인에 대한 권한이 dnsmasq있음 을 나타내는 것입니다 . 이제 다음과 같이 동작합니다:testauth-zone=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.

답변2

nslookup에는 3번의 재시도와 5초의 시간 제한이 있는 것 같습니다. 이것은 15초 지연을 설명합니다. 대화형 모드에서 시작 하여 nslookup이를 확인할 수 있습니다(이름을 입력하고 Enter를 누르기만 하면 됩니다). 이 모드에서는 set all사용된 모든 옵션(및 해당 값) 목록을 작성하고 가져옵니다 nslookup. 아마도 이것이 가장 쉬운 부분일 것이다.

nslookup이것이 정답을 줄 것이라고 말씀하셨습니다 . 예, 하지만 DNS 서버(/etc/resolv.conf에 있는 서버)에 접속하는 것은 127.0.0.53답이 아닙니다. dnsmasq응답의 주소가 해당 DHCP 서버 범위 내에 있기 때문에 응답 은 128.8.8.254의 서버 에서 옵니다 .

focal-250.test파일에 주소가 없으면 /etc/hosts. 당신은 그렇지 않은 것 같습니다. 따라서 의 관점에서는 nslookup으로 보낸 주소 요청에 127.0.0.53응답하지 않고 다시 시도하도록 구성됩니다.

어려운 부분은 서버가 어떻게 systemd-resolved작동하는지 설명하는 것입니다. 도메인 이름이 정규화된 경우, 즉 와 같은 여러 지점이 있으면 example.com확인이 간단하고 업스트림 DNS 서버로 전송됩니다.128.8.8.254 그리고192.168.1.1(이것이 로컬 라우터라고 가정합니다) 명령에 표시된 대로 resolvectl. 하지만 사용한 이름처럼 이름에 점이 없으면 focal-250해상도는가능한먼저 LLMNR, MulticastDNS 및/또는 Avahi 시스템으로 이동하고, 해결되지 않은 경우 일반 DNS 서버로 이동하세요. 읽어주세요포인트 4.1은 여기이 질문을 간략하게 연구하십시오.

즉, 실제로 확인하려는 DNS 서버에서 짧은 이름이 확인되고 있는지 감지하고 확인해야 합니다. A 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.

관련 정보