systemd-resolved: resolv.conf заменён обычным файлом
Правильная схема — это ссылка /etc/resolv.conf на файл заглушки resolved. Если её заменили обычным файлом со списком внешних серверов, имена разрешаются, но часть возможностей теряется: поиск по домену, разные серверы для разных интерфейсов, кеш.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Файл заменён вручную или средством управления конфигурацией
Замена выглядит безобидной и даже решает разовую проблему. Но после неё resolved фактически не используется программами.
-
Серверы имён заданы не там, где ожидается
При управлении сетью через resolved серверы задаются в его настройках или приходят от DHCP, а не в resolv.conf.
-
Отключена заглушка, но ссылка осталась
При
DNSStubListener=noзаглушки на 127.0.0.53 нет, и ссылка на её файл ведёт в пустоту: разрешение имён перестаёт работать совсем.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Ссылка или обычный файл — от этого зависит вся схема.
ls -l /etc/resolv.confСерверы имён по интерфейсам и домены поиска.
resolvectl status | head -20Запрос через resolved с указанием ответившего сервера.
resolvectl query имя-узлаРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Замена выглядит безобидной и даже решает разовую проблему. Но после неё resolved фактически не используется программами.
- Как проверить
-
Посмотрите, ссылка это или файл.
ls -l /etc/resolv.conf head -5 /etc/resolv.conf
- Как исправить
-
Верните ссылку на файл заглушки resolved и задавайте серверы через его настройки.
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
- Почему происходит
- При управлении сетью через resolved серверы задаются в его настройках или приходят от DHCP, а не в resolv.conf.
- Как проверить
-
Посмотрите действующие серверы.
resolvectl status | head -20 grep -i "^DNS" /etc/systemd/resolved.conf
- Как исправить
- Задайте серверы в настройках resolved или в настройках сетевого подключения — тогда они попадут и в заглушку.
- Почему происходит
- При
DNSStubListener=noзаглушки на 127.0.0.53 нет, и ссылка на её файл ведёт в пустоту: разрешение имён перестаёт работать совсем.
- Как проверить
-
Посмотрите настройку и наличие заглушки.
grep -i DNSStubListener /etc/systemd/resolved.conf sudo ss -ulnp | grep 127.0.0.53
- Как исправить
- При отключённой заглушке используйте ссылку на другой файл resolved или откажитесь от него в пользу локального DNS-сервера.
Пример вывода
Файл заменён обычным списком серверов. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 45 Sep 10 11:20 /etc/resolv.conf
$ head -2 /etc/resolv.conf
nameserver <адрес>
nameserver <адрес>
Связанные ошибки
- Temporary failure in name resolution в журнале службы Служба не может разрешить имя: не готова сеть, нет сервера имён, мешает изоляция. Разбор при загрузке и в работе.
- BIND: порт 53 занят systemd-resolved named не может занять порт 53: его держит локальный разрешатель имён. Как развести их по адресам.
- Docker: имена не разрешаются внутри контейнера Контейнеры не разрешают имена: конфликт с локальным разрешателем, неверные серверы в daemon.json, отключённый проброс.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
Где встречается чаще всего
Источники
-
systemd-resolved.service(8)
Схема с заглушкой и варианты resolv.conf. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на Ubuntu 24.04: с обычным файлом поиск по домену не работает.