SystemdDoctor

Имена разрешаются не через ту подсистему

Разрешение имён идёт по списку источников, и порядок в нём определяет ответ. Разные средства могут использовать разные источники: одно берёт ответ из файла узлов, другое обращается к службе. Из-за этого проверка вручную удаётся, а служба узел не находит.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Источники перечислены в неожидаемом порядке

    Первый источник, давший ответ, побеждает. Запись в файле узлов перекрывает службу разрешения имён и наоборот.

  2. Средства проверки не используют тот же путь

    Часть инструментов обращается к серверу напрямую, минуя список источников. Их ответ ничего не говорит о поведении службы.

  3. Служба кеширует ответ и держит устаревший

    Часть программ разрешает имя один раз при старте. Изменение записи не влияет на работающую службу.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Порядок источников разрешения имён.

grep -E "^hosts:" /etc/nsswitch.conf

Ответ тем же путём, каким его получает служба.

getent hosts ваш.узел

Ответ через службу разрешения имён с подробностями.

resolvectl query ваш.узел 2>/dev/null

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Источники перечислены в неожидаемом порядке
Почему происходит
Первый источник, давший ответ, побеждает. Запись в файле узлов перекрывает службу разрешения имён и наоборот.
Как проверить
Посмотрите порядок источников и итоговые ответы.
grep -E "^hosts:" /etc/nsswitch.conf
getent hosts ваш.узел; resolvectl query ваш.узел 2>/dev/null | head -5
Как исправить
Приведите порядок источников в соответствие с задачей. Разница между проверкой средством разрешения имён и обращением через стандартные функции возникает именно здесь.
2. Средства проверки не используют тот же путь
Почему происходит
Часть инструментов обращается к серверу напрямую, минуя список источников. Их ответ ничего не говорит о поведении службы.
Как проверить
Сравните ответы разными путями.
getent hosts ваш.узел || echo не разрешается
dig +short ваш.узел 2>/dev/null | head -3
Как исправить
Проверяйте разрешение имён тем же путём, каким это делает служба. Прямой запрос к серверу — отдельная проверка, а не замена.
3. Служба кеширует ответ и держит устаревший
Почему происходит
Часть программ разрешает имя один раз при старте. Изменение записи не влияет на работающую службу.
Как проверить
Посмотрите, когда служба запускалась, и текущий ответ.
systemctl show myapp.service -p ExecMainStartTimestamp
getent hosts ваш.узел
Как исправить
Перезапустите службу после изменения записей имён. Для служб с долгим временем работы это обязательный шаг при переносе адресов.

Пример вывода

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

$ grep ^hosts: /etc/nsswitch.conf
hosts:          files dns

$ getent hosts db.internal
10.0.0.99       db.internal

$ resolvectl query db.internal
db.internal: 10.0.0.5

myapp[10900]: error: dial tcp 10.0.0.99:5432: connect: connection refused

Связанные ошибки

Где встречается чаще всего

Источники

  • nsswitch.conf(5)
    Порядок источников разрешения имён.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено записью в файле узлов, отличной от ответа службы.
    собственная проверка, systemd 255
    сверено 15 сентября 2026