Установка сервера REST API для управления DNS (пакет elles-dns-api)
Сервер REST API elles-dns-api устанавливается на контроллере домена «Эллес» или отдельной машине под управлением ОС Astra Linux 1.8.
Установка включает шаги:
Схема развертывания
elles-dns-api поддерживает развертывание с использованием deb-пакета:
-
в полностью автоматическом режиме — на одном хосте с контроллером домена «Эллес» с работающими KDC, LDAP- и DNS-сервером;
-
с дополнительными действиями по запуску скрипта настройки и переносу требуемых файлов — на отдельном хосте.
Описание элементов схемы:
-
Клиенты (curl, веб-интерфейс, скрипты) отправляют HTTPS-запросы к серверу
elles-dns-api, который работает как systemd-сервис и установлен на контроллере домена или отдельном хосте. -
Сервер
elles-dns-apiаутентифицирует клиентов через SPNEGO/Kerberos, используя keytab-файл для HTTP-SPN. Для выполнения операций с DNS-зонами и службой каталоговelles-dns-apiвзаимодействует с контроллером домена «Эллес» по протоколам LDAP (для чтения/записи DNS-записей) и DCE/RPC (для управления зонами). Все аутентификационные ключи (keytab) и TLS-сертификаты передаются с контроллера домена на серверelles-dns-api. -
При развертывании на контроллере домена запускается скрипт
elles-dns-api-setup, который автоматически создает служебные учетные записи, настраивает их SPN, генерирует keytab-файлы и выдает сертификаты для безопасного взаимодействия. При развертывании на отдельной машине скрипт запускается вручную на контроллере домена, после чего файлы копируются на API-хост.
Список служебных учетных записей, используемых сервером elles-dns-api:
| Учетная запись | Назначение | SPN |
|---|---|---|
|
SPNEGO (Kerberos-аутентификация HTTP-клиентов) |
|
|
LDAP-операции с Active Directory |
— |
|
DNS Server Management Protocol (RPC) |
— |
Предварительные требования
Перед установкой:
-
При установке на одном хосте с контроллером домена — убедитесь, что «Эллес» работает в режиме контроллера домена:
sudo systemctl status inno-samba.service
Ожидаемый вывод:
● inno-samba.service - Samba AD Daemon Loaded: loaded (/lib/systemd/system/inno-samba.service; enabled; vendor preset: enabled) Active: active (running) since ... -
Убедитесь, что с хоста доступны пакеты krb5-user, sasl2-bin, libsasl2-modules-gssapi-mit, ldap-utils, gettext-base. Они добавляются автоматически как зависимости при установке пакета.
Установка пакета
Установите пакет elles-dns-api:
-
при установке из репозитория:
sudo apt install elles-dns-api -y
-
при установке из архива или копировании вручную укажите путь к распакованным файлам и имя пакета; например:
cd /path/to/package sudo apt install ./elles-dns-api_1.22.0-1_amd64.deb -y
или
cd /path/to/package sudo dpkg -i elles-dns-api_*.deb sudo apt install -f # Устанавливает зависимости: krb5-user, sasl2-bin, # libsasl2-modules-gssapi-mit, ldap-utils, gettext-base
В процессе установки пакета автоматически
-
создаются:
Путь Назначение /usr/sbin/elles-dns-api
Исполняемый файл сервера
/usr/sbin/elles-dns-api-setup
Скрипт настройки Active Directory и генерации конфигурации
/usr/share/elles-dns-api/config.yaml.template
Шаблон конфигурации для заполнения скриптом настройки
/etc/elles-dns-api/config.yaml
Пример конфигурации (до запуска скрипта настройки)
/etc/elles-dns-api/policy.csv
RBAC-политики Casbin
/etc/elles-dns-api/rbac_model.conf
RBAC-модель Casbin
/etc/elles-dns-api/keytabs/
Каталог для keytab-файлов (пустой до запуска скрипта настройки)
/var/lib/elles-dns-api/
Рабочий каталог
/var/log/elles-dns-api/
Каталог для лог-файлов
dnsel(user/group)Системный пользователь
/lib/systemd/system/elles-dns-api.service
Systemd-юнит
Сервис elles-dns-apiне запускается автоматически после установки, так как для его работы требуются объекты, создаваемые скриптом настройкиelles-dns-api-setupна контроллере домена. -
назначаются владельцы и права доступа:
Путь Владелец Права /etc/elles-dns-api/
dnsel:dnsel0750/etc/elles-dns-api/config.yaml
dnsel:dnsel0640/etc/elles-dns-api/policy.csv
dnsel:dnsel0640/etc/elles-dns-api/rbac_model.conf
dnsel:dnsel0640/etc/elles-dns-api/keytabs/
dnsel:dnsel0700/etc/elles-dns-api/keytabs/*.keytab
dnsel:dnsel0600/etc/elles-dns-api/keytabs/api-server.key
dnsel:dnsel0600/etc/elles-dns-api/keytabs/api-server.crt
dnsel:dnsel0644
Запуск скрипта настройки на контроллере домена
Скрипт elles-dns-api-setup подготавливает среду для работы elles-dns-api.
Он должен быть запущен на работающем контроллере домена «Эллес» от имени root, независимо от фактического размещения elles-dns-api:
-
если
elles-dns-apiразвертывается на одном хосте с контроллером домена, скрипт запускается локально; -
если
elles-dns-apiразвертывается на отдельном хосте, требуется скопировать скриптelles-dns-api-setupна хост с работающим контроллером домена «Эллес», запустить его, а затем перенести созданные им файлы на целевой хост.
Флаги
Варианты запуска скрипта с флагами:
-
если требуется переопределить FQDN для хоста, на котором развертывается сервер REST API:
sudo elles-dns-api-setup --api-host dc1.example.com
-
если требуется переопределить каталог установки «Эллес»:
sudo elles-dns-api-setup --samba-dir /usr/local/samba
-
если требуется переопределить целевой контроллер домена, с которым будет работать сервер REST API (отличный от того, на котором запускается скрипт):
sudo elles-dns-api-setup --target-dc dc2.example.com
-
если требуется повторно сформировать и заменить существующие keytab-файлы и файлы TLS-сертификата:
sudo elles-dns-api-setup --force
-
если не требуется выполнять проверку корректности взаимодействия по LDAP/RPC в конце работы скрипта:
sudo elles-dns-api-setup --skip-verify
Переменные окружения
Параметры работы скрипта elles-dns-api-setup можно переопределить с помощью переменных окружения:
| Переменная | Описание | По умолчанию |
|---|---|---|
|
Kerberos-область (Realm) домена. Используется для формирования SPN, аутентификации LDAP/RPC и конфигурации Kerberos |
Автоматически определяется из /etc/krb5.conf |
|
Имя служебной учетной записи в Active Directory для SPNEGO-аутентификации HTTP-клиентов |
|
|
Имя служебной учетной записи в Active Directory для GSSAPI-аутентификации при подключении к LDAP-серверу |
|
|
Имя служебной учетной записи в Active Directory для аутентификации в протоколе DCE/RPC (MS-DNSP) |
|
|
Путь к файлу krb5.conf, используемому клиентом Kerberos |
/etc/krb5.conf |
Пример запуска с переменными окружения:
REALM=EXAMPLE.COM \ LDAP_SVC_USER=svc-dns-ldap \ DNSRPC_SVC_USER=svc-dns-rpc \ sudo elles-dns-api-setup
Шаги выполнения
В процессе работы скрипт идемпотентно:
-
Определяет параметры среды:
-
Kerberos realm и Base DN — из /etc/krb5.conf;
-
FQDN текущего контроллера домена — с помощью
hostname -f; -
SID группы
DNSAdmins— с помощьюsamba-tool group show DNSAdmins; -
путь к krb5.conf — предпочитает системный /etc/krb5.conf.
-
-
Выполняет действия по созданию и настройке учетных записей:
-
создает служебную учетную запись
svc-dnsel-httpс SPNHTTP/<fqdn>; -
создает служебную учетную запись
svc-dnsel-ldap(LDAP bind); -
создает служебную учетную запись
svc-dnsel-rpc(DNS RPC); -
добавляет служебные учетные записи для LDAP и RPC в группу
DNSAdmins; -
устанавливает неограниченный срок действия пароля для созданных учетных записей (опция
--noexpiry).
-
-
Экспортирует в каталог /etc/elles-dns-api/keytabs/ keytab-файлы для созданных учетных записей:
-
spnego-svc.keytab; -
ldap-svc.keytab; -
dnsrpc-svc.keytab.
-
-
Формирует самоподписанный TLS-сертификат для сервера REST API:
-
api-server.crt— файл сертификата; -
api-server.key— файл ключа.
-
-
Устанавливает в качестве владельца пользователя
dnselдля всех файлов в каталоге /etc/elles-dns-api/keytabs/ (chown dnsel:dnsel). -
Устанавливает сертификаты CA в системное хранилище (trust store):
-
сертификат CA «Эллес» (/app/inno-samba/private/tls/ca.pem) → /usr/local/share/ca-certificates/elles-samba-ca.crt;
-
сертификат сервера REST API → /usr/local/share/ca-certificates/elles-api-server.crt;
-
запуск
update-ca-certificates -v.Позволяет использовать curlбез флага-k.
-
-
Формирует конфигурационный файл /etc/elles-dns-api/config.yaml на основе шаблона /usr/share/elles-dns-api/config.yaml.template, подставляя фактические значения для текущей среды (
realm,base_dn,SPN, пути, SIDDnsAdmins).
Создает резервную копию существующего файла config.yaml с суффиксом на основе временной метки. -
Проверяет корректность настройки (если при запуске не передается флаг
--skip-verify):-
GSSAPI LDAP bind от имени служебной учетной записи
svc-dnsel-ldap; -
DCE/RPC-вызов
samba-tool dns zonelistот имени служебной учетной записиsvc-dnsel-rpc.
-
Повторный запуск
Скрипт безопасен для повторного запуска:
-
существующие учетные записи не создаются повторно;
-
существующие SPN не дублируются;
-
если файл конфигурации config.yaml существует, перед повторной генерацией создается резервная копия с временной меткой в имени;
-
существующие keytab- и TLS-файлы создаются повторно только с флагом
--force; -
системные CA-сертификаты обновляются (идемпотентно).
Перенос файлов (при установке на отдельном хосте)
Если скрипт elles-dns-api-setup запускался на контроллере домена, а сервер устанавливается на отдельной машине, необходимо скопировать сгенерированные файлы:
-
Скопируйте файлы с контроллера домена на целевой хост:
scp /etc/elles-dns-api/keytabs/*.keytab \ /etc/elles-dns-api/keytabs/api-server.{crt,key} \ /etc/elles-dns-api/config.yaml \ user@api-host:/tmp/ -
На целевом хосте выполните:
sudo mkdir -p /etc/elles-dns-api/keytabs sudo mv /tmp/*.keytab /tmp/api-server.{crt,key} /tmp/config.yaml /etc/elles-dns-api/ sudo chown -R dnsel:dnsel /etc/elles-dns-api/keytabs sudo chmod 700 /etc/elles-dns-api/keytabs sudo chmod 600 /etc/elles-dns-api/keytabs/*.keytab /etc/elles-dns-api/keytabs/api-server.key sudo chmod 644 /etc/elles-dns-api/keytabs/api-server.crt sudo chown dnsel:dnsel /etc/elles-dns-api/config.yaml sudo chmod 640 /etc/elles-dns-api/config.yaml -
При необходимости установите CA-сертификаты в системное хранилище:
sudo cp /tmp/elles-*.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates -v
-
Проверьте корректность настройки прав доступа к keytab-файлам:
sudo ls -la /etc/elles-dns-api/keytabs/
Ожидаемый вывод:
-rw------- dnsel dnsel spnego-svc.keytab -rw------- dnsel dnsel ldap-svc.keytab -rw------- dnsel dnsel dnsrpc-svc.keytab -rw------- dnsel dnsel api-server.key -rw-r--r-- dnsel dnsel api-server.crt
Настройка RBAC
После установки пакета и запуска elles-dns-api-setup конфигурационный файл /etc/elles-dns-api/config.yaml уже сгенерирован и заполнен автоматически.
При необходимости:
-
раскомментируйте и заполните SID пользователя с правами супер-администратора в секции
user_roles; -
раскомментируйте и заполните SID reader-группы в секции
group_roles.
Чтобы получить SID пользователя, выполните на контроллере домена «Эллес»:
sudo /usr/local/samba/bin/samba-tool user show <username> | grep objectSid
Пример редактирования:
rbac:
group_roles:
S-1-5-21-3633072393-148695822-1854736953-1101: # DNSAdmins SID (определен автоматически)
- role_dns_admins
S-1-5-21-710189318-681344908-1651532485-2100: # reader group
- role_reader
user_roles:
S-1-5-21-710189318-681344908-1651532485-1118: # super-admin
- role_super_admin
Проверка конфигурации клиента Kerberos (при установке на отдельном хосте)
Если elles-dns-api работает на отдельной машине, убедитесь, что /etc/krb5.conf содержит корректные настройки для доступа к KDC домена.
Пример файла:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
EXAMPLE.COM = {
kdc = dc1.example.com:88
admin_server = dc1.example.com:749
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
Проверьте доступность KDC с хоста, на котором развертывается elles-dns-api:
kinit svc-dnsel-ldap@EXAMPLE.COM -k -t /etc/elles-dns-api/keytabs/ldap-svc.keytab klist
В выводе ожидается билет для krbtgt/EXAMPLE.COM@EXAMPLE.COM.
Запуск и проверка работоспособности
После завершения настройки:
-
Поверьте корректность конфигурации:
sudo elles-dns-api config validate --config /etc/elles-dns-api/config.yaml
Ожидается:
0 error(s)(могут быть предупреждения). -
Включите и запустите сервис
elles-dns-api:sudo systemctl enable --now elles-dns-api.service
-
Проверьте статус сервиса
elles-dns-api:sudo systemctl status elles-dns-api.service
Ожидаемый вывод:
● elles-dns-api.service - elles-dns-api REST API Active: active (running)
Просмотр логов
Проверьте логи сервиса:
sudo journalctl -u elles-dns-api -f
Ключевые сообщения, указывающие на успешный запуск:
{"msg":"Starting dnsel-cli server","version":"1.0.0+git..."}
{"msg":"ldap config","url":"ldap://dc.example.com:389"}
{"msg":"GSSAPI bind SUCCESS"}
{"msg":"rootDSE discovered","default_nc":"DC=example,DC=com"}
{"msg":"DNS context discovered","domain_container":"CN=MicrosoftDNS,DC=DomainDnsZones,..."}
{"msg":"HTTPS server listening","addr":"0.0.0.0:9443"}
Если какое-то сообщение отсутствует, см. «Устранение возможных ошибок».
Проверка доступности API
На хосте с развернутым приложением или клиенте выполните от имени пользователя с действующим билетом Kerberos:
curl --negotiate -u : \ "https://<api-fqdn>:9443/api/v1/dns/partitions" | jq
<api-fqdn> в примере — FQDN хоста, на котором развернут сервер elles-dns-api.
Ожидаемый ответ:
{
"partitions": [
{"name": "DomainDnsZones", "kind": "domain", "available": true},
{"name": "ForestDnsZones", "kind": "forest", "available": true},
{"name": "System", "kind": "legacy", "available": true}
]
}
Доступ к Swagger UI
Откройте документацию API:
https://<api-fqdn>:9443/swagger/index.html
<api-fqdn> в примере — полное доменное имя хоста, на котором развернут сервер elles-dns-api.
Убедитесь, что:
-
отображается список конечных точек;
-
при попытке вызова любого из методов запрашивается аутентификация Kerberos.
Устранение возможных ошибок
После установки и настройки сервиса elles-dns-api могут возникать ошибки, связанные с конфигурацией, правами доступа, сетевым взаимодействием или аутентификацией.
В разделе приводятся наиболее типичные проблемы и способы их устранения.
Сервис не запускается: systemctl status возвращает failed
Если команда systemctl status elles-dns-api возвращает статус "failed", проверьте логи сервиса для выявления причины:
sudo journalctl -u elles-dns-api -n 100 --no-pager
Возможные причины и способы их устранения:
| Ошибка в логе | Причина | Решение |
|---|---|---|
|
Неверные права доступа к keytab-файлам или TLS-ключу |
Выполнить: |
|
Сгенерированная конфигурация указывает на внутренний файл krb5.conf «Эллес», который не доступен пользователю |
Убедитесь что /etc/krb5.conf существует и доступен для чтения, затем запустите скрипт с флагом |
|
TLS-сертификат или ключ отсутствуют, повреждены или указан неверный путь |
Проверить существование файлов api-server.crt и api-server.key в /etc/elles-dns-api/keytabs/ и убедиться, что они доступны пользователю |
|
Keytab-файл для SPNEGO отсутствует в ожидаемом каталоге |
Запустить скрипт |
|
Keytab для LDAP не содержит корректные ключи или SPN не настроен |
Повторно сгенерировать keytab на контроллере домена: |
|
Конфигурационный файл отсутствует |
Запустить |
|
Конфигурация невалидна |
Запустить валидацию: |
|
Порт занят другим процессом |
Найти процесс: |
Сервис не запускается: в логе отсутствует сообщение GSSAPI bind SUCCESS
Если в лог-файле нет строки "GSSAPI bind SUCCESS", это указывает на проблему с аутентификацией LDAP.
Проверьте, что keytab-файл доступен пользователю dnsel для чтения:
sudo -u dnsel klist -kt /etc/elles-dns-api/keytabs/ldap-svc.keytab
Если вывод пуст, keytab поврежден, не экспортирован или не содержит нужных ключей.
Сформируйте keytab-файл повторно на контроллере домена:
sudo elles-dns-api-setup --force
API возвращает 401 Unauthorized: клиент не смог пройти Kerberos-аутентификацию
Сервер не может аутентифицировать клиента через Kerberos/SPNEGO.
Выполните проверки на стороне клиента:
-
получите билет Kerberos:
kinit user@<REALM>
-
проверьте наличие билета:
klist
-
проверьте разрешение FQDN сервера REST API:
nslookup <api-fqdn>
-
проверьте синхронизацию времени (Kerberos требует расхождения <5 минут):
sudo ntpdate -u <dc-fqdn>
<dc-fqdn> в проверках — FQDN целевого контроллера домена; <api-fqdn> — FQDN хоста, на котором развернут сервер elles-dns-api.
API возвращает 401 Unauthorized: SPN настроен некорректно
На контроллере домена проверьте SPN для учетной записи svc-dnsel-http:
sudo /app/inno-samba/bin/samba-tool spn list svc-dnsel-http
Ожидаемый результат: HTTP/<api-fqdn>@<REALM>.
<api-fqdn> — FQDN хоста, на котором развернут сервер elles-dns-api.
| Клиент должен обращаться к REST API строго по FQDN, указанному в SPN. Использование IP-адреса, короткого имени или другого DNS-имени приведет к отказу в аутентификации. |
API возвращает 403 Forbidden: пользователь аутентифицирован, но отсутствуют права
Проверьте корректность сопоставления для RBAC в config.yaml:
rbac:
group_roles:
S-1-5-21-...-1101: # SID DNSAdmins (определен автоматически)
- role_dns_admins
user_roles:
S-1-5-21-...-1107: # супер-администратор (нужно раскомментировать)
- role_super_admin
Получить SID текущего пользователя на контроллере домена:
sudo /app/inno-samba/bin/samba-tool user show <username> |grep -i objectSid
Добавьте SID в user_roles и перезапустите сервис:
sudo systemctl restart elles-dns-api.service
Ошибка проверки ACL: операция записи от имени пользователя без членства в DnsAdmins
Если RBAC-политика сервиса разрешает операцию, но служба каталогов отклоняет ее на уровне ACL, возникает ошибка:
{
"error": "failed to create zone",
"code": 403,
"source": "ldap",
"name": "LDAP_INSUFFICIENT_ACCESS_RIGHTS"
}
Это не ошибка конфигурации, а корректное поведение системы.
«Эллес» использует механизм делегирования S4U2Proxy, при котором права доступа к объектам проверяются не относительно служебной учетной записи (svc-dnsel-ldap), а относительно реального пользователя, от имени которого выполнен запрос (то еть конечного клиента).
Добавьте пользователя в группу DnsAdmins на контроллере домена:
sudo /app/inno-samba/bin/samba-tool group addmembers DnsAdmins <username>
Ошибка сертификата при использовании curl (SSL certificate problem)
При попытке обратиться к API-сервису по HTTPS (например, через curl) может возникнуть ошибка сертификата, если CA-сертификаты не установлены в системное хранилище (trust store).
Для устранения ошибки запустите скрипт настройки с флагом --force, чтобы гарантированно установить все необходимые CA-сертификаты в системное хранилище:
sudo elles-dns-api-setup --force
Проверьте, что сертификаты установлены:
ls -la /usr/local/share/ca-certificates/elles-*.crt ls -la /etc/ssl/certs/elles-*.pem
Скрипт elles-dns-api-setup не находит «Эллес»
Укажите путь явно:
sudo elles-dns-api-setup --samba-dir /app/inno-samba
Проверьте, что «Эллес» развернут:
ls /app/inno-samba/private/sam.ldb
Custom partitions summary count=0
Данное поведение является штатным, если:
-
Партиция не реплицирована на контроллер домена и запрос к
/api/v1/dns/partitionsвозвращаетavailable: false. -
Партиция еще не создана.
Для проверки выполните:
curl -k --negotiate -u : \ "https://<api-fqdn>:9443/api/v1/dns/partitions" | jq '.partitions[] |select(.kind=="custom")'
Если available: false, см. причину в поле unavailable_reason.
Обновлено: