Настройка DNS

В качестве сервера 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";' >> /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 на контроллере в дочернем домене

Для корректного разрешения доменных имен на контроллере Эллес, введенном в дочерний домен в многодоменном лесу 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>; };
};

Изменение 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-сервер.