DNS в Linux: как сменить сервер, включить DNS over TLS и очистить кэш
Чтобы сменить DNS в Linux, сначала выясните, кто управляет /etc/resolv.conf: в Ubuntu и Fedora это systemd-resolved вместе с NetworkManager, поэтому серверы задают в свойствах подключения или в resolved.conf, а не правкой файла. Ниже команды для nmcli, netplan и resolvectl, настройка DNS over TLS и очистка кэша командой resolvectl flush-caches.

Содержание
Кто отвечает за DNS в вашей системе
Прежде чем менять DNS-сервер, выясните, кто в системе управляет разрешением имён. Иначе получится классика: вы правите /etc/resolv.conf, а через десять минут NetworkManager молча перезаписывает файл. Цепочка обычно такая: программа спрашивает имя у системной библиотеки, библиотека смотрит в /etc/nsswitch.conf и /etc/resolv.conf, а там указан либо внешний сервер, либо локальный резолвер вроде systemd-resolved.
Две команды отвечают на вопрос почти всегда:
ls -l /etc/resolv.conf
systemctl is-active systemd-resolved
Если resolv.conf оказался символической ссылкой на /run/systemd/resolve/stub-resolv.conf, а служба активна, у вас systemd-resolved: в файле будет nameserver 127.0.0.53, это локальная заглушка, а реальные серверы спрятаны глубже. Обычный файл с комментарием Generated by NetworkManager означает, что его пишет NetworkManager напрямую.
| Система | Резолвер по умолчанию | Где менять DNS |
|---|---|---|
| Ubuntu 26.04 Desktop, Linux Mint | systemd-resolved + NetworkManager | настройки сети, nmcli |
| Ubuntu Server | systemd-resolved + netplan / networkd | файл netplan |
| Fedora 44 | systemd-resolved + NetworkManager | nmcli, resolved.conf |
| Debian 13 | обычно NetworkManager или ifupdown, resolved не установлен | nmcli или /etc/resolv.conf |
| Arch Linux | что настроите сами | зависит от выбора |
systemd-resolved: смотрим текущие серверы
systemd-resolved - служба, которая кэширует ответы, хранит отдельные DNS-серверы для каждого сетевого интерфейса и умеет DNS over TLS. Управляют ей через resolvectl. Общая картина:
resolvectl status
resolvectl dns
resolvectl query linuxru.link
В выводе status ищите блок Global (серверы из конфигурационного файла) и блоки по интерфейсам (Link 2 (enp3s0), wlan0), туда попадают адреса, выданные роутером по DHCP. Строка Current DNS Server показывает, к кому служба обращается прямо сейчас. Команда query выполняет запрос через resolved и сообщает, с какого интерфейса пришёл ответ и был ли он из кэша.
Если resolved выключен, а вы хотите его использовать, включите службу и переведите resolv.conf на заглушку. В Debian сначала поставьте отдельный пакет systemd-resolved, в Arch он уже входит в systemd:
sudo systemctl enable --now systemd-resolved
sudo ln -sf ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Управление службами подробно описано в статье про systemctl.
Как сменить DNS в Linux через NetworkManager
На десктопе правильнее всего менять DNS в свойствах подключения. Тогда настройка привязана к конкретной сети: дома один сервер, в офисе DNS компании, и ничего не перезапишется. В GNOME это Настройки, Сеть, шестерёнка у подключения, вкладка IPv4: выключите автоматический DNS и впишите адреса через запятую. В KDE Plasma то же самое в разделе Подключения.
Из терминала, через nmcli. Сначала узнайте имя подключения, потом задайте серверы и запретите брать DNS от роутера:
nmcli connection show
sudo nmcli connection modify "Wired connection 1" ipv4.dns "9.9.9.9 1.1.1.1" ipv4.ignore-auto-dns yes
sudo nmcli connection modify "Wired connection 1" ipv6.dns "2620:fe::fe" ipv6.ignore-auto-dns yes
sudo nmcli connection up "Wired connection 1"
Без ignore-auto-dns ваши адреса добавятся к адресам роутера, и система будет спрашивать то один сервер, то другой. Проверьте результат через resolvectl dns или, если resolved нет, через cat /etc/resolv.conf. Остальные параметры подключения (IP-адрес, шлюз, маршруты) разобраны в статье настройка сети через nmcli.
Ubuntu Server и netplan
На сервере без NetworkManager DNS прописывают в YAML-файле в /etc/netplan/, в блоке нужного интерфейса:
network:
version: 2
ethernets:
enp3s0:
dhcp4: true
dhcp4-overrides:
use-dns: false
nameservers:
addresses: [9.9.9.9, 1.1.1.1]
Применяйте через sudo netplan try: если связь пропадёт, настройки откатятся сами через 120 секунд.
Глобальные серверы в resolved.conf
Если нужно задать DNS для всей системы, независимо от сети, используйте конфигурацию самого resolved. Основной файл /etc/systemd/resolved.conf лучше не трогать: создайте свой фрагмент в каталоге resolved.conf.d, его не затрёт обновление пакета.
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/dns.conf
[Resolve]
DNS=9.9.9.9 1.1.1.1
FallbackDNS=
Domains=~.
DNS= задаёт глобальные серверы. Пустой FallbackDNS= отключает встроенный запасной список, который resolved использует, когда других серверов не знает: полезно, если вы не хотите, чтобы запросы внезапно ушли к Google или Cloudflare. Domains=~. делает глобальные серверы маршрутом по умолчанию для всех доменов. Применение:
sudo systemctl restart systemd-resolved
resolvectl status
Учтите, что серверы, полученные по DHCP для интерфейса, никуда не денутся. Если они не нужны, отключите их в NetworkManager через ignore-auto-dns, как описано выше. Для временного эксперимента без правки файлов подойдёт sudo resolvectl dns enp3s0 9.9.9.9: настройка живёт до перезагрузки или переподключения, вернуть исходное можно через sudo resolvectl revert enp3s0.
DNS over TLS в systemd-resolved
Обычные DNS-запросы идут открытым текстом по UDP, и провайдер видит, какие сайты вы открываете. DNS over TLS шифрует их по порту 853. В systemd-resolved это включается одной опцией, но у сервера нужно указать имя для проверки сертификата, через решётку после адреса:
[Resolve]
DNS=9.9.9.9#dns.quad9.net 1.1.1.1#cloudflare-dns.com
DNSOverTLS=yes
Domains=~.
Значения опции:
no- шифрование выключено, это значение по умолчанию;opportunistic- пробовать TLS, а если сервер не умеет, откатываться на открытый DNS. Работает почти везде, но от активного вмешательства не защищает;yes- только TLS, без отката. Если сервер не отвечает по 853, имена перестают разрешаться.
Глобальная настройка DNSOverTLS распространяется и на серверы интерфейсов. Роутер, который раздал свой адрес по DHCP, почти никогда не поддерживает TLS, поэтому с yes обязательно отключите DNS от роутера, иначе часть запросов будет падать. Проверка после перезапуска службы:
resolvectl status | grep -i -E 'dnsovertls|current dns'
resolvectl query example.org
В строке протоколов должно появиться +DNSOverTLS. Подробный разбор всех опций есть в man-странице resolved.conf.
Пользуетесь VPN? WireGuard и другие клиенты обычно назначают свой DNS для туннельного интерфейса, и resolved отправляет запросы туда. Если после включения VPN сайты открываются, а имена внутренней сети нет, смотрите resolvectl status по интерфейсу туннеля. Как настроить DNS для туннеля, описано в статье домашний VPN на WireGuard.
Как очистить кэш DNS в Linux
Кэш DNS сбрасывают, когда у сайта поменялся адрес, а компьютер упорно ходит на старый. В системах с systemd-resolved это одна команда:
sudo resolvectl flush-caches
resolvectl statistics
Во втором выводе счётчик Current Cache Size после очистки будет нулевым. Старая форма systemd-resolve --flush-caches встречается в инструкциях прошлых лет, в актуальных версиях systemd используйте resolvectl.
Если resolved не используется, кэша на уровне системы может не быть вовсе: glibc сама ответы не запоминает. Тогда кэширует кто-то другой:
# nscd
sudo nscd -i hosts
# dnsmasq
sudo systemctl restart dnsmasq
Ещё один слой кэша есть у браузера. В Chrome и Chromium откройте chrome://net-internals/#dns и нажмите очистку кэша хоста, в Firefox страница about:networking#dns с кнопкой очистки. И помните про TTL: если сменился адрес у самого домена, вышестоящий сервер может отдавать старую запись, пока не истечёт её срок жизни. Локальная очистка тут не поможет, остаётся подождать или временно спросить другой сервер.
Проверка и типовые проблемы
Для диагностики пригодятся dig и getent. Первая спрашивает DNS напрямую и показывает подробности ответа, вторая проходит тот же путь, что и обычные программы.
# пакеты с dig: Debian/Ubuntu, Fedora, Arch
sudo apt install bind9-dnsutils
sudo dnf install bind-utils
sudo pacman -S bind
dig linuxru.link
dig @9.9.9.9 linuxru.link +short
getent hosts linuxru.link
Если dig @9.9.9.9 отвечает, а getent нет, проблема в локальной настройке, а не в сети. Типовые случаи:
- Сайты по IP открываются, по имени нет. Проверьте
resolvectl status: возможно, в списке нет ни одного сервера. Перезапустите подключение черезnmcli connection up. - После правки resolv.conf всё вернулось. Файл генерируется автоматически, меняйте DNS в NetworkManager, netplan или resolved.conf.
- Порт 53 занят, другой DNS-сервер не стартует. Заглушка resolved слушает 127.0.0.53:53. Для локального Pi-hole или dnsmasq отключите её строкой
DNSStubListener=noв своём фрагменте конфига. - systemd-resolved упал или не стартует. Читайте журнал через
journalctl -u systemd-resolved -b, порядок разбора описан в статье служба в состоянии failed.
Если же пропал не только DNS, а сеть целиком, начните с адаптера и подключения: для беспроводных сетей есть отдельный разбор не работает Wi-Fi в Linux.
Частые вопросы
Почему мои изменения в /etc/resolv.conf пропадают?
Файл генерирует NetworkManager или systemd-resolved, и при переподключении к сети он перезаписывается. Меняйте DNS в настройках подключения, через nmcli или в /etc/systemd/resolved.conf.d/.
Что за адрес 127.0.0.53 в resolv.conf?
Это локальная заглушка systemd-resolved. Программы спрашивают её, а она пересылает запросы настоящим серверам и кэширует ответы. Реальные серверы показывает resolvectl status.
Как очистить кэш DNS в Ubuntu?
Выполните sudo resolvectl flush-caches. Проверить, что кэш пуст, можно командой resolvectl statistics. Браузерный кэш очищается отдельно.
DNS over TLS или DNS over HTTPS?
systemd-resolved поддерживает DNS over TLS на уровне всей системы. DNS over HTTPS обычно включают в браузере, и тогда он работает только для браузера.
Какие DNS-серверы можно указать?
Подойдёт DNS провайдера или публичные серверы, например Quad9 (9.9.9.9), Cloudflare (1.1.1.1), Google (8.8.8.8), Яндекс DNS (77.88.8.8). Для DNS over TLS у сервера должно быть известное имя для проверки сертификата.
Документация и источники
- resolved.conf(5), resolvectl(1), freedesktop.org, systemd, 2026
- systemd-resolved, ArchWiki, 2026
- Netplan reference, Canonical, Netplan, 2026
Читайте также
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.