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

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


freebsd:bind9

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
freebsd:bind9 [2020/11/21 17:29]
alex
freebsd:bind9 [2022/01/08 15:27] (текущий)
alex
Строка 7: Строка 7:
  
  
 +==== Установка ====
  
- +  cd/​usr/​ports/​dns/​bind910 make install clean
- +
- +
- +
-  root@mgmt:/​usr/​ports/​dns/​bind910make install clean+
   ​   ​
   ┌────────────────────────────── bind910-9.10.4 ────────────────────────────────┐   ┌────────────────────────────── bind910-9.10.4 ────────────────────────────────┐
Строка 121: Строка 118:
 ==== Настройка ==== ==== Настройка ====
  
 +=== Формат файла настройки ===
 +Файл настройки BIND 9 обычно называется /​etc/​named.conf. Утилита named-checkzone проверяет синтаксис файла зоны. В качестве параметра указываются имя зоны и имя файла. Утилита named-checkconf проверяет синтаксис файла настройки. В качестве параметра можно указать имя файла.
 +
 +Комментарии в файле настройки могут записываться в стиле C, C++ или sh. Строки и идентификаторы,​ не являющиеся доменными именами,​ например,​ имена файлов,​ обязательно заключать в кавычки.
 +
 +Во многих местах файла настройки используется такая синтаксическая конструкция,​ как список-шаблонов-адресов:​ список через точку с запятой шаблонов адресов,​ завершающийся точкой с запятой. Шаблон адреса - это либо IP-адрес,​ либо IP-адрес с указанием числа бит в маске адреса (например,​ 192.168.0.0/​28),​ либо имя ACL (т.е. ссылка на ранее определенный утверждением acl список-шаблонов-адресов,​ либо список-шаблонов-адресов в фигурных скобках,​ либо ключевое слово key с последующим именем ключа (определяется утверждением key). Имена рекомендуется заключать в кавычки. Перед шаблоном адреса может стоять символ отрицания (восклицательный знак). Ключи попали в эту конструкцию,​ потому что они тоже определяют права доступа,​ хотя и не имеют отношения к адресам хостов. Исходный адрес сравнивается последовательно с элементами списка до первого успешного соответствия. Если перед этим элементом списка стоит символ отрицания,​ то процесс завершается и сравнение со всем списком-шаблонов-адресов считается неудачным. Предопределены следующие имена ACL:
 +
 +  * **any** (соответствует любой хост)
 +  * **none** (не соответствует никакой хост)
 +  * **localhost** (соответствует IPv4 адрес любого интерфейса хоста)
 +  * **localnets** (соответствует любой IPv4 адрес сети, к которой принадлежит любой интерфейс хоста)
 +Список-ключей - это список ключей через точку с запятой,​ завершающийся точкой с запятой.
 +
 +Файл настройки состоит из утверждений,​ завершающихся точкой с запятой. Утверждение начинается с ключевого слова и может содержать блок предложений,​ заключенный в фигурные скобки. Предложение в блоке также завершается точкой с запятой,​ начинается с ключевого слова и может содержать блок. Утверждения обрабатываются последовательно. Предусматриваются следующие типы утверждений:​
 +
 +  * **acl имя-acl { список-шаблонов-адресов };** (определяет именованный список-шаблонов-адресов)
 +  * **controls { inet ip-адрес [port порт-TCP ] allow { список-шаблонов-адресов } keys { список-ключей }; ... };** (каждое предложение inet определяет права доступа (адреса и ключи) к управляющему каналу rndc, открываемому по указанному адресу и номеру порта; номер порта по умолчанию - 953; вместо адреса можно указать символ "​*"​ - IPv4 адрес любого интерфейса хоста)
 +  * **include имя-файла;​** (содержимое указанного файла включается в текст файла настройки;​ очень удобно для включения текста ключей из файла, защищенного от чтения посторонними;​ может использоваться внутри view)
 +  * **key идентификатор-ключа { algorithm hmac-md5; secret "​секретная-строка-в-base-64";​ };** (определяет ключ для аутентификации и авторизации:​ rndc и TSIG; определение ключа для TSIG можно описывать внутри утверждения view; использовать ключ можно в утверждениях server, controls и в списке-шаблонов-адресов)
 +  * **logging** (настройка журнализации;​ возможно только одно утверждение данного типа)
 +  * **lwres** (настройка сервера для выполнения функций демона lwresd)
 +  * **options** (глобальные опции и опции по умолчанию;​ возможно только одно утверждение данного типа)
 +  * **server ip-адрес-удаленного-сервера { опция; ... };** (позволяет конкретизировать значения некоторых опций для конкретного сервера)
 +  * **trusted-keys** - определение ключей DNSSEC
 +  * **view** - описание вида (точки зрения) на доменное пространство,​ различным клиентам может быть представлено различное видение на пространство доменных имен
 +  * **zone** - описание зоны
 +Утверждение **options** может содержать следующие предложения:​
 +
 +  * **version "​строка";​** (по умолчанию - реальный номер версии;​ для отключения обработки надо использовать строку none, а лучше закрыть класс CHAOS из вида совсем,​ т.к. неизвестно о чем он ябедничает еще; сервер позволяет узнать номер версии с помощью запроса к встроенной псевдозоне bind класса CHAOS:
 +  host -t txt -c CHAOS version.bind адрес-сервера
 +  * **hostname hostname_string;​** (по умолчанию - gethostname();​ для отключения обработки надо использовать строку none, а лучше закрыть класс CHAOS из вида совсем,​ т.к. неизвестно о чем он ябедничает еще; сервер позволяет узнать имя конкретного хоста из группы anycast с помощью запроса к встроенной псевдозоне bind класса CHAOS (на моем сервере не заработало,​ попытка указать hostname приводит к сообщению о неизвестной опции):​
 +  host -t txt -c CHAOS hostname.bind адрес-сервера
 +  * directory имя-каталога;​ (абсолютное имя рабочего каталога,​ все упоминаемые относительные имена файлов лежат в нем)
 +  * key-directory имя-каталога;​ (абсолютное имя каталога,​ в котором лежат публичные и частные ключи для безопасного изменения зон; отдельный каталог может потребоваться для увеличения безопасности)
 +  * named-xfer имя-файла;​ (устарело)
 +  * tkey-domain доменное-имя;​
 +  * tkey-dhkey имя-ключа этикетка-ключа;​
 +  * dump-file имя-файла;​ (named_dump.db;​ имя файла, в который сбрасывается текущее состояние кеша доменных имен по команде rndc dumpdb)
 +  * memstatistics-file path_name; (не реализовано)
 +  * pid-file имя-файла;​ (/​var/​run/​named.pid;​ в этот файл записывается номер процесса;​ можно указать none)
 +  * statistics-file имя-файла;​ (named.stats;​ к этому файлу добавляется статистика по команде rndc stats)
 +  * zone-statistics yes_or_no; (no; собирать статистику отдельно для каждой "​своей"​ зоны)
 +  * auth-nxdomain yes_or_no; (no; всегда устанавливать бит AA в ответах NXDOMAIN, даже если сервер не является уполномоченным для данного домена;​ может потребоваться для совместимости)
 +  * deallocate-on-exit yes_or_no; (устарело)
 +  * dialup dialup_option;​ (позволяет уменьшить число дозвонов,​ если сервер находится на клиентском конце dialup-on-demand линии)
 +  * fake-iquery yes_or_no; (устарело)
 +  * fetch-glue yes_or_no; (устарело)
 +  * has-old-clients yes_or_no; (устарело;​ используйте auth-nxdomain yes и rfc2308-type1 no)
 +  * host-statistics yes_or_no; (не реализовано)
 +  * minimal-responses yes_or_no; (no; заполнять дополнительные секции в ответах только при крайней необходимости - отрицательный результат,​ делегирование;​ уменьшает нагрузку на сервер)
 +  * multiple-cnames yes_or_no; (устарело;​ позволял использовать множественные CNAME в нарушение стандарта)
 +  * notify yes_or_no_or_explicit;​ (yes; посылать DNS NOTIFY при изменении зоны, для которой сервер уполномочен,​ серверам из NS и also-notify;​ explicit - посылать только серверам из списка also-notify)
 +  * recursion yes_or_no; (yes; обслуживать рекурсивные запросы)
 +  * rfc2308-type1 yes_or_no; (не реализовано)
 +  * use-id-pool yes_or_no; (устарело)
 +  * maintain-ixfr-base yes_or_no; (устарело)
 +  * forward ( only | first ) ; (first; действует только при непустом списке forwarders; перенаправлять запросы,​ не имеющие ответов в кеше или своих зонах, серверам,​ указанным в списке forwarders; позволяет организовать общий кеш для нескольких серверов или доступ в Интернет через прокси;​ first - сначала делается запрос к серверам из списка,​ при неудаче производится собственный поиск; only - собственный поиск не производится;​ можно настраивать отдельно для каждой зоны - см. утверждение zone)
 +  * forwarders { ip_addr [port ip_port] ; ... }; (пусто;​ список IP-адресов и, возможно,​ номера портов серверов,​ которые будут обслуживать перенаправленные запросы;​ смотри forward)
 +  * check-names ( master | slave | response )( warn | fail | ignore ); (не реализовано,​ т.е. ignore?)
 +  * allow-notify { список-шаблонов-адресов }; (первичный сервер зоны; от кого наш сервер как вторичный уполномоченный сервер будет принимать извещения об изменениях зоны; можно настраивать отдельно для каждой зоны - см. утверждение zone)
 +  * allow-query { список-шаблонов-адресов }; (any; от кого принимать обычные запросы;​ можно настраивать отдельно для каждой зоны - см. утверждение zone)
 +  * allow-transfer { список-шаблонов-адресов };(any; от кого принимать запросы на передачу зоны; можно настраивать отдельно для каждой зоны - см. утверждение zone)
 +  * allow-recursion { список-шаблонов-адресов }; (any; от кого принимать рекурсивные запросы;​ данные из кеша под запрет не попадают)
 +  * allow-update-forwarding { список-шаблонов-адресов }; (none; от каких хостов вторичный сервер будет принимать динамические изменения зоны для передачи их первичному уполномоченному серверу;​ авторы не советуют)
 +  * allow-v6-synthesis { список-шаблонов-адресов }; (none; заморочки со "​старыми"​ реализациями IPv6)
 +  * blackhole { список-шаблонов-адресов }; (none; с этих адресов запросы не принимаются и к ним запросы не посылаются)
 +  * listen-on [ port ip_port ] { список-шаблонов-адресов }; (по умолчанию - все интерфейсы,​ порт 53; адрес и порт для приема запросов;​ может быть несколько таких предложений)
 +  * listen-on-v6 [ port ip_port ] { список-шаблонов-адресов }; (none; для IPv6)
 +  * query-source [ address ( ip_addr | * ) ] [ port ( ip_port | * ) ]; (обратный адрес и номер порта для запросов к другим серверам;​ по умолчанию или * в качестве адреса - INADDR_ANY; по умолчанию или * в качестве номера порта - случайный непривилегированный порт; в TCP запросах всегда используется случайный непривилегированный порт)
 +  * query-source-v6 ... (для IPv6)
 +  * also-notify { ip_addr [port ip_port] ; ... ] }; (по умолчанию - пустая строка;​ список адресов серверов,​ которым посылается DNS NOTIFY при изменении зоны, для которой сервер уполномочен,​ в дополнение к серверам из списка NS; см. предложение notify и утверждение zone)
 +  * max-transfer-time-in число-минут;​ (120; максимальное время приема зоны)
 +  * max-transfer-time-out число-минут;​ (120; максимальное время передачи зоны)
 +  * max-transfer-idle-in число-минут;​ (60; максимальное время отсутствия прогресса при приеме зоны)
 +  * max-transfer-idle-out число-минут;​ (60; максимальное время отсутствия прогресса при передаче зоны)
 +  * serial-query-rate раз-в-секунду;​ (20; максимальное число запросов SOA в секунду со стороны нашего сервера как вторичного уполномоченного сервера к соответствующим первичным серверам для определения необходимости приема зоны)
 +  * serial-queries number; (устарело)
 +  * transfer-format ( one-answer | many-answers ); (many-answers;​ при выборе формата one-answer при передаче зоны используется отдельный пакет для каждой RR, many-answers - в каждый пакет упаковывается столько RR, сколько в него может поместиться;​ many-answers эффективнее,​ но не поддерживается BIND 4; см. утверждение server)
 +  * transfers-in число; (10; максимальное число одновременно принимаемых зон)
 +  * transfers-out число; (10; максимальное число одновременно передаваемых зон)
 +  * transfers-per-ns число; (2; максимальное число одновременно принимаемых зон с одного сервера;​ см. утверждение server)
 +  * transfer-source ( ip4_addr | * ) [port ip_port] ; (по умолчанию - адрес интерфейса,​ "​ближайшего"​ по мнению ОС к удаленному серверу;​ определяет локальный адрес при запросе передачи зоны от удаленного сервера;​ также определяет адрес и UDP порт для перенаправляемых динамических изменений и проверок изменения зоны на первичном сервере (запрос SOA); именно этот адрес должен быть разрешен для передачи на удаленном сервере,​ так что рекомендуется задавать его явно; см. утверждения server и view)
 +  * transfer-source-v6 ... (передача зоны осуществляется с помощью IPv6)
 +  * notify-source ( ip4_addr | * ) [port ip_port] ; (?; определяет локальный адрес и UDP порт при посылке DNS NOTIFY вторичным серверам;​ именно этот адрес должен быть указан при настройке вторичного сервера в предложении master или allow-notify;​ см. утверждения zone и view)
 +  * notify-source-v6 ... (посылка DNS NOTIFY осуществляется с помощью IPv6)
 +  * max-ixfr-log-size number; (устарело)
 +  * max-journal-size размер;​ (unlimited; максимальный размер журнального файла - хранит динамические изменения (RFC 2136, RFC 3007) описания зоны на первичном сервере или результат обновлений зоны в формате IXFR (RFC 1995) на вторичном сервере;​ имя файла образуется из имени зоны добавлением суффикса .jnl; файл имеет двоичный формат;​ изменения отображаются на файл зоны с некоторым интервалом с целью уменьшения нагрузки на компьютер,​ поэтому файл зоны нельзя редактировать вручную;​ используется для восстановлении файла зоны при перезапуске)
 +  * coresize размер;​ (default, т.е. значение заданное при запуске процесса,​ см. setrlimit(2) и ulimit -c; размер coredump; можно использовать масштабирующие коэффициенты K, M и G)
 +  * datasize размер;​ (default, т.е. значение заданное при запуске процесса,​ см. setrlimit(2) и ulimit -d; максимальный размер сегмента данных,​ который ОС выделит процессу;​ рекомендуется использовать только для увеличения недостаточного значения по умолчанию;​ можно использовать масштабирующие коэффициенты K, M и G)
 +  * files число; (unlimited; максимальное число одновременно открытых файлов)
 +  * stacksize размер;​ (default, т.е. значение заданное при запуске процесса,​ см. setrlimit(2) и ulimit -s; максимальный размер сегмента стека, который ОС выделит процессу;​ можно использовать масштабирующие коэффициенты K, M и G
 +  * cleaning-interval число-минут;​ (60; период очистки кеша от RR с истекшим TTL)
 +  * heartbeat-interval number; (для dialup-ных зон)
 +  * interface-interval число-минут;​ (60; интервал сканирования списка активных интерфейсов;​ 0 - сканировать только при запуске;​ сервер перестает прослушивать опущенные интерфейсы и начинает прослушивать вновь появившиеся при условии,​ что они подходят под шаблон listen-on)
 +  * statistics-interval number; (не реализовано)
 +  * topology { список-шаблонов-адресов }; (не реализовано)
 +  * sortlist { список-шаблонов-адресов }; (предложение позволяет организовать сортировку RR по адресу в ответе клиенту в зависимости от адреса клиента;​ правильно настроенный клиент должен делать это сам, настраивать это на сервере - утомительно)
 +  * rrset-order { [ class класс-записи ] [ type тип-записи ] [ name "​доменное-имя"​ ] order ( fixed | random | cyclic ) ; ... }; (по умолчанию:​ class - ANY, type - ANY, name - *; предложение позволяет отсортировать RR в ответе клиенту в зависимости от класса,​ типа и значения доменного имени; fixed - не менять порядок записей;​ random - перемешивать записи в случайном порядке;​ cyclic - при каждом запросе первой ставится очередная запись;​ действует только последнее предложение rrset-order в списке;​ не реализовано;​ сервер возвращает RR в случайном порядке?​)
 +  * lame-ttl число-секунд;​ (600; кешировать информацию о неверном делегировании зон (lame-server),​ чтобы уменьшить нагрузку на журнал;​ не более 1800; похоже,​ что кеширование не реализовано?​)
 +  * max-ncache-ttl число-секунд;​ (10800; максимальное время хранения в кеше отрицательных ответов;​ не более 7 дней - 604800 секунд)
 +  * max-cache-ttl число-секунд;​ (604800; максимальное время хранения в кеше положительных ответов)
 +  * sig-validity-interval число-дней;​ (30; время окончания действия цифровых подписей,​ автоматически генерируемых при динамическом обновлении DNSSEC зоны; время начала действия подписи - за час до текущего времени;​ не более 3660 дней)
 +  * min-roots number; (не реализовано)
 +  * use-ixfr yes_or_no; (устарело)
 +  * provide-ixfr yes_or_no; (yes; отвечает как первичный сервер на запросы на передачу обновленной зоны в формате изменений - IXFR; данная опция нужна только для борьбы с ошибочной реализацией IXFR на удаленном сервере;​ см. утверждение server)
 +  * request-ixfr yes_or_no; (yes; запрашивает как вторичный сервер передачу обновлений зоны в формате изменений - IXFR; если удаленный сервер не поддерживает IXFR, то автоматически происходит откат к протоколу AXFR, данная опция нужна только для борьбы с ошибочной реализацией IXFR на удаленном сервере;​ см. утверждение server)
 +  * ixfr-from-differences yes_or_no; (no; вычисление и запись в журнал разницы между старым и новым содержимым зоны для последующей передачи ее в формате IXFR)
 +  * treat-cr-as-space yes_or_no; (устарело;​ NL и CRLF обрабатываются всегда)
 +  * min-refresh-time число-секунд;​ (ограничивает интервал обновления зоны, указанный в SOA; см. утверждения view и zone)
 +  * max-refresh-time число-секунд;​ (ограничивает интервал обновления зоны, указанный в SOA; см. утверждения view и zone)
 +  * min-retry-time число-секунд;​ (ограничивает интервал повтора попыток обновления зоны, указанный в SOA; см. утверждения view и zone)
 +  * max-retry-time число-секунд;​ (ограничивает интервал повтора попыток обновления зоны, указанный в SOA; см. утверждения view и zone)
 +  * port ip_port; (53; номер TCP и UDP портов,​ который сервер будет использовать для приема и передачи пакетов;​ применимо только для отладки)
 +  * additional-from-auth yes_or_no; (yes; можно отключать только при отключении обслуживания рекурсивных запросов;​ заполнять дополнительную секцию ответа,​ если эта информация есть в "​своих"​ зонах)
 +  * additional-from-cache yes_or_no; (yes; можно отключать только при отключении обслуживания рекурсивных запросов;​ заполнять дополнительную секцию ответа,​ если эта информация есть кеше)
 +  * random-device path_name; (/​dev/​random;​ устройство или файл в качестве источника случайных чисел)
 +  * max-cache-size размер;​ (unlimited; максимальный размер памяти,​ выделяемой под кеш; можно использовать масштабирующие коэффициенты K, M и G)
 +  * tcp-clients число; (100; максимальное число одновременно обслуживаемых TCP соединений)
 +  * recursive-clients число; (1000; максимальное число одновременно обслуживаемых запросов;​ каждый запрос требует 20 КБ памяти)
 +  * match-mapped-addresses yes_or_no; (для IPv6)
 +  * root-delegation-only [exclude { "​имя";​ ... } ]; (корневые зоны и зоны первого уровня,​ кроме списка исключений ("​DE",​ "​LV",​ "​US",​ "​MUSEUM"​),​ должны только делегировать подзоны)
 +Утверждение **server** может использоваться на верхнем уровне файла настройки или быть вложено в утверждение view. Если утверждение **view** содержит хотя бы одно утверждение **server**, то для данного вида используются только они (глобальные утверждения server игнорируются),​ иначе глобальные утверждения server действуют и на данный вид. Утверждение server может содержать следующие предложения:​
 +
 +  * bogus yes_or_no; (no; не отправлять запросы данному серверу)
 +  * provide-ixfr yes_or_no; (позволяет изменить значение опции, заданной глобально или для данного вида)
 +  * request-ixfr yes_or_no; (позволяет изменить значение опции, заданной глобально или для данного вида)
 +  * edns yes_or_no; (yes; пытаться ли использовать EDNS; ?)
 +  * transfers число; (позволяет изменить значение опции transfers-per-ns,​ заданной глобально)
 +  * transfer-format ( one-answer | many-answers ) ; (позволяет изменить значение опции, заданной глобально)
 +  * keys { string; ... } ; (задает идентификатор ключа для подписи сообщения TSIG для данного сервера;​ ответ не обязан быть подписан этим ключом;​ реализован только один ключ на сервер)
 +Утверждение **zone** устанавливает опции, специфические для указанной зоны. Формат утверждения следующий:​
 +
 +  zone имя-зоны [ класс ] {
 +    type тип-зоны;​
 +    [ опция; ... ]
 +  };
 +Имя зоны - это доменное имя корневого узла зоны. Тип зоны определяет роль, которую сервер будет исполнять для этой зоны:
 +
 +  * master - сервер является первичным уполномоченным сервером для данной зоны, т.е. загружает содержимое зоны из файла зоны, указанного опцией file
 +  * slave - сервер является вторичным уполномоченным сервером для данной зоны; содержимое зоны считывается от одного из серверов,​ указанных в опции masters; указание имени файла в опции file позволяет сохранять резервную копию зоны в файле
 +  * hint - позволяет задать с помощью опции file имя файла, содержащего описание корневой зоны; этот файл можно взять в Internic; сервер при загрузке обращается к одному из корневых серверов,​ перечисленных в этом файле, для получения текущего списка корневых серверов;​ полученный список используется в течении указанного TTL; для класса IN имеется встроенный список предполагаемых корневых серверов
 +  * stub - использовался в предыдущих версиях BIND для упрощения настройки;​ использовать не рекомендуется
 +  * forward - позволяет задавать список серверов,​ к которым будут перенаправляться запросы,​ не имеющие ответа в кеше, отдельно для данной зоны (см. предложения forward и forwarders в утверждении options)
 +  * delegation-only - эта зона может содержать только записи о делегировании подзон
 +Опции зоны (большинство опций позволяют заменить глобальные значения,​ заданные в утверждении options или взятые по умолчанию;​ они имеют тот же самый синтаксис и семантику):​
 +
 +  * masters [port ip_port] { ip_addr [port ip_port] [key ключ]; [...] }; (адреса и номера портов серверов,​ с которых брать содержимое зоны; порт 53 по умолчанию;​ номер порта перед списком задает общий номер порта для всех серверов;​ если указано несколько серверов,​ то они опрашиваются все, а зона запрашивается с того из них, у кого она имеет наибольший серийный номер; указание ключа позволяет проверять правильность передачи с помощью цифровой подписи TSIG)
 +  * file "​имя-файла";​ (имя файла, в котором хранится содержимое зоны)
 +  * allow-update { список-шаблонов-адресов }; (none; каким хостам разрешено посылать динамические изменения зоны первичному серверу;​ права доступа на основе IP адресов опасны! используйте только списки шаблонов на основе ключей)
 +  * update-policy { update_policy_rule [...] } ; (позволяет задать правила доступа на изменение отдельных записей при динамическом изменении зоны на основе авторства (identity) сообщений;​ имя автора извлекается из подписи TSIG или SIG(0); применим только для первичного сервера;​ несовместим с allow-update;​ правила рассматриваются по очереди до первого совпадения автора,​ имени и типа; каждое правило состоит из ключевого слова grant или deny, имени автора,​ способа сравнения имен, полного доменного имени и списка типов (м.б. опущен);​ в качестве автора можно указывать имя ключа, используемого для создания TSIG или SIG(0) или разделяемого секрета TKEY, а также шаблон (?); опущенный список типов соответствует любому типу, кроме SIG, NS, SOA и NXT; тип ANY соответствует любому типу, кроме NXT); допустимы следующие способы сравнения:​
 +  * name (посимвольное сравнение)
 +  * subdomain (изменяемое имя должно быть поддоменом или совпадать с указанным в правиле)
 +  * wildcard (?)
 +  * self (изменяемое имя должно соответствовать имени автора,​ имеет смысл если для каждого изменяемого доменного имени создается ключ с таким же именем,​ а в качестве имени автора указывается шаблон *)
 +  * database "​string";​ (тип БД для хранения содержимого зоны во время работы;​ по умолчанию - "​rbt";​ другие типы БД необходимо явно указывать при сборке)
 +  * delegation-only yes_or_no (эта зона может содержать только записи о делегировании подзон;​ только для зон типа stub или hint)
 +  * allow-notify - описание см. в утверждении options
 +  * allow-query - описание см. в утверждении options
 +  * allow-transfer - описание см. в утверждении options
 +  * allow-update-forwarding - описание см. в утверждении options
 +  * also-notify - описание см. в утверждении options
 +  * check-names (warn|fail|ignore);​ (не реализовано)
 +  * dialup - описание см. в утверждении options
 +  * forward - описание см. в утверждении options
 +  * forwarders - описание см. в утверждении options, только для зоны типа forward
 +  * ixfr-base - устарело
 +  * ixfr-tmp-file - устарело
 +  * max-ixfr-log-size - устарело
 +  * max-transfer-idle-in - описание см. в утверждении options
 +  * max-transfer-idle-out - описание см. в утверждении options
 +  * max-transfer-time-in - описание см. в утверждении options
 +  * max-transfer-time-out - описание см. в утверждении options
 +  * notify - описание см. в утверждении options
 +  * pubkey number number number string ; (не реализовано)
 +  * transfer-source - описание см. в утверждении options
 +  * transfer-source-v6 - описание см. в утверждении options
 +  * notify-source - описание см. в утверждении options
 +  * notify-source-v6 - описание см. в утверждении options
 +  * zone-statistics - описание см. в утверждении options
 +  * sig-validity-interval - описание см. в утверждении options
 +  * min-refresh-time - описание см. в утверждении options
 +  * max-refresh-time - описание см. в утверждении options
 +  * min-retry-time - описание см. в утверждении options
 +  * max-retry-time - описание см. в утверждении options
 +  * ixfr-from-differences - описание см. в утверждении options
 +  * key-directory - описание см. в утверждении options
 +Утверждение **view** позволяет выдавать различные ответы на один и тот же запрос в зависимости от того, кто спрашивает. То есть вид доменного пространства будет зависеть от точки зрения. Берётся первый подходящий вид в зависимости от адреса клиента (match-clients) или сервера (match-destinations). Если не определено ни одного вида, то по умолчанию создаётся вид "​default"​ в классе IN, в который попадают описания всех зон для всех клиентов. Если хотя бы один вид описывается явно, то все зоны должны быть внутри видов. Формат утверждения следующий:​
 +
 +  view имя-вида [ класс ] { 
 +    match-clients { список-шаблонов-адресов }; 
 +    match-destinations { список-шаблонов-адресов }; 
 +    match-recursive-only { yes_or_no };
 +    [ опция; ... ]
 +    [ определение зоны; ... ]
 +  };
 +Чтобы принять 2 вида зоны slave сервер должен иметь 2 адреса,​ на которые будут передаваться различные виды.
 +
 +=== Работа в chroot окружении ===
 Для работы в chroot окружении в **/​etc/​rc.conf** добавляю:​ Для работы в chroot окружении в **/​etc/​rc.conf** добавляю:​
  
Строка 303: Строка 498:
 **blackhole**:​ указывает список хостов,​ которые входят в черный список (запрещен доступ) для инициализации любых транзакций с данным name-сервером. **blackhole**:​ указывает список хостов,​ которые входят в черный список (запрещен доступ) для инициализации любых транзакций с данным name-сервером.
  
 +==== Ведение журналов,​ сбор статистики и отладка ====
  
-  ​* **named-checkzone** – проверяет синтаксис и целостность файлов зон. Такие же проверки выполняются каждый раз ​перед их загрузкой ​bind’ом. Но считаю полезным все-таки ​это делать перед их загрузкой сервером имен+Утверждение ​**logging** позволяет ​задать произвольное число способов записи в журнал с помощью предложений **channel** и привязать различные ​категории ​сообщений к каналам ​с помощью предложений **category**. 
-  * **named-compilezone** – выполняет ​более строгие проверки, чем named-checkzone, ​т.кв результате ее работы сформируется дамп актуальных зон, который в свою очередь ​будут использоваться named. + 
-  * **named-checkconf** – утилита проверки ​файла-конфигурации named.conf+В предложении **channel** задается имя канала, способ записи (в файл с ограничением его размера (можно использовать масштабирующие коэффициенты K, M и G) и числа версий, syslog, stderr, null), фильтр (минимальный уровень серьезности сообщений для вывода через этот ​канал) ​и формат вывода (выводить ли в каждое сообщение имя категории,​ уровень серьезности и метку ​времени; ​по умолчанию - нет): 
 + 
 +  channel имя-канала { 
 +       ( file имя-файла 
 +           [ versions ( число | unlimited ) ] 
 +           [ size максимальный-размер ] 
 +         | syslog syslog_facility 
 +         | stderr 
 +         | null ); 
 +       [ severity (critical | error | warning | notice | 
 +                   info | debug [ уровень ] | dynamic ); ] 
 +       [ print-category yes-или-no;​ ] 
 +       [ print-severity yes-или-no;​ ] 
 +       [ print-time yes-или-no;​ ] 
 +     }; 
 +Версии файла (file, file.0, file.1 и т.д.) перенумеровываются ​при ​каждом открытии (кстати,​ а когда он открывается?​),​ если максимальный размер файла не задан. Если задан и размер и число версий,​ то перенумеровывание при открытии происходит только при превышении этого размера. Если при записи в файл его максимальный размер будет превышен,​ то при указании числа версий происходит перенумерация файлов и открывается новый, если ​число версий не указано, ​то запись в файл просто прекращается. 
 + 
 +Режим отладки задается либо при ​запуске (ключ -d), либо командой trace программы rndc (выключается командой rndc notrace). Команда trace позволяет указать уровень отладки (чем больше уровень, ​тем более подробная отладочная информация выдается, уровень 3 достаточно болтлив). При указании фильтра (severity) можно указать ​определенный уровень отладки (debug [ уровень ]) для включения отладочной печати данного уровня (и ниже) независимо от уровня отладки сервера (лишь бы ее включили) или указать ​ключевое слово dynamic для отладочной печати уровня, совпадающего с уровнем отладки сервера
 + 
 +В предложении ​**category** задается имя категории и список ранее определенных каналов, через которые будут выводиться сообщения данной категории:​ 
 + 
 +  category имя-категории { 
 +       ​имя-канала ; [ имя-канала ; ... ] 
 +     }; 
 +Определены следующие категории: 
 + 
 +  * default (определяет каналы для тех категорий, каналы для которых не определены явно; queries при этом не включается) 
 +  * general (неотсортированные в другие ​категории сообщения) 
 +  * database (хранение зон и кеш) 
 +  * security (при уровне отладки 3 - разрешения и запрещенияналичие подписей) 
 +  * config (разбор файла настройки) 
 +  * resolver (выполнение ​рекурсивных запросов клиентов, обращение к другим серверам, объем выдачи зависит от уровня отладки
 +  * xfer-in 
 +  * xfer-out 
 +  * notify 
 +  * client (обработка клиентских запросов и посылка ответов, ​уровень отладки 3) 
 +  * unmatched (отсутствует класс или view) 
 +  * network 
 +  * update 
 +  * queries (включается ​командой rndc querylog; явная привязка этой ​категории к каналам также включает трассировку - severity info) 
 +  * dispatch (передача запросов между модулями bind) 
 +  * dnssec 
 +  * lame-servers (severity info) 
 +  * delegation-only (ответы NXDOMAIN в результате действия опции delegation-only) 
 +Переопределять каналы (в т.ч. встроенные) нельзяно можно привязать категории к новым каналам. Сообщения об ошибках синтаксиса файла настройки и о запуске сервера записываются как будто утверждение logging отсутствует (так что syslog:​daemon тоже надо просматривать регулярно). По умолчанию принимается следующая настройка записи в журнал:​ 
 + 
 +  logging { 
 +    channel default_syslog { 
 +      syslog daemon; 
 +      severity info; 
 +    }; 
 +    channel default_debug { 
 +      file "​named.run";​ 
 +      severity dynamic; 
 +    }; 
 +    channel default_stderr { 
 +      stderr; 
 +      severity info; 
 +    }; 
 +    channel null { 
 +     ​null;​ 
 +    }; 
 +    category default { default_syslog;​ default_debug;​ }; 
 +    category unmatched { null; }; 
 +  }; 
 +Количество статистической информации,​ собираемой BIND 9 сильно уменьшилось о сравнению с предыдущими версиями. Накопленная статистика добавляется командой rndc stats к файлу ​named.stats в рабочей директории (options, directory), очередной раздел обрамляется строками "​Statistics Dump" с указанием времени в формате UNIX: 
 + 
 +  * success - число запросов,​ не вызвавших ошибок или возврата клиенту ссылки 
 +  ​referral ​число запросов,​ на которые сервер вернул клиенту ссылки 
 +  ​nxrrset - несуществующих записей запрошенного типа для доменного ​имени 
 +  * nxdomain - несуществующих доменных имен 
 +  * recursion - число запросов, потребовавших ​рекурсивной обработки 
 +  * failure ​число ошибок, кроме nxrrset ​и nxdomain 
 +Общее число запросов к серверу равно success + referral + nxrrset + nxdomain + failure. Статистика может собираться отдельно по зонам и видам, в этом случае имена зоны и вида (опускается для вида default) приводятся в конце каждой строки.
  
 ==== Домен 4-го уровня ==== ==== Домен 4-го уровня ====
Строка 313: Строка 582:
  
 ==== Проверка ==== ==== Проверка ====
 +  * **named-checkzone** – проверяет синтаксис и целостность файлов зон. Такие же проверки выполняются каждый раз перед их загрузкой bind’ом. Но считаю полезным все-таки это делать перед их загрузкой сервером имен. 
 +  * **named-compilezone** – выполняет более строгие проверки,​ чем named-checkzone,​ т.к. в результате ее работы сформируется дамп актуальных зон, который в свою очередь будут использоваться named. 
 +  * **named-checkconf** – утилита проверки файла-конфигурации named.conf
 Проверяю конфигурационный файл на ошибки Проверяю конфигурационный файл на ошибки
  
   named-checkconf /​usr/​local/​etc/​namedb/​named.conf   named-checkconf /​usr/​local/​etc/​namedb/​named.conf
  
-Файл зоны ​можно проверить так+Проверяю файл зоны на ошибки
-команда Имя Зоны Путь к зоне+
   named-checkzone mgmt.klotik.ru /​usr/​local/​etc/​namedb/​master/​mgmt.klotik.ru   named-checkzone mgmt.klotik.ru /​usr/​local/​etc/​namedb/​master/​mgmt.klotik.ru
   zone mgmt.klotik.ru/​IN:​ loaded serial 2020021300   zone mgmt.klotik.ru/​IN:​ loaded serial 2020021300
Строка 325: Строка 595:
  
 ==== Запуск ==== ==== Запуск ====
 +
 +Рекомендуется создать специальную группу named и пользователя named для запуска сервера. Перед запуском необходимо отредактировать /​etc/​named.conf,​ файлы зон и установить соответствующие права доступа к ним и прочим файлам,​ имеющим отношение к серверу (простой пример). Если необходимо управление сервером с помощью программы rndc, то необходимо также отредактировать /​etc/​rndc.conf. Ключи запуска:​
 +
 +  * -c имя-файла-настройки (полное имя файла)
 +  * -d уровень-отладки
 +  * -f (не уходить в фоновый режим при запуске)
 +  * -g (не уходить в фоновый режим при запуске,​ вся отладочная печать на stderr)
 +  * -p номер-обслуживаемого-порта
 +  * -u идентификатор-пользователя (сменить эффективный идентификатор пользователя с root на указанный как можно скорее после запуска)
  
   /​usr/​local/​etc/​rc.d/​named start   /​usr/​local/​etc/​rc.d/​named start
Строка 394: Строка 673:
   Address: 2a02:​6b8::​2:​242   Address: 2a02:​6b8::​2:​242
  
 +==== Настройка DNS-сервера для работы с утилитой удаленного администрирования rdnc ====
 +
 +В то время как управление работающим сервером 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. Предусматириваются следующие типы утверждений:​
 +
 +  options {
 +  default-server имя-или-адрес-сервера;​
 +  default-key "​имя-ключа";​
 +  default-port номер-управляющего-порта;​
 +  }
 +  server имя-или-адрес-сервера { // адрес в двойных кавычках
 +  key "​имя-ключа";​
 +  port номер-управляющего-порта;​
 +  }
 +  key "​имя-ключа"​
 +  algorithm hmac-md5;
 +  secret "​base-64-кодированный-ключ";​
 +  }
 +Утилита 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 (включить/​выключить журнализацию запросов)
 +  * dumpdb (сбросить базу данных в файл named_dump.db)
 +  * stop (сохранить изменения в файлы зон и остановить сервер)
 +  * halt (остановить сервер без сохранения изменений)
 +  * trace (увеличить уровень отладки на 1)
 +  * trace уровень (установить уровень отладки)
 +  * notrace (отключить отладку)
 +  * flush (сбросить весь кеш)
 +  * flush вид (сбросить кеш для указанного вида)
 +  * status (показать состояние сервера)
 +  * restart (перезапустить сервер;​ не реализовано)
 +
 +==== Настройка DNS-сервера для передачи доменной зоны от первичного сервера к вторичному ====
 +DNS работает через 53 порты: udp ("​простые запросы"​) и tcp (трансферы).\\
 +В описание зоны master сервере добавляю строки
 +  allow-transfer { 95.31.208.14;​ }; //​список адресов от кого принимать запросы на передачу зоны
 +  also-notify { 95.31.208.14;​ }; // список адресов серверов,​ которым посылается DNS NOTIFY при изменении зоны
 +  notify explicit; // посылать DNS NOTIFY при изменении зоны, explicit - посылать только серверам из списка also-notify
 +
 +Описание зоны slave сервере выглядит так:
 +  zone "​klotik.ru"​ {
 +        type slave;
 +        masterfile-format text; //​опция определяет формат полученного файла зон
 +        file "/​usr/​local/​etc/​namedb/​slave/​ext.klotik.ru";​
 +        masters {94.255.92.23;​};​
 +        allow-transfer { none; };
 +        };
 +=== Проверка связи с первичным DNS-сервером ===
 +Подключаюсь к первичному серверу по telnet к 53 порту:
 +  telnet <​IP-адрес первичного сервера>​ 53
 +
 +Пример выполнения
 +  telnet 94.255.92.23 53
 +  Trying 94.255.92.23...
 +  Connected to ns.klotik.ru.
 +  Escape character is '​^]'​.
 +  ^]
 +  telnet> q
 +  Connection closed.
 +
 +=== Проверка возможности передачи доменной зоны от первичного сервера к вторичному ===
 +  dig <​домен>​ @<​IP-адрес>​ axfr
 +
 +==== Передача доменной зоны по ключу ====
 +Для защиты от искажений и подделок ответов сервера,​ передачи зоны и обновлений зоны (update) Bind поддерживает использование расширения TSIG протокола DNS. Для защиты обмена между каждой парой участников необходимо создать отдельный общий ключ. Ключи создаю с помощью утилиты **tsig-keygen**
 +  tsig-keygen -h
 +  Usage:
 +   ​tsig-keygen [-a alg] [keyname]
 +    -a alg:        algorithm (default hmac-sha256)
 +
 +Создаю файл nskey.key. Права на файл нужно будет установить 700
 +  tsig-keygen nskey | cat >> nskey.key
 +
 +Содержимое файла nskey.key
 +  key "​nskey"​ {
 +  <​------>​algorithm hmac-sha256;​
 +  <​------>​secret "​сгенерированный ключ";​
 +  };
 +
 +В файл **named.conf** добавляю следующие строки ​
 +  include "/​usr/​local/​etc/​namedb/​nskey.key";​
 +  ​
 +  server 94.255.92.23 {
 +          keys { nskey; };
 +
 +Параметр server задаёт нам сервер,​ а параметр keys каким ключом этот сервер подписывается
  
 Ссылки:​\\ Ссылки:​\\
Строка 402: Строка 788:
 https://​toster.ru/​q/​67146\\ https://​toster.ru/​q/​67146\\
 https://​miac.volmed.org.ru/​wiki/​index.php/​%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_DNS_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_(named9)\\ https://​miac.volmed.org.ru/​wiki/​index.php/​%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_DNS_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_(named9)\\
-http://​freebsdguide.ru/​_14/​_8+https://​freebsdguide.ru/​_14/​_7\\ 
 +http://​freebsdguide.ru/​_14/​_8\\ 
 +http://​www.bog.pp.ru/​work/​bind.html 
  
  
freebsd/bind9.1605979784.txt.gz · Последние изменения: 2020/11/21 17:29 — alex