Найти в Дзене
UFO.Hosting

Настройка DNS в Ubuntu: понятное руководство

DNS вполне можно сравнить с телефонной книгой интернета. Она переводит понятные адреса вроде example.com в IP-адреса серверов и обратно. Пока всё работает по умолчанию, о DNS обычно не вспоминают. Но рано или поздно возникает задача: подключить свой внутренний DNS-сервер; использовать публичные серверы вроде Cloudflare или Google; решить проблемы с медленным и нестабильным разрешением имён. Далее мы собрали подробно руководство по настройке DNS в Ubuntu. Как сейчас устроен DNS в Ubuntu В старых системах всё было просто: редактируешь один файл /etc/resolv.conf — и готово. В современных версиях Ubuntu картина другая. Главные участники: systemd-resolved. Cервис, который отвечает за DNS-резолвинг в Ubuntu. Он собирает информацию о серверах имён из разных источников и предоставляет их приложениям. Управлять им можно через команду resolvectl (или systemd-resolve в старых версиях). /etc/resolv.conf. Сейчас это, как правило, не ручной конфигурационный файл, а автоматически сгенерированный фай
Оглавление

DNS вполне можно сравнить с телефонной книгой интернета. Она переводит понятные адреса вроде example.com в IP-адреса серверов и обратно. Пока всё работает по умолчанию, о DNS обычно не вспоминают. Но рано или поздно возникает задача:

  • подключить свой внутренний DNS-сервер;
  • использовать публичные серверы вроде Cloudflare или Google;
  • решить проблемы с медленным и нестабильным разрешением имён.

Далее мы собрали подробно руководство по настройке DNS в Ubuntu.

Как сейчас устроен DNS в Ubuntu

В старых системах всё было просто: редактируешь один файл /etc/resolv.conf — и готово. В современных версиях Ubuntu картина другая.

Главные участники:

  1. systemd-resolved. Cервис, который отвечает за DNS-резолвинг в Ubuntu. Он собирает информацию о серверах имён из разных источников и предоставляет их приложениям. Управлять им можно через команду resolvectl (или systemd-resolve в старых версиях).
  2. /etc/resolv.conf. Сейчас это, как правило, не ручной конфигурационный файл, а автоматически сгенерированный файл или символическая ссылка, которой управляет systemd-resolved. Внутри вы часто увидите nameserver 127.0.0.53 — это локальный stub-резолвер, через который проходят запросы. Редактировать этот файл напрямую бессмысленно: изменения чаще всего будут перезаписаны.
  3. Netplan и NetworkManager. На Ubuntu Server сеть обычно настраивается через файлы /etc/netplan/*.yaml. В этих же файлах задаются DNS-серверы для интерфейсов, а дальше Netplan передаёт их в systemd-resolved. На настольной Ubuntu с графической оболочкой)за сеть отвечает в основном NetworkManager, и DNS меняется через его настройки.

Идея такая: вы настраиваете DNS либо в Netplan, либо в NetworkManager, а systemd-resolved собирает эту информацию и отдаёт её приложениям.

Проверяем текущую конфигурацию

Для начала посмотрим, что у вас уже настроено.

1. Проверить /etc/resolv.conf

cat /etc/resolv.conf

Типичная картина для современных Ubuntu:

# Generated by systemd-resolved

nameserver 127.0.0.53

Это нормально: означает, что все запросы уходят в локальный резолвер systemd-resolved, а реальный список DNS-серверов хранится внутри него. Если вместо этого у вас обычные nameserver 8.8.8.8 и нет комментариев про systemd-resolved, возможно, система настроена нестандартно или systemd-resolved не используется.

2. Посмотреть DNS через resolvectl

resolvectl status

Команда покажет:

  • какие интерфейсы видит systemd-resolved;
  • какие DNS-серверы назначены каждому интерфейсу;
  • какие домены используются для поиска.

Если resolvectl выдаёт ошибку «command not found» или служба не запущена, возможно, в системе используется другая схема, но для стандартных Ubuntu 20.04–24.04 это редкость.

3. Понять, что отвечает за сеть

  • Есть ли файлы в /etc/netplan/ — почти наверняка используется Netplan.
  • На десктопных системах сеть обычно управляется NetworkManager; проверить можно, например:

systemctl status NetworkManager

Вариант 1. Настройка DNS на сервере через Netplan

Это типичный сценарий для Ubuntu Server.

Шаг 1. Найдите файл Netplan

Посмотрите список файлов:

ls /etc/netplan

Часто там что-то вроде 00-installer-config.yaml или 01-netcfg.yaml.

Откройте нужный файл в редакторе:

sudo nano /etc/netplan/00-installer-config.yaml

Шаг 2. Добавьте блок nameservers

Пример конфигурации для проводного интерфейса ens18 со статическим IP и собственными DNS:

network:

version: 2

ethernets:

ens18:

addresses:

- 192.168.1.10/24

gateway4: 192.168.1.1

nameservers:

addresses:

- 1.1.1.1

- 8.8.8.8

search:

- example.local

Здесь:

  • addresses — IP-адрес сервера;
  • gateway4 — шлюз по умолчанию;
  • nameservers.addresses — список DNS-серверов, в порядке предпочтения;
  • search — домены поиска (опционально).

Netplan передаст эти значения в systemd-resolved, а тот уже сформирует итоговую конфигурацию DNS.

Шаг 3. Примените изменения

sudo netplan apply

После этого проверьте:

resolvectl status

Вы должны увидеть указанные DNS-серверы в разделе соответствующего интерфейса.

Вариант 2. Настройка DNS на рабочем столе Ubuntu (NetworkManager)

Если вы используете графическую Ubuntu, удобнее всего менять DNS через настройки сети.

Через графический интерфейс

Общий путь (могут слегка отличаться названия):

  1. Откройте «Настройки» → «Сеть».
  2. Найдите своё подключение (проводное или Wi-Fi) и нажмите на значок шестерёнки.
  3. Перейдите на вкладку IPv4 (и при необходимости IPv6).
  4. Переключите режим DNS с «Автоматически» на «Вручную».
  5. Введите адреса DNS-серверов, например 1.1.1.1, 8.8.8.8.
  6. Сохраните изменения и отключите/подключите соединение.

NetworkManager обновит настройки и передаст их systemd-resolved.

Через nmcli

Если вы предпочитаете терминал, можно сделать то же самое командой.

Посмотреть список соединений:

nmcli connection show

Допустим, нужное подключение — Wired connection 1. Изменим для него DNS:

sudo nmcli connection modify "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8" ipv4.ignore-auto-dns yes

sudo nmcli connection down "Wired connection 1"

sudo nmcli connection up "Wired connection 1"

После этого проверьте:

resolvectl status

В разделе интерфейса должны появиться ваши DNS-серверы.

Вариант 3. Глобальная настройка DNS через systemd-resolved

Иногда удобно задать DNS-серверы сразу для всей системы, а не для отдельных подключений. Это можно сделать в конфигурации systemd-resolved.

Шаг 1. Отредактируйте /etc/systemd/resolved.conf

Откройте файл:

sudo nano /etc/systemd/resolved.conf

Добавьте или раскомментируйте блок [Resolve], например:

[Resolve]

DNS=1.1.1.1 8.8.8.8

FallbackDNS=8.8.4.4

Здесь:

  • DNS — основные DNS-серверы;
  • FallbackDNS — резервные, которые используются, если основные недоступны.

Шаг 2. Перезапустите службу

sudo systemctl restart systemd-resolved

Проверяем:

resolvectl status

В секции Global вы увидите указанные DNS-серверы.

Обратите внимание: если NetworkManager или Netplan для конкретного интерфейса задают свои DNS, они могут иметь приоритет над глобальными настройками — это нормальная логика работы systemd-resolved.

Что делать с /etc/resolv.conf

Главное правило для современных Ubuntu: не пытаться настраивать DNS только через ручное редактирование /etc/resolv.conf, если системой управляет systemd-resolved и/или NetworkManager.

По умолчанию в Ubuntu этот файл:

  • либо ссылается на файл, который создаёт systemd-resolved (например, /run/systemd/resolve/stub-resolv.conf или /run/systemd/resolve/resolv.conf);
  • либо генерируется другими инструментами, и любые ручные правки исчезнут при следующем обновлении настроек сети.

Если вы видите, что /etc/resolv.conf — обычный файл, созданный кем-то вручную, и DNS не работает, иногда помогает вернуть стандартную схему:

sudo rm /etc/resolv.conf

sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

или, в некоторых конфигурациях, на:

sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

После этого снова перезапустите systemd-resolved и проверьте DNS.

Проверка работы DNS

После любой правки настроек DNS проверьте, всё ли работает как задумано.

1. Проверка резолвинга имён:

ping -c 3 google.com

3. Проверка через resolvectl:

resolvectl query google.com

Команда покажет, какой сервер дал ответ.

3. При наличии утилит dig или nslookup (пакет dnsutils):

dig google.com

# или

nslookup google.com

Итоги

Настройка DNS в Ubuntu может показаться запутанной из-за большого количества уровней — systemd-resolved, Netplan, NetworkManager, /etc/resolv.conf. На практике всё сводится к нескольким понятным шагам:

  • на сервере — задайте DNS в файле Netplan и примените конфигурацию;
  • на рабочем столе — используйте настройки сети в графическом интерфейсе или nmcli;
  • при необходимости — задайте глобальные сервера в /etc/systemd/resolved.conf;
  • и избегайте прямого редактирования /etc/resolv.conf, если им управляет система.

Так вы получите предсказуемую и устойчивую конфигурацию DNS, которая переживет и перезагрузки, и обновления, и смену подключений.