Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
freebsd:bind9 [2020/11/21 20:09] alex |
freebsd:bind9 [2022/01/08 15:27] (текущий) alex |
||
---|---|---|---|
Строка 7: | Строка 7: | ||
+ | ==== Установка ==== | ||
- | + | cd/usr/ports/dns/bind910 make install clean | |
- | + | ||
- | + | ||
- | + | ||
- | root@mgmt:/usr/ports/dns/bind910# make 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 | ||
Строка 395: | Строка 674: | ||
==== Настройка DNS-сервера для работы с утилитой удаленного администрирования rdnc ==== | ==== Настройка 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-сервера для передачи доменной зоны от первичного сервера к вторичному ==== | ||
DNS работает через 53 порты: udp ("простые запросы") и tcp (трансферы).\\ | DNS работает через 53 порты: udp ("простые запросы") и tcp (трансферы).\\ | ||
В описание зоны master сервере добавляю строки | В описание зоны master сервере добавляю строки | ||
- | allow-transfer { 95.31.208.14; }; //список адресов от кого принимать запросы на передачу зоны | + | allow-transfer { 95.31.208.14; }; //список адресов от кого принимать запросы на передачу зоны |
- | also-notify { 95.31.208.14; }; // список адресов серверов, которым посылается DNS NOTIFY при изменении зоны | + | also-notify { 95.31.208.14; }; // список адресов серверов, которым посылается DNS NOTIFY при изменении зоны |
- | notify explicit; // посылать DNS NOTIFY при изменении зоны, explicit - посылать только серверам из списка also-notify | + | notify explicit; // посылать DNS NOTIFY при изменении зоны, explicit - посылать только серверам из списка also-notify |
Описание зоны slave сервере выглядит так: | Описание зоны slave сервере выглядит так: | ||
+ | zone "klotik.ru" { | ||
type slave; | type slave; | ||
- | masterfile-format text; | + | masterfile-format text; //опция определяет формат полученного файла зон |
file "/usr/local/etc/namedb/slave/ext.klotik.ru"; | file "/usr/local/etc/namedb/slave/ext.klotik.ru"; | ||
masters {94.255.92.23;}; | masters {94.255.92.23;}; | ||
allow-transfer { none; }; | allow-transfer { none; }; | ||
+ | }; | ||
=== Проверка связи с первичным DNS-сервером === | === Проверка связи с первичным DNS-сервером === | ||
Подключаюсь к первичному серверу по telnet к 53 порту: | Подключаюсь к первичному серверу по telnet к 53 порту: | ||
Строка 425: | Строка 756: | ||
=== Проверка возможности передачи доменной зоны от первичного сервера к вторичному === | === Проверка возможности передачи доменной зоны от первичного сервера к вторичному === | ||
dig <домен> @<IP-адрес> axfr | 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 каким ключом этот сервер подписывается | ||
Ссылки:\\ | Ссылки:\\ | ||
Строка 433: | Строка 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 | ||