TL;DR
Interogările mele DNS sunt lente deoarece systemd-rezolvate interogează cu succes serverul DNS pe IPv4, dar interogează în mod repetat pe IPv6 după ce serverul DNS răspunde cu un REFUSED. Este aceasta o configurație rezolvată? O problemă cu dnsmasq? sau un bug?
Am o instalare ubuntu 20.04 de stoc conectată la dnsmasq care rulează pe un aparat cu aer întrerupt (ubiquity edgerouter) cu „bară” de domeniu de nivel superior (amintiți-vă cu aer întrerupt, dar nu pare, indiferent de ce este acesta - adică .com etc.) . Solicitările DNS se rezolvă rapid prin clienții Mac și Windows. Pentru ubuntu, interogările DNS durează aproximativ 5 secunde pentru a se rezolva. Căutând în jur, problemele Ubuntu DNS sunt discutate în multe locuri, dar comportamentul de bază pe care îl văd nu a fost din cunoștințele mele.
Problemă de nivel superior: dacă dau ping la o mașină folosind ubuntu, durează aproximativ 5 secunde pentru ca răspunsurile să revină:
$ ping foo
# trec aproximativ 5 secunde
PING foo.bar (10.2.1.132) 56(84) octeți de date.
64 de octeți din foo.bar (10.2.1.132): icmp_seq=1 ttl=63 time=1.10 ms
64 de octeți din foo.bar (10.2.1.132): icmp_seq=2 ttl=63 time=1.02 ms
...
Ceea ce pare o problemă evidentă de timeout. Interesant, totuși, se rezolvă. Alergare starea resolvectl
îmi oferă rezultatul standard, inclusiv că DNS este furnizat de contractul de închiriere DHCP emis de dnsmasq.
$ resolvectl stare
...
o mulțime de lucruri
...
Link 3 (enp0s25)
Domenii curente: DNS
Setare DefaultRoute: da
Setare LLMNR: da
Setare MulticastDNS: nu
Setare DNSoverTLS: nu
Setare DNSSEC: nu
DNSSEC suportat: nu
Servere DNS: 10.1.1.1
Domeniu DNS: ~.
bar
Oprirea rezolvată și rularea în modul de depanare pare să arate problema. Mașina ubuntu interogează serverul DNS prin IPv4 și primește un răspuns imediat. Apoi interogează în mod repetat prin IPv6, la care serverul DNS răspunde cu REFUSED până când expiră.
$ sudo systemctl stop systemd-rezolvat
$ sudo SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-resolved
...
multe înregistrări de pornire
...
Am primit pachetul de interogare UDP stub DNS pentru id 40457
Căutând RR pentru foo.bar ÎN A.
Trecerea la serverul DNS 10.1.1.1 pentru interfața enp0s25.
Cache miss pentru foo.bar IN A
Tranzacția 42924 pentru <foo.bar IN A> scope dns pe enp0s25/*.
Folosind nivelul de caracteristică UDP+EDNS0 pentru tranzacția 42924.
Folosind serverul DNS 10.1.1.1 pentru tranzacția 42924.
Se trimite pachetul de interogări cu id 42924.
Se procesează interogarea...
Am primit un pachet de interogare UDP stub DNS pentru id 59119
Căutând RR pentru foo.bar ÎN AAAA.
Cache miss pentru foo.bar ÎN AAAA
Tranzacția 21734 pentru <foo.bar IN AAAA> scope dns pe enp0s25/*.
Folosind nivelul de caracteristică UDP+EDNS0 pentru tranzacția 21734.
Folosind serverul DNS 10.1.1.1 pentru tranzacția 21734.
Se trimite pachetul de interogări cu id 21734.
Se procesează interogarea...
Se procesează pachetul primit la tranzacția 42924 (rcode=SUCCESS).
Verificat, primim un răspuns la nivelul de caracteristică UDP+EDNS0 de la serverul DNS 10.1.1.1.
S-a adăugat o intrare pozitivă neautentificată în cache pentru foo.bar ÎN A 7200s pe enp0s25/INET/10.1.1.1
Tranzacția 42924 pentru <foo.bar IN A> pe scope dns pe enp0s25/* acum finalizată cu <success> din rețea (nesemnat).
Se trimite pachetul de răspuns cu id 40457 pe interfața 1/AF_INET.
Eliberarea tranzacției 42924.
Se procesează pachetul primit la tranzacția 21734 (rcode=REFUSED).
Serverul a returnat REFUS, schimbând servere și reîncercând.
Reîncercarea tranzacției 21734.
Cache miss pentru foo.bar ÎN AAAA
Tranzacția 21734 pentru <foo.bar IN AAAA> scope dns pe enp0s25/*.
Folosind nivelul de caracteristică UDP+EDNS0 pentru tranzacția 21734.
Se trimite pachetul de interogări cu id 21734.
Se procesează pachetul primit la tranzacția 21734 (rcode=REFUSED).
Serverul a returnat REFUS, schimbând servere și reîncercând.
...
se repetă timp de ~5 secunde
...
Tranzacția 44267 pentru <foo.bar IN AAAA> pe scope dns pe enp0s25/* acum completă cu <attempts-max-reached> din rețea (nesemnat).
Eliberarea tranzacției 44267.
De asemenea, sugerează că aceasta este problema:
$ nslookup foo
Server: 127.0.0.53
Adresa: 127.0.0.53#53
Răspuns neautorizat:
Nume: foo.bar
Adresa: 10.2.1.132
...
trec vreo 5 secunde
...
;; conexiunea a expirat; niciun server nu a putut fi atins
# aceasta revine imediat
$ nslookup -query=A foo
Server: 127.0.0.53
Adresa: 127.0.0.53#53
Răspuns neautorizat:
Nume: foo.bar
Adresa: 10.2.1.132
# în timp ce acest lucru expiră în aproximativ 5 secunde.
$ nslookup -query=AAAA foo
;; conexiunea a expirat; niciun server nu a putut fi atins
Întrebări:
Dacă serverul DNS a furnizat un răspuns IPv4 bun, de ce ar aștepta mașina ubuntu în timp ce încerca în mod repetat, fără succes, să obțină un răspuns IPv6?
Este aceasta o problemă de configurare ubuntu sau o problemă dnsmasq?
Mulțumesc anticipat.