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
  • Після налаштування VPN перевіряйте параметри DNS
  • На серверах краще чітко вказувати статичні DNS-сервери

Висновок

Коли Linux не може розпізнавати DNS-імена, найважливіший перший крок — перевірити, чи працює зв’язок за IP-адресою. Це дозволяє швидко зрозуміти, чи проблема лише в DNS, чи в усій мережі. Далі варто послідовно перевірити /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP і налаштування VPN. Важливо не лише тимчасово відновити роботу, а й зрозуміти, який компонент системи насправді керує DNS.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *