Etc resolv conf что это
Настройка DNS в Debian
Итак, сегодня мы поговорим с вами о настройке DNS в Debian. Тем, кто «в теме», не потребуются объяснения, но для остальных пройдемся от малого. Что такое DNS? Это компьютерная распределенная система для получения информации о доменах. Она используется для получения IP-адреса той самой уютной ЖЖшки, или ВК. Нужна она прежде всего для человека, так как нам, как ни странно, будет проще запомнить адрес в буквенном формате, чем в числовом. Но это не единственный плюс.
Раньше сеть была гораздо меньше нынешней и на каждой машине находился файл hosts, его рассылали автоматически и «централизованно». Он отвечал за преобразование между доменными и IP-адресами, но сеть непрерывно росла, а данный метод уже явно не справлялся с поставленными задачами. Вот здесь и выходит на сцену механизм, способный делать все то же самое и в больших объемах — DNS. С основными определениями разобрались, теперь перейдем к сути статьи.
Настройка DNS в Debian
Его функции настроены на следующее:
В современных Linux-системах, которые используют systemd, локальные приложения получают доступ к DNS через демон system—resolved. По умолчанию эта служба имеет четыре различных режима и использует по умолчанию файл-заглушку. Его путь: /run/systemd/resolve/stub-resolv.conf.
В данном файле используется в качестве единственного DNS—сервера заглушка — 127.0.0.53, которая перенаправляет обращения к локальному DNS серверу, а он, в свою очередь уже получает информацию от других серверов в интернете. Надеюсь, вы поняли суть.
К сожалению, из-за того, что /etc/resolv.conf не прямо управляется службой systemd-resolved, а иногда с помощью использования initscripts или NetworkManager, любые пользовательские изменения НЕ будут сохранены. С учетом всех сложностей, описанных выше, я хочу поделиться с вами информацией о том, как настроить DNS на Debian в этом злополучном файле /etc/resolv.conf.
Шаг 1. Содержимое /etc/resolv.conf
Чтобы это сделать мы откроем терминал и напишем команду:
В нем мы видим имя сервера nameserver 192.168.1.1 и больше ничего. Это пока что, но мы к нему вернемся.
Шаг 2. Установка resolvconf
Обязательно обновим систему с помощью команды:
После обновления устанавливаем resolvconf. Для этого пишем команду:
sudo apt install resolvconf
После установки система должна автоматически запустить службу resolvconf.service. Чтобы проверить так ли это вам надо будет использовать команду:
sudo systemctl status resolvconf.service
Здесь мы видим, что служба не запущена, но бывает, что триггер срабатывает автоматически. Так или иначе, нам надо запустить эту службу. Используем следующие команды:
sudo systemctl start resolvconf.service
sudo systemctl enable resolvconf.service
sudo systemctl status resolvconf.service
Как вы поняли, с помощью sudo systemctl start resolvconf.service и sudo systemctl enable resolvconf.service мы запускаем службу, а sudo systemctl status resolvconf.service отобразит состояние активности этой службы.
Шаг 3. Настройка DNS
Теперь откройте файл /etc/resolvconf/resolv.conf.d/head. Делается это с помощью команды:
sudo nano /etc/resolvconf/resolv.conf.d/head
Прекрасно, следующим шагом будет внесение данных в этот файл. Вписываем в него следующие строки так, как это показано на скриншоте:
nameserver 8.8.8.8
nameserver 8.8.4.4
Сохраняем изменения с помощью ctrl+o -> Enter -> ctrl+x. Теперь надо перезагрузить систему, чтобы изменения пришли в действие.
Шаг 4. Проверяем файл /etc/resolv.conf
После перезагрузки снова открываем терминал и пишем команду для запуска службы (это вторичная мера, у меня, например, триггер сработал автоматически):
sudo systemctl start resolvconf.service
Видим, что служба запущена. Переходим в наш конфигурационный файл, который был описан в самом начале статьи. Используем команду:
На скриншоте отображены те самые данные, которые мы внесли в файл — nameserver 8.8.8.8 и nameserver 8.8.4.4 На этом все! Настройка DNS Debian завершена. Достаточно легко и просто, а главное, что все работает.
Linux.yaroslavl.ru
Опции в /etc/host.conf должны быть на отдельных строках. Области могут быть отделены пустым пространством (пробелами или табуляцией). Знак # вводит комментарий до конца строки. Доступны следующие опции:
Опция trim позволяет рассматривать Ваш хост как локальный для нескольких доменов.
Типовой файл для vlager показан в примере 6-1.
Пример 6-1. Образец файла host.conf
Установки из файла host.conf могут быть изменены, используя ряд переменных окружения:
Файл nsswitch.conf позволяет администратору конфигурировать большое число разных баз данных. Мы ограничим наше обсуждение параметрами, которые касаются хостов и поиска адресов IP.
Доступны следующие параметры:
Использовать Network Information System (NIS), чтобы найти адрес. NIS и NIS+ подробно рассмотрены в главе 13.
Простой пример спецификации баз данных host и network показан в примере 6-2.
Пример 6-2. Образец файла nsswitch.conf
Вы способны управлять поисковой таблицей более точно, используя «action items», которые описывают, какое действие использует результат предыдущего поиска. Action items появляются между сервисными спецификациями и включены в квадратные скобки ( [] ). Общий синтаксис здесь такой:
Имеются два возможных действия:
Управление возвращается программе, которая запросила преобразование имени. Если попытка поиска была успешна, resolver вернет подробные данные, иначе нулевой результат.
Resolver перейдет к следующему сервису в списке и будет пытаться использовать его.
Доступные значения состояния, которые мы можем использовать:
Простой пример того, как Вы могли бы использовать этот механизм, показан в примере 6-3.
Пример 6-3. Файл nsswitch.conf с командой Action
Но как только Вы выйдете за пределы домена отдела математики, хорошая жизнь кончится. Конечно, Вы также хотели бы иметь записи вроде quark.physics для компьютеров в отделе Физики.
Если заданный по умолчанию домен создает проблемы, посмотрите часть файла resolv.conf для Virtual Brewery:
Если Вы запускаете LAN внутри большей сети, непременно должны использовать центральные сервера имен, если они доступны. Преимущество этого состоит в том, что они имеют богатые кэши, так как все запросы направлены к ним. Эта схема имеет недостаток: когда сгорел базовый кабель в нашем университете при пожаре, невозможно было дальше работать в LAN нашего отдела, потому что resolver не мог достичь какого-либо из серверов. Не было login на X-терминалах, печати на принтерах и т.д.
Хотя опускаться до пожаров для университетского городка никуда не годиться, каждый обязан соблюдать технику безопасности, чтобы избежать случаев, подобных этим.
Один из способов это обойти: устанавливать локальный сервер, который определяет имена из Вашего локального домена и пересылает все запросы для других имен к главным серверам. Конечно, это применимо только тогда, когда Вы используете Ваш собственный домен.
Ресолвер
Ресолвер — механизм преобразования имен хостов в адреса IP.
Включает в себя glibc, libresolv, использует /etc/resolv.conf, /etc/hosts, /etc/nsswitch.conf
В ALT дополнительно используются /etc/net/ifaces/*/resolv.conf, systemd-resolved, openresolv
Содержание
Введение [ править ]
Лучшее понимание механизмов преобразования имен хостов в адреса IP позволит быстрее диагностировать ошибки.
Преобразование имен хостов в адреса занимается glibc на основе различных источников данных (/etc/hosts, mDNS, winbind, dns, ldap и т. п.). Это модульная система, можно добавить много различных модулей.
Источники для преобразования имён в адреса указаны в grep hosts /etc/nsswitch.conf :
Например, добавив в строку hosts: параметр mymachines (пакет libnss-mymachines), мы сможем обращаться к нашим контейнерам systemd-nspawn по именам.
Мы сейчас говорим о модуле dns (/lib<,64>/libnss_dns.so), который слинкован с libresolv. Именно в libresolv определено использование /etc/resolv.conf.
С вводной частью закончили, давайте перейдём к практике и рассмотрим, кто и как наполняет этот /etc/resolv.conf.
etcnet [ править ]
В etcnet есть 2 варианта создания /etc/resolv.conf, один для статической настройки, другой для DHCP.
openresolv [ править ]
openresolv был придуман для того, что бы во время работы при смене DNS удобно управлять /etc/resolv.conf. Оправдан, кода вы одни серверы DNS получили от сервера DHCP, а другие — от соединения VPN.
Когда у нас происходит настройка на серверы DNS только один раз при загрузке, то использовать openresolv нет необходимости. Возможно даже вредно, т. к. это вносит еще один элемент (прокладку) во всю эту хрупкую конструкцию.
Надо еще упомянуть, что openresolv умеет готовить конфиги для dnsmasq, unbound, pdns, bind, если они используются как локальные серверы DNS.
systemd-resolved [ править ]
systemd-resolved — это по сути маленький локальный кэширующий dns-сервер, принимающий запросы на 127.0.0.53:53. Его можно с натяжкой сравнить с dnsmasq, unbound, knot-resolver (конечно, они гораздо мощнее и гибче), но он умеет, например, DNSSEC и DNS-Over-TLS.
Кроме этого, он предоставляет API для взаимодействия напрямую через вызовы библиотеки, а не через запросы по UDP.
Добавив в nsswitch.conf
(пакет libnss-resolve), мы сможем резолвить имена без (/lib<,64>/libnss_dns.so) и без обращения к /etc/resolv.conf. /etc/resolv.conf он тоже умеет читать, но никак его не модифицирует.
Скажем так, у systemd-resolved свой resolv.conf, который находится в /run/systemd/resolve. И не один.
Чтобы glibc продолжал работать с nss-модулем dns, systemd-resolved может предоставить для него resolv.conf
а) статический /lib/systemd/resolv.conf в котором указан nameserver 127.0.0.53.
сделав симлинк /etc/resolv.conf → /lib/systemd/resolv.conf, мы укажем нашей системе использовать systemd-resloved как локальный сервер DNS.
б) сгенерированный /run/systemd/resolve/stub-resolv.conf
Вот на него более правильно делать симлинк /etc/resolv.conf. В нём также указан nameserver 127.0.0.53, но еще могут быть указаны домены поиска:
в) сгенерированный /run/systemd/resolve/resolv.conf
В нём указаны реальные серверы DNS. Т. е., скопировав в /etc/resolv.conf (или симлинк), приложения (glibc nss-dns) перестанут использовать локальный кэширующий dns-сервер systemd-resolved и начнут напрямую использовать указанные серверы.
Информация в этот сгенерированный файл попадает из файлов /etc/systemd/network/*.network и /etc/systemd/resolved.conf (DNS=…, Domains=…)
Эти же данные используются и для работы самого systemd-resolved.
NetworkManager [ править ]
NetworkManager по умолчанию использует встроенный клиент DHCP, но может и внешний.
Можно определить в /etc/NetworkManager/conf.d/dhcp-client.conf:
Так же он может использовать dnsmasq, unbound или systemd-resolved в качестве локального сервера DNS (dns=dnsmasq). При этом не надо отдельно стартовать dnsmasq или unbound, он их сам запустит и настроит (подсунет конфиг).
Если /etc/resolv.conf является симлинком на один из systemd-resolved конфигов, NM это понимает и использует systemd-resolved (не трогает /etc/resolv.conf).
А вот если /etc/resolv.conf не симлинк, а файл, то NM начинает его изменять (указывает nameserver для статического или DHCP адреса), используя openresolv (собран с параметром --with-config-dns-rc-manager-default=resolvconf).
По аналогии с systemd-resolved NM генерирует resolv.conf в /run/NetworkManager/resolv.conf и /run/NetworkManager/no-stub-resolv.conf
update_chrooted [ править ]
Множество сервисов и отдельных программ(например ping) запускаются в chroot. В этот chroot должны быть скопированы и библиотеки, и настройки для этих библиотек, в частности resolv.conf. Т. е. ping не использует /etc/resolv.conf, а использует /var/resolv/etc/resolv.conf.
Первая глобальная проблема [ править ]
update_chroot не предполагает симлинка /etc/resolv.conf.
Приплыли. Большая часть проблем отпала (точнее наоборот появилась). Подождем еще 3 месяца и баге будет 3 года. Спасибо ldv@. altbug #33591
Вторая проблема [ править ]
Дополнительные сервисы в systemd [ править ]
(Для решения второй проблемы с update_chrooted ) systemd умеет отслеживать изменение файлов и запускать по событию сервис. Были написаны сервисы altlinux-libresolv.path (отслеживает изменения) и altlinux-libresolv.service (запускает /etc/chroot.d/resolv.conf).
Для обновления /etc/resolv.conf без использования openresolv были написаны сервисы altlinux-simpleresolv.path и altlinux-simpleresolv.service
Для обновления /etc/resolv.conf с ипользование openresolv были написаны сервисы altlinux-openresolv.path и altlinux-openresolv.service
Подведение итогов и рекомендации [ править ]
трудностей. Просто удалите пакет systemd-networkd.
Настройка DNS на Ubuntu Server 18.04 LTS
При этом файл resolv.conf заменяется символической ссылкой на /run/resolvconf/resolv.conf и программы используют динамически сгенерированный файл. В системе без службы resolvconf.service файл resolv.conf поддерживается вручную или набором скриптов. И эти скрипты могут мешать друг другу при попытках одновременного доступа к файлу.
Всё это привело к тому, что теперь в одной системе порт 53 может слушать несколько разных резолверов, причём для избежания конфликтов NetworkManager и systemd-resolved используют вместо 127.0.0.1 другие ip-адреса в loopback-сети:
Настройка службы systemd-resolved
В Ubuntu Server эта служба уже установлена и запущена сразу после установки операционной системы. Но если это не так, установить ее несложно:
Следующим шагом будет правка файла /etc/nsswitch.conf — находим строку, которая начинается с hosts :
Осталось сообщить systemd-resolved ip-адреса DNS-серверов, к которым следует обращаться для резолвинга:
В файле /run/systemd/resolve/stub-resolv.conf указан один-единственный сервер 127.0.0.53 :
Как видите, у меня DNS-серверов получилось слишком много, так что последняя запись может быть проигнорирована. Все готово, остается только разрешить запуск службы при загрузке системы, если это еще не было сделано:
Настройка службы resolvconf.service
Служба предоставляет остальным программам централизованный интерфейс для добавления и удаления записей в /etc/resolv.conf при изменении сетевой конфигурации, запуске и остановке процессов и т.д.
Теперь добавим пару записей в файл tail (сервера OpenDNS):
Перезагрузим службу и посмотрим сформированный /run/resolvconf/resolv.conf :
Используем только resolv.conf
Для Ubuntu Desktop запретим вездесущему NetworkManager вмешиваться в процесс распознавания доменных имен:
Остановим службы resolvconf.service и systemd-resolved.service :
Проверим, как теперь работает распознавание доменных имен:
Domain name resolution (Русский)
Доменное имя — символьное представление IP-адреса в системе доменных имён (Domain Name System, DNS). В статье рассмотрена настройка разрешения (resolution) доменных имён.
Contents
Name Service Switch
systemd предоставляет три службы NSS для разрешения имён:
Разрешение доменных имён с NSS
Распознаватель glibc
Распознаватель glibc считывает файл /etc/resolv.conf при каждом разрешении имени, определяя сервер доменных имён и используемые опции.
В файле resolv.conf(5) перечислены сервера имён и настройки. Сервера используются в порядке перечисления, сверху вниз. Можно указать до трёх серверов. Строки, начинающиеся с символа решётки ( # ), игнорируются.
Перезапись файла /etc/resolv.conf
Помешать программам изменять файл /etc/resolv.conf можно с помощью защиты от записи, атрибутом неизменяемости:
Ограничение времени поиска
Если поиск выполняется слишком медленно (например, при работе pacman или в браузере), попробуйте задать тайм-аут с небольшим значением. По истечении тайм-аута распознаватель выбирает следующий сервер имён из списка. Добавьте следующую строку в /etc/resolv.conf :
Задержка при разрешении имени с IPv6
Имена в локальном домене
Чтобы имена локальных хостов можно было указывать без доменного имени, добавьте следующую строку в файл /etc/resolv.conf (домен замените на необходимый):
Теперь при работе, например, ssh можно сослаться на локальный хост строкой вида mainmachine1 (вместо mainmachine1.example.org ); в то же время другим командам (например, drill) всё ещё может требоваться полное имя домена.
Утилиты
С помощью специализированных DNS-утилит можно отправлять запросы конкретным DNS-серверам и/или запросы к записям DNS/DNSSEC определённого типа. NSS при этом не используется, поскольку в утилитах такого рода обычно имеется собственная реализация протокола DNS.
Если DNS-сервер не указать, то drill будет отправлять запросы одному из указанных в /etc/resolv.conf серверов.
Производительность
В распознавателе glibc отсуствует кэширование ответов. Если кэширование всё же необходимо, то либо используйте systemd-resolved, либо запустите локальный кэширующий DNS-сервер. Во втором случае сервер будет работать как локальный сервер имён — добавьте адреса 127.0.0.1 и ::1 в файл /etc/resolv.conf (или в /etc/resolvconf.conf при работе через openresolv).
Приватность и безопасность
В базовом протоколе DNS шифрование сообщений не предусмотрено. По этой причине ни конфиденциальность запросов, ни целостность/подлинность ответов никак не проверяется и не гарантируются. В итоге ваши запросы могут быть «подслушаны», а ответы — изменены, например, при работе в недоверенной сети или при наличии у вашего интернет-провайдера некоего злого умысла. Помимо перечисленных проблем, существует такое явление как перехват DNS со стороны DNS-сервера.
Если вы всё же рассчитываете на некоторую конфиденциальность, то в первую очередь необходимо выбрать DNS-сервер, которому можно доверять. Сервера имён предоставляются как интернет-провайдерами, так и сторонними компаниями. Также можно запустить собственный рекурсивный сервер имён, но это, само собой, потребует некоторых дополнительных усилий. Если вы используете DHCP-клиент в недоверенной сети, убедитесь, что ваш распознаватель настроен на использование статических серверов, потому что иначе запросы будут отправляться на неизвестный посторонний сервер. Обезопасить соединение с удалённым DNS-сервером можно с помощью шифрования по протоколам DNS over TLS (RFC 7858), DNS over HTTPS (RFC 8484) и DNSCrypt, при условии, что и выбранный upstream-сервер, и ваш распознаватель одновременно поддерживают конкретный протокол. В качестве отдельного решения можно использовать специализированную программу для шифрования соединяний, — например, stunnel. Для проверки подлинности ответов (в самом ли деле они приходят от авторитативного сервера имён) можно использовать DNSSEC (опять же при условии, что он поддерживается и сервером, и вашим распознавателем).
DNS в приложениях
Некоторые клиентские программы, например, крупнейшие веб-браузеры, начали реализовывать DNS over HTTPS [2], [3]. С одной стороны, шифрование сообщений является неоспоримым плюсом; в то же время такие программы часто отправляют запросы «мимо» системного распознавателя [4].
Firefox предоставляет настройки для включения/отключение DNS over HTTPS и выбора сервера имён.
Chromium включает DoH, если сервера имён, используемые системным распознавателем, его поддерживают. Подробнее (в т.ч. о том, как отключить DoH) см. этот пост.
Oblivious DNS
Oblivious DNS — система распознавания DNS-имён, которая призвана решить некоторые проблемы приватности. Подробнее см. статью Cloudflare.
Сторонние службы DNS
Существует целый DNS-служб от независимых производителей; для некоторых из них также разработаны специализированные программы.
С помощью dnsperftest можно замерить производительность наиболее популярных распознавателей для вашего географического расположения. На сайте dnsperf.com приведено глобальное сравнение производительности резличных провайдеров.
DNS-серверы
DNS-серверы делятся на авторитативные и рекурсивные. Если сервер не принадлежит к одному из этих двух типов, то он представляет из себя так называемый распознаватель-заглушку (stub resolver); его назначение — просто перенаправлять запросы к некоему рекурсивному серверу имён. Заглушки обычно используются для DNS-кэширования на хосте или в локальной сети. Обратите внимание, что то же самое можно получить и установив полноценный сервер имён. В данном разделе представлено сравнение доступных DNS-серверов, более подробное сравнение можно найти в статье Comparison of DNS server software.
Авторитативные серверы
Название | Пакет | DNSSEC | Географическая балансировка |
---|---|---|---|
gdnsd | gdnsd | Нет | Да |
Knot DNS | knot | Да | Да |
MaraDNS | maradns AUR | Нет | ? |
NSD | nsd | Нет | Нет |
PowerDNS | powerdns | Да | Да |
Условное перенаправление
Существует возможность настроить систему на использование определённого DNS-распознавателя для разрешения некоторых доменных имён. Например, очень удобно при подключении к VPN-сети запросы к ней же разрешать с помощью её собственного DNS, в то время как запросы к остальному интернету будут по прежнему разрешаться стандартным распознавателем. Также это можно использовать в локальных сетях.
Для реализации условного перенаправления понадобится локальный распознаватель, потому что glibc такую функцию не поддерживает.
В динамическом окружении (ноутбуки и в некоторой степени настольные компьютеры) необходимо настроить ваш распознаватель на основе сети(-ей), к которой(-ым) вы подключены. Проще всего это сделать с помощью openresolv, поскольку он поддерживает нескольких абонентов. Некоторые сетевые менеджеры также поддерживают этот механизм, либо через openresolv, либо через настройку распознавателя напрямую. Так, в NetworkManager реализовано условное перенаправление без openresolv.