Установка плагина для BIND 9 (пакет elles-dns-dyndb)

Плагин elles-dns-dyndb устанавливается на контроллере домена «Эллес» с развернутым DNS-сервером BIND 9.

Процесс установки включает шаги:

В текущей версии «Эллес» плагин доступен только для ОС Astra Linux 1.8.

Установка пакета

Установите пакет elles-dns-dyndb:

  • при установке из репозитория выполните:

    sudo apt install elles-dns-dyndb -y
  • при установке из архива укажите путь к распакованным файлам и имя пакета; например:

    cd /path/to/package
    sudo apt install ./elles-dns-dyndb_1.22.0_amd64.deb -y

Пакет автоматически устанавливает библиотеку dyndb-elles.so в /usr/lib/x86_64-linux-gnu/bind/ и создает необходимые файлы конфигурации.

После установки проверьте наличие библиотеки:

ls -l /usr/lib/x86_64-linux-gnu/bind/dyndb-elles.so

Библиотека должна быть доступна для чтения процессом bind. Если файл отсутствует или имеет неверные права, установка завершена некорректно.

Настройка интеграции с BIND 9

При использовании DNS-бэкенда BIND9_AD при выполнении команд samba-tool domain join, provision или add (опция --dns-backend=BIND9_AD) автоматически генерируется файл /app/inno-samba/bind-dns/named.conf, содержащий готовую конфигурацию DynDB для BIND 9.8+.

Файл включает настройки для DNS-партиций DomainDnsZones и ForestDnsZones:

dyndb "domain" "/usr/lib/x86_64-linux-gnu/bind/dyndb-elles.so" {
    uri "ldap://localhost";
    base "DC=DomainDnsZones,<base_dns>";

    auth_method "sasl";
    sasl_mech "GSSAPI";
    sasl_user "dns-HOSTNAME@<REALM>";
    krb5_keytab "FILE:/app/inno-samba/bind-dns/dns.keytab";

    dyn_update yes;
    ext_acl_sock_path "/tmp/bind9_ssu_acl.sock";
};

dyndb "forest" "/usr/lib/x86_64-linux-gnu/bind/dyndb-elles.so" {
    uri "ldap://localhost";
    base "DC=ForestDnsZones,<base_dns>";

    auth_method "sasl";
    sasl_mech "GSSAPI";
    sasl_user "dns-HOSTNAME@<REALM>";
    krb5_keytab "FILE:/app/inno-samba/bind-dns/dns.keytab";

    dyn_update yes;
    ext_acl_sock_path "/tmp/bind9_ssu_acl.sock";
};

Следующие параметры подставляются при установке автоматически:

  • /usr/lib/x86_64-linux-gnu/bind/dyndb-elles.so — путь к библиотеке плагина;

  • <base_dns> — корневой DN домена (например, DC=example,DC=com);

  • dns-HOSTNAME@<REALM> — служебная учетная запись dns-HOSTNAME;

    Имя хоста (HOSTNAME) и realm (REALM) берутся из конфигурации «Эллес».

  • /app/inno-samba/bind-dns/dns.keytab — сгенерированный автоматически keytab-файл;

  • /tmp/bind9_ssu_acl.sock — сокет для проверки ACL через сервис bind9_ssu_acl.

    Значение должно совпадать со значением соответствующего параметра в конфигурации «Эллес» в файле smb.conf.

Для включения этих настроек в основную конфигурацию BIND 9:

  1. Добавьте в /etc/bind/named.conf строку:

    include "/app/inno-samba/bind-dns/named.conf";
  2. Убедитесь, что файл /app/inno-samba/bind-dns/named.conf существует и доступен для чтения процессом bind:

    ls -l /app/inno-samba/bind-dns/named.conf
  3. Проверьте права на keytab-файл:

    ls -l /app/inno-samba/bind-dns/dns.keytab

    Файл должен быть доступен только пользователю bind (владелец: bind:bind, права: 600).

Создание пользовательской служебной учетной записи для DynDB (альтернативный вариант)

По умолчанию при использовании опции --dns-backend=BIND9_AD создается служебная учетная запись dns-HOSTNAME. Однако при необходимости можно создать собственную учетную запись с произвольным именем и SPN. Для этого:

  1. Создайте новую служебную учетную запись:

    samba-tool user add dns-custom --random-password
  2. Назначьте ей SPN в формате DYNDB/<fqdn>:

    samba-tool spn add DYNDB/example.com dns-custom
  3. Экспортируйте keytab-файл для этой учетной записи:

    samba-tool domain exportkeytab /app/inno-samba/bind-dns/dns-custom.keytab --principal=DYNDB/example.com
  4. Установите права на новый keytab-файл:

    sudo chown bind:bind /app/inno-samba/bind-dns/dns-custom.keytab
    sudo chmod 600 /app/inno-samba/bind-dns/dns-custom.keytab
  5. Обновите файл /app/inno-samba/bind-dns/named.conf, заменив dns-HOSTNAME@<REALM> на DYNDB/example.com@<REALM> и dns.keytab на dns-custom.keytab:

    dyndb "domain" "/usr/lib/x86_64-linux-gnu/bind/dyndb-elles.so" {
        uri "ldap://localhost";
        base "DC=DomainDnsZones,<base_dns>";
        auth_method "sasl";
        sasl_mech "GSSAPI";
        sasl_user "DYNDB/example.com@EXAMPLE.COM";
        krb5_keytab "FILE:/app/inno-samba/bind-dns/dns-custom.keytab";
        dyn_update yes;
        ext_acl_sock_path "/tmp/bind9_ssu_acl.sock";
    };
  6. Проверьте аутентификацию Kerberos с новым keytab-файлом:

    kinit -k -t /app/inno-samba/bind-dns/dns-custom.keytab DYNDB/example.com@EXAMPLE.COM
    klist

Возможные ошибки и способы их устранения:

Текст ошибки Действие

kinit: krb5_get_init_creds: unable to reach any KDC in realm EXAMPLE.COM

В /etc/krb5.conf явно задайте адрес KDC. Пример:

[libdefaults]
        default_realm = EXAMPLE.COM
        dns_lookup_realm = false
        dns_lookup_kdc = false
        forwardable = true

[realms]
EXAMPLE.COM = {
        kdc = 10.10.10.10
        admin_server = 10.10.10.10
        default_domain = example.com
}

[domain_realm]
        .example.com = EXAMPLE.COM
        example.com = EXAMPLE.COM

kinit: Client not found in Kerberos database while getting initial credentials (при использовании userPrincipalName)

Измените атрибут userPrincipalName служебной учетной записи, чтобы он соответствовал формату servicePrincipalName@<REALM>. Для этого выполните:

samba-tool user edit dns-custom

Измените значение:

userPrincipalName: DYNDB/example.com@EXAMPLE.COM

Сохраните изменения и повторите проверку аутентификации

Настройка сокета для проверки ACL

Плагин elles-dns-dyndb использует внешний сокет для проверки прав доступа к LDAP-объектам через сервис bind9_ssu_acl. Этот механизм включен по умолчанию и требует согласованной настройки на стороне BIND 9 и «Эллес».

Настройка на стороне BIND 9 (в файле /app/inno-samba/bind-dns/named.conf)

Параметр ext_acl_sock_path указывает путь к сокету, который должен быть идентичен пути, указанному в конфигурации «Эллес». По умолчанию:

ext_acl_sock_path "/tmp/bind9_ssu_acl.sock";

Если требуется изменить путь (например, на /var/run/bind9_ssu_acl.sock), добавьте его в значение параметра для всех партиций:

ext_acl_sock_path "/var/run/bind9_ssu_acl.sock";

Настройка на стороне «Эллес» (в файле /app/inno-samba/etc/smb.conf)

В конфигурации «Эллес» доступны параметры:

  • bind9_ssu_acl:server_socket_path — путь к сокету, который будет создан сервисом bind9_ssu_acl (по умолчанию: /tmp/bind9_ssu_acl.sock);

    Если в named.conf изменен путь по умолчанию, он должен быть указан в значении этого параметра.

  • bind9_ssu_acl:server_socket_owner — пользователь с правами доступа к сокету (по умолчанию: bind);

    Значение должно соответствовать имени системного пользователя, от имени которого запущен процесс bind. Рекомендуется оставлять значение по умолчанию (bind), если не используется нестандартная конфигурация.

  • bind9_ssu_acl:create_dns_node — включение автоматического создания A-записи в LDAP (по умолчанию: false).

    При значении true параметр позволяет сервису bind9_ssu_acl создавать DNS-объект (A-запись) в LDAP при успешной проверке ACL, если объект не существует.

Обязательным компонентом для работы механизма проверки ACL через сокет является сервис bind9_ssu_acl. Он не запускается автоматически и должен быть явно включен путем добавления в список в параметре server services.

Пример изменения значений параметров:

[global]
    ...
    server services = metrics_manager, s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, ft_scanner, winbindd, ntp_signd, kcc, dnsupdate, dns, lacheck, disco, mt, core_manager, dbl, bind9_ssu_acl
    ...
    bind9_ssu_acl:server_socket_path = /var/run/bind9_ssu_acl.sock
    bind9_ssu_acl:server_socket_owner = new_owner
    bind9_ssu_acl:create_dns_node = true
    ...

Отключение использования сокета для проверки ACL

Если требуется отключить внешнюю ACL-проверку (например, для тестирования или при проблемах с сокетом), укажите в конфигурации партиций в файле /app/inno-samba/bind-dns/named.conf:

enable_ext_acl_sock false;

В этом случае плагин будет выполнять проверку ACL непосредственно через LDAP-запросы к контроллеру домена.

Настройка пользовательской DNS-партиции (custom)

Для обработки пользовательской партиции добавьте в /app/inno-samba/bind-dns/named.conf блок dyndb для нее:

dyndb "custom" "/usr/lib/x86_64-linux-gnu/bind/dyndb-elles.so" {
    uri "ldap://localhost";
    base "DC=MyAppPartition,DC=example,DC=com";

    auth_method "sasl";
    sasl_mech "GSSAPI";
    sasl_user "dns-HOSTNAME@<REALM>";
    krb5_keytab "FILE:/app/inno-samba/bind-dns/dns.keytab";

    dyn_update yes;
    ext_acl_sock_path "/tmp/bind9_ssu_acl.sock";
};
Имя партиции в base должно соответствовать DN в LDAP (например, DC=MyAppPartition,DC=example,DC=com), а не FQDN.

Настройка динамических обновлений DNS (GSS-TSIG)

Для поддержки динамического обновления DNS-записей через nsupdate с аутентификацией GSS-TSIG должны быть выполнены следующие настройки:

  1. Настроен сокет для проверки ACL на стороне BIND 9 (параметр ext_acl_sock_path в named.conf) и «Эллес» (параметр bind9_ssu_acl:server_socket_path в smb.conf).

  2. В конфигурации «Эллес» в smb.conf включен сервис bind9_ssu_acl — server services = …​ bind9_ssu_acl.

  3. В конфигурации «Эллес» в smb.conf включен параметр bind9_ssu_acl:create_dns_node = true.

  4. В /etc/bind/named.conf.options присутствует параметр tkey-gssapi-keytab, указывающий на keytab-файл с требуемыми для работы плагина ключами:

    options {
            ...
            tkey-gssapi-keytab "/app/inno-samba/bind-dns/dns.keytab";
            ...
    };

Возможные корректировки конфигурации

В случае необходимости изменения конфигурации (например, при использовании удаленного контроллера домена или изменении пути к библиотеке) отредактируйте файл /app/inno-samba/bind-dns/named.conf вручную.

Изменение LDAP-URI на FQDN контроллера домена

По умолчанию используется ldap://localhost. Если DNS-сервер BIND 9 работает на другом узле, замените localhost на FQDN контроллера домена:

uri "ldap://dc1.example.com";
Используйте доменное имя, а не IP-адрес. Kerberos не работает с IP-адресами.

Изменение пути к библиотеке плагина

Если библиотека dyndb-elles.so установлена в нестандартный каталог, обновите путь:

dyndb "domain" "/opt/elles/bind/dyndb-elles.so" {

После изменения проверьте доступность файла:

ls -l /opt/elles/bind/dyndb-elles.so

Убедитесь, что файл доступен для чтения процессом bind.

Перезагрузка «Эллес»

Для применения изменений в конфигурации в «Эллес»:

  1. Перезапустите службу inno-samba:

    sudo systemctl restart inno-samba.service
  2. Убедитесь, что служба запущена и сокет создан:

    sudo systemctl status inno-samba.service
    ls -l /tmp/bind9_ssu_acl.sock
  3. Проверьте логи «Эллес» на наличие ошибок инициализации:

    sudo journalctl -u inno-samba | grep -i "bind9_ssu_acl"
Перезагрузка «Эллес» обязательна, так как сервис bind9_ssu_acl запускается как дочерний процесс от «Эллес». Без перезапуска изменения в smb.conf не будут применены, и BIND9 не сможет установить соединение с сокетом для проверки ACL.

Перезагрузка BIND 9

Перед перезапуском BIND 9 проверьте синтаксис конфигурации:

sudo named-checkconf

Если вывод пуст, конфигурация синтаксически корректна. Если возникают ошибки, исправьте их до продолжения.

Перезапустите службу bind9:

sudo systemctl restart bind9.service

Проверьте статус и логи:

sudo systemctl status bind9.service
sudo tail -f /var/log/syslog | grep -i dyndb

Обновлено: