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

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


freebsd:bind9

Это старая версия документа!


Установка и настройка BIND9

Формат файла настройки

Файл настройки 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 адреса, на которые будут передаваться различные виды.

Похоже, что BIND 9 не обслуживает передачу зон, для которых он не является уполномоченным.

Ведение журналов, сбор статистики и отладка

Утверждение logging позволяет задать произвольное число способов записи в журнал с помощью предложений channel и привязать различные категории сообщений к каналам с помощью предложений category. Описано в документации мутно (особенно про отладку) и точно так же работает (например, rndc reload не отключает часть отладочной печати).

В предложении 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) приводятся в конце каждой строки.

Немного местной статистики (кеширующий сервер; большую часть нагрузки создают почтовые серверы из-за RBL ;): 4.4 запроса в секунду; средний размер пакета - 100 байт; устоявшийся размер процесса - 16 МБ; нагрузка на процессор - втрое меньше, чем squid, обслуживающий тот же контингент пользователей.

Запуск сервера

Рекомендуется создать специальную группу named и пользователя named для запуска сервера. Перед запуском необходимо отредактировать /etc/named.conf, файлы зон и установить соответствующие права доступа к ним и прочим файлам, имеющим отношение к серверу (простой пример). Если необходимо управление сервером с помощью программы rndc, то необходимо также отредактировать /etc/rndc.conf. Ключи запуска:

-c имя-файла-настройки (полное имя файла) -d уровень-отладки -f (не уходить в фоновый режим при запуске) -g (не уходить в фоновый режим при запуске, вся отладочная печать на stderr) -p номер-обслуживаемого-порта -u идентификатор-пользователя (сменить эффективный идентификатор пользователя с root на указанный как можно скорее после запуска) После отладки процесс запуска можно автоматизировать.

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. Предусматириваются следующие типы утверждений:

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 (перезапустить сервер; не реализовано) ==== Установка ==== cd/usr/ports/dns/bind910 make install clean ┌────────────────────────────── bind910-9.10.4 ────────────────────────────────┐ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │+[x] DOCS Build and/or install documentation │ │ │ │+[ ] FETCHLIMIT Enable the query quotas for resolvers │ │ │ │+[ ] FILTER_AAAA Enable filtering of AAAA records │ │ │ │+[ ] FIXED_RRSET Enable fixed rrset ordering │ │ │ │+[x] GEOIP Allow geographically based ACL. │ │ │ │+[x] IDN International Domain Names support │ │ │ │+[ ] IPV6 IPv6 protocol support │ │ │ │+[ ] LARGE_FILE 64-bit file support │ │ │ │+[x] LINKS Create conf file symlinks in /usr/local │ │ │ │+[ ] MINCACHE Use the mincachettl patch │ │ │ │+[ ] NEWSTATS Enable alternate xml statistics channel format │ │ │ │+[ ] PORTREVISION Show PORTREVISION in the version string │ │ │ │+[ ] PYTHON Build with Python utilities │ │ │ │+[ ] QUERYTRACE Enable the very verbose query tracelogging │ │ │ │+[ ] RPZ_NSDNAME Enable RPZ NSDNAME policy records │ │ │ │+[ ] RPZ_NSIP Enable RPZ NSIP trigger rules │ │ │ │+[x] RRL Response Rate Limiting │ │ │ │+[x] SIGCHASE dig/host/nslookup will do DNSSEC validation │ │ │ │+[x] START_LATE Start BIND late in the boot process │ │ │ │+[x] THREADS Threading support │ │ │ │──────────────────────── Dynamically Loadable Zones ──────────────────────│ │ │ │+[ ] DLZ_POSTGRESQL DLZ Postgres driver │ │ │ │+[ ] DLZ_MYSQL DLZ MySQL driver (no threading) │ │ │ │+[ ] DLZ_BDB DLZ BDB driver │ │ │ │+[ ] DLZ_LDAP DLZ LDAP driver │ │ │ │+[ ] DLZ_FILESYSTEM DLZ filesystem driver │ │ │ └─────v(+)─────────────────────────────────────────────────────────68%─────┘ │ ├──────────────────────────────────────────────────────────────────────────────┤ │ < OK > <Cancel> │ └──────────────────────────────────────────────────────────────────────────────┘ Installing bind910-9.10.4… * _ _ _ _ _ _ _ _ _ _ _ * * / \|_ _|_ _| | \ | |_ _|_ _/ _ \| \ | | * * / _ \ | | | | | _| | \| | | | | | | | | \| | * * / _ \| | | | | |_| |\ | | | | | |_| | |\ | * * /_/ \_\_| |_| |_|_| \_| |_| |_\_/|_| \_| * * * * BIND requires configuration of rndc, including a «secret» key. * * The easiest, and most secure way to configure rndc is to run * * 'rndc-confgen -a' to generate the proper conf file, with a new * * random key, and appropriate file permissions. * * * * The /usr/local/etc/rc.d/named script will do that for you. * * * ==⇒ SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/sbin/named-journalprint /usr/local/sbin/named /usr/local/sbin/rndc-confgen /usr/local/sbin/dnssec-verify /usr/local/sbin/ddns-confgen /usr/local/sbin/dnssec-dsfromkey /usr/local/bin/host /usr/local/sbin/nsec3hash /usr/local/sbin/dnssec-signzone /usr/local/bin/nsupdate /usr/local/sbin/rndc /usr/local/sbin/lwresd /usr/local/bin/dig /usr/local/sbin/dnssec-revoke /usr/local/sbin/isc-hmac-fixup /usr/local/sbin/dnssec-keygen /usr/local/bin/delv /usr/local/sbin/named-checkzone /usr/local/sbin/dnssec-keyfromlabel /usr/local/sbin/dnssec-importkey /usr/local/sbin/named-checkconf /usr/local/sbin/genrandom /usr/local/sbin/named-rrchecker /usr/local/bin/nslookup /usr/local/sbin/dnssec-settime This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/named If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: https://www.isc.org/software/bind ==⇒ Cleaning for libxml2-2.9.3 ==⇒ Cleaning for GeoIP-1.6.9 ==⇒ Cleaning for idnkit-1.0_5 ==⇒ Cleaning for libedit-3.1.20150325_2 ==⇒ Cleaning for bind910-9.10.4 root@mgmt:/usr/ports/dns/bind910# rehash root@mgmt:/usr/ports/dns/bind910# pkg info | grep bind bind910-9.10.4 BIND DNS suite with updated DNSSEC and DNS64 root@mgmt:/usr/ports/dns/bind910# После завершения установки, проверяю версию установленного BIND: named -v ==== Настройка ==== Для работы в chroot окружении в /etc/rc.conf добавляю: named_enable=«YES» named_chrootdir=«/var/named» altlog_proglist=«named» /var/named - это и есть песочница, где named будет жить Делаем песочницу, которая раньше делалась в FreeBSD автоматом mkdir -p /var/named/usr/local/etc/ mkdir -p /var/named/var/dump mkdir -p /var/named/var/run/named mkdir -p /var/named/var/stats mkdir -p /var/named/dev mv /usr/local/etc/namedb /var/named/usr/local/etc/ cd /usr/local/etc ln -s /var/named/usr/local/etc/namedb mkdir -p /var/run/named Для pid и session.key файлов и создаю такие ссылки: cd /var/run/named ln -s /var/named/var/run/named/pid pid ln -s /var/named/var/run/named/session.key session.key ls -l /var/run/named/ total 1 lrwxr-xr-x 1 root wheel 28 13 февр. 13:00 pid → /var/named/var/run/named/pid lrwxr-xr-x 1 root wheel 36 13 февр. 13:00 session.key → /var/named/var/run/named/session.key Создаю devfs правило для использования chroot окружения. Добавляю в /etc/devfs.rules, если файла нет нужно создать: cat devfs.rules # Правила для named chroot dev # [devfsrules_named_chroot=5] add hide add path run unhide add path random unhide Добавляю в в /etc/fstab: devfs /var/named/dev devfs rw,ruleset=5 0 0 Монтирую devfs файловую систему: mount /var/named/dev Черновик /usr/local/etc/namedb/named.conf cat named.conf options { All file and path names are relative to the chroot directory,

      // if any, and should be fully qualified.
      directory       "/usr/local/etc/namedb/working"; // Рабочий каталог
      pid-file        "/var/run/named/pid"; // местонахождение pid
      dump-file       "/var/dump/named_dump.db"; // где хранить дамп
      statistics-file "/var/stats/named.stats"; // где хранить статистику
      listen-on       { 127.0.0.1; 95.31.208.14; 10.216.130.1; };

listen-on-v6 { ::1; }; allow-query { any; }; Разрешаю посылать запросы только из любой сети

      allow-recursion {10.216.130.0/24; 127.0.0.1; };
      version         "made in USSR"; // строка выдаваемая в ответ на запро о версии
      // Игнорировать запросы blackhole
      // DNS-сервер не посылает запросы к DNS-серверам из этого списка 
      // и не отвечает на запросы, получаемые от этих серверов.
      blackhole { 
      0.0.0.0/8;
      10.0.0.0/8;
      169.254.0.0/16;
      172.16.0.0/12;
      192.0.2.0/24;
      192.168.0.0/16;
      224.0.0.0/4;
      240.0.0.0/4;
      };
      disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
      disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
      disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";

/* Данная команда определяет адреса серверов доменных имен куда следует отправлять рекурсивные запросы. Естественно, что на этих серверах для хоста, на котором установлен named, должна быть разрешена обработка рекурсивных запросов с этого хоста. forwarders { 127.0.0.1; }; */ }; include «/usr/local/etc/namedb/rndc.key»; include «/usr/local/etc/namedb/nskey.key»;

server 94.255.92.23 {

      keys { nskey; };

};

#вид для внутренних зон view internal { #зоны резолвятся для клиентов сетей 10.216.130.0/24 и локалхоста match-clients { 127.0.0.1; 10.216.130.0/24; };

include «/usr/local/etc/namedb/named.rfc»;

zone «.» {

      type hint;
      file "/usr/local/etc/namedb/named.root";
      };

zone «mgmt.klotik.ru» {

      type master;
      file "/usr/local/etc/namedb/master/mgmt.klotik.ru";
      };

zone «130.216.10.in-addr.arpa» {

      type master;
      file "/usr/local/etc/namedb/master/mgmt.klotik.ru.rev";
      };

};

# Вид для внешних зон view external { #Для всех остальных сетей и IP которые явно не указаны в предыдущих view match-clients { any; }; zone «klotik.ru» {

      type slave;
      file "/usr/local/etc/namedb/slave/ext.klotik.ru";
      masters {94.255.92.23;};
      };

zone «92.255.94.in-addr.arpa» {

      type slave;
      file "/usr/local/etc/namedb/slave/ext.klotik.ru.rev";
      masters {94.255.92.23;};
      };

};

acl localnet { 192.168.0.0/22; 127.0.0.1;};. acl all { any; };

options { Запрет отдавать номер версии сервера. version none; Запрет отдавать имя хоста, на котором работает BIND

 hostname none; 

запрет отдавать запросы об идентификаторе server-id none; Разрешаем по-умолчанию днс запросы только от доверенных сетей

 allow-query { localnet; };

Разрешать ли рекурсивные запросы, или отдавать только те зоны, которые держит сам сервак. recursion yes; Посылка рекурсивных запросов разрешена только клиентам подсети allow-recursion { localnet; }; Игнорировать запросы blackhole DNS-сервер не посылает запросы к DNS-серверам из этого списка и не отвечает на за­просы, получаемые от этих серверов.

 blackhole { 
    0.0.0.0/8;
    10.0.0.0/8;
    169.254.0.0/16;
    172.16.0.0/12;
    192.0.2.0/24;
    192.168.0.0/16;
    224.0.0.0/4;
    240.0.0.0/4;
 };

};

allow-query: указывает список хостов, которым разрешено запрашивать все зоны name-сервера или конкретную зону внутри name-сервера.
allow-recursion: указывает список хостов, которым разрешено создавать рекурсивные запросы к name-серверу для всех зон или для конкретной зоны, обслуживаемой name-сервером.
allow-transfer: указывает список хостов, которым разрешено инициировать запросы зонной пересылки к name-серверу для всех зон или для конкретной зоны внутри name-сервера. Данное утверждение обязательно требуется в конфигурации первичного name-сервера.
allow-update: указывает список хостов, которым разрешено инициировать запросы динамического обновления.
allow-update-forwarding: указывает список хостов, которым разрешено перенаправление запросов динамического обновления (независимо от того, кто является источником запроса).
allow-notify: указывает список хостов, с которых можно принимать сообщения DNS NOTIFY, говорящих об изменениях в зонном файле. Данный список относится только к конфигурации вторичного name-сервера.
blackhole: указывает список хостов, которые входят в черный список (запрещен доступ) для инициализации любых транзакций с данным name-сервером.

  • named-checkzone – проверяет синтаксис и целостность файлов зон. Такие же проверки выполняются каждый раз перед их загрузкой bind’ом. Но считаю полезным все-таки это делать перед их загрузкой сервером имен.
  • named-compilezone – выполняет более строгие проверки, чем named-checkzone, т.к. в результате ее работы сформируется дамп актуальных зон, который в свою очередь будут использоваться named.
  • named-checkconf – утилита проверки файла-конфигурации named.conf

Домен 4-го уровня

В файл конфигурации зоны добавляю запись

www.seafile     IN      A       94.255.92.23

Проверка

Проверяю конфигурационный файл на ошибки

named-checkconf /usr/local/etc/namedb/named.conf

Файл зоны можно проверить так: команда Имя Зоны Путь к зоне

named-checkzone mgmt.klotik.ru /usr/local/etc/namedb/master/mgmt.klotik.ru
zone mgmt.klotik.ru/IN: loaded serial 2020021300
OK

Запуск

/usr/local/etc/rc.d/named start
var/dump:
        user (53, 0, modified)
        gid (53, 0, modified)
var/run:
        user (53, 0, modified)
        gid (53, 0, modified)
var/run/named:
        user (53, 0, modified)
        gid (53, 0, modified)
var/stats:
        user (53, 0, modified)
        gid (53, 0, modified)
./etc missing (created)
./tmp missing (created)
./var/log missing (created)
etc/namedb/working:
        gid (0, 53, modified)
etc/namedb/dynamic:
        gid (0, 53, modified)
etc/namedb/slave:
        gid (0, 53, modified)
wrote key file "/var/named/usr/local/etc/namedb/rndc.key"
Starting named.

Посмотреть bind в процессах

top | grep named

или

ps -ax|grep named 

послушать висит ли Bind на 53 порту:

sockstat -l4 -p 53

Проверка работы

dig @127.0.0.1 ya.ru

; <<>> DiG 9.14.7 <<>> @127.0.0.1 ya.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59061
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 8036ca940283cc2a39394ac25dc00f1c6567f433a198998e (good)
;; QUESTION SECTION:
;ya.ru.                         IN      A

;; ANSWER SECTION:
ya.ru.                  600     IN      A       87.250.250.242

;; Query time: 849 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: пн нояб. 04 14:44:28 MSK 2019
;; MSG SIZE  rcvd: 78

или

nslookup ya.ru 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   YA.ru
Address: 87.250.250.242
Name:   ya.ru
Address: 2a02:6b8::2:242

Настройка DNS-сервера для работы с утилитой удаленного администрирования rdnc

Настройка 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 каким ключом этот сервер подписывается

Ссылки:
http://blog.e-shell.org/301
http://dtopcms.ru/docs/freebsd/bind99.shtml
http://www.maxblogs.ru/articles/nastroika-bind9
http://www.it-vrn.org/content/nastroyka-dns-servera-bind-v-choot-pri-obnovlenii-freebsd-93-do-10-versii.html
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)
http://freebsdguide.ru/_14/_8
http://www.bog.pp.ru/work/bind.html

freebsd/bind9.1606042079.txt.gz · Последние изменения: 2020/11/22 10:47 — alex