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

Если файл пустой или указывает на неверный локальный резолвер, возникнут проблемы. Но на современных системах этот файл часто автоматически создается 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. Ошибка получения DNS через NetworkManager

На настольных системах Linux NetworkManager часто получает DNS через DHCP. Если профиль сети поврежден или соединение настроено неправильно, DNS-серверы могут не примениться.

nmcli dev show | grep DNS
nmcli connection show

Иногда помогает перезапуск:

sudo systemctl restart NetworkManager

4. Влияние VPN, прокси или файрвола

VPN может перенаправлять DNS-запросы по неправильному пути, а файрвол — блокировать порт 53. В итоге сеть частично работает, но доменные имена не разрешаются.

5. Поврежденный или устаревший DNS-кэш

Если локальный кэш 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, чтобы устранить проблему надолго.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *