Als Ubuntu-gebruiker heb je waarschijnlijk wel eens meegemaakt dat "de domeinnaam niet werkt, maar ik kan wel verbinding maken met het IP-adres". In dit geval ligt de oorzaak meestal bij de DNS-instellingen. Vooral recentelijk gebruikt Ubuntu standaard de DNS-resolver daemon genaamd systemd-resolved, daarom is het belangrijk om de structuur te begrijpen.


1. De stroom van DNS-aanvragen

Lees de onderstaande samenvatting zorgvuldig en als je deze begrijpt, zal bijna al je problemen worden opgelost.

  1. De gebruiker doet een aanvraag via de browser of andere applicaties met de domeinnaam.
  2. Linux leest standaard /etc/resolv.conf om de DNS op te lossen (dit bestand is symlink naar /run/systemd/resolve/stub-resolv.conf).
  3. /run/systemd/resolve/stub-resolv.conf is ingesteld op 127.0.0.53, en hiermee wordt systemd-resolved geïntroduceerd.
  4. Het systemd-resolved van het systeem wordt gecontroleerd door het configuratiebestand /etc/systemd/resolved.conf.
  5. Met andere woorden, systemd-resolved doet queries naar de DNS-servers die zijn ingesteld in /etc/systemd/resolved.conf,
  6. ontvangt een antwoord en voltooit de conversie van domein naar IP-adres.

2. Samenvatting van de belangrijkste componenten

Zoals eerder besproken, zijn er vier belangrijke configuratiebestanden in systemd-resolved. Het is essentieel om hun functie te begrijpen.

2-1. /etc/resolv.conf

  • De locatie waar de lijst van DNS-servers wordt gelezen in traditionele Linux-systemen
  • Maar nu moet het bestaan als symlink voor compatibiliteit met systemd.
  • Normaal moet het als volgt zijn ingesteld om correct te werken: bash /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
  • Dit bestand fungeert als een "tussenpersoon tussen traditionele apps en systemd-resolved" in het huidige systeem.

2-2. /run/systemd/resolve/stub-resolv.conf

  • Bevat de informatie van de lokale DNS stubserver (127.0.0.53) beheerd door systemd-resolved.
  • Als /etc/resolv.conf naar dit bestand wijst, zullen alle DNS-aanvragen door systemd-resolved gaan.

2-3./etc/systemd/resolved.conf

  • systemd-resolved heeft een kernconfiguratiebestand.
  • Hier kunnen items zoals DNS=, FallbackDNS= worden ingesteld om prioriteit in te stellen.
  • Permanent ingesteld en blijft behouden na een herstart.

2-4. /run/systemd/resolve/resolv.conf

  • Bevat een bestand met de werkelijke lijst van DNS-servers beheerd door systemd-resolved.
  • Geavanceerde gebruikers kunnen deze in plaats van stub-resolv.conf met /etc/resolv.conf verbinden om direct aanvragen naar de DNS-server te doen (bypass-instelling).

3. Voorbeeld van problemen: onbetrouwbare DNS-server ingesteld op een router geleverd door de ISP

  • De DNS-server van de representatieve ISP KT in Zuid-Korea (bijvoorbeeld: 168.126.63.1) is ingesteld op de router, maar als ik geen controle heb over die router, kunnen er af en toe DNS-problemen optreden.
  • De KT DNS is vaak onbetrouwbaar in responssnelheid of faalt vaak bij de UDP/TCP-handshake.
  • Als de volgende berichten herhaald worden in de systemd-resolved log, is dat een teken van problemen: Using degraded feature set TCP instead of UDP for DNS server 168.126.63.1. Using degraded feature set UDP instead of TCP for DNS server 168.126.63.1.
  • Uiteindelijk leidt dit tot falen in domeinnaamvertaling → het kan niet worden verbonden met de website.

4. Aanbevolen DNS-servers

Naam Adres Kenmerken
Google DNS 8.8.8.8, 8.8.4.4 Snel en betrouwbaar
Cloudflare DNS 1.1.1.1, 1.0.0.1 Snel en uitstekende bescherming van persoonlijke gegevens
Quad9 9.9.9.9 Beveiligingsdreigingen filteren

5. Hoe een betrouwbare DNS-configuratie op te zetten

  1. Open het bestand /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
  1. Pas de instellingen toe
sudo systemctl restart systemd-resolved
  1. Controleer of /etc/resolv.conf correct is gekoppeld.
ls -l /etc/resolv.conf

→ Moet verbonden zijn met /run/systemd/resolve/stub-resolv.conf

Bij behoefte kan het geforceerd opnieuw worden ingesteld:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

6. Let op de tussenkomst van NetworkManager

Ubuntu met een GUI kan soms het DNS overschrijven met NetworkManager.

  • Als automatische DNS-instelling ingeschakeld is, kunnen de instellingen van systemd-resolved worden genegeerd.
  • Oplossing: bash nm-connection-editor → Verbinding bewerken → IPv4-tabblad → automatische DNS uitschakelen → handmatig DNS invoeren

7. Conclusie

  • Het is beter om KT DNS te vermijden, aangezien er vaak onbetrouwbaarheid wordt gerapporteerd.
  • DNS-configuratie via systemd-resolved is een zeer krachtige manier om de stabiliteit in Ubuntu te verhogen.
  • Door de instellingen correct te begrijpen en toe te passen, kun je stress door falende domeinvertalingen verminderen.

8. Reactie van Jesse

Configuraties gebaseerd op begrip zijn de sterkste beveiliging en onderhoud. Ik hoop dat dit artikel nuttig is voor degenen die in de war zijn over DNS-instellingen op Ubuntu.