Подробный гайд: Как настроить DNS на компьютере с Linux
Гайд по настройке DNS в Linux. Я разберу несколько вариантов, потому что в разных дистрибутивах DNS может управляться по-разному: NetworkManager, systemd-resolved, systemd-networkd, Netplan, классический /etc/resolv.conf и т.д.
Как настроить DNS на компьютере с Linux
1. Что такое DNS и почему важно понимать, кто им управляет
DNS — это система, которая преобразует доменные имена, например example.com, в IP-адреса, например 93.184.216.34.
В Linux DNS-настройки обычно находятся в файле:
/etc/resolv.conf
Пример содержимого:
nameserver 1.1.1.1
nameserver 8.8.8.8
search home.local
Но в современных системах этот файл часто не редактируют вручную, потому что он автоматически перезаписывается одним из сервисов:
NetworkManager;systemd-resolved;systemd-networkd;dhclient;resolvconf;Netplan. Поэтому перед настройкой важно определить, какой компонент управляет сетью.
2. Как узнать, кто управляет DNS
2.1. Посмотрите содержимое /etc/resolv.conf
cat /etc/resolv.conf
Пример вывода:
# Generated by NetworkManager
nameserver 192.168.1.1
Если есть строка вроде Generated by NetworkManager, значит DNS управляет NetworkManager.
2.2. Проверьте, является ли /etc/resolv.conf символической ссылкой
ls -l /etc/resolv.conf
Если видите что-то вроде:
/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
или:
/etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
значит используется systemd-resolved.
2.3. Проверьте активные сетевые сервисы
systemctl is-active NetworkManager
systemctl is-active systemd-networkd
systemctl is-active systemd-resolved
Вывод может быть, например:
active
inactive
active
2.4. Посмотрите список сетевых интерфейсов
ip -br addr
Пример вывода:
lo UNKNOWN 127.0.0.1/8
eth0 UP 192.168.1.20/24
wlan0 UP 192.168.1.35/24
Запомните имя интерфейса: eth0, enp3s0, wlan0, ens33 и т.п.
3. Быстрая временная настройка DNS
Эти настройки обычно действуют до перезагрузки или до переподключения сети.
3.1. Временно задать DNS через resolvectl
Если используется systemd-resolved, можно временно задать DNS для конкретного интерфейса.
Например, интерфейс называется eth0:
sudo resolvectl dns eth0 1.1.1.1 8.8.8.8
Или только один DNS:
sudo resolvectl dns eth0 1.1.1.1
Можно указать IPv6-DNS:
sudo resolvectl dns eth0 1.1.1.1 2606:4700:4700::1111
Проверить:
resolvectl status eth0
3.2. Временно задать домен поиска
sudo resolvectl domain eth0 home.local
Или задать глобальный домен поиска:
sudo resolvectl domain eth0 "~."
Символ ~. означает, что этот интерфейс используется для разрешения всех доменов.
3.3. Временно отредактировать /etc/resolv.conf
Этот способ можно использовать, если вы точно знаете, что файл не перезаписывается автоматически.
Сначала сделайте резервную копию:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
Затем отредактируйте файл:
sudo nano /etc/resolv.conf
Пример содержимого:
nameserver 1.1.1.1
nameserver 8.8.8.8
search home.local
Сохраните файл:
- в
nano:Ctrl + O; - затем
Enter; - выход:
Ctrl + X.
Проверьте:
cat /etc/resolv.conf
Но на современных системах этот файл часто перезаписывается, поэтому для постоянной настройки лучше использовать соответствующий сетевой менеджер.
4. Постоянная настройка DNS через NetworkManager
NetworkManager часто используется в:
- Ubuntu Desktop;
- Fedora Workstation;
- Linux Mint;
- openSUSE;
- Arch Linux с GNOME/KDE;
- Debian с графическим окружением.
4.1. Посмотреть список подключений NetworkManager
nmcli connection show
Пример вывода:
NAME UUID TYPE DEVICE
Wired connection 1 6f1a2b3c-1111-2222-3333-444455556666 ethernet eth0
MyWiFi a1b2c3d4-5555-6666-7777-888899990000 wifi wlan0
Вам нужно имя подключения из колонки NAME.
Например:
Wired connection 1
4.2. Назначить DNS вручную через nmcli
Для IPv4:
sudo nmcli connection modify "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8"
Если хотите игнорировать DNS, полученный от DHCP:
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes
Для IPv6:
sudo nmcli connection modify "Wired connection 1" ipv6.dns "2606:4700:4700::1111 2001:4860:4860::8888"
Игнорировать DNS от DHCPv6 или Router Advertisement:
sudo nmcli connection modify "Wired connection 1" ipv6.ignore-auto-dns yes
После этого перезапустите подключение:
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"
4.3. Пример полной настройки IPv4-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"
4.4. Проверить DNS после NetworkManager
cat /etc/resolv.conf
или:
resolvectl status
Также можно проверить конкретное подключение:
nmcli connection show "Wired connection 1" | grep dns
4.5. Настройка DNS через графический интерфейс
Если у вас GNOME:
- Откройте «Настройки».
- Перейдите в «Сеть» или «Wi-Fi».
- Нажмите на шестерёнку рядом с подключением.
- Откройте вкладку «IPv4».
- Отключите автоматическое получение DNS.
6. Введите DNS-серверы, например:
1.1.1.1, 8.8.8.8
7. Сохраните и переподключитесь.
Для IPv6 аналогично во вкладке «IPv6».
4.6. Как вернуть автоматический DNS в NetworkManager
sudo nmcli connection modify "Wired connection 1" ipv4.dns ""
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns no
Для IPv6:
sudo nmcli connection modify "Wired connection 1" ipv6.dns ""
sudo nmcli connection modify "Wired connection 1" ipv6.ignore-auto-dns no
Перезапустите подключение:
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"
5. Постоянная настройка DNS через systemd-resolved
systemd-resolved — это системный сервис разрешения DNS.
Он часто используется в:
- Ubuntu;
- Fedora;
- Arch Linux;
- Debian с systemd-networkd;
- многих серверных системах.
Обычно приложения обращаются к локальному резолверу:
127.0.0.53
а уже systemd-resolved отправляет запросы вышестоящим DNS-серверам.
5.1. Проверить статус systemd-resolved
systemctl status systemd-resolved
Проверить текущие DNS:
resolvectl status
5.2. Глобальная настройка DNS через /etc/systemd/resolved.conf
Откройте файл:
sudo nano /etc/systemd/resolved.conf
Раскомментируйте или добавьте строки:
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
Domains=home.local
Пример более полного файла:
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9 149.112.112.112
# DNSSEC=allow-downgrade
# DNSOverTLS=opportunistic
Если нужно использовать только указанные DNS и не использовать резервные:
FallbackDNS=
Сохраните файл и перезапустите сервис:
sudo systemctl restart systemd-resolved
Проверка:
resolvectl status
5.3. Настройка DNS для конкретного сетевого интерфейса в systemd-networkd
Если сеть управляется через systemd-networkd, конфигурация может находиться в:
/etc/systemd/network/
Например, файл:
sudo nano /etc/systemd/network/10-eth0.network
Пример:
[Match]
Name=eth0
[Network]
DHCP=yes
DNS=1.1.1.1
DNS=8.8.8.8
Domains=home.local
Если хотите игнорировать DNS, полученный по DHCP:
[DHCP]
UseDNS=false
Полный пример:
[Match]
Name=eth0
[Network]
DHCP=yes
DNS=1.1.1.1
DNS=8.8.8.8
Domains=home.local
[DHCP]
UseDNS=false
Примените настройки:
sudo systemctl restart systemd-networkd
sudo systemctl restart systemd-resolved
Проверка:
resolvectl status eth0
6. Настройка DNS через Netplan
Netplan часто используется в Ubuntu Server, начиная с Ubuntu 18.04.
Конфигурации находятся в:
/etc/netplan/
Посмотреть файлы:
ls -l /etc/netplan/
Пример файлов:
/etc/netplan/00-installer-config.yaml
/etc/netplan/01-netcfg.yaml
6.1. Сделать резервную копию
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
6.2. Открыть конфигурацию
Например:
sudo nano /etc/netplan/00-installer-config.yaml
6.3. Пример настройки DHCP и ручных DNS
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
search:
- home.local
Важно соблюдать отступы. В YAML они имеют значение. Используйте пробелы, не табы.
6.4. Пример со статическим IP и DNS
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.20/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
search:
- home.local
6.5. Проверить и применить Netplan
Проверить синтаксис:
sudo netplan try
Если всё работает, можно применить окончательно:
sudo netplan apply
Если используется старая схема:
sudo netplan generate
sudo netplan apply
Проверка:
resolvectl status
или:
cat /etc/resolv.conf
7. Настройка DNS в классическом Debian через /etc/network/interfaces
Этот способ актуален для старых серверных Debian-систем или систем с ifupdown.
Файл:
sudo nano /etc/network/interfaces
Пример для DHCP:
auto eth0
iface eth0 inet dhcp
dns-nameservers 1.1.1.1 8.8.8.8
dns-search home.local
Пример для статического IP:
auto eth0
iface eth0 inet static
address 192.168.1.20/24
gateway 192.168.1.1
dns-nameservers 1.1.1.1 8.8.8.8
dns-search home.local
После изменения можно перезапустить сеть:
sudo systemctl restart networking
или перезагрузить компьютер.
8. Настройка DNS через DHCP-клиент dhclient
Если система получает сеть по DHCP и использует dhclient, можно настроить DNS в:
/etc/dhcp/dhclient.conf
Откройте файл:
sudo nano /etc/dhcp/dhclient.conf
Чтобы добавить DNS перед полученными от DHCP:
prepend domain-name-servers 1.1.1.1, 8.8.8.8;
Чтобы полностью задать свои DNS и игнорировать DNS от DHCP:
supersede domain-name-servers 1.1.1.1, 8.8.8.8;
Также можно задать домен поиска:
supersede domain-search "home.local";
После этого перезапустите сеть или DHCP-клиент. Способ зависит от дистрибутива:
sudo systemctl restart NetworkManager
или:
sudo systemctl restart networking
или:
sudo dhclient -r && sudo dhclient
9. Ручная настройка /etc/resolv.conf
Этот способ простой, но на современных системах файл может перезаписываться.
9.1. Резервная копия
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
9.2. Редактирование
sudo nano /etc/resolv.conf
Пример:
nameserver 1.1.1.1
nameserver 8.8.8.8
search home.local
options edns0 trust-ad
Сохраните файл.
9.3. Ограничения
В resolv.conf обычно активно учитываются только первые три строки nameserver:
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 9.9.9.9
Больше трёх DNS-серверов указывать можно, но большинство систем используют только первые три.
9.4. Защита файла от перезаписи
Не рекомендуется делать это на обычных рабочих системах, но иногда используется на серверах или в специфичных сценариях.
Запретить изменение файла:
sudo chattr +i /etc/resolv.conf
Снять защиту:
sudo chattr -i /etc/resolv.conf
Если /etc/resolv.conf является символической ссылкой, такой способ может работать некорректно или сломать сетевую конфигурацию.
10. Если используется символическая ссылка на systemd-resolved
Часто /etc/resolv.conf выглядит так:
ls -l /etc/resolv.conf
Вывод:
/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
Внутри может быть:
nameserver 127.0.0.53
Это нормально. Это означает, что приложения отправляют DNS-запросы локальному сервису systemd-resolved, а он уже использует настроенные upstream-DNS.
В таком случае лучше настраивать DNS через:
- NetworkManager;
resolvectl;/etc/systemd/resolved.conf;systemd-networkd;- Netplan.
10.1. Можно ли заменить ссылку на прямой файл?
Технически можно:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Но обычно это не рекомендуется, потому что вы теряете часть возможностей systemd-resolved: локальное кэширование, маршрутизацию DNS по интерфейсам, DNSSEC и т.д.
11. Проверка работы DNS
11.1. Проверить содержимое резолвера
cat /etc/resolv.conf
11.2. Проверить статус systemd-resolved
resolvectl status
Для конкретного интерфейса:
resolvectl status eth0
11.3. Проверить разрешение имени
getent hosts example.com
Пример вывода:
93.184.216.34 example.com
11.4. Проверить с помощью ping
ping -c 4 example.com
11.5. Проверить с помощью dig
Если dig не установлен:
Для Debian/Ubuntu:
sudo apt update
sudo apt install dnsutils
Для Fedora/RHEL:
sudo dnf install bind-utils
Для Arch Linux:
sudo pacman -S bind
Проверка:
dig example.com
Короткий вывод:
dig +short example.com
Проверка конкретного DNS-сервера:
dig @1.1.1.1 example.com
или:
dig @8.8.8.8 example.com
11.6. Проверка с помощью host
host example.com
Или через конкретный DNS:
host example.com 1.1.1.1
12. Популярные публичные DNS-серверы
Cloudflare
1.1.1.1
1.0.0.1
IPv6:
2606:4700:4700::1111
2606:4700:4700::1001
Google Public DNS
8.8.8.8
8.8.4.4
IPv6:
2001:4860:4860::8888
2001:4860:4860::8844
Quad9
9.9.9.9
149.112.112.112
IPv6:
2620:fe::fe
2620:fe::9
13. Настройка DNS over TLS в systemd-resolved
Опционально можно использовать зашифрованный DNS over TLS, если ваш DNS-провайдер это поддерживает.
Пример для Cloudflare в /etc/systemd/resolved.conf:
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com
DNSOverTLS=only
или более мягкий режим:
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com
DNSOverTLS=opportunistic
После этого:
sudo systemctl restart systemd-resolved
Проверка:
resolvectl status
Если после настройки сеть или DNS перестали работать, верните конфиг назад:
sudo nano /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved
14. Очистка кэша DNS
Если используется systemd-resolved, очистить кэш можно так:
sudo resolvectl flush-caches
Проверить статистику:
resolvectl statistics
15. Частые проблемы и их решение
Проблема 1: cat /etc/resolv.conf показывает старые DNS
Причина: файл перезаписывается сетевым менеджером.
Решение: настраивайте DNS через активный менеджер:
- NetworkManager;
- Netplan;
systemd-resolved;systemd-networkd;dhclient.
Проблема 2: DNS меняется после перезагрузки
Причина: настройки были внесены временно.
Решение: используйте постоянную конфигурацию:
sudo nmcli connection modify ...
или Netplan:
nameservers:
addresses:
- 1.1.1.1
или resolved.conf.
Проблема 3: Сайты открываются по IP, но не открываются по имени
Проверьте:
ping -c 2 1.1.1.1
ping -c 2 example.com
Если IP пингуется, а домен нет — проблема в DNS.
Проверьте DNS вручную:
dig @1.1.1.1 example.com
Если dig @1.1.1.1 работает, а обычный запрос нет — проблема в локальной настройке DNS.
Проблема 4: В /etc/resolv.conf только 127.0.0.53
Это нормально для systemd-resolved.
Проверьте реальные DNS:
resolvectl status
Настраивать DNS нужно через systemd-resolved, NetworkManager, Netplan или systemd-networkd.
Проблема 5: DNS не работает только в V
Иногда V меняет DNS или добавляет свой домен поиска.
Посмотрите:
resolvectl status
Обратите внимание на строки:
DNS Servers
DNS Domain
Проблема 6: Ошибка Temporary failure in name resolution
Обычно означает, что система не может разрешить доменное имя.
Проверьте:
cat /etc/resolv.conf
resolvectl status
ip route
ping -c 2 8.8.8.8
Если нет маршрута по умолчанию, проблема может быть не в DNS, а в сети:
ip route
Должна быть строка вроде:
default via 192.168.1.1 dev eth0
16. Рекомендуемый порядок действий
Если вы не уверены, какой способ использовать, рекомендую такой порядок.
Вариант A: У вас обычный домашний или рабочий Linux с графическим интерфейсом
Используйте NetworkManager.
1. Узнайте имя соединения:
nmcli connection show
2. Задайте DNS:
sudo nmcli connection modify "Имя соединения" ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify "Имя соединения" ipv4.ignore-auto-dns yes
3. Перезапустите соединение:
sudo nmcli connection down "Имя соединения"
sudo nmcli connection up "Имя соединения"
4. Проверьте:
cat /etc/resolv.conf
resolvectl status
Вариант B: У вас Ubuntu Server
Скорее всего используется Netplan.
1. Найдите файл:
ls -l /etc/netplan/
2. Откройте его:
sudo nano /etc/netplan/00-installer-config.yaml
3. Добавьте:
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
4. Примените:
sudo netplan apply
5. Проверьте:
resolvectl status
Вариант C: У вас сервер с systemd-networkd
Используйте файлы в:
/etc/systemd/network/
Пример:
[Match]
Name=eth0
[Network]
DHCP=yes
DNS=1.1.1.1
DNS=8.8.8.8
[DHCP]
UseDNS=false
Затем:
sudo systemctl restart systemd-networkd
sudo systemctl restart systemd-resolved
17. Краткая шпаргалка
Посмотреть текущие DNS
cat /etc/resolv.conf
resolvectl status
Временно задать DNS
sudo resolvectl dns eth0 1.1.1.1 8.8.8.8
Постоянно задать DNS через NetworkManager
sudo nmcli connection modify "Имя соединения" ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify "Имя соединения" ipv4.ignore-auto-dns yes
sudo nmcli connection down "Имя соединения"
sudo nmcli connection up "Имя соединения"
Постоянно задать DNS через Netplan
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
Применить:
sudo netplan apply
Постоянно задать DNS через systemd-resolved
sudo nano /etc/systemd/resolved.conf
Содержимое:
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=
Применить:
sudo systemctl restart systemd-resolved
Проверить DNS
resolvectl status
getent hosts example.com
dig +short example.com
18. Итог
Самое главное — не просто редактировать /etc/resolv.conf, а понять, какой компонент управляет сетью.
В большинстве случаев:
- для домашнего Linux с графикой используйте NetworkManager;
- для Ubuntu Server используйте Netplan;
- для серверов с
systemd-networkdиспользуйте systemd-networkd + systemd-resolved; - для старых Debian-систем можно использовать /etc/network/interfaces;
- ручное редактирование
/etc/resolv.confподходит только как временное или аварийное решение.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.