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

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


freebsd:bind9

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

Установка

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

Настройка

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

Файл настройки 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 добавляю:

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-сервером.

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

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

В предложении 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-го уровня

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

www.seafile     IN      A       94.255.92.23

Проверка

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

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

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

Запуск

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

  • -c имя-файла-настройки (полное имя файла)
  • -d уровень-отладки
  • -f (не уходить в фоновый режим при запуске)
  • -g (не уходить в фоновый режим при запуске, вся отладочная печать на stderr)
  • -p номер-обслуживаемого-порта
  • -u идентификатор-пользователя (сменить эффективный идентификатор пользователя с root на указанный как можно скорее после запуска)
/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

В то время как управление работающим сервером BIND 4 осуществлялось простой посылкой сигнала процессу (HUP - перезагрузить файл настройки и зоны; TERM - остановить; INT - сбросить базу данных в файл named_dump.db; ABRT - записать статистику в конец файла named.stats), управление сервером BIND 9 производится с помощью специальной утилиты rndc, которая соединяется с сервером (по умолчанию - TCP порт 953) и использует специальный протокол для передачи ему команд. Однако сигналы HUP, TERM пока действуют.

Настраивая сервер, необходимо обеспечить права доступа к управляющему порту (controls) и ключ (key), смотри ниже rndc-confgen.

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

options {
default-server имя-или-адрес-сервера;
default-key "имя-ключа";
default-port номер-управляющего-порта;
}
server имя-или-адрес-сервера { // адрес в двойных кавычках
key "имя-ключа";
port номер-управляющего-порта;
}
key "имя-ключа"
algorithm hmac-md5;
secret "base-64-кодированный-ключ";
}

Утилита rndc-confgen позволяет сгенерировать /etc/rndc.conf со случайным ключом (и закомментированные предложения controls и key для /etc/named.conf). Следующими ключами можно модифицировать получаемый файл:

  • -b размер-ключа (по умолчанию - 128; от 1 до 512)
  • -k имя-ключа (по умолчанию - rndc-key)
  • -p номер-управляющего-порта (по умолчанию - 953)
  • -s имя-или-адрес-сервера (по умолчанию - 127.0.0.1)

Утилита rndc позволяет менять параметры соединения с сервером с помощью ключей:

  • -c имя-файла-настройки
  • -s имя-или-адрес-сервера
  • -p номер-управляющего-порта
  • -y имя-ключа
  • -V (трассировка исполнения для отладки)

Если запустить rndc без указания команды, то она выдаст список поддерживаемых команд:

  • reload (перезагрузить файл настройки и зоны)
  • reload зона [класс [вид]] (перезагрузить зону)
  • refresh зона [класс [вид]] (запланировать немедленное обновление зоны)
  • reconfig (перезагрузить файл настройки и новые зоны)
  • stats (записать статистику в конец файла named.stats)
  • querylog (включить/выключить журнализацию запросов)
  • dumpdb (сбросить базу данных в файл named_dump.db)
  • stop (сохранить изменения в файлы зон и остановить сервер)
  • halt (остановить сервер без сохранения изменений)
  • trace (увеличить уровень отладки на 1)
  • trace уровень (установить уровень отладки)
  • notrace (отключить отладку)
  • flush (сбросить весь кеш)
  • flush вид (сбросить кеш для указанного вида)
  • status (показать состояние сервера)
  • restart (перезапустить сервер; не реализовано)

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

DNS работает через 53 порты: udp («простые запросы») и tcp (трансферы).
В описание зоны master сервере добавляю строки

allow-transfer { 95.31.208.14; }; //список адресов от кого принимать запросы на передачу зоны
also-notify { 95.31.208.14; }; // список адресов серверов, которым посылается DNS NOTIFY при изменении зоны
notify explicit; // посылать DNS NOTIFY при изменении зоны, explicit - посылать только серверам из списка also-notify

Описание зоны slave сервере выглядит так:

zone "klotik.ru" {
      type slave;
      masterfile-format text; //опция определяет формат полученного файла зон
      file "/usr/local/etc/namedb/slave/ext.klotik.ru";
      masters {94.255.92.23;};
      allow-transfer { none; };
      };

Проверка связи с первичным DNS-сервером

Подключаюсь к первичному серверу по telnet к 53 порту:

telnet <IP-адрес первичного сервера> 53

Пример выполнения

telnet 94.255.92.23 53
Trying 94.255.92.23...
Connected to ns.klotik.ru.
Escape character is '^]'.
^]
telnet> q
Connection closed.

Проверка возможности передачи доменной зоны от первичного сервера к вторичному

dig <домен> @<IP-адрес> axfr

Передача доменной зоны по ключу

Для защиты от искажений и подделок ответов сервера, передачи зоны и обновлений зоны (update) Bind поддерживает использование расширения TSIG протокола DNS. Для защиты обмена между каждой парой участников необходимо создать отдельный общий ключ. Ключи создаю с помощью утилиты tsig-keygen

tsig-keygen -h
Usage:
 tsig-keygen [-a alg] [keyname]
  -a alg:        algorithm (default hmac-sha256)

Создаю файл nskey.key. Права на файл нужно будет установить 700

tsig-keygen nskey | cat >> nskey.key

Содержимое файла nskey.key

key "nskey" {
<------>algorithm hmac-sha256;
<------>secret "сгенерированный ключ";
};

В файл named.conf добавляю следующие строки

include "/usr/local/etc/namedb/nskey.key";

server 94.255.92.23 {
        keys { nskey; };

Параметр server задаёт нам сервер, а параметр keys каким ключом этот сервер подписывается

Ссылки:
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)
https://freebsdguide.ru/_14/_7
http://freebsdguide.ru/_14/_8
http://www.bog.pp.ru/work/bind.html

freebsd/bind9.txt · Последние изменения: 2022/01/08 15:27 — alex