Настройка DNS на Ubuntu Server 18.04 LTS
Стало достаточно традиционным для Linux запускать небольшой локальный DNS-сервер, который ускоряет работу, кешируя ответы на повторяющиеся DNS-запросы. В этом случае в общесистемный /etc/resolv.conf помещается директива nameserver 127.0.0.1 , а ip-адреса внешних DNS-серверов переносятся в настройки локального.
При изменении сетевой конфигурации, запуске и остановке процессов, некоторым программам необходимо динамически изменять файл resolv.conf . При одновременном доступе программы мешают друг другу и сохраняют неверную информацию в файл. Утилита resolvconf действует как посредник между программами, которые предоставляют информацию о сервере имен, и программами, которые используют информацию о сервере имен.
При этом файл resolv.conf заменяется символической ссылкой на /run/resolvconf/resolv.conf и программы используют динамически сгенерированный файл. В системе без службы resolvconf.service файл resolv.conf поддерживается вручную или набором скриптов. И эти скрипты могут мешать друг другу при попытках одновременного доступа к файлу.
Всё работало хорошо, пока не появились NetworkManager и Systemd. Система инициализации Systemd имеет свой собственный резолвер systemd-resolved , запущенный по умолчанию и требующий отдельной настройки. А NetworkManager пытается дружить со всеми — с resolvconf , с Systemd , с наиболее распространёнными DNS-резолверами.
Всё это привело к тому, что теперь в одной системе порт 53 может слушать несколько разных резолверов, причём для избежания конфликтов NetworkManager и systemd-resolved используют вместо 127.0.0.1 другие ip-адреса в loopback-сети:
- 127.0.0.1 — dnsmasq или unbound с настройками по умолчанию
- 127.0.1.1 — dnsmasq или unbound , запущенный NetworkManager
- 127.0.0.53 — systemd-resolved , запущенный по умолчанию
Настройка службы systemd-resolved
В Ubuntu Server эта служба уже установлена и запущена сразу после установки операционной системы. Но если это не так, установить ее несложно:
Следующим шагом будет правка файла /etc/nsswitch.conf — находим строку, которая начинается с hosts :
Эта строка отвечает за последовательность обращений приложения к системным компонентам с целью резолвинга доменного имени. В данном случае сначала программа заглянет в файл /etc/hosts , затем запросит демона systemd-resolved , а потом — к DNS серверам.
Осталось сообщить systemd-resolved ip-адреса DNS-серверов, к которым следует обращаться для резолвинга:
Для целей совместимости с приложениями, которые не используют библиотечные вызовы, а обращаются к DNS-серверам напрямую, получая их ip-адреса из /etc/resolv.conf , следует создать символическую ссылку. Обычно этого не требуется, ссылка уже существует после установки systemd-resolved :
В файле /run/systemd/resolve/stub-resolv.conf указан один-единственный сервер 127.0.0.53 :
Кроме того, можно создать символическую ссылку на /run/systemd/resolve/resolv.conf . Этот файл содержит DNS-сервера, полученные от DHCP-сервера и из файла конфигурации /etc/systemd/resolved.conf . В этом случае локальный кеширующий сервер не используется, что замедлит резолвинг.
Как видите, у меня DNS-серверов получилось слишком много, так что последняя запись может быть проигнорирована. Все готово, остается только разрешить запуск службы при загрузке системы, если это еще не было сделано:
Настройка службы resolvconf.service
Служба предоставляет остальным программам централизованный интерфейс для добавления и удаления записей в /etc/resolv.conf при изменении сетевой конфигурации, запуске и остановке процессов и т.д.
После установки /etc/resolv.conf будет представлять из себя ссылку на /run/resolvconf/resolv.conf .
При этом исходный файл /etc/resolv.conf (который на самом деле ссылка на /run/systemd/resolve/resolv.conf ) будет сохранен как original в директории /etc/resolvconf/resolv.conf.d/ (чтобы восстановить его при удалении службы resolvconf.service ). В этой же директории есть есть еще три файла — base , head и tail — которые позволяют вручную добавить записи в динамически формируемый /run/resolvconf/resolv.conf .
Теперь добавим пару записей в файл tail (сервера OpenDNS):
Перезагрузим службу и посмотрим сформированный /run/resolvconf/resolv.conf :
Первая запись — это резолвер systemd-resolved , а две другие записи были добавлены в конец resolv.conf из файла tail . Благодаря тому, что первая запись это 127.0.0.53 — резолвинг будет работать быстро, потому что systemd-resolved кеширует ответы DNS-серверов.
Но если мы остановим службу systemd-resolved , резолвинг все равно будет работать, используя сервера 208.67.222.222 и 208.67.220.220 — хотя и гораздо медленнее.
Используем только resolv.conf
Так делать не рекомендуется, потому что резолвинг будет работать медленно, но рассмотрим и этот вариант для полноты картины. Первым делом изменим имя файла /etc/resolv.conf на /etc/resolv.conf.back , а потом создадим свой resolv.conf :
Для Ubuntu Desktop запретим вездесущему NetworkManager вмешиваться в процесс распознавания доменных имен:
Остановим службы resolvconf.service и systemd-resolved.service :
Проверим, как теперь работает распознавание доменных имен:
Источник
Настройка DNS на Ubuntu Server 20.04
Настройка DNS на Ubuntu Server 20.04
Преамбула.
Поставил намедни сервер Ubuntu Server 20.04
Настроил сеть. И выкусил!
В /etc/resolv.conf:
127.0.0.53
options edns0
Перезагрузка сервисов и указание руками не помогает
Ранее в Linux.
В Linux обычно запускался локальный DNS-сервер для ускорения работы
Он кеширует ответы повторяющихся DNS-запросов
В /etc/resolv.conf помещается директива — nameserver 127.0.0.1
IP адреса внешних DNS-серверов переносятся в настройки локального
Некторые утилиты при работе нуждаются в изменении файла resolv.conf
При одновременном доступе утилиты конфликтуют друг с другом за файл
Утилита resolvconf является посредником между конфликтующими утилитами
Сам файл resolv.conf заменяется символической ссылкой /run/resolvconf/resolv.conf
В следствии утилиты используют динамически сгенерированный файл
Если в ОС отсутствует служба resolvconf.service — файл resolv.conf поддерживается руками
Проблемы пришли с появлением Systemd и NetworkManager
Система инициализации Systemd имеет собственный распознаватель systemd-resolved
Он запускается по умолчанию, требует настройки
NetworkManager — прокладка посути между resolvconf и Systemd
Имеем, что в ОС порт 53 может прослушивать несколько разных распознавателей
Во избежание конфликтов NetworkManager и systemd-resolved используют вместо 127.0.0.1:
127.0.0.1 — dnsmasq или unbound с настройками по дефолту
127.0.1.1 — dnsmasq или unbound, запускается NetworkManager
127.0.0.53 — systemd-resolved, запускается по дефолту
Настройка распознавателя systemd-resolved
На Ubuntu Server 20.04 служба установлена и работает по дефолту
При ее отсутствии установка:
# apt install systemd-resolved
Правим строку «hosts: files resolve dns»:
# vi /etc/nsswitch.conf
passwd: files systemd
group: files systemd
shadow: files
gshadow: files
hosts: files resolve dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
Где:
«hosts: files resolve dns» — последовательность обращений утилит для разрешения доменных имен
Т.е. в данном случае:
Утилита обратится к файлу /etc/hosts
Затем обратиться к сервису systemd-resolved
Затем обратиться к DNS серверам
Указываем systemd-resolved IP-адреса DNS-серверов, для разрешения доменных имен:
# vi /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 8.8.8.4 192.168.1.9
Утилитамы не использующие библиотечные вызовы, обращающимися к DNS-серверам напрямую
Получают IP адреса из /etc/resolv.conf
Для них нужно создать символическую ссылку:
# ln -svi /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
По итогу имеем:
$ cat /run/systemd/resolve/stub-resolv.conf
nameserver 8.8.8.8 # из файла конфигурации /etc/systemd/resolved.conf
nameserver 8.8.8.4 # из файла конфигурации /etc/systemd/resolved.conf
nameserver 192.168.1.9 # из файла конфигурации /etc/systemd/resolved.conf
Символическая ссылка /run/systemd/resolve/resolv.conf
Содержит DNS-сервера, полученные от DHCP-сервера и из файла /etc/systemd/resolved.conf
В данном случае локальный кеширующий сервер не используется, это замедлит преобразование имен
# ln -svi /run/systemd/resolve/resolv.conf /etc/resolv.conf
Включаем запуск службы при загрузке ОС:
# systemdctl enable systemd-resolved
# reboot
После перезагрузки проверяем
Источник
Настройка DNS в Ubuntu
Сервера DNS используются системой для преобразования сложных для запоминания IP адресов в простые доменные имена. Это делается потому что людям сложно запоминать несколько никак не связанных цифр, но очень просто запомнить слово.
Когда компьютеру нужно узнать IP адрес какого-либо домена, он отправляет запрос известному ему DNS серверу. Эти сервера могут быть получены автоматически от роутера по DHCP или же заданы в ручную. В этой статье мы рассмотрим как выполняется настройка DNS Ubuntu 16.04 и более старых версиях.
Настройка DNS в Ubuntu через GUI
Раньше, для настройки DNS серверов, которые будут использоваться системой было достаточно внести адреса нужных серверов в файл /etc/resolv.conf. Но сейчас всей конфигурацией сети в Ubuntu управляет NetworkManager, а этот файл теперь представляет собой только ссылку на файл NetworkManager.
Этот способ до сих пор работает, но в нем вы можете настроить DNS на LiveCD, или до перезагрузки. После перезагрузки все настройки собьются и придется все делать заново. Поэтому, чтобы все сохранилось нужно выполнять все действия через интерфейс NetworkManager. Сначала откройте контекстное меню для значка сети на панели и выберите «Изменить подключения»:
Выберите ваше подключение и нажмите «Изменить»:
В открывшемся окне перейдите на вкладку «Параметры IPv4»:
Затем, в поле «Способ настройки» выберите «Автоматически (DHCP, только адрес)»:
Теперь немного ниже появиться поле «Серверы DNS», где вам нужно прописать нужные серверы, можно несколько адресов через запятую. Например, можно указать сервера от Google:
Поле этого нажмите «Сохранить» и «Закрыть». Теперь можете переподключитесь к этому соединению и можете проверять текущий DNS сервер:
Собственно, это все, но есть еще один способ настройки через консоль, если этот не сработал или вы предпочитаете работать из консоли.
Настройка DNS через терминал Ubuntu
В Ubuntu есть унифицированный интерфейс настройки сети, который настраивается через конфигурационный файл /etc/network/interfaces. Сначала смотрим список сетевых интерфейсов:
Откройте файл для редактирования и найдите в нем имя своего сетевого интерфейса, например, auto enp0s3, если такой секции нет, ее нужно добавить:
sudo vi /etc/network/interfaces
auto enp0s3
iface enp0s3 inet dhcp
Затем, добавьте в эту секцию строчку:
Здесь адрес 8.8.8.8 — это адрес вашего DNS сервера. Но эта настройка сработает, только если ваш DHCP клиент не пытается назначить адрес самостоятельно. Чтобы указать DNS адрес на уровне DHCP сервера нужно добавить такую строчку в конфигурационный файл /etc/dhcp/dhclient.conf:
sudo vi /etc/dhcp/dhclient.conf
supersede domain-name-servers 8.8.8.8
Здесь тоже адрес 8.8.8.8 означает адрес DNS сервера. Для верности, вы можете добавить свои адреса DNS серверов в файл /etc/resolvconf/resolv.conf.d/base:
sudo vi /etc/resolvconf/resolv.conf.d/base
Чтобы настройки вступили в силу необходимо перезапустить сеть:
sudo systemctl restart networking
Возможно, даже лучше будет если вы полностью перезагрузите компьютер. Теперь вы можете открыть /etc/resolv.conf и посмотреть применялся ли новый адрес DNS:
Как видите, в моем примере все заработало. Подобно этому выполняется настройка dns linux для любого дистрибутива.
Выводы
В этой небольшой статье мы рассмотрели как выполняется настройка DNS Ubuntu 16.04 через графический интерфейс или терминал. В Ubuntu автоматической настройкой DNS могут заниматься множество утилит и это создает некоторые проблемы при настройке, но со всем можно разобраться. Надеюсь, эта информация была полезной для вас.
Источник