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インターフェイスの1つからネームサービスを受信し、そのインターフェイスのアドレスが独自のネームサーバーとして構成されていることです。

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レコードの待ち時間を超えたことを意味します。

この問題を「修正」する1つの方法は、その構成ファイルを配置してドメインに対する権限が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)

nslookupping答えてください。

また、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.comDNSサーバーに送信されます。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-250dig @192.168.1.1 focal-250そしてdig @127.0.0.53 focal-250どれが成功したのかを教えて、正しい答えを提供する必要があります。

注:どこかに誤ったインターフェース設定がありますens4。ブリッジアドレスはに設定されていますが、192.168.4.183そのインターフェイスのDNSサーバーはに設定されています192.168.1.1

関連情報