Jeśli w systemie Linux połączenie z Internetem wygląda na aktywne, ale strony internetowe się nie otwierają, albo jeśli dostęp przez adres IP działa, a przez nazwę domenową nie, problem bardzo często dotyczy rozwiązywania DNS. Zadaniem DNS jest tłumaczenie nazw domen, takich jak example.com, na rzeczywiste adresy IP. Gdy ten proces zawodzi, sieć może nadal wyglądać na aktywną, ale normalne korzystanie z Internetu staje się mocno ograniczone.
Typowe objawy
- Przeglądarka informuje, że nie można odnaleźć serwera
ping 8.8.8.8działa, aleping google.comkończy się niepowodzeniem- Menedżery pakietów takie jak
apt,dnf,yumipacmannie działają poprawnie - Pojawia się komunikat
Temporary failure in name resolution
Co sprawdzić najpierw
Najpierw należy ustalić, czy problem dotyczy całej sieci, czy tylko DNS.
ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route
Jeśli 8.8.8.8 odpowiada, ale google.com nie, bardzo prawdopodobne, że problem dotyczy DNS. Jeśli nawet adres IP nie jest osiągalny, przyczyny należy szukać raczej w Wi-Fi, interfejsie sieciowym, bramie lub routingu.
Główne przyczyny
1. Błędna konfiguracja pliku /etc/resolv.conf
W wielu systemach Linux informacje o serwerach DNS są przechowywane w pliku /etc/resolv.conf. Jeśli nie ma tam poprawnego wpisu nameserver, nazwy domen nie będą rozwiązywane.
cat /etc/resolv.conf
Przykład:
nameserver 8.8.8.8
nameserver 1.1.1.1
Jeśli plik jest pusty albo wskazuje na nieprawidłowy lokalny DNS, pojawi się problem. Trzeba jednak pamiętać, że w nowoczesnych systemach Linux plik ten bywa automatycznie generowany przez NetworkManager lub systemd-resolved, więc ręczne zmiany mogą zostać nadpisane.
2. Problem z usługą systemd-resolved
W systemach takich jak Ubuntu usługa systemd-resolved często zarządza DNS i używa 127.0.0.53 jako lokalnego resolvera. Jeśli ta usługa się zatrzyma, DNS może przestać działać.
systemctl status systemd-resolved
resolvectl status
W razie problemu można uruchomić usługę ponownie:
sudo systemctl restart systemd-resolved
3. NetworkManager nie stosuje DNS poprawnie
W desktopowych systemach Linux NetworkManager często pobiera informacje DNS przez DHCP. Jeśli profil sieciowy jest uszkodzony albo ponowne połączenie się nie udało, właściwe serwery DNS mogą nie zostać zastosowane.
nmcli dev show | grep DNS
nmcli connection show
W razie potrzeby uruchom go ponownie:
sudo systemctl restart NetworkManager
4. Wpływ VPN, proxy lub zapory sieciowej
VPN może kierować zapytania DNS złą trasą, a zapora może blokować port 53. W takiej sytuacji sieć wydaje się działać, ale nazwy domen nie są rozwiązywane.
5. Uszkodzona lub przestarzała pamięć podręczna DNS
Jeśli lokalna pamięć podręczna jest uszkodzona albo nieaktualna, niektóre domeny mogą przestać działać. W systemach używających systemd-resolved lub nscd pomocne może być wyczyszczenie cache.
sudo resolvectl flush-caches
Praktyczne kroki naprawy
Krok 1: Przetestuj bezpośrednio publiczny DNS
nslookup google.com 8.8.8.8
dig google.com @8.8.8.8
Jeśli to działa, zewnętrzny DNS jest prawdopodobnie w porządku, a problem leży w konfiguracji lokalnej.
Krok 2: Tymczasowo ustaw publiczny DNS
sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'
To tylko rozwiązanie tymczasowe. Po restarcie lub ponownym połączeniu plik może zostać zmieniony z powrotem. Aby naprawić problem na stałe, trzeba poprawić konfigurację NetworkManagera, netplanu lub systemd-resolved.
Krok 3: Sprawdź netplan w Ubuntu
sudo nano /etc/netplan/*.yaml
Przykład:
nameservers:
addresses: [8.8.8.8,1.1.1.1]
Następnie zastosuj zmianę:
sudo netplan apply
Krok 4: Pobierz ponownie dane DHCP
sudo dhclient -r
sudo dhclient
Jeśli serwer DHCP przekazał błędne dane DNS, to może pomóc.
Przydatne polecenia do kontroli
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
Jak zapobiec nawrotowi problemu
- Nie poprzestawaj wyłącznie na ręcznej edycji
/etc/resolv.conf - Zrozum, czy DNS jest zarządzany przez DHCP, NetworkManager czy systemd-resolved
- Po skonfigurowaniu VPN sprawdź ustawienia DNS
- Na serwerach najlepiej jasno ustawić stałe serwery DNS
Podsumowanie
Gdy Linux nie potrafi rozwiązywać nazw DNS, najważniejszym pierwszym krokiem jest sprawdzenie, czy komunikacja przez adres IP nadal działa. Dzięki temu można szybko ustalić, czy problem dotyczy tylko DNS, czy całej sieci. Następnie warto systematycznie sprawdzić /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP oraz ustawienia VPN. Celem nie powinno być tylko tymczasowe przywrócenie działania, ale też zrozumienie, który komponent systemu naprawdę zarządza DNS.