Данная статья является дополнительным материалом к статье Обнаружение и разрешение конфликтов репликации в доменной службе LDAP


Подготовка тестовой среды

  1. На одном из контроллеров домена выполнить сценарий:
    kinit admin
    suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
    dc=$(hostname -f)
    domain=$(hostname -d)
     
    ldapadd -h $dc -D "cn=Directory Manager" -W <<EOF
    dn: ou=test_repl,ou=$domain,cn=orgunits,cn=accounts,$suffix
    objectClass: rbta-org-unit
    ou: test_repl
    displayName: test_repl
    EOF
     
    ipa user-add testuser --first="Test" --last="User" --random
     
    ldapmodify -h $dc -D "cn=Directory Manager" -W <<EOF
    dn: uid=testuser,cn=users,cn=accounts,$suffix
    changetype: modify
    replace: rbtadp
    rbtadp: ou=test_repl,ou=$domain,cn=orgunits,cn=accounts,$suffix
    -
    replace: rbtaou
    rbtaou: test_repl
    EOF
  2. Проверить работу репликации, выполнив сценарий на другом контроллере домена:
    kinit admin
    suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
    dc=$(hostname -f)
    domain=$(hostname -d)
    ldapsearch -h $dc -D "cn=Directory Manager" -W -b "ou=test_repl,ou=$domain,cn=orgunits,cn=accounts,$suffix"

Создание конфликта типа namingConflict (ADD)

  1. Остановить репликацию, выполнив сценарий на  обоих контроллерах домена:
read -p "Введите короткое доменное имя второго контроллера домена (например dc02): " DC2
domain=$(hostname -d)
dc=$(hostname -f)
suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
escaped_suffix=$(echo "$suffix" | sed -e 's/=/\\3D/g' -e 's/,/\\2C/g')

ldapmodify -h $dc -D "cn=Directory Manager" -W <<EOF
dn: cn=meTo${DC2}.${domain},cn=replica,cn=${escaped_suffix},cn=mapping tree,cn=config
changetype: modify
replace: nsDS5ReplicaEnabled
nsDS5ReplicaEnabled: off
EOF
  1. Создать конфликтующую запись (на обоих контроллерах домена):
    ipa user-add conflict_user --first="conflict" --last="User"  --random
  2. Включить репликацию:
    read -p "Введите короткое доменное имя 2 КД (например dc02): " DC2
    domain=$(hostname -d)
    dc=$(hostname -f)
    suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
    escaped_suffix=$(echo "$suffix" | sed -e 's/=/\\3D/g' -e 's/,/\\2C/g')
    ldapmodify -h $dc -D "cn=Directory Manager" -W <<EOF
    dn: cn=meTo${DC2}.${domain},cn=replica,cn=${escaped_suffix},cn=mapping tree,cn=config
    changetype: modify
    replace: nsDS5ReplicaEnabled
    nsDS5ReplicaEnabled: on
    EOF
  3. Проверить наличие конфликта:
    dc=$(hostname -f)
    suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
    dsconf ldap://$dc -D "cn=Directory Manager" repl-conflict list $suffix

Создание конфликта attribute/modification

  1. Остановить репликацию:
read -p "Введите короткое доменное имя 2 КД (например dc02): " DC2
domain=$(hostname -d)
dc=$(hostname -f)
suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
escaped_suffix=$(echo "$suffix" | sed -e 's/=/\\3D/g' -e 's/,/\\2C/g')
ldapmodify -h $dc -D "cn=Directory Manager" -W <<EOF
dn: cn=meTo${DC2}.${domain},cn=replica,cn=${escaped_suffix},cn=mapping tree,cn=config
changetype: modify
replace: nsDS5ReplicaEnabled
nsDS5ReplicaEnabled: off
EOF
  1. Модифицировать запись на разных контроллерах:
    1. На одном из контроллеров домена изменить телефон
      read -p "Введите короткое доменное имя 2 КД (например dc02): " DC2
      domain=$(hostname -d)
      dc=$(hostname -f)
      suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
      ldapmodify -h $dc -D "cn=Directory Manager" -W <<EOF
      dn: uid=testuser,cn=users,cn=accounts,$suffix
      changetype: modify
      replace: telephoneNumber
      telephoneNumber: +111111111
      EOF
    2. На другом контроллере домена изменить адрес электронной почты:
      read -p "Введите короткое доменное имя 2 КД (например dc02): " DC2
      domain=$(hostname -d)
      dc=$(hostname -f)
      suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
      ldapmodify -h $5DC2.$domain -D "cn=Directory Manager" -W <<EOF
      dn: uid=testuser,cn=users,cn=accounts,$suffix
      changetype: modify
      replace: mail
      mail: test@example.com
      EOF
  2. Включить репликацию и проверить наличие конфликта:
    read -p "Введите короткое доменное имя 2 КД (например dc02): " DC2
    domain=$(hostname -d)
    dc=$(hostname -f)
    suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
    escaped_suffix=$(echo "$suffix" | sed -e 's/=/\\3D/g' -e 's/,/\\2C/g')
    ldapmodify -h $dc -D "cn=Directory Manager" -W <<EOF
    dn: cn=meTo${DC2}.${domain},cn=replica,cn=${escaped_suffix},cn=mapping tree,cn=config
    changetype: modify
    replace: nsDS5ReplicaEnabled
    nsDS5ReplicaEnabled: on
    EOF
    read -p "Введите короткое доменное имя 2 КД (например dc02): " DC2
    domain=$(hostname -d)
    dc=$(hostname -f)
    suffix=$(ldapsearch -Q -LLL -s base|grep 'dn: '| cut -d ' ' -f2)
    ds-replcheck online -D "cn=Directory Manager" -W -m ldap://$dc:389 -r ldap://$DC2.$domain:389 -b "$suffix" -i memberof,idnssoaserial,entryusn,krblastsuccessfulauth,krblastfailedauth,krbloginfailedcount