Ошибка операции репликации из-за несоответствия схемы задействованных серверов

Имеем Windows Server 2008R2 в качестве PDC (dc8) и Samba в качестве BDC на ubuntu(dc2). В какой-то момент остановилась репликация с BDC на PDC. С сообщением: Ошибка 8418: Произошла ошибка операции репликации из-за несоответствия схемы задействованных серверов

Это частный случай из https://support.microsoft.com/en-us/help/2734946/troubleshooting-ad-replication-error-8418-the-replication-operation-fa
Первая в поиске и начал смотреть ее самой последней.

Сообщения в логе (они парами ходят — ошибка и предупреждения):

Код события:   1791
Категория задачи:Репликация
Уровень:       Ошибка
Пользователь:  АНОНИМНЫЙ ВХОД
Компьютер:     dc8
Описание:
Репликация раздела каталога приложений DC=aksay,DC=region,DC=ru из источника 22ed4208-6efa-4271-9132-ca740c0b93b5 (dc2.aksay.region.ru) была прервана. Для репликации требуется непротиворечивое состояние схемы, но последняя  попытка синхронизации схемы не удалось. Совершенно необходимо, чтобы  репликация схемы функционировала нормально. Проверьте предыдущие сообщения  об ошибках, чтобы получить дополнительные диагностические сведения.  Если эта ситуация повторится, обратитесь в службу поддержки Майкрософт за помощью. Ошибка 8418: Произошла ошибка операции репликации из-за несоответствия схемы задействованных серверов.

И предупреждение, перед ошибкой:

Имя журнала:   Directory Service
Код события:   1203
Категория задачи:Репликация
Уровень:       Предупреждение
Пользователь:  АНОНИМНЫЙ ВХОД
Компьютер:     dc8
Описание: 
Службе каталогов не удается реплицировать следующий объект из исходной службы каталогов по следующему сетевому адресу из-за различий в схеме доменных служб Active Directory.    
Объект: 
CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru  Сетевой адрес: 22ed4208-6efa-4271-9132-ca740c0b93b5._msdcs.aksay.region.ru    Перед попыткой синхронизации следующего раздела каталога доменные службы Active Directory предпримут попытку синхронизации схемы.  
Раздел каталога: DC=aksay,DC=region,DC=ru

Репликация с sambа на windows проходит на ура:

samba-tool drs showrepl

все — succesfull? а вот обратно на винде:

repladmin /showrepl

все хорошо, но в первой проверке (dc=aksay,dc=region,dc=ru) Ошибка 8418: Произошла ошибка операции репликации из-за несоответствия схемы задействованных серверов

Из

Repadmin /showrepl * /csv > allrepl.csv

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

Конечный DSAКонтекст именованияИсходный DSAСостояние последнего сбоя
DC8DC=aksay,DC=region,DC=ruDC28418

Принудительная репликация тоже не помогла

repadmin /replicate dc2 dc8 dc=aksay,dc=region,dc=ru
Успешно выполнена синхронизация из dc8 к dc2
repadmin /replicate dc8 dc2 dc=aksay,dc=region,dc=ru
Произошла ошибка репликации 8418(0x20e2)

В конкретно этом случае видно из предупреждения в журнале на винде что сбоит CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru

Если нет объекта который сбоит его надо искать, перво-наперво сверить версии схем:

Samba
dc2:~$ sudo ldbsearch -H /var/lib/samba/private/sam.ldb -b 'cn=Schema,cn=Configuration,dc=aksay,dc=region,dc=ru' -s base objectVersion
GENSEC backend 'gssapi_spnego' registered
GENSEC backend 'gssapi_krb5' registered
GENSEC backend 'gssapi_krb5_sasl' registered
GENSEC backend 'spnego' registered
GENSEC backend 'schannel' registered
GENSEC backend 'naclrpc_as_system' registered
GENSEC backend 'sasl-EXTERNAL' registered
GENSEC backend 'ntlmssp' registered
GENSEC backend 'ntlmssp_resume_ccache' registered
GENSEC backend 'http_basic' registered
GENSEC backend 'http_ntlm' registered
GENSEC backend 'krb5' registered
GENSEC backend 'fake_gssapi_krb5' registered
# record 1
dn: CN=Schema,CN=Configuration,DC=aksay,DC=region,DC=ru
objectVersion: 47

В винде, в реестре HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Parameters\SystemSchemaVersion

Затем ищем проблемный объект, в случае второго сервера samba проще:

dc2:~$ sudo samba-tool ldapcmp ldap://dc2.aksay.region.ru ldap://dc8.aksay.region.ru -UAdministrator domain
resolve_lmhosts: Attempting lmhosts lookup for name dc2.aksay.region.ru<0x20>
GENSEC backend 'gssapi_spnego' registered
GENSEC backend 'gssapi_krb5' registered
GENSEC backend 'gssapi_krb5_sasl' registered
GENSEC backend 'spnego' registered
GENSEC backend 'schannel' registered
GENSEC backend 'naclrpc_as_system' registered
GENSEC backend 'sasl-EXTERNAL' registered
GENSEC backend 'ntlmssp' registered
GENSEC backend 'ntlmssp_resume_ccache' registered
GENSEC backend 'http_basic' registered
GENSEC backend 'http_ntlm' registered
GENSEC backend 'krb5' registered
GENSEC backend 'fake_gssapi_krb5' registered
Password for [REGION\kos]:
resolve_lmhosts: Attempting lmhosts lookup for name dc8.aksay.region.ru<0x20>

* Comparing [DOMAIN] context...

* DN lists have different size: 351 != 350
    CN=B0401-Kyocera ECOSYS M2040dn (KPDL),CN=B0401,OU=comps,OU=Бухгалтерия,OU=rayfin,DC=aksay,DC=region,DC=ru

* Objects to be compared: 350

Comparing:
'CN=B0103,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru' [ldap://dc2.aksay.region.ru]
'CN=B0103,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru' [ldap://dc8.aksay.region.ru]
    Difference in attribute values:
        pwdLastSet =>
['132234548351325690']
['132234551387457592']
    FAILED

Comparing:
'CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru' [ldap://dc2.aksay.region.ru]
'CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru' [ldap://dc8.aksay.region.ru]
    Difference in attribute values:
        servicePrincipalName =>
['HOST/B0104', 'HOST/B0104.aksay.region.ru', 'RestrictedKrbHost/B0104', 'RestrictedKrbHost/B0104.aksay.region.ru', 'WSMAN/B0104', 'WSMAN/B0104.aksay.region.ru', 'WSMAN/b0104', 'WSMAN/b0104.aksay.region.ru']
['HOST/B0104', 'HOST/B0104.aksay.region.ru', 'RestrictedKrbHost/B0104', 'RestrictedKrbHost/B0104.aksay.region.ru', 'WSMAN/b0104', 'WSMAN/b0104.aksay.region.ru']
    FAILED

Comparing:
'CN=B0401,OU=comps,OU=Бухгалтерия,OU=rayfin,DC=aksay,DC=region,DC=ru' [ldap://dc2.aksay.region.ru]
'CN=B0401,OU=comps,OU=Бухгалтерия,OU=rayfin,DC=aksay,DC=region,DC=ru' [ldap://dc8.aksay.region.ru]
    Difference in attribute values:
        pwdLastSet =>
['132234537039180480']
['132231069309157820']
        userAccountControl =>
['4096']
['4098']
    FAILED

* Result for [DOMAIN]: FAILURE

SUMMARY
---------

Attributes with different values:

    servicePrincipalName
    pwdLastSet
    userAccountControl
ERROR: Compare failed: -1

Команда сравнивает ldap каталоги 2х серверов и выдает различия, но выдает много лишнего, можно почитать на вики самбы про нее. Тут я знал контекст и поэтому в конце указан domain, можно не указывать и будет сравнивать больше, другие варианты опять же на вики

Поиск в винде сложнее:

repadmin /showobjmeta dc8 "DC=aksay,dc=region,DC=ru" > result.txt
repadmin /showobjmeta dc2 "DC=aksay,dc=region,DC=ru" >> result.txt

И начинаем вручную искать разницу, потом можно посмотреть чем объекты отличаются на обоих серверах:

repadmin /showobjmeta dc8 "CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru" >b0104.txt
repadmin /showobjmeta dc2 "CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru" >>b0104.txt

Тут же и надо определиться на каком сервере принимаем «эталон» и какой атрибут(ы) будем восстанавливать, в моем случае было заменить у B0104 на dc2 атрибут servicePrincipalName с dc8. Рекомендую менять атрибуты по одному и пробовать запустить репликацию, т.к. не все атрибуты «одинаково важны», самба выдала 4 различия на двух компах, но репликация заработала после servicePrincipalName.

Итак выдираем схему для B0104 с dc8:

ldifde -f b0104-dc8.ldif -d "CN=B0104,OU=comps,OU=Бюджетный,OU=rayfin,DC=aksay,DC=region,DC=ru" -s dc8

Получаем в b0104-dc8.ldif 
dn:: Q049QjAxMDQsT1U9Y29tcHMsT1U90JHRjtC00LbQtdGC0L3Ri9C5LE9VPXJheWZpbixEQz1ha3NheSxEQz1yZWdpb24sREM9cnU=
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
objectClass: computer
cn: B0104
distinguishedName:: 
 Q049QjAxMDQsT1U9Y29tcHMsT1U90JHRjtC00LbQtdGC0L3Ri9C5LE9VPXJheWZpbixEQz1ha3NheS
 xEQz1yZWdpb24sREM9cnU=
instanceType: 4
whenCreated: 20190410095906.0Z
whenChanged: 20200110050101.0Z
dNSHostName: B0104.aksay.region.ru
servicePrincipalName: WSMAN/b0104
servicePrincipalName: WSMAN/b0104.aksay.region.ru
servicePrincipalName: RestrictedKrbHost/B0104
servicePrincipalName: HOST/B0104
servicePrincipalName: RestrictedKrbHost/B0104.aksay.region.ru
servicePrincipalName: HOST/B0104.aksay.region.ru
objectCategory: 
 CN=Computer,CN=Schema,CN=Configuration,DC=aksay,DC=region,DC=ru
...

меняем changetype, удаляем все кроме нашего атрибута, и перед ним добавляем replace:

dn:: Q049QjAxMDQsT1U9Y29tcHMsT1U90JHRjtC00LbQtdGC0L3Ri9C5LE9VPXJheWZpbixEQz1ha3NheSxEQz1yZWdpb24sREM9cnU=
changetype: modify
replace: servicePrincipalName
servicePrincipalName: WSMAN/b0104
servicePrincipalName: WSMAN/b0104.aksay.region.ru
servicePrincipalName: RestrictedKrbHost/B0104
servicePrincipalName: HOST/B0104
servicePrincipalName: RestrictedKrbHost/B0104.aksay.region.ru
servicePrincipalName: HOST/B0104.aksay.region.ru
-

Минус обязательно в конце, если меняем в одном файле несколько атрибутов то после каждого блока replace/атрибут ставим минус

Теперь загружаем на dc2:

ldifde -i -f b0104-dc8.ldif -s dc2

и потом запускаем репликацию:


Полезные статьи: