Почему в resolv.conf стоит адрес 127.0.0.53
Во многих современных дистрибутивах, в частности в Ubuntu, за разрешение имён отвечает служба systemd-resolved. Если открыть файл /etc/resolv.conf, вы увидите в нём адрес 127.0.0.53 и комментарий о том, что файл создан автоматически. Это локальный «заглушечный» резолвер: программы обращаются к нему, а служба уже сама решает, каким настоящим DNS-серверам переслать запрос, использует ли кэш и какой интерфейс задействовать.
Поэтому утилиты, читающие resolv.conf напрямую, показывают только заглушку и не отвечают на вопрос, какие серверы реально используются. Для этого предназначена команда resolvectl. Раньше она называлась systemd-resolve, и это имя иногда встречается в старых инструкциях, а в новых системах она заменена.
Проверьте, что служба вообще работает: systemctl status systemd-resolved. И посмотрите, куда ведёт файл: ls -l /etc/resolv.conf. Если это ссылка на файл в каталоге /run/systemd/resolve, схема активна. В некоторых системах, например в Debian по умолчанию, службы может не быть: тогда команда сообщит об ошибке соединения, а DNS настраивается иначе.
Основные подкоманды
| Команда | Что делает |
|---|---|
| resolvectl status | Общие настройки и параметры каждого интерфейса |
| resolvectl status eth0 | Настройки одного интерфейса |
| resolvectl query имя | Выполнить запрос так, как это делают программы |
| resolvectl statistics | Статистика обращений и кэша |
| resolvectl flush-caches | Очистить кэш |
| resolvectl dns eth0 адрес | Временно задать DNS-сервер для интерфейса |
| resolvectl domain | Показать домены поиска |
| resolvectl revert eth0 | Вернуть настройки интерфейса к исходным |
Имя интерфейса узнайте командой ip addr; в современных системах это может быть eth0, ens33, enp3s0, wlp2s0. Большинство команд просмотра выполняются без прав администратора, а изменяющие настройки потребуют sudo.
Как читать вывод status
Вывод состоит из блока Global и блоков Link по каждому интерфейсу. В Global видны режим работы заглушки и общие протоколы. В блоке интерфейса ищите такие строки: Current Scopes — какие виды разрешения активны, например DNS; Protocols — включены ли LLMNR и mDNS, а также DNS over TLS и проверка DNSSEC; Current DNS Server — сервер, который использован последним; DNS Servers — полный список серверов интерфейса; DNS Domain — домены поиска.
Пример вывода (пример): Link 2 (eth0), Current Scopes: DNS, Current DNS Server: 192.168.1.1, DNS Servers: 192.168.1.1, DNS Domain: home. Здесь DNS-сервер — сам роутер, а домен поиска home означает, что короткое имя вроде nas будет дополнено до nas.home.
Обратите внимание на флаг DefaultRoute: если значение no, интерфейс используется только для запросов к своим доменам, а обычные имена уходят на другой интерфейс. Это типичная причина «странного» выбора сервера при работе с несколькими подключениями, например с проводной и беспроводной сетью одновременно.
Проверка имени и работа с кэшем
Команда resolvectl query example.com выполняет запрос через службу, то есть так, как это делают браузеры и другие программы. Пример вывода (пример): строки с адресами, затем «-- Information acquired via protocol DNS in 25.3ms», «Data is authenticated: no» и указание, что данные получены из сети либо из кэша. Так вы сразу увидите, отвечает ли служба и откуда пришёл ответ. Команда, в отличие от dig и nslookup, учитывает файл hosts и локальные механизмы имён.
- Выполните resolvectl query имя и запишите время ответа и источник.
- Повторите запрос: во второй раз ответ должен прийти быстрее и из кэша.
- Выполните resolvectl statistics и посмотрите число попаданий и промахов кэша.
- Очистите кэш: resolvectl flush-caches, и повторите запрос: время вернётся к значению «из сети».
- Если ответ старый, а запись на сервере изменилась, сверьте TTL и подождите его истечения либо очистите кэш.
В статистике полезны строки текущего размера кэша, числа попаданий, промахов и число запросов по протоколам DNS, включая шифрованный. Если промахов много, а попаданий почти нет, возможно, ответы имеют очень короткий TTL или кэш отключён в настройках.
Смена DNS-сервера и постоянные настройки
Для проверки можно временно указать сервер интерфейса: sudo resolvectl dns eth0 203.0.113.53. Адрес в примере из блока документации, подставьте адрес своего резолвера. Настройка действует до перезагрузки или до перезапуска сетевой службы, и это удобно для быстрого эксперимента. Вернуть прежнее состояние поможет sudo resolvectl revert eth0.
Постоянные настройки зависят от того, кто управляет сетью. Если это NetworkManager, DNS-серверы задают в параметрах подключения, например командой nmcli con mod с параметром ipv4.dns. Если используется netplan, серверы указываются в его файле. Общие настройки службы лежат в файле /etc/systemd/resolved.conf: параметры DNS, FallbackDNS, DNSOverTLS, DNSSEC, Cache. После правки перезапустите службу: sudo systemctl restart systemd-resolved.
Не редактируйте /etc/resolv.conf вручную, если он управляется службой: изменения будут перезаписаны. Если хотите полностью отказаться от службы, это отдельная процедура со своими последствиями, и делать её без необходимости не стоит.
Что использовать на других системах
resolvectl существует только в Linux с systemd. В macOS список DNS-серверов и правила выбора показывает scutil --dns, а сброс кэша выполняют командами dscacheutil и killall -HUP mDNSResponder. В Windows серверы каждого адаптера видны в ipconfig /all или Get-DnsClientServerAddress, кэш сбрасывает ipconfig /flushdns, а запрос выполняет Resolve-DnsName.
Если resolvectl показывает правильные серверы, а имя всё равно не разрешается, проверяйте дальше по цепочке: dig с указанием сервера покажет, отвечает ли он на запросы напрямую. Если dig получает ответ, а resolvectl нет, проблема в самой службе, домене поиска или в правилах интерфейса. Если не отвечает и dig, виноват сервер или связь с ним.