Linux ei pysty ratkaisemaan DNS:ää: syyt ja ratkaisut

Jos Linuxissa internetyhteys näyttää olevan olemassa, mutta verkkosivut eivät avaudu, tai jos yhteys toimii IP-osoitteella mutta ei verkkotunnuksella, ongelma liittyy usein DNS-nimien ratkaisuun. DNS:n tehtävänä on muuntaa verkkotunnukset, kuten example.com, todellisiksi IP-osoitteiksi. Jos tämä prosessi epäonnistuu, verkko voi näyttää toimivalta, mutta tavallinen internetin käyttö vaikeutuu huomattavasti.

Tyypilliset oireet

  • Selain ilmoittaa, ettei palvelinta löydy
  • ping 8.8.8.8 toimii, mutta ping google.com epäonnistuu
  • Paketinhallintatyökalut kuten apt, dnf, yum ja pacman eivät toimi kunnolla
  • Näkyviin tulee virhe Temporary failure in name resolution

Mitä kannattaa tarkistaa ensin

Ensin täytyy selvittää, koskeeko ongelma koko verkkoa vai ainoastaan DNS:ää.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

Jos 8.8.8.8 vastaa mutta google.com ei, kyse on todennäköisesti DNS-ongelmasta. Jos edes IP-osoitteeseen ei saada yhteyttä, syy on luultavasti Wi-Fissä, verkkoliitännässä, yhdyskäytävässä tai reitityksessä.

Tärkeimmät syyt

1. Virheellinen /etc/resolv.conf-asetus

Monissa Linux-järjestelmissä DNS-palvelintiedot tallennetaan tiedostoon /etc/resolv.conf. Jos siellä ei ole oikeaa nameserver-määrittelyä, verkkotunnuksia ei voida ratkaista.

cat /etc/resolv.conf

Esimerkki:

nameserver 8.8.8.8
nameserver 1.1.1.1

Jos tiedosto on tyhjä tai osoittaa väärään paikalliseen DNS-palvelimeen, ongelmia ilmenee. On myös hyvä huomata, että moderneissa Linux-järjestelmissä tämän tiedoston luovat usein automaattisesti NetworkManager tai systemd-resolved, joten käsin tehdyt muutokset voidaan kirjoittaa yli.

2. Ongelma systemd-resolved-palvelussa

Järjestelmissä kuten Ubuntu systemd-resolved hallitsee usein DNS:ää ja käyttää osoitetta 127.0.0.53 paikallisena resolverina. Jos tämä palvelu pysähtyy, DNS lakkaa toimimasta.

systemctl status systemd-resolved
resolvectl status

Tarvittaessa käynnistä palvelu uudelleen:

sudo systemctl restart systemd-resolved

3. NetworkManager ei ota DNS:ää käyttöön oikein

Työpöytä-Linuxissa NetworkManager hakee DNS-tiedot usein DHCP:n kautta. Jos verkkoprofiili on vioittunut tai uudelleenyhdistäminen epäonnistuu, oikeita DNS-palvelimia ei ehkä käytetä.

nmcli dev show | grep DNS
nmcli connection show

Käynnistä se tarvittaessa uudelleen:

sudo systemctl restart NetworkManager

4. VPN:n, proxyn tai palomuurin vaikutus

VPN voi ohjata DNS-kyselyt väärää reittiä pitkin, ja palomuuri voi estää portin 53. Tällöin verkko voi näyttää toimivan, mutta verkkotunnuksia ei saada ratkaistua.

5. Vioittunut tai vanhentunut DNS-välimuisti

Jos paikallinen välimuisti on vioittunut tai vanhentunut, jotkin verkkotunnukset voivat lakata toimimasta. Järjestelmissä, joissa käytetään systemd-resolvedia tai nscd:tä, välimuistin tyhjentäminen voi auttaa.

sudo resolvectl flush-caches

Käytännön vaiheet ongelman ratkaisemiseksi

Vaihe 1: Testaa suoraan julkista DNS:ää vastaan

nslookup google.com 8.8.8.8
dig google.com @8.8.8.8

Jos tämä toimii, ulkoinen DNS on todennäköisesti kunnossa ja ongelma on paikallisessa asetuksessa.

Vaihe 2: Määritä julkinen DNS tilapäisesti

sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'

Tämä on vain tilapäinen ratkaisu. Uudelleenkäynnistyksen tai uudelleenyhdistämisen jälkeen tiedosto voi muuttua takaisin. Pysyvää ratkaisua varten on korjattava NetworkManagerin, netplanin tai systemd-resolvedin asetukset.

Vaihe 3: Tarkista netplan Ubuntussa

sudo nano /etc/netplan/*.yaml

Esimerkki:

nameservers:
  addresses: [8.8.8.8,1.1.1.1]

Tämän jälkeen ota muutos käyttöön:

sudo netplan apply

Vaihe 4: Hae DHCP-tiedot uudelleen

sudo dhclient -r
sudo dhclient

Jos DHCP-palvelin antoi väärät DNS-tiedot, tämä voi auttaa korjaamaan ongelman.

Hyödyllisiä komentoja tarkistukseen

ping -c 4 8.8.8.8
ping -c 4 google.com
cat /etc/resolv.conf
systemctl status systemd-resolved
resolvectl status
nmcli dev show | grep DNS
nslookup google.com
dig google.com
journalctl -u systemd-resolved --no-pager | tail -n 50

Näin estät ongelman toistumisen

  • Älä tyydy pelkkään /etc/resolv.conf-tiedoston käsin muokkaamiseen
  • Ymmärrä, hallitseeko DNS:ää DHCP, NetworkManager vai systemd-resolved
  • Tarkista DNS-asetukset VPN:n käyttöönoton jälkeen
  • Palvelimissa on hyvä määrittää kiinteät DNS-palvelimet selkeästi

Yhteenveto

Kun Linux ei pysty ratkaisemaan DNS-nimiä, tärkein ensimmäinen askel on tarkistaa, toimiiko yhteys edelleen IP-osoitteella. Sen avulla voidaan nopeasti päätellä, onko ongelma vain DNS:ssä vai koko verkossa. Sen jälkeen kannattaa järjestelmällisesti tarkistaa /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP ja VPN-asetukset. Tavoitteena ei ole vain tilapäinen korjaus, vaan myös ymmärtää, mikä järjestelmän osa todella hallitsee DNS:ää.

Leave a Reply

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *