etc resolv conf что это

Настройка DNS в Debian

Итак, сегодня мы поговорим с вами о настройке DNS в Debian. Тем, кто «в теме», не потребуются объяснения, но для остальных пройдемся от малого. Что такое DNS? Это компьютерная распределенная система для получения информации о доменах. Она используется для получения IP-адреса той самой уютной ЖЖшки, или ВК. Нужна она прежде всего для человека, так как нам, как ни странно, будет проще запомнить адрес в буквенном формате, чем в числовом. Но это не единственный плюс.

Раньше сеть была гораздо меньше нынешней и на каждой машине находился файл hosts, его рассылали автоматически и «централизованно». Он отвечал за преобразование между доменными и IP-адресами, но сеть непрерывно росла, а данный метод уже явно не справлялся с поставленными задачами. Вот здесь и выходит на сцену механизм, способный делать все то же самое и в больших объемах — DNS. С основными определениями разобрались, теперь перейдем к сути статьи.

Настройка DNS в Debian

Его функции настроены на следующее:

В современных Linux-системах, которые используют systemd, локальные приложения получают доступ к DNS через демон systemresolved. По умолчанию эта служба имеет четыре различных режима и использует по умолчанию файл-заглушку. Его путь: /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 завершена. Достаточно легко и просто, а главное, что все работает.

Источник

Настройка 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-серверов получилось слишком много, так что последняя запись может быть проигнорирована. Все готово, остается только разрешить запуск службы при загрузке системы, если это еще не было сделано:

Читайте также:  memory ras mode что это

Настройка службы resolvconf.service

Служба предоставляет остальным программам централизованный интерфейс для добавления и удаления записей в /etc/resolv.conf при изменении сетевой конфигурации, запуске и остановке процессов и т.д.

Теперь добавим пару записей в файл tail (сервера OpenDNS):

Перезагрузим службу и посмотрим сформированный /run/resolvconf/resolv.conf :

Используем только resolv.conf

Для Ubuntu Desktop запретим вездесущему NetworkManager вмешиваться в процесс распознавания доменных имен:

Остановим службы resolvconf.service и systemd-resolved.service :

Проверим, как теперь работает распознавание доменных имен:

Источник

Ресолвер

Ресолвер — механизм преобразования имен хостов в адреса 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.

Источник

Resolve IP адресов в Linux: понятное и детальное описание

Настройка сетевого взаимодействия сервисов не самая простая задача и часто осуществляется без глубокого понимания как требуется настраивать систему и какие настройки на что влияют. После миграции сервисов в docker контейнерах с centos 6 на centos 7 я столкнулся со странным поведением вебсервера: он пытался присоединиться к сервису по IPv6, а сервис же слушал только IPv4 адрес. Стандартный совет в такой ситуации — отключить поддержку IPv6. Но это не поможет в ряде случаев. Каких? В этой статье я задался целью собрать и детально объяснить как приложения resolve ‘ят адреса.

Публикация будет полезна начинающим администраторам и разработчикам.

Прочитав эту статью, вы узнаете:

А еще я веду телеграм канал Об IT без галстуков и блог. На канале рассказываю о проблемах менеджмента и как их решать, пишу о принципах мышления при решении бизнес задач, о том как стать эффективным и высокоплачиваемым специалистом.

Теперь, когда у разработчика есть возможность вызвать функцию семейства getaddrinfo из glibc для определения адреса, то возникает потребность конфигурировать возвращаемые значения. Например, использовать ли сперва /etc/hosts или запрос к DNS-серверу. В glibc подобное конфигурирование производится с помощью схемы под названием Name Service Switch (NSS).

Если объяснять на пальцах, то NSS позволяет задавать базы данных и очередность поиска в этих базах для предоставления сервиса. В нашем случае, сервис — это поиск по hostname, а базой данных может выступать /etc/hosts или DNS сервер. Это не единственный сервис настраиваемый посредством NSS, предоставляются сервисы mail алиасов, сервис поиска пользователей и групп. Ознакомится со списком можно в руководстве.

Можно отметить, что для localhost имеются две записи: IPv4 и IPv6 адрес. Это может сыграть злую шутку и в конце материала я расскажу почему.

В мануале еще пишут про особую логику с обработкой хостнейма _gateway, но видимо это какой-то патч, так как с Centos 7 у меня он не завелся.

База mdns4_minimal или же mdns_minimal требуется для корректной работы Avahi. При необходимости можно обратиться к документации Arch по Avahi, где коротко и понятно дана информация
по использованию.

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

Обычно администраторы проверяют хостнейм используя команду host. Это некорректно, так host, как и dig, используют только DNS резолвинг, но не используют NSS. Nginx, например, использует функцию getaddrinfo, а она использует NSS. Это приводит к тому, что вбитый в /etc/hosts хостнейм может работать с nginx, но не резолвится иными способами. Куда хуже, когда в /etc/hosts вбиты IPv6 адрес для хостнейма, а в настройках DNS возвращается только IPv4 адрес. В этом случае, администратор может проверить что команда host возвращает только IPv4 адрес и успокоится, а потом приложение использующее getaddrinfo из glibc запустится и найдет для того же хостнейма IPv4 и IPv6 адрес. Источник ошибок…

Для проверки результатов возвращаемой каждой из баз документация рекомендует воспользоваться утилитой getent.

Ниже немного примеров работы с getent с включенным IPv6.

В /etc/nsswitch.conf содержится следующая цепочка баз:

В /etc/hosts содержится следующее инфо

Команда getent ahosts покажет список всех адресов которые удалось найти. С такими настройками она выведет следующее:

Команда позволяет точечно опросить конкретную базу и выяснить что срезолвит база. Рассмотрим для каждой базы возвращаемые значения:

Если убрать из /etc/hosts строки для localhost, то вывод видоизменится:

Теперь база dns и myhostname возвращает ответы, а база files не содержит данных. Для DNS запросов используется неймсервер конфигурируемый в /etc/resolv.conf в моем контейнере, например

На хост машине установлен dnsmasq который проксирует и кэширует ответы DNS серверов. Ответ от DNS будет зависеть от настроек DNS сервера к которому поступил запрос. RFC 1912 рекомендует в пункте 4.1 сконфигурировать DNS сервера таким образом, чтобы localhost указывал на 127.0.0.1.

Certain zones should always be present in nameserver configurations:

These are set up to either provide nameservice for «special»
addresses, or to help eliminate accidental queries for broadcast or
local address to be sent off to the root nameservers. All of these
files will contain NS and SOA records just like the other zone files
you maintain, the exception being that you can probably make the SOA
timers very long, since this data will never change.

Читайте также:  fsck y что делает

The «localhost» address is a «special» address which always refers to
the local host. It should contain the following line:

В моем случае, dnsmasq из коробки содержит записи для localhost, как и рекомендует RFC.

Статус IPv6 на сервере можно получить из параметров ядра. Значение 0 возвращается при включенном IPv6, а 1 при выключенном.

В выводе ifconfig интерфейсы слушающие IPv6 содержат строчку inet6. Ниже пример вывода с выключенным и включенным IPv6 соответственно:

Выключить IPv6 можно вызовом

Воу, в первом выводе у нас дублируется адрес 127.0.0.1. Чтобы разобраться почему так происходит стоит обратиться к исходному коду glibc и к коду утилиты getent. Ниже кусок кода утилиты getent.

Флаг AI_V4MAPPED функции getaddrinfo производит маппинг IPv6 адресов на IPv4 если не были найдены IPv6 адреса в результате опроса базы. Флаг AI_ADDRCONFIG вынудит getaddrinfo проверить наличие IPv6/IPv4 адресов сконфигурированных в системе и в случае отсутствия хотя бы одного IPv6/IPv4 адреса не будет возвращаться IPv6/IPv4 независимо от того что ответит конкретная база.

Чтобы лучше понять эту концепцию, приведу примеры с выводом getaddrinfo на той же системе, с разными настройками ai_flags и ai_family. В /etc/hosts включены для localhost IPv4 и IPv6 адреса.
Исходный код можно найти на моем github.

Осталось проверить как ведет себя getaddrinfo для dns базы. Для этого оставлю в /etc/nsswitch.conf для hosts только dns базу и порезолвлю google.com. Вывод ниже с включенным IPv6.

А вот вывод с выключенным IPv6:

Как видно, ситуация с AI_ADDRCONFIG очень похожа.

Напоследок приведу пример как не учитывая все вышесказанное вляпаться в проблемы. IPv6 включен, /etc/nsswitch.conf стандартный.

Какой можно сделать вывод из всего написанного?

Источник

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-терминалах, печати на принтерах и т.д.

Хотя опускаться до пожаров для университетского городка никуда не годиться, каждый обязан соблюдать технику безопасности, чтобы избежать случаев, подобных этим.

Один из способов это обойти: устанавливать локальный сервер, который определяет имена из Вашего локального домена и пересылает все запросы для других имен к главным серверам. Конечно, это применимо только тогда, когда Вы используете Ваш собственный домен.

Источник

Сказочный портал