Resolv conf что это
Перейти к содержимому

Resolv conf что это

  • автор:

DNS в Ubuntu 12.04

В Ubuntu 12.04 произошли приятные изменения при разрешении имён в DNS. Рассмотрим два нововведения:
Переключение на resolvconf с файла /etc/resolv.conf
Dnsmasq теперь резолвер DNS по умолчанию в Desktop версии.

Переключение на resolvconf с файла /etc/resolv.conf

resolvconf это набор скриптов для управления разрешением имён в DNS. Наиболее важное для пользователей изменение то, что ручные изменения в /etc/resolv.conf будут потеряны и перезаписаны триггерами resolvconf. Вместо этого, resolvconf использует информацию из DHCP, от плагинов Network Manager и параметры dns-nameservers в /etc/network/interfaces, чтобы создать список DNS серверов и записать информацию в /etc/resolv.conf.

Возникают следующие вопросы:

  • Используется статическая IP конфигурация. Куда класть инфу о моих DNS серверах.
    DNS конфигурация для статических интерфейсов должна быть описана в соответствующих записях dns-nameservers, dns-search и dns-domain в /etc/network/interfaces
  • Как перекрыть конфигурацию resolvconf или добавить свои записи?
    Resolvconf хранит в /etc/resolvconf/resolv.conf.d/ каталоге файлы base, head, original и tail файлы. Всё хранится в resolv.conf формате:
    • base: используется, когда нет вообще никаких данных
    • head: используется для заголовка в /etc/resolv.conf
    • original: просто резервная копия оригинального resolv.conf во время установки resolvconf
    • tail: любая информация из этого файла добавляется в конец /etc/resolv.conf

    Dnsmasq теперь резолвер DNS по умолчанию в Desktop версии.

    В desktop установке, DNS сервер по умолчанию выставлен в 127.0.0.1, который указывает на управляемый NetworkManager dnsmasq сервер.

    Это сделано для лучшей поддержки DNS у VPN пользователей, лучше обрабатывать DNS проблемы и восстанавливаться после сбоя.
    Этот dnsmasq сервер НЕ кеширующий сервер созданный в целях безопасности, который снижает риски при отравлении DNS кеша или «прослушивание» DNS трафика в многопользовательской среде.

    Большим преимуществом является то, что при подключении к VPN, вместо того, чтобы весь DNS трафик отправлять через VPN как раньше, отправлять только DNS запросы, связанные с подсетями и доменами, анонсированные VPN сервером. Это особенно важно из-за латентности связи VPN.

    Для обработки сбоев DNS, Dnsmasq посылает DNS запросы к нескольким серверам DNS (если они будут указаны) и может обнаружить «мёртвых» и просто проигнорировать их. Если DNS «придёт в норму», то информация от него снова будет использована.

    Сравните это с работой Libc при разрешении DNS имён, где состояние DNS сервера нельзя сохранить, так как libc это всего лишь библиотека, и поэтому каждое приложение будет испытывать таймауты при использовании «мёртвого» DNS сервера до переключения на следующий рабочий DNS.

    • Как узнать какие DNS сервера я использую? Что-то типа cat /etc/resolv.conf.
      nm-tool даст информацию об ваших соединениях в NetworkManager, как если бы вы получили её через GUI.
      Ещё информацию можно получить из файла /run/nm-dns-dnsmasq.conf
    • Не хочу локальный резолвер у себя. Как отключить dnsmasq?
      В /etc/NetworkManager/NetworkManager.conf закомментируйте dns=dnsmasq строку и sudo restart network-manager .

    Resolv.conf

    Файл /etc/resolv.conf это файл конфигурации для процедур сервера имен. Файл конфигурации содержит информацию, которая читается процедурами разрешения имен при первом их вызове процессом. Процедуры обеспечивают доступ к системе доменных имен.

    Файл содержит строки вида:

    ключевое_слово значение например nameserver адрес domain имя search список_поиска sortlist список_сортировки options список_опций
    если установлена утилита resolvconf (и файл resolv.conf формируется автоматически), то для добавления просматриваемых dns-серверов "до" / "после" локального 127.0.0.1 добавляем в файл / строки nameserver ip_my_dns

    Литература

    • Man`s rus: Форматы файлов: resolv.conf
    • Конфигурирование сервера поиска — resolv.conf

    Справочная информация

    • 25.05.2012: Resolv.conf: создание статьи в википедии

    Служба доменных имен (DNS)

    Каждый компьютер, подключенный к сети, работающей по протоколу TCP/IP (например, к Internet), идентифицируется своим IP-адресом. IP-aдрес представляет собой комбинацию четырех чисел, определяющих конкретную сеть и конкретный хост-компьютер в этой сети. IP-адреса очень трудно запоминать, поэтому для идентификации хост-компьютера вместо его 1Р-адрреса можно пользоваться доменным именем. Доменное имя состоит из двух частей — хост-имени и имени домена. Хост-имя — зто собственно имя компьютера, а домен обозначает сеть, частью которой этот компьютер является. Домены, используемые в США, обычно имеют расширения, обозначающие тип сети. Например, для учебных заведений использую расширение .edu , а для коммерческих организаций — расширение .com . Международные домены обычно имеют расширения, которые обозначают страну в которой они расположены, например .du для Германии и .аu для Австралии. Комбинация хост-имени, имени домена и расширения представляет собой уникальное имя, по которому можно обращаться к компьютеру. Домен, в свою очередь, иногда разбивается на поддомены.
    Как вы знаете, компьютер в сети можно идентифицировать только по его IP-адресу, даже если он имеет доменное имя. Обратиться к компьютеру в сети по доменному имени можно, но это предполагает поиск соответствующего IP-адреса в базе данных. Сеть использует для доступа к компьютеру не доменное имя, а IP-адрес. До появления очень больших сетей с протоколами TCP/IP, в частности Internet, каждый компьютер сети мог вести файл, перечнем доменных имен и IP-адресов всех компьютеров, включенных в эту сеть. В случае обращения по доменному имени компьютер искал его в этом файле и находил соответствующий IP-адрес. Так можно поступать и сейча в отношении удаленных систем, соединения с которыми устанавливаются чаще всего.
    По мере роста сетей ситуация изменилась. Ведение отдельного списка всех доменных имен и IP-адресов на каждом компьютере стало непрактичным, а в случае с Internet — просто невозможным. Чтобы обеспечивать преобразование доменных адресов в IP-адреса, были разработаны и установлены на особые серверы базы данных, содержащие доменные имена и соответствующие им IP-адреса. Для того чтобы найти IP-адрес доменного имени, на сервер имен посылается соответствующий запрос. Сервер имен ищет IP-адрес и посылает его обратно. В крупной сети может быть нескольк серверов имен, обслуживающих различные части сети. Если какой-либо сервер имен не может найти необходимый IP-адрес, он посылает запрос на другой сервер. Серверы имен могут предоставлять и такую информацию, как наименование предприятия, на котором находится искомый компьютер, его адрес и даже фамилию лица, обслуживающего этот компьютер.
    Запросы на серверы имен посылают особые программы, которые называют определителями (resolver). Определитель — это программа, предназначенная для получения адресов с серверов имен. Чтобы пользоваться у себя в системе доменными именами, вам придется конфигурировать собственный определитель. Конфигурация локального определителя задается файлами /etc/host.conf и /etc/resolv.conf .

    файл host.conf

    В файле host.conf содержатся опции программы-определителя (см. следующую таблицу). Каждая опция может иметь несколько полей, отделенных друг от друга пробелами или знаками табуляции. Для ввода комментария в начале строки нужно ставить знак # . Опции указывают определителю, каким сервисом пользоваться. Важное значение имеет порядок следования опций. Определитель начинает обработку с первой из указанных опций и переходит по очереди к следующим. Файл host.conf находится в каталоге /etc вместе с другими файлами конфигурации.

    order

    Задает последовательность методов преобразования имен
    hosts Проверяется наличие имени в локальном файле /etc/host
    bind Запрашивается адрес у сервера имен DNS
    nis Для получения адреса используется база данных центра сетевой информации (NIS)
    alert Проверяет наличие в локальной системе адресов удаленных узлов, пытающихся получить к ней доступ; устанавливается и отменяется ключевыми словами on и off nospoofПодтверждает правильность адресов удаленных узлов, пытающихся получить доступ к локальной системе trimУдаляет имя домена из полного имени и проверяет наличие только хост-имени. Позволяет использовать вместо IP-адреса не полное имя хост.домен.расширение , а просто хост-имя, указанное в файле hosts . multiПозволяет хост-машине иметь несколько IP-адресов в локальном файле hosts . Включается и выключается ключевыми словами on и off

    В следующем примере, где представлен файл host.conf , опция order дает программе-определителю указание искать имена в локальном файле /etc/ hosts , а в случае неудачи направлять запрос на сервер имен. Не допускается использование нескольких адресов системы.

    /etc/host.conf # host.conf file # Lookup names in host file and then check DNS order bind host # There are no multiple addresses multi off

    Файл /etc/resolv.conf

    Для того чтобы программа-определитель могла выполнять свою задачу ей должен быть предоставлен доступ к серверам доменных имен. В фале resolv.conf содержатся адреса серверов имен, к которым имеет доступ данная система. В этом файле можно создавать три типа записей, каждая из которых предваряется одним из трех ключевых слов: domain, nameserver, search . В записи domain вводится доменное имя локальной системы. В записи search приводится список доменов на тот случай, если задается только хост-имя. Если к какой-либо системе пользователь обращается часто, он может ввести имя ее домена в запись search, а затем использовать в качестве адреса только хост-имя. Определитель попытается найти полное доменное имя по имени домена, указанному в записи search.
    После записей search идут записи nameserver, если таковые имеются. Для каждого сервера имен, к которому имеет доступ данная система, вводиься ключевое слово nameserver и IP-адрес. Таких серверов может быть несколько, и порядок их следования в списке очень важен. Во многих сетях имеется основной сервер имен и несколько вспомогательных. Основной сервер должен запрашиваться первым. Для этого его IP-адрес должен быть введен в первую запись nameserver.
    Ниже приведен пример файла resolv.conf . Домен хост- компьютера berkeley.edu . IP-адреса серверов имен этого домена указаны в записях name server. Запись search позволяет использовать в качестве адреса только xoct-имя для компьютеров в домене unc.edu . Например, чтобы обратиться системе sunsite.unc.edu , пользователь должен ввести в качестве адреса толькй хост-имя, sunsite .

    /etc/resolv.conf # resolv.conf file domain berkeley.edu search unc.edu nameserver 204.199.87.2 nameserver 204.199.77.2

    Организация собственного сервера имен: демон named

    Если, будучи администратором сети, вы решили организовать в ней сервер имен, то можно конфигурировать на работу в качестве такого сервера любую Linux-систему. Для этого необходимо запустить демон named . Этот демон запускается одновременно с системой и ожидает запросов о доменных именах. Демон named пользуется несколькими файлами конфигураци которые позволяют ему отвечать на запросы. В файле named.boot указывается домен, который обслуживает данный сервер, и имя каталога, предназначенного для его рабочих файлов. В файле named.hosts хранится информация об этом домене. Она состоит из Записей, содержащих сведения о хост-компьютерах, находящихся в данном домене. В этих записях используется весьма специфический формат, с кодами в соответствующих полях. Файл named.rev содержит данные о соответствии между IP-адресами и хост-именами. Файл named.ca организует кэширование для сервера имен. Процесс организации собственного сервера имен может быть довольно сложным. Следует обратиться к документам HOW TO, странице диалогового руководства по программе named и литературе по администрированию сети, включающей в свой состав Linux-системы.

    Как настроить простой DNS-сервер для локальной сети

    Если вы впервые столкнулись с необходимостью поднять DNS-сервер для локальной сети под Linux, то эта статья – для вас. Преимущество предлагаемого способа – простота: сервер можно настроить буквально за несколько минут. Но этот способ, скорее всего, не подойдёт для продакшн серверов.

    Автор статьи провёл несколько часов в борьбе с ошибками, багами и непонятным поведением системы прежде чем получил стабильный результат.

    Далее будем считать, что имеется локальная сеть, состоящая из нескольких хостов. Локальная сеть настроена, сетевой доступ между хостами имеется. На хостах установлен Ubuntu 18.04.4 LTS (для других версий не проверялось).

    Шаг 1. Установка необходимых пакетов

    Следующие шаги выполняются на хосте, на котором будет устанавливаться DNS-сервер.

      Установите Dnsmasq: sudo apt-get install dnsmasq При установке выведутся следующие ошибки:

    failed to create listening socket for port 53: Address already in use
    FAILED to start up
    Failed to start dnsmasq — A lightweight DHCP and caching DNS server.

    При рестарте системы файл /etc/resolv.conf автоматически пересоздаётся. Поэтому если прописать в него нужный адрес вручную, то изменения окажутся стёртыми после перезапуска. По умолчанию после перезапуска в этот файл прописывается адрес 127.0.0.53 , который используется сервисом systemd-resolve . Этот сервис осуществляет определение IP-адресов доменов для приложений, работающих на том же хосте, на котором запущен сервис. Но мы планируем перестать использовать этот сервис и начать использовать dnsmasq .

    Шаг 2. Настройка пакетов

    1. Отредактируйте файл /etc/dnsmasq.conf :

    sudo nano /etc/dnsmasq.conf

    1. no-resolv Эта настройка выключает загрузку настроек из /etc/resolv.conf . Все настройки будут браться из редактируемого файла /etc/dnsmasq.conf . Это сильно упрощает конфигурацию Dnsmasq’а, поскольку файл /etc/resolv.conf автоматически пересоздаётся при рестарте системы.
    2. server=8.8.8.8 8.8.8.8 — это адрес DNS-сервера Гугл. Этот адрес можно заменить на любой другой адрес публичного DNS-сервера. Например, на адрес DNS-сервера вашего провайдера или ранее используемого DNS-сервера. Запросы, которые не сможет обработать Dnsmasq будут направлены на этот сервер.
    3. listen-address=0.0.0.0 Эта настройка позволит осуществлять запросы к Dnsmasq’у с других хостов.
    4. bind-interfaces Задаёт режим, при котором Dnsmasq не осуществляет привязку к интерфейсам, по которым не должна осуществляться обработка запросов. Без этой настройки в предлагаемом варианте конфигурации сервер не работает.

    Шаг 3. Настройка используемых DNS-серверов

    Данная настройка выполняется на всех хостах-клиентах, с которых будут отправляться запросы на хост с сервисом Dnsmasq.

    Проще всего настроить используемые DNS-сервера в графическом интерфейсе. Укажите адрес хоста, на котором установлен Dnsmasq, первым в списке:

    Шаг 4. Локальное тестирование DNS-сервера

    Проверку настроек можно и не делать. Но если вам интересно узнать, всё ли работает правильно, то выполните следующие команды на хосте с сервисом Dnsmasq.

    1. Проверьте, что в файле /etc/resolve.conf прописан адрес 127.0.0.1 : cat /etc/resolve.conf
    2. Выполните команду: sudo netstat -tulpen Вы должны увидеть, что адрес 0.0.0.0:53 занят Dnsmasq’ом, а адрес 127.0.0.53:53 не фигурирует в списке.
    3. Выполните команду: dig ya.ru Вы должны получить вывод, в котором присутствует примерно такая строчка. В начале строки не должно быть символов ; . ya.ru. 220 IN A 87.250.250.242
    4. Выполните команду: dig myserver.tst Вы должны получить вывод, в котором присутствует примерно такая строчка: myserver.tst. 0 IN A 1.2.3.4

    Шаг 5. Тестирование DNS-сервера с других хостов

    Теперь можно проверить работу DNS-сервера с других хостов.

    Выполните пункты 3 и 4 из предыдущего раздела. Вывод в консоль должен быть аналогичен результатам, указанным в предыдущем разделе.

    Дополнительная информация

    Открыть, если что-то пошло не так

    1. Следующая команда в режиме реального времени выводит в консоль все запросы, выполняемые на порт 53. Это помогает определить факт выполнения запросов. sudo tcpdump -l port 53 Данную команду логично выполнять в другом терминале – не в том, в который вводятся команды, подлежащие проверке.
    2. Обратите внимание, что DNS-запросы кэшируются и сервисом systemd-resolved, и сервисом dnsmasq. Для сброса кэша проще всего перезапустить используемый сервис: sudo systemctl restart dnsmasq (на серверном хосте) sudo systemctl restart systemd-resolved (на клиентских хостах)

    Заключение

    В этой статье мы рассмотрели, как можно сравнительно быстро настроить DNS-сервер для локальной сети под Linux. Если вы знаете какие-то другие фишки по настройке DNS-сервера, напишите об этом в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *