Сбой разрешения DNS на Ubuntu Server 24.04.1 LTS

Вопрос или проблема

У меня работает сервер Ubuntu, и время от времени я сталкиваюсь с ошибкой, когда разрешение DNS просто перестает работать. Поскольку это живой сервер, у меня не так много времени в такие моменты для диагностики проблемы, поэтому обычно я просто перезагружаю сервер, и он снова работает нормально. Resolvectl, похоже, разрешает домены без проблем, однако, если я использую “host” или “ping”, это не работает. Прежде чем создать второе изображение, я отредактировал /etc/resolv.conf и изменил “nameserver 127.0.0.53” на “nameserver 8.8.8.8”, поэтому он ссылается на сервер Google, но сообщение было тем же, но вместо 8.8.8.8 было указано 127.0.0.53. Есть идеи, как это диагностировать в следующий раз?

Спасибо!

enter image description here
enter image description here

Ответ или решение

Проблема, с которой вы столкнулись, связана с сбоем DNS-разрешения на вашем сервере Ubuntu 24.04.1 LTS. Это распространённая ситуация, которая может возникать по разным причинам, от настроек системы до сбоев в работе службы. Давайте рассмотрим возможные причины и решения.

Теория

DNS (Domain Name System) — это система, преобразующая доменные имена в IP-адреса и наоборот. В Ubuntu резолвер по умолчанию используется systemd-resolved, который кэширует запросы и обеспечивает их отправку на указанные DNS-серверы. Обычно файл /etc/resolv.conf символически ссылается на 127.0.0.53, что является IP-адресом локального DNS-резолвера. Это значит, что ваш запрос сначала обрабатывается самим сервером через systemd-resolved, а затем пересылается на указанные внешние DNS-серверы.

Пример

На вашем сервере вы изменили nameserver 127.0.0.53 на nameserver 8.8.8.8 в /etc/resolv.conf. После этого вы отметили, что проблема осталась, а команды host или ping по-прежнему не могут разрешить доменные имена, в то время как resolvectl работает корректно. Это указывает на то, что проблема, скорее всего, кроется в конфликте или неправильных конфигурациях, связанных с системными службами.

Применение

1. Проверка статуса systemd-resolved
Во-первых, проверим, работает ли служба systemd-resolved корректно:

systemctl status systemd-resolved

Если служба остановлена или сбоит, перезапустите её:

sudo systemctl restart systemd-resolved

2. Просмотр конфигурации DNS
Выполните:

resolvectl status

Проверьте, к каким серверам подключается и отправляет запросы ваш резолвер. Убедитесь, что они активны и доступны.

3. Символическая ссылка
Убедитесь, что файл /etc/resolv.conf правильно указывает на файлы разрешения:

lrwxrwxrwx 1 root root 39 Sep 20 11:33 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf

Если символическая ссылка отсутствует, создайте её:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

4. Кэширование
Возможной причиной проблемы может быть кэширование старых или некорректных DNS-запросов. Очистите кэш:

sudo resolvectl flush-caches

5. Временные структуры системы и сетевые неполадки
Проверьте доступность DNS-серверов и наличие сетевых проблем, например:

ping 8.8.8.8

Проблема может заключаться в маршрутизации или неправильно сконфигурированных маршрутах. Убедитесь, что сеть не испытывает перегруженности.

6. Системные логи
Просмотрите логи systemd и kernel на предмет ошибок и сбоев:

journalctl -u systemd-resolved
dmesg

Обратите внимание на новые ошибки, появляющиеся при сбоях.

Заключение

Сбои в DNS-разрешении на вашем сервере могут быть вызваны различными причинами, включая неправильные настройки резолвера, кэширование, неисправность службы systemd-resolved, а также сетевые проблемы. Учитывая вышеизложенное, попробуйте применить предложенные решения и проследите за состоянием DNS. Эти шаги помогут вам диагностировать и устранить большинство распространённых проблем и поддерживать стабильную работу вашего сервера.

Оцените материал
Добавить комментарий

Капча загружается...