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.8toimii, muttaping google.comepäonnistuu- Paketinhallintatyökalut kuten
apt,dnf,yumjapacmaneivä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:ää.