Настройка плагина BIND9_DLZ и BIND 9

В качестве сервера DNS в продукте «Служба каталогов "Эллес"» используется решение с открытым исходным кодом BIND9, которое соответствует RFC 1034 и RFC 1035.

См. описание процесса настройки службы DNS с использованием BIND 9 в руководстве по администрированию BIND 9, а также в документации на используемый дистрибутив Linux (например, в документации Astra Linux, РЕД ОС, Ubuntu Server, Debian и т. д.).

Описания доменных зон и информация об их наполнении хранятся в службе каталогов. Для работы с ними доступны те же возможности, что и для других элементов службы каталогов, включая репликацию между контроллерами домена, а также резервное копирование и восстановление.

Работа ядра службы каталогов (Эллес) с BIND 9 обеспечивается плагином BIND9_DLZ («DNS-бэкенд» в терминологии Samba).

Встроенный DNS-сервер Samba (SAMBA_INTERNAL) поддерживает базовую функциональность, необходимую для работы службы каталогов, но имеет следующие ограничения:

  • не может выступать в роли кэширующего DNS-сервера (caching resolver);

  • не поддерживает обработку рекурсивных запросов;

  • не поддерживает аутентификацию DNS-транзакций с использованием общих ключей по протоколу TSIG;

  • не поддерживает работу с зонами-заглушками;

  • не поддерживает передачу зоны DNS;

  • не поддерживает циклическую балансировку нагрузки между контроллерами домена;

  • не поддерживает условное перенаправление DNS-запросов (conditional DNS forwarding).

В силу этих ограничений использовать его при работе с Эллес не рекомендуется.

Схема развертывания DNS-сервера BIND 9

В базовом сценарии развертывания экземпляр DNS-сервера BIND 9 устанавливается и работает на сервере, выполняющем функции контроллера домена под управлением Эллес (Рис. 1).

dns deployment
Рис. 1. Развертывание экземпляра DNS-сервера BIND 9 совместно с экземпляром Эллес на контроллере домена

Настройка плагина BIND9_DLZ

Для использования BIND 9 совместно с контроллером домена Эллес:

  1. Установите и настройте BIND 9 и дополнительные утилиты на сервере, который будет выполнять функции контроллера домена:

    sudo apt install bind9 bind9utils
  2. При развертывании домена Эллес или присоединении к существующему домену укажите опцию --dns-backend=BIND9_DLZ. При этом будет создан файл /app/inno-samba/bind-dns/named.conf.

    Пример содержимого файла:

    dlz "AD DNS Zone" {
        # For BIND 9.8.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9.so";
    
        # For BIND 9.9.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_9.so";
    
        # For BIND 9.10.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_10.so";
    
        # For BIND 9.11.x
        database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_11.so";
    
        # For BIND 9.12.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_12.so";
    
        # For BIND 9.14.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_14.so";
    
        # For BIND 9.16.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_16.so";
    
        # For BIND 9.18.x
        # database "dlopen /app/inno-samba/lib/bind9/dlz_bind9_18.so";
    };
  3. Добавьте ссылку на созданный файл в конец файла /etc/bind/named.conf или /etc/bind/named.conf.local:

    include "/app/inno-samba/bind-dns/named.conf";

    Например:

    echo 'include "/app/inno-samba/bind-dns/named.conf";' | sudo tee -a /etc/bind/named.conf
  4. Чтобы обеспечить динамическое обновление DNS с использованием Kerberos:

    • добавьте в блок options в файле /etc/bind/named.conf.options BIND 9 следующую настройку:

      options {
           [...]
           tkey-gssapi-keytab "/app/inno-samba/bind-dns/dns.keytab";
      };
    • убедитесь, что на контроллере домена доступна утилита nsupdate:

      which nsupdate
      /usr/bin/nsupdate

      Команда nsupdate используется для обновления DNS. Если утилита отсутствует, обратитесь к документации на используемый дистрибутив Linux и установите ее.

  5. Проверьте корректность конфигурации:

    sudo named-checkconf
  6. Перезапустите сервис bind9:

    sudo systemctl restart bind9.service
  7. Перезапустите сервис inno-samba:

    sudo systemctl restart inno-samba.service
  8. Убедитесь, что сервис bind9 работает корректно:

    sudo systemctl status bind9.service

Для проверки корректности обновления данных DNS выполните на контроллере домена с настроенным DNS-сервером принудительное обновление всех DNS-записей:

sudo /app/inno-samba/sbin/samba_dnsupdate \
   --verbose \
   --all-names

В выводе команды должны содержаться строки с информацией о поиске и проверке записей DNS. В случае необходимости внесения изменений в выводе также будут присутствовать записи с информацией о результатах операций по изменению записей.

Дальнейшая работа по созданию, изменению и удалению записей и зон DNS выполняется с помощью группы подкоманд dns утилиты samba-tool (см. подробное описание подкоманд и доступных параметров в разделе «Администрирование DNS»).

Общие настройки BIND 9

Процесс настройки BIND 9 после установки и обеспечения интеграции с Inno Samba через BIND9_DLZ зависит от особенностей сетевой инфраструктуры. В данном разделе приводятся примеры некоторых настроек.

См. подробное описание особенностей конфигурирования DNS-сервера BIND 9 в разделе "Configurations and Zone Files" и доступных настроек в разделе "Configuration Reference" в официальной документации BIND 9.

При использовании только IPv4, добавьте опцию -4 в файл /etc/default/bind9, приведя значение в строке OPTIONS к следующему виду:

OPTIONS="-u bind -4"

Задайте глобальные опции BIND 9 в файле /etc/bind/named.conf.options. Пример настройки:

// Подсети, для которых разрешены запросы к серверу
acl internals {
     <subnet1>;
     <subnet2>;
};

// Пример задания глобальных настроек DNS-сервера
options {
     // IPv4-адреса, на которых сервер принимает DNS-запросы
     listen-on port 53 {
          127.0.0.1;
          localhost;
          <server-ip-address>;
     };
     // Использование только IPv4
     listen-on-v6 { none; };
     // Рабочий каталог сервера
     directory "/var/cache/bind";
     // Путь к файлу, формируемому командой rndc dumpdb
     dump-file   "/var/cache/bind/data/cache_dump.db";
     // Путь к файлу, формируемому командой rndc stats
     statistics-file "/var/cache/bind/data/named_stats.txt";
     // Путь к файлу со статистикой использования памяти
     memstatistics-file "/var/cache/bind/data/named_mem_stats.txt";
     // Запрет отправки уведомлений об изменениях в зонах
     // дополнительным серверам
     notify no;
     // Серверы, на которые необходимо перенаправлять
     // запросы, которые не могут быть разрешены
     // текущим DNS-сервером
     forwarders {
          <IP-address>;
          <IP-address;
     };
     // Запрет получения данных зон с текущего сервера
     allow-transfer { none; };
     // Отключение DNSSEC (до версии 9.16)
     dnssec-enable no;
     // Отключение валидации DNSSEC
     dnssec-validation no;
     // Подсети или хосты, которые могут использовать
     // текущий DNS-сервер
     allow-query { "internals";  };
     // Подсети или хосты, которые могут использовать
     // кэш текущего DNS-сервера
     allow-query-cache { "internals"; };
     // Разрешена обработка рекурсивных запросов
     recursion yes;
     // Рекурсивные запросы разрешены только для IP-адресов
     // из блока acl
     allow-recursion {  "internals"; };
     // Настройка полноты ответов для оптимизации производительности
     minimal-responses yes;
     tkey-gssapi-keytab "/app/inno-samba/bind-dns/dns.keytab";
  };
// Настройки логирования
logging {
     channel default_debug {
     file "debug.log";
     print-time yes;
     print-category yes;
     severity dynamic;
     };
};

Настройка BIND 9 на контроллере в дочернем домене

Для корректного разрешения доменных имен на контроллере Эллес, введенном в дочерний домен в многодоменном лесу Active Directory, требуется выполнить настройку переадресации зон родительского домена в конфигурации DNS-сервера BIND 9.

Для этого создайте в каталоге /etc/bind/ отдельный файл для определений зон или используйте существующий файл /etc/bind/named.conf.local.

Добавьте в файл блок следующего вида:

zone "root-domain.name" {
    type forward;
    forwarders {
        <dns-server-ip-address>;
    };
};

Параметры в блоке:

  • root-domain.name — имя зоны родительского домена;

  • type forward — задание для зоны типа forward, указывающего на необходимость переадресации всех запросов с локального сервера на DNS-серверы, которые перечислены в параметре forwarders;

  • forwarders — IP-адреса серверов, на которые должны перенаправляться запросы.

Например:

zone "root.lan" {
    type forward;
    forwarders {
        10.1.188.21;
    };
};

Добавьте директиву include с путем к файлу в конфигурационный файл /etc/bind/named.conf строго перед директивой, добавляющей конфигурацию плагина BIND9_DLZ. Файл named.conf.local добавляется по умолчанию.

Убедитесь, что порядок следования директив include в /etc/bind/named.conf корректный.

Например:

cat /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/app/inno-samba/bind-dns/named.conf";

По усмотрению администратора DNS-серверы для разрешения имен при взаимодействии с родительским доменом также могут быть заданы с помощью глобального параметра forwarders в конфигурационном файле named.conf.options.

В текущей версии пакета inno-samba данная настройка необходима для обеспечения разрешения имен серверов в родительском домене. Ее отсутствие может приводить к некоторым ошибкам. Например — к ошибке WERR_FILE_NOT_FOUND в процессе репликации между контроллерами в дочернем и родительском доменах.

Настройка BIND 9 для делегирования зон DNS

Делегирование DNS используется для назначения ответственности за разрешение имен в другом домене или зоне сторонним серверам. Таким образом достигается разделение ответственности по сегментам DNS, дающее следующие преимущества:

  • масштабируемость и распределение нагрузки на DNS-серверы;

  • раздельное администрирование доменов и зон;

  • дополнительная безопасность;

  • делегирование ответственности за определенные виды сервисов, такие как веб-хостинг или почта, сторонним провайдерам;

  • упрощение процесса внесения изменений в структуре, уменьшая вероятность глобальных сбоев.

Как правило, делегирование используется по отношению к дочерним доменам и зонам, когда ответственность за управление записями DNS в них передается серверам в самих этих доменах и зонах.

В текущей версии Эллес делегирование зон DNS конфигурируется вручную на уровне BIND 9.

Безусловное перенаправление

Безусловное перенаправление (forwarding) определяется в файле /etc/bind/named.conf.options с помощью параметра forwarders:

options {
     [...]
     forwarders {
       <ip-address>;
       <ip-address>;
     };
};

В списке могут быть указаны серверы, на которые BIND 9 будет перенаправлять запросы на разрешение имен, если сам он их разрешить не может и в его кэше их еще нет. Эти сервера могут быть как связаны с контроллерами домена, так и не связаны с ними. Также здесь могут указываться внешние серверы DNS.

Условное перенаправление

Условное перенаправление (conditional forwarding) настраивается для определенных зон. Запросы к таким зонам перенаправляются для разрешения на другие серверы.

Для условного перенаправления в зоны, не являющиеся дочерними по отношению к зонам, хранящимися в Эллес, может использоваться конфигурация в файлах BIND 9, например — в /etc/bind/named.conf.local:

zone "domain.name" {
    type forward;
    forwarders {
        <ip-address>;
    };
    forward only;
};


include "/app/inno-samba/bind-dns/named.conf";

Чтобы условное перенаправление работало в зонах, определяемых BIND9_DLZ и хранящихся в Эллес, может использоваться отдельный DNS-сервер, в том числе на базе BIND 9, но не связанный с Эллес, с конфигурацией как основного, так и дочерних доменов в файлах, например — в /etc/bind/named.conf.local:

zone "subdomain1.domain.name" {
    type forward;
    forwarders {
        <ip-address>;
    };
    forward only;
};
zone "subdomain2.domain.name" {
    type forward;
    forwarders {
        <ip-address>;
    };
    forward only;
};
zone "domain.name" {
    type forward;
    forwarders {
        <ip-address>;
    };
    forward only;
};

zone "some.other.zone" {
    type primary;
    ....
};

Такой сервер выполняет функции прокси к серверам DNS домена Эллес и поддоменов и может также обеспечивать условное перенаправление.

Делегирование поддомена

Делегирование поддомена означает передачу управления для определенной зоны (поддомена) другому серверу DNS. Оно используется, когда есть множество поддоменов и требуется разделить ответственность за управление различными зонами между серверами DNS.

При делегировании поддомена один сервер DNS (родительский) передает управление определенной зоной (поддоменом) другому серверу DNS (дочернему). При этом на родительском сервере DNS настраивается запись NS (Name Server), указывающая на дочерний сервер DNS, который будет отвечать за поддомен.

В следующем примере в домене domain.name необходимо делегировать управление поддоменом subdomain.domain.name другому серверу DNS. Для этого в файл зоны domain.name добавляется следующая запись:

subdomain.domain.name.   IN   NS   ns1.subdomain.domain.name.
ns1.subdomain.domain.name.   IN A <ns1-ip-address>   ;; IP-адрес сервера DNS, которому делегируется управление (делегат)

На сервере-делегате в файл конфигурации зоны subdomain.domain.name добавляются следующие записи:

@   IN   SOA   ns1.subdomain.domain.name.   hostmaster.subdomain.domain.name. {
2016060700   ;serial
3600         ;refresh
360          ;retry
86400        ;expire
3600         ;minimum
}

IN   NS   ns1.subdomain.domain.name.
ns1.sub.example.com.   IN A <ns1-ip-address>
www   IN A <ns1-ip-address>
;; и т. д.

Зоны-заглушки

Зона-заглушка (stub-зона) предназначена для перенаправления запросов DNS для определенной зоны на определенный сервер DNS. Она является аналогом slave-зоны, но в отличие от нее хранит только NS-записи и просто перенаправляет запросы на объявленные серверы DNS.

Пример настройки зоны-заглушки в конфигурации BIND 9:

zone "sub.example.com" IN {
   type stub;
   masters { <ns-ip-address>; };
};

Настройка BIND 9 на контроллере домена RODC

Один из возможных вариантов развертывания Эллес — использование контроллера домена Эллес в режиме RODC вместе с BIND 9 в качестве сервера DNS в отдельном сайте для обслуживания клиентов на удаленной региональной площадке.

С учетом ограничений, связанных с особенностями функционирования Эллес в режиме RODC, в этом случае для корректной обработки запросов к службе DNS, поступающих от клиентов в сайте, требуются следующие дополнительные шаги по настройке:

  1. BIND 9 развертывается без интеграции с Эллес в роли RODC через плагин BIND9_DLZ.

  2. В конфигурации BIND 9 настраивается безусловная пересылка на центральный сервер DNS.

  3. В конфигурации BIND 9 настраивается кэширование запросов.

  4. В конфигурации BIND 9 выполняется регистрация доменных зон DNS и зон условной пересылки в качестве вторичных.

bind9 rodc
Рис. 2. Схема обработки клиентских запросов BIND 9 при работе в связке с Эллес в режиме RODC

В данном случае процесс разрешения имени ресурса в адрес при получении клиентского запроса выглядит следующим образом:

  1. Клиент запрашивает адрес ресурса у DNS-сервера BIND 9, развернутого на контроллере домена Эллес в режиме RODC.

  2. Если адрес ресурса имеется в кэше BIND 9, он возвращается клиенту.

  3. Если адрес ресурса в кэше отсутствует, запрос перенаправляется на сервер безусловной пересылки в центральный сайт, где обрабатывается службой DNS соответствующего контроллера домена.

Настройка безусловного перенаправления

Для использования BIND 9 в качестве сервера безусловной пересылки (unconditional forwarder):

  1. Убедитесь, что в конфигурации BIND 9 в файле /etc/bind/named.conf отсутствует строка include "/app/inno-samba/bind-dns/named.conf";. Если строка присутствует, закомментируйте ее.

  2. Добавьте IP-адреса серверов безусловной пересылки в центральном сайте в настройки BIND 9 в файле /etc/bind/named.conf.options:

    options {
            ...
            forwarders {
                <forward-to-server-ip-address1>;
                <forward-to-server-ip-address2>;
            };
            forward only;
            ...
    };

Настройка кэширующего сервера

При установке по умолчанию сервер DNS BIND 9 настроен на работу в качестве кэширующего.

При необходимости дополнительно в настройках BIND 9 в файле /etc/bind/named.conf.options:

  1. Создайте список контроля доступа в блоке acl, перечислив в нем IP-адреса или сети, которые должны иметь доступ к серверу DNS.

    Например:

    acl goodclients {
            10.9.0.0/24;
            localhost;
            localnets;
    };
    options {
            ...
    };
  2. Явно разрешите обработку рекурсивных запросов от клиентов из созданного списка контроля доступа:

    options {
            ...
            recursion yes;
            allow-query { goodclients; };
            ...
    };
  3. При необходимости настройте валидацию DNSSEC в соответствии с настройками серверов DNS, на которые должны перенаправляться запросы.

    Например, чтобы включить валидацию DNSSEC, задайте:

    options {
            ...
            dnssec-enable yes;
            dnssec-validation auto;
            ...
    };

Пример итогового файла с настройками BIND 9:

acl goodclients {
        10.9.0.0/24;
        localhost;
        localnets;
};
options {
        directory "/var/cache/bind";
        recursion yes;
        tkey-gssapi-keytab "/app/inno-samba/bind-dns/dns.keytab";
        auth-nxdomain no;    # conform to RFC1035
        dnssec-enable yes;
        dnssec-validation auto;
        allow-query { goodclients; };
        allow-query-cache { any; };
        forwarders {
            10.9.25.30;
        };
        forward only;
};

При необходимости также выполните настройку переадресации портов:

  1. Чтобы разрешить переадресацию портов, выполните:

    sudo sysctl -w net.ipv4.ip_forward=1
  2. Откройте файл /etc/sysctl.conf в режиме редактирования и раскомментируйте строку:

    net.ipv4.ip_forward=1

Чтобы настроить поддержку только IPv4, откройте файл /lib/systemd/system/bind9.service в режиме редактирования и приведите значение ExecStart к следующему виду:

ExecStart=/usr/sbin/named -4 $OPTIONS

Настройка вторичных зон

Для снижения риска невозможности разрешения имен в случае недоступности сервера безусловной пересылки рекомендуется все зоны, для которых на центральном сервере DNS установлена условная пересылка, зарегистрировать в BIND 9 на контроллере домена Эллес RODC как вторичные.

Для регистрации BIND 9 на Эллес RODC в качестве держателя вторичной зоны необходимо на сервере DNS, являющемся владельцем зоны (в описании ниже в качестве владельца зоны выступает сервер DNS на контроллере домена Active Directory под управление ОС Windows Server), разрешить ее пересылку на адрес Эллес RODC и добавить описание зоны в конфигурацию BIND 9:

  1. На сервере DNS, являющемся владельцем регистрируемой зоны, убедитесь, что разрешены вторичные зоны BIND. Для этого в оснастке DNS Manager в левой части окна щелкните правой кнопкой мыши на имени сервера, выберите Properties, перейдите на вкладку Advanced и проверьте, что установлен флажок Enable BIND secondaries:

    dns manager advanced tab
  2. Чтобы разрешить пересылку на Эллес RODC для зоны, в оснастке DNS Manager в левой части окна щелкните правой кнопкой мыши на имени зоны, выберите Properties, перейдите на вкладку Zone Transfers, установите флажок Allow zone transfers, выберите Only to the following servers, нажмите Edit и укажите адрес сервера Эллес RODC:

    dns manager zone transfers
  3. Для настройки отправки уведомлений об изменениях во вторичной зоне на вкладке Zone Transfers нажмите Notify, установите флажок Automatically notify, выберите The following servers и укажите адрес сервера Эллес RODC:

    dns manager zone transfers notify
  4. Для авторизации сервера BIND 9 на Эллес RODC в качестве держателя вторичной зоны на вкладке Name Servers нажмите Add…​ и укажите адрес сервера Эллес RODC.

  5. На сервере Эллес RODC добавьте описание вторичной зоны в настройки BIND 9 в файле /etc/bind/named.conf.local в следующем формате:

    zone "forwardable-zone.lan" {
       type slave;
       file "/etc/bind/db.forwardable-zone";
       masters { 10.9.30.81; };
    };

    В примере:

    • forwardable-zone.la — имя вторичной зоны DNS;

    • /etc/bind/db.forwardable-zone — имя файла с информацией зоны DNS;

    • 10.9.30.81 — адрес сервера — владельца зоны DNS.

Следует учитывать следующее ограничение: если у вторичной зоны DNS есть дочерняя зона и поступает запрос на разрешение адреса хоста из этой дочерней зоны, а в кэше сервера его еще нет, то такой запрос будет перенаправлен на сервер пересылки, а в случае отсутствия работающего канала связи до него — не будет разрешен.

Поэтому такую дочернюю зону также необходимо зарегистрировать как вторичную по инструкции выше.

Изменение DNS-бэкенда на контроллере домена

Эллес позволяет переключаться между встроенным DNS-сервером и плагином BIND9_DLZ на контроллере домена без потери данных.

При использовании в качестве базы данных каталога LMDB (--backend-store=mdb) перед переключением убедитесь, что на контроллере домена установлен пакет lmdb-utils.

Например:

dpkg -s lmdb-utils

Если пакет отсутствует, установите его.

Например:

sudo apt install lmdb-utils

Миграция с встроенного DNS-сервера на BIND9_DLZ

Для переключения с встроенного DNS-сервера на плагин BIND9_DLZ выполните следующие действия на контроллере домена:

  1. Настройте плагин BIND9_DLZ (см. раздел «Настройка плагина BIND9_DLZ»).

  2. Остановите сервис inno-samba:

    sudo systemctl stop inno-samba.service
  3. Выполните команду миграции:

    sudo /app/inno-samba/sbin/samba_upgradedns --dns-backend=BIND9_DLZ
  4. Отключите встроенный DNS-сервер в файле /app/inno-samba/etc/smb.conf одним из следующих способов:

    • если в разделе global в файле smb.conf задан параметр server services, удалите из списка служб значение dns; после этого список значений параметра может выглядеть, например, так:

      server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
    • если параметр server services не используется, добавьте в раздел global в файле smb.conf следующую строку:

      server services = -dns
  5. Настройте автоматический запуск сервиса bind9 при загрузке:

    sudo systemctl enable bind9.service
  6. Запустите службу bind9:

    sudo systemctl start bind9.service
  7. Запустите службу inno-samba:

    sudo systemctl start inno-samba.service

Миграция с BIND9_DLZ на встроенный DNS-сервер

Для переключения с плагина BIND9_DLZ на встроенный DNS-сервер выполните следующие действия на контроллере домена:

  1. Остановите сервис bind9. Например:

    sudo systemctl stop bind9.service
  2. Отключите автоматический запуск сервиса bind9 при загрузке (см. инструкции в документации на используемый дистрибутив Linux). Например:

    sudo systemctl disable bind9.service
  3. Остановите сервис inno-samba. Например:

    sudo systemctl stop inno-samba.service
  4. Выполните команду миграции:

    sudo /app/inno-samba/sbin/samba_upgradedns --dns-backend=SAMBA_INTERNAL
  5. Отключите плагин BIND9_DLZ в файле smb.conf одним из следующих способов:

    • если в разделе global в smb.conf задан параметр server services, добавьте в список служб значение dns; например:

      server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns
    • если в разделе global в параметре server services указана только опция -dns, удалите его полностью.

  6. Запустите сервис inno-samba:

    sudo systemctl start inno-samba.service
Использование встроенного DNS-сервера предусмотрено настройкой параметра server services по умолчанию. Удаление параметра server services означает включение всех служб по умолчанию, включая DNS-сервер.