Ако в Linux изглежда, че интернет връзката работи, но уебсайтовете не се отварят, или ако достъпът по IP адрес е възможен, а по име на домейн не е, тогава проблемът често е в DNS резолвирането. DNS преобразува имена на домейни като example.com в реални IP адреси. Ако този процес се повреди, мрежата може да изглежда активна, но нормалното използване на интернет става силно ограничено.
Чести симптоми
- Браузърът показва, че сървърът не може да бъде намерен
ping 8.8.8.8работи, ноping google.comне- Мениджъри на пакети като
apt,dnf,yumиpacmanне работят - Появява се съобщението
Temporary failure in name resolution
Какво да проверите първо
Първо трябва да се определи дали проблемът е в цялата мрежа или само в DNS.
ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route
Ако 8.8.8.8 отговаря, но google.com не, това обикновено означава DNS проблем. Ако дори IP адресът не е достъпен, причината вероятно е в Wi-Fi, мрежовия интерфейс, шлюза или маршрутизацията.
Основни причини
1. Неправилна настройка на /etc/resolv.conf
В много Linux системи информацията за DNS сървърите се съхранява във файла /etc/resolv.conf. Ако в него няма правилен nameserver, имената на домейните няма да се разрешават.
cat /etc/resolv.conf
Пример:
nameserver 8.8.8.8
nameserver 1.1.1.1
Ако файлът е празен или сочи към грешен локален DNS, ще има проблем. На съвременни Linux системи обаче този файл често се генерира автоматично от NetworkManager или systemd-resolved, така че ръчните промени могат да бъдат презаписани.
2. Проблем със systemd-resolved
В системи като Ubuntu systemd-resolved често управлява DNS и използва 127.0.0.53 като локален резолвер. Ако тази услуга спре, DNS може да спре да работи.
systemctl status systemd-resolved
resolvectl status
При нужда рестартирайте услугата:
sudo systemctl restart systemd-resolved
3. NetworkManager не прилага DNS правилно
В настолните Linux системи NetworkManager често получава DNS чрез DHCP. Ако мрежовият профил е повреден или повторното свързване е неуспешно, правилните DNS сървъри може да не бъдат приложени.
nmcli dev show | grep DNS
nmcli connection show
Ако е необходимо, рестартирайте го:
sudo systemctl restart NetworkManager
4. Влияние на VPN, прокси или защитна стена
VPN може да насочва DNS заявките по грешен маршрут, а защитната стена може да блокира порт 53. Така мрежата може да изглежда работеща, но имената на домейните да не се разрешават.
5. Повреден или остарял DNS кеш
Ако локалният кеш е повреден или остарял, някои домейни могат да спрат да работят. В системи със systemd-resolved или nscd може да помогне изчистването на кеша.
sudo resolvectl flush-caches
Практически стъпки за решаване
Стъпка 1: Проверете директно чрез публичен DNS
nslookup google.com 8.8.8.8
dig google.com @8.8.8.8
Ако това работи, значи външният DNS е наред и проблемът вероятно е в локалната конфигурация.
Стъпка 2: Временно задайте публичен DNS
sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'
Това е само временно решение. След рестарт или ново свързване файлът може отново да бъде променен. За постоянно решение трябва да се коригират настройките на NetworkManager, netplan или systemd-resolved.
Стъпка 3: Проверете netplan в Ubuntu
sudo nano /etc/netplan/*.yaml
Пример:
nameservers:
addresses: [8.8.8.8,1.1.1.1]
След това приложете промените:
sudo netplan apply
Стъпка 4: Получете отново DHCP настройките
sudo dhclient -r
sudo dhclient
Ако DHCP сървърът е дал грешни DNS данни, това може да помогне.
Полезни команди за диагностика
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
Как да предотвратите повторение на проблема
- Не се ограничавайте само до ръчно редактиране на
/etc/resolv.conf - Разберете дали DNS се управлява от DHCP, NetworkManager или systemd-resolved
- Проверявайте DNS настройките след активиране на VPN
- При сървъри е добре да зададете статични DNS сървъри ясно
Заключение
Когато Linux не може да разрешава DNS имена, най-важната първа стъпка е да се провери дали връзката по IP адрес работи. Това позволява бързо да се определи дали проблемът е само в DNS или в цялата мрежа. След това трябва последователно да се проверят /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP и VPN настройките. Важно е не само временно да се възстанови работата, но и да се разбере кой компонент реално управлява DNS в системата.