Привет, Хабр! На связи снова Дмитрий, инженер по инфраструктурным решениям РЕД СОФТ. В прошлой статье мы разбирали, как настроить службу каталогов РЕД АДМ в ручном режиме, а также рассматривали самые распространённые ошибки в этом процессе. А в сегодняшней статье я постараюсь дать ответ, пожалуй, на весьма сложный вопрос — как работает репликация в РЕД АДМ «под капотом».
Эта статья — больше технический обзор, чем какой-либо чек-лист или инструкция. Мы дотошно пройдёмся по каждому этапу репликации. Я расскажу, что означают сообщения в терминале и подскажу, как на них реагировать. Материал будет интересен всем, кто хочет разобраться во внутренних процессах репликации: её логике, командах и функциях.

Начнём с начала! А именно – с первой команды
Предположим, вы настроили все файлы конфигурации, проверили nmap`ом порты и протоколы, прописали команду samba-tool domain join DC с нужными ключами:
/opt/reddc/bin/samba-tool domain join dom.del DC -U Administrator --dns-backend=BIND9_DLZ --realm=DOM.DEL --backend-store=mdb --backend-store-size=60Gb
Сама по себе команда очень базовая. Пробежимся по нескольким важным ключам:
--server=<fqdn-srv> – данная опция позволяет указать к какому именно серверу вы хотите подключиться для первичного стягивания данных. Лучше указывать владельца FSMO-ролей для этой процедуры, но не обязательно.
--option="ad dc functional level =2012\2012_R2\2016” – указание функционального уровня уже существующего домена. Если это не настроить, то ввод точно будет провальным.
-d 1-10 – опция debug. Помогает получить больше информации в процессе ввода. Наша техническая поддержка или отдел технического сопровождения всегда запрашивает такой файл лога с необходимым уровнем логирования для анализа.
Итак, жмём «Enter». Кстати, в команде ввода samba-tool domain join DC –U administrator вы указываете имя пользователя. После нажатия «Enter» система запросит пароль. Эти данные были переданы в переменные и теперь будут использоваться в процессе ввода в домен.
Итак, начинается сборка необходимых параметров: workgroup, realm, различных DN (base_dn, schema_dn). В фоне идет формирование NC – Naming Context`ов для предстоящей репликации.
В консоли появятся такие строчки:
INFO 2025-10-27 13:14:15,341 pid:11143 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1986: workgroup is DOM
INFO 2025-10-27 13:14:15,341 pid:11143 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1989: realm is dom.del
Они сообщают о том, что будущий контроллер домена связался с существующим и обнаружил область REALM.
Создание доменных объектов
После того, как связь была установлена, появятся следующие строчки:
Adding CN=TR3,OU=Domain Controllers,DC=dom,DC=del
Adding CN=TR3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dom,DC=del
Adding CN=NTDS Settings,CN=TR3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dom,DC=del
RED DC создал для себя необходимые объекты. Например, CN=TR3,OU=Domain Controllers – это объект типа «компьютер».
Adding SPNs to CN=TR3,OU=Domain Controllers,DC=dom,DC=del
Setting account password for TR3$
Enabling account
Adding DNS account CN=dns-TR3,CN=Users,DC=dom,DC=del with dns/ SPN
Setting account password for dns-TR3
Дальше идёт добавление SPN-записей для объекта типа компьютер, таких как GC, LDAP, HOST и т.д. Включается учётная запись, для неё устанавливается случайный пароль, состоящий из 120 символов. Также в домене создаётся специальная учетная запись dns-TR3, где TR3 – короткое имя машины. Данная служебная запись нужна для того, чтобы входящий в состав RED DC BIND9 работал корректно.
Предварительное создание бекапов и настройка служебных баз данных
INFO 2025-10-27 13:14:36,929 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/netcmd/backup.py #36: The backup folder was created: /opt/reddc-backup
INFO 2025-10-27 13:14:36,969 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/netcmd/backup.py #62: Backup folder has been archived as: /opt/reddc-backup/25.10.27_13:14:36_conf.tar.gz
lpcfg_load: refreshing parameters from /opt/reddc/etc/smb.conf
Тут RED DC делает бекап всех заполненных ранее файлов конфигурации. Подробнее рассказывали о них в статье о подготовке RED DC к вводу.
После бекапа появится строчка refreshing parameters from /opt/reddc/etc/smb.conf – это значит, что RED DC обновил файл конфигурации smb.conf и внёс изменения. Он заполнил секцию REALM, установил функциональный уровень домена и т.д.
INFO 2025-10-27 13:14:37,015 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2147: Looking up IPv4 addresses
INFO 2025-10-27 13:14:37,016 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2164: Looking up IPv6 addresses
INFO 2025-10-27 13:14:37,314 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2576: Setting up share.ldb
INFO 2025-10-27 13:14:37,368 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2580: Setting up secrets.ldb
INFO 2025-10-27 13:14:37,379 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2585: Setting up the registry
Далее производится настройка баз данных. Так, например, в secrets.ldb указываются данные служебной учётной записи dns-tr3 и её пароля в зашифрованном виде. Изнутри это выглядит так:

INFO 2025-10-27 13:14:37,415 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2588: Setting up the privileges database
INFO 2025-10-27 13:14:37,438 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2591: Setting up idmap db
INFO 2025-10-27 13:14:37,451 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #2598: Setting up SAM db
INFO 2025-10-27 13:14:37,455 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #897: Setting up sam.ldb partitions and settings
INFO 2025-10-27 13:14:37,455 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #909: Setting up sam.ldb rootDSE
INFO 2025-10-27 13:14:37,458 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/__init__.py #1333: Pre-loading the Samba 4 and AD schema
Последующие строки отражают тот же процесс. Настраиваются специальные базы данных, которые потребуются для будущей работы. Они заполняются полями и типовыми значениями формата key-value. Так, например, в sam.ldb хранится критически важная информация, которая будет обеспечивать работу доменного контроллера.

Именно тут вы можете найти информацию о конкретном объекте в базе, его SPN-записях и другую информацию, которая записывается в атрибуты. Администраторы с опытом работы в AD DS наверняка увидят для себя много знакомых атрибутов.
Если вы увидели вот такие строчки:
Provision OK for domain DN DC=dom,DC=del
Starting replication
Это значит, что опрос первичной информации прошёл успешно, а базы прошли первичное формирование. Строчка “starting replication” говорит о том, что сейчас начнётся процесс репликации доменных контекстов.
Репликация доменных контекстов
Transaction start: transaction_size: (inf)
Schema-DN[CN=Schema,CN=Configuration,DC=dom,DC=del] objects[1000/1770] linked_values[0/0]
chunk processed: 0, used memory: 15%
Schema-DN[CN=Schema,CN=Configuration,DC=dom,DC=del] objects[1770/1770] linked_values[0/0]
Analyze and apply schema objects
Бегущие строчки сообщают, что в текущий момент было среплецировано некое количество объектов из контекста. Рассмотрим этот процесс изнутри.
Под капотом задействуется RPC-интерфейс для вызова функций drsuapi. Первое, что требуется сделать новому контроллеру, — установить BIND-соединение с уже существующим контроллером, чтобы вычитать содержимое контекстов.
RPC вызывает DRSBind для установки соединения с существующим контекстом.
Schema и принцип её работы
Самым первым контекстом всегда стягивается Schema. Это незыблемое правило, ведь Schema хранит в себе все объекты и классы, которые потом ссылаются на этот контекст. Для понимания: если вы решили просмотреть атрибуты пользователя, воспользовавшись командлетом:
Samba-tool user show user1
То увидите, что у объекта типа «пользователь» есть атрибут ObjectsClass.

Сам атрибут и значение этого атрибута прописаны в контексте схемы. Вы не сможете добавить еще один objectsClass пользователю, если он не добавлен в схему. Система при попытке изменений просто отклонит запрос и сообщит, что в CN=Schema отсутствует упоминание данного атрибута. Администраторы, которые пробовали вручную расширять схему домена через собственные .ldif файлы, знакомы с этой историей очень хорошо.
Configuration
Сразу после схемы идёт контекст «конфигурация» (CN=Configuration). Этот контекст хранит в себе служебную информацию, например, о сайтах и поддоменах.
Служба каталогов RED DC позволяет создать поддомен по принципу как в MS AD. Информация о существующем поддомене будет прописана на корневом домене в CN=Partitions,CN=Configuration. Поэтому когда вы увидите строчки:
Partition[CN=Configuration,DC=dom,DC=del] objects[2630/1630] linked_values[82/0]
Replicated 1000 objects (0 linked attributes) for CN=Configuration,DC=dom,DC=del
chunk processed: 1000, used memory: 18%
Partition[CN=Configuration,DC=dom,DC=del] objects[3260/1630] linked_values[164/82]
Replicated 630 objects (82 linked attributes) for CN=Configuration,DC=dom,DC=del
знайте, что в текущий момент производится репликация именно этого контекста.
BASE_DN - основной контекст домена
Далее идёт репликация основного контекст домена, так называемого base_dn – DC=dom,DC=del:
Replicating critical objects from the base DN of the domain
Partition[DC=dom,DC=del] objects[112/112] linked_values[23/23]
Replicated 112 objects (23 linked attributes) for DC=dom,DC=del
chunk processed: 0, used memory: 19%
Partition[DC=dom,DC=del] objects[476/476] linked_values[26/26]
Replicated 476 objects (26 linked attributes) for DC=dom,DC=del
chunk processed: 0, used memory: 19%
Done with always replicated NC (base, config, schema)
Строчка «Done with always replicated NC (base, config, schema)» даёт понять, что закончилась репликация трёх существующих контекстов: schema, configuration, base_dn.
DomainDnsZones
Следом идёт репликация контекстов DomainDnsZones и ForestDnsZones. Здесь вас может смутить сообщение:
WARNING: Unable to replicate own RID Set, as server tr1.dom.del (the server we joined) is not the RID Master.
NOTE: This is normal and expected, RED DC will be able to create users after it contacts the RID Master at first startup.
Не получилось связаться с сервером, который является RID Master. В этом нет ничего страшного. Сразу после того, как вы запустите службы, контроллер сам обратится к владельцу FSMO в роли RID master, запишет информацию RID set о себе и получит RID pool.
Commiting SAM DataBase
Процесс не завис, он просто требует определённого количества времени:
Committing SAM database - this may take some time
Всё, что происходило выше, записывалось в оперативную память. Как было указано в терминале ранее, chunk processed: 0, used memory: 19%. Тут указывается процент использования оперативной памяти, вся отреплецированная информация записывается именно в ОЗУ.
Когда вся информация получена, и мы имеем полную картину внутри ОЗУ, начинается запись на диск. Данные из оперативной памяти переносятся в базы данных, которые хранятся по пути /opt/reddc/private/sam.ldb.d/

INFO 2025-10-27 13:14:46,337 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1180: Committed SAM database
INFO 2025-10-27 13:14:46,393 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/netcmd/backup.py #62: Backup folder has been archived as: /opt/reddc-backup/25.10.27_13:14:46_conf.tar.gz
INFO 2025-10-27 13:14:46,393 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/netcmd/backup.py #62: Backup folder has been archived as: /opt/reddc-backup/25.10.27_13:14:46_conf.tar.gz
INFO 2025-10-27 13:14:46,394 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1336: Adding 1 remote DNS records for TR3.dom.del
Связываем контроллеры домена
Конечно, пришлось подождать. Но вот, коммитинг завершился. После этого будет создан архив для бекапа с конфигами, добавлена А-запись в домене с FQDN вашего нового контроллера домена, а также добавлена CNAME запись в зону _msdcs. Она отвечает за репликацию между контроллерами домена и общение между ними.
INFO 2025-10-27 13:14:46,433 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1402: Adding DNS A record TR3.dom.del for IPv4 IP: 192.168.11.83
INFO 2025-10-27 13:14:46,451 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1447: Adding DNS CNAME record cfa2e40b-3a18-40c4-9a01-9f1941aacb3d._msdcs.dom.del for TR3.dom.del
INFO 2025-10-27 13:14:46,470 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1464: All other DNS records (like ldap SRV records) will be created sambadnsupdate on first startup
INFO 2025-10-27 13:14:46,470 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1653: Replicating new DNS records in DC=DomainDnsZones,DC=dom,DC=del
Так как чуть ранее мы стягивали только критичные объекты, то теперь дотягиваем всё остальное содержимое контекстов DomainDnsZones и ForestDnsZones.
INFO 2025-10-27 13:14:46,621 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1241: Committed SAM database
INFO 2025-10-27 13:14:46,621 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1243: Root context replication completed successfully
INFO 2025-10-27 13:14:46,621 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1668: Sending DsReplicaUpdateRefs for all the replicated partitions
INFO 2025-10-27 13:14:46,647 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1698: Setting isSynchronized and dsServiceName
INFO 2025-10-27 13:14:46,648 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #1713: Setting up secrets database
Коммитинг завершён. Запись Root Context replication completed будет означать, что репликация всех контекстов также завершена.
Дальше отправляется RPC-функция DRSUpdateRefs. Она отвечает за информирование соседей по репликации о наличии нового контроллера домена в сети и заполнении атрибута RepsTo в DSA объектах.
INFO 2025-10-27 13:14:47,097 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/sambadns.py #1386: See /opt/reddc/bind-dns/named.conf for an example configuration include file for BIND
INFO 2025-10-27 13:14:47,097 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/provision/sambadns.py #1388: and /opt/reddc/bind-dns/named.txt for further documentation required for secure DNS updates
INFO 2025-10-27 13:14:47,106 pid:11154 /opt/reddc/lib64/python3.8/site-packages/samba/join.py #2136: Joined domain DOM (SID S-1-5-21-4039423950-2894173283-293384212) as a DC
Всё! Ввод в домен успешно завершен, у него также появился SID. Дальше вам нужно действовать по инструкции и грамотно запустить службы, чтобы контроллер начал работать.
И у вас может появиться вполне логичный вопрос: а где же тут процесс репликации непосредственно? В каком-то смысле вы будете правы. Тут описано первичное стягивание, но оно практически полностью совпадает с оригинальным процессом репликации, который происходит на постоянной основе между контроллерами домена.
Надеюсь, сегодняшняя статья поможет сориентироваться в процессе репликации службы каталогов РЕД АДМ. Если у вас остались вопросы – пишите в комментариях, какой этап нужно раскрыть подробнее.
