Linux не може да разреши DNS: причини и решения

Ако в 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 в системата.

Leave a Reply

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *