Вопрос или проблема
У меня работает сервер 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. Есть идеи, как это диагностировать в следующий раз?
Спасибо!
Ответ или решение
Проблема, с которой вы столкнулись, связана с сбоем 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. Эти шаги помогут вам диагностировать и устранить большинство распространённых проблем и поддерживать стабильную работу вашего сервера.