Инструменты пользователя

Инструменты сайта


bind

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

bind [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +
 +====== Настройка DNS -сервера BIND ======
 +
 +~~Title: DNS сервер BIND  ~~
 +{{htmlmetatags>
 +metatag-description=(Логирование DNS запросов в BIND, управление DNS сервером. DNS сервер BIND: установка, настройка и обслуживание.)
 +}}
 +
 +Основная цель DNS — это отображение доменных имен в IP адреса и наоборот — IP в DNS.
 +
 +BIND (Berkeley Internet Name Domain, до этого: Berkeley Internet Name Daemon) — открытая и наиболее распространённая реализация DNS-сервера
 +{{ ::dns-03.jpeg?nolink |}}
 +
 +<code>
 +# named -v
 +BIND 9.4.3-P2
 +</code>
 +Расположение файлов BIND:
 +<code>
 +> tree /var/named/
 +/var/named/
 +|-- dev
 +|-- etc
 +|   `-- namedb #Каталог, в котором располагается вся информация о зонах BIND
 +|       |-- dynamic
 +|       |-- master
 +|         |-- empty.db
 +|         |-- localhost-forward.db
 +|         `-- localhost-reverse.db
 +|       |-- named.conf #Конфигурационный файл для даемона
 +|       |-- named.root 
 +|       `-- slave
 +`-- var
 +    |-- dump
 +    |-- log
 +    |-- run
 +    |   `-- named
 +    `-- stats
 +</code>
 +Разрешаем запуск DNS сервера:<file bash>
 +# echo 'named_enable="YES"' >> /etc/rc.conf
 +</file>
 +{{ ::dns-01.jpg?nolink&600 |}}
 +===== Файл зоны =====
 +**Синтаксис файлов зон**
 +  * ; - комментарий
 +  * @ - символ подставновки. Подставляется имя домена из named.conf (название файла зоны) или если задан переменная $ORIGIN
 +  * () - используется для переноса длинных строк.
 +
 +
 +====== named.root или db.root обновление ======
 +Файл **named.root** (db.root) содержит списки корневых серверов [[DNS]]. Этот файл меняется достаточно редко, но его последнюю официальную версию всегда можно скачать с ftp.internic.net (ftp.rs.internic.net). Содержимое db.root (иногда называемого named.ca для "certifying authority") носит достаточно специальный характер. Оно представляет из себя описание набора канонических корневых серверов, собственно регистрирующих домены. 
 +<file>
 +> pwd
 +/var/named/etc/namedb
 +> fetch ftp://ftp.internic.net/domain/named.root
 +named.root                                    100% of 2994  B 4470 kBps
 +</file>
 +====== resolv.conf ======
 +Редактируем файл /etc/resolv.conf: первый DNS сервер это закольцовывание на ваш локальный сервер DNS (127.0.0.1), вторым ближайший к вам DNS сервер (обычно предоставляется вашим провайдером интернета), список остальных DNS на ваше усмотрение (они не являются обязательными). Файл resolv.conf, говорит нам о том, что в случае неудачного DNS запроса к вашему серверу (127.0.0.1), запрос будет автоматически переадресован ко второму по списку DNS серверу и т.д..
 +
 +<code>
 +> ee /etc/resolv.conf
 +domain  your.domen
 +nameserver      127.0.0.1
 +#DNS your ISP
 +nameserver      x.x.x.x
 +nameserver      x.x.x.x
 +</code>
 +
 +**Резолвер(resolver)** - это набор подпрограмм в библиотеке C, которые предоставляют доступ к Internel [[DNS]] (Domain Name System) (Системе Доменных Имен Интернет) (прим. пер. -- DNS обеспечивает возможность преобразования символьных имен машин в IP-адреса и наоборот, IP-адресов в символьные имена). **Файл с настройками /etc/resolv.conf** для резолвера содержит информацию, которую первым делом читают подпрограммы резолвера, вызванные каким-либо процессом. Данный файл устроен так, чтобы его мог читать человек и содержит список ключевых слов и значений, которые предоставляют резолверу различную информацию.
 +
 +В нормально настроенной системе данный файл не нужен: запросы будут обрабатываться сервером на локальном хосте, имя домена определяется из имени машины, а путь поиска машины по домену конструируется из имени домена.
 +
 +**Параметры конфигурации:**
 +  * nameserver
 +адрес сервера имен в Интернет (в нотации xxx.xxx.xxx.xxx), который будет обрабатывать запросы от резолвера. Серверов имен может быть **максимум 3** (остальные игнорируются), по одному на каждой строке. Если задано несколько серверов, то библиотека резолвера опрашивает их в порядке перечисления. Если записей nameserver нет, то по умолчанию используется сервер имен на локальной машине. (Используемый алгоритм пытается подключиться к серверу имен и, если запрос не был обработан через некоторый промежуток времени, делается попытка подключиться к следующему серверу имен, и так до тех пор пока не будет обработан весь список серверов, затем повторить процедуру, пока не будет достигнуто максимальное количество повторов).
 +  * domain
 +Локальное имя домена. Большинство запросов на имена машин в этом домене смогут использовать лишь краткие имена, без указания имени домена. Если записей domain нет, то домен определяется из имени локальной машины, которое возвращается функцией gethostname(); доменной частью имени считается все, что следует после первой точки `.'. Наконец, если имя машины не содержит доменной части, назначается корневой домен.
 +  * search
 +Список для поиска имен машин. Список обычно определяется из локального имени домена; по умолчанию он содержит только имя локального домена. В списке может быть задано несколько доменов, которые должны следовать за ключевым словом search и отделяться друг от друга пробелами или табуляциями. В большинстве случаев, если в запросе к резолверу задано короткое имя машины (без доменной части), то к нему будет поочередно добавляться каждый домен из заданного списка, пока не будет найдено полное совпадающее имя машины. Заметим, что данный процесс может быть медленным, и станет генерировать ощутимый сетевой траффик, если серверы, обслуживающие перечисленные в списке домены, не являются локальными, а также что запросы вернут ошибку тайм-аута, если сервер для одного из доменов недоступен.
 +Список в данный момент ограничен шестью доменами, общая длина имен которых не должна превышать 256 символов.
 +  * sortlist
 +Разрешает сортировку адресов, которые возвращаются вызовом gethostbyname(). Опция sortlist задается с помощью пары: IP адрес/маска сети. Маска сети является необязательной, по умолчанию используется текущая маска сети. Пары из IP-адреса и необязательной маски сети разделяются прямой косой чертой. Может быть задано до 10 пар.
 +пример: sortlist 130.155.160.0/255.255.240.0 130.155.0.0
 +  * options
 +Данная опция разрешает изменение определенных переменных резолвера. Синтаксис такой:
 +<file>
 +options опция ...
 +где опция может принимать одно из следующих значений:
 +debug --- устанавливает RES_DEBUG в _res.options.
 +ndots:n --- устанавливает порог для количества точек, которое должно быть в имени, заданном в res_query (см. resolver(@LIB_NETWORK_EXT@))
 +перед тем как будет создан начальный абсолютный запрос (initial absolute query). По умолчанию, n ``1'', означает, что если в имени есть
 +хоть одна точка, будет попытка считать это имя абсолютным перед добавлением к нему элементов из списка search.
 +</file>
 +<note tip>Ключевые слова domain и search являются взаимно исключающими. Если эти слова заданы оба, то будет работать то, которое задано последним.</note>
 +<note tip>Ключевое слово и значение должны быть в одной строке, и кроме того, ключевое слово (например, nameserver), должно быть первым в строке. Значение должно отделяться от ключевого слова пробелом.</note>
 +====== named.conf ======
 +
 +Настраиваем named.conf
 +<code>
 +> ee /etc/namedb/named.conf
 +...
 +options {
 +...
 +//listen-on [ port ip_port ] { список-шаблонов-адресов };  (по умолчанию - все интерфейсы, порт 53; адрес и порт для приема запросов;
 +//может быть несколько таких предложений)
 +//
 +// укажем явно, на каких интерфейсах обслуживать запросы
 +        listen-on       { 127.0.0.1; адрес-сервера; };
 +//
 +// listen-on-v6 [ port ip_port ] { список-шаблонов-адресов }; (none; для IPv6)
 +//      listen-on-v6    { ::1; };
 +
 +//allow-recursion { список-шаблонов-адресов }; (any; от кого принимать рекурсивные запросы; данные из кеша под запрет не попадают)
 +       allow-recursion { localhost; 127.0.0.1/8; ваша сеть; };
 +...
 +}
 +
 +//Описание зон
 +//master - сервер является первичным уполномоченным сервером для данной зоны, т.е. загружает содержимое зоны из файла зоны,
 +// указанного опцией file
 +//slave - сервер является вторичным уполномоченным сервером для данной зоны; содержимое зоны считывается от одного из серверов,
 +//указанных в опции masters; указание имени файла в опции file  позволяет сохранять резервную копию зоны в файле
 +//
 +zone "your.com.ua" {
 +        type master;
 +        file "master/your.com.ua";
 +        allow-transfer{
 +        127.0.0.1;
 +//IP вашего сервера DNS
 +        x.x.x.x;
 +//IP slave
 +        195.24.128.164;
 +        };
 +};
 +
 +</code>
 +Стартуем DNS нашего сервера.
 +<code>
 +> /etc/rc.d/named start
 +wrote key file "/var/named/etc/namedb/rndc.key"
 +Starting named.
 +</code>
 +Проверяем и видим ошибку "the working directory is not writable"
 +<code>
 +> tail -F /var/log/messages
 +...
 +Oct 25 16:12:48 ns named[59827]: starting BIND 9.4.3-P2 -t /var/named -u bind
 +Oct 25 16:12:48 ns named[59827]: command channel listening on 127.0.0.1#953
 +Oct 25 16:12:48 ns named[59827]: command channel listening on ::1#953
 +Oct 25 16:12:48 ns named[59827]: the working directory is not writable
 +Oct 25 16:12:48 ns named[59827]: running
 +...
 +</code>
 +BIND изначально запускается в песочнице. За настройки в песочнице отвечает файл BIND.chroot.dist. Изменим в этом файле строки для директорий namedb и master.
 +<code>
 +> cp /etc/mtree/BIND.chroot.dist /etc/mtree/BIND.chroot.dist.orig
 +> ee /etc/mtree/BIND.chroot.dist
 +...
 +    etc
 +        namedb uname=bind
 +            dynamic uname=bind
 +            ..
 +            master  uname=bind
 +...
 +> chown -R bind:wheel /etc/namedb/
 +</code>
 +Ошибка устранена.
 +
 +
 +====== Логирование DNS запросов ======
 +Для логирования всего происходящего при работе BIND нужно создать раздел logging в named.conf и создать нужные директории. В разделе logging задаются 2 параметра channel (можно и больше двух - на ваше усмотрение), эти параметры дословно можно назвать "канал" записи. Каждый канал определяет имя канала и настройки параметров записи (что записывать, а что - нет и куда писать). Директива category задает какую категорию сообщений в какой канал отправлять. Исходя из этого, мы имеем: запись стандартной информации в канал misc, а приходящие запросы посылаются в канал query. При этом, если файлы журнала достигают 4Мб (size 4m), он переименовывается добавлением к имени .1 и начинается запись в новый журнал, числа в конце других журналов увеличиваются. Журналы с номером, более указанного в version (в нашем случае 4) удаляются. Параметры print* определяют заносить ли в журнал время появления, важность и категорию информации. Более подробно про настройки раздела logging можно почитать в man (5) named.conf.
 +<file>
 +// настройки логирования
 +logging {
 +          channel "misc" {
 +                    file "/var/log/bind/misc.log" versions 4 size 4m;
 +                    print-time yes;
 +                    print-severity yes;
 +                    print-category yes;
 +          };
 +
 +          channel "query" {
 +                    file "/var/log/bind/query.log" versions 4 size 4m;
 +                    print-time yes;
 +                    print-severity no;
 +                    print-category no;
 +          };
 +
 +          category default {
 +                    "misc";
 +          };
 +
 +          category queries {
 +                    "query";
 +          };
 +};
 +</file>
 +====== rndc - управление DNS сервером BIND 9 ======
 +В то время как управление работающим сервером BIND 4 осуществлялось простой посылкой сигнала процессу (HUP - перезагрузить файл настройки и зоны; TERM - остановить; INT - сбросить базу данных в файл named_dump.db; ABRT - записать статистику в конец файла named.stats), управление сервером BIND 9 производится с помощью специальной утилиты rndc, которая соединяется с сервером (по умолчанию - TCP порт 953) и использует специальный протокол для передачи ему команд. Однако сигналы HUP, TERM пока действуют.
 +
 +Настраивая сервер, необходимо обеспечить права доступа к управляющему порту (controls) и ключ (key), смотри ниже rndc-confgen.
 +
 +Файл настройки rndc (/etc/rndc.conf) имеет такой же синтаксис, что и named.conf. Комментарии могут записываться в стиле C, C++ или sh. Файл настройки состоит из утверждений, завершающихся точкой с запятой. Утверждения содержат блок предложений, заключенный в фигурные скобки. Предложение в блоке также завершается точкой с запятой. Права на чтение этого файла должны быть только у того, кто имеет право запускать rndc. Предусматириваются следующие типы утверждений:
 +<code>
 +    * options {
 +          o default-server имя-или-адрес-сервера;
 +          o default-key "имя-ключа";
 +          o default-port номер-управляющего-порта;
 +      }
 +    * server имя-или-адрес-сервера { // адрес в двойных кавычках
 +          o key "имя-ключа";
 +          o port номер-управляющего-порта;
 +      }
 +    * key "имя-ключа"
 +          o algorithm hmac-md5;
 +          o secret "base-64-кодированный-ключ";
 +      }
 +</code>
 +Утилита rndc-confgen позволяет сгенерировать /etc/rndc.conf со случайным ключом (и закоментаренные предложения controls и key для /etc/named.conf). Следующими ключами можно модифицировать получаемый файл:
 +
 +    * -b размер-ключа (по умолчанию - 128; от 1 до 512)
 +    * -k имя-ключа (по умолчанию - rndc-key)
 +    * -p номер-управляющего-порта (по умолчанию - 953)
 +    * -s имя-или-адрес-сервера (по умолчанию - 127.0.0.1)
 +
 +Утилита rndc позволяет менять параметры соединения с сервером с помощью ключей:
 +
 +    * -c имя-файла-настройки
 +    * -s имя-или-адрес-сервера
 +    * -p номер-управляющего-порта
 +    * -y имя-ключа
 +    * -V (трассировка исполнения для отладки)
 +
 +Если запустить rndc без указания команды, то она выдаст список поддерживаемых команд:
 +
 +    * reload (перезагрузить файл настройки и зоны)
 +    * reload зона [класс [вид]] (перезагрузить зону)
 +    * refresh зона [класс [вид]] (запланировать немедленное обновление зоны)
 +    * reconfig (перезагрузить файл настройки и новые зоны)
 +    * stats (записать статистику в конец файла named.stats)
 +    * **querylog** (включить/выключить журнализацию запросов) - после включения в логах можно будет увидеть с какого IP приходят запросы.
 +    * **dumpdb** (сбросить базу данных в файл named_dump.db, например: **rndc dumpdb -all**)
 +    * stop (сохранить изменения в файлы зон и остановить сервер)
 +    * halt (остановить сервер без сохранения изменений)
 +    * trace (увеличить уровень отладки на 1) в файле **named.run** -появятся отладочные сообщения
 +    * trace уровень (установить уровень отладки)
 +    * notrace (отключить отладку)
 +    * flush (сбросить весь кеш)
 +    * flush вид (сбросить кеш для указанного вида)
 +    * **flushname** (сбросить кеш для указанного домена, например, сбросить для домена mx.example.ru: **rndc flushname mx.example.ru**)
 +    * status (показать состояние сервера)
 +    * restart (перезапустить сервер; не реализовано)
 +====== Domain Name Speed Benchmark ======
 +
 +Правильность настройки DNS сервера и его скорость вы можете проверить при помощи [[https://www.grc.com/dns/benchmark.htm|Domain Name Speed Benchmark]].
  

bind.txt · Последнее изменение: 2020/06/13 13:45 (внешнее изменение)