En esta guía, configuraremos la replicación multimaestro del servidor OpenLDAP en CentOS 7/RHEL 7 . Esta configuración de replicación Multi-Master es para superar la limitación de la típica replicación Master-Slave donde solo el servidor maestro realiza los cambios en el directorio LDAP .
LEER:Cómo configurar la replicación maestro-esclavo de OpenLDAP
En la replicación Multi-Master, dos o más servidores actúan como maestros y todos estos tienen autoridad para cualquier cambio en el directorio LDAP. Las consultas de los clientes se distribuyen entre varios servidores con la ayuda de la replicación.

Medio ambiente
Para la replicación Multi-Master, vamos a utilizar tres OpenLDAP servidores. Los detalles se encuentran a continuación.
ldpsrv1.itzgeek.local (192.168.12.10) ldpsrv2.itzgeek.local (192.168.12.20) ldpsrv3.itzgeek.local (192.168.12.30)
Instalar LDAP
Instale paquetes LDAP en todos sus servidores.yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
Inicie el servicio LDAP y actívelo para el inicio automático al iniciar el sistema.
systemctl start slapd.service systemctl enable slapd.service
Configurar registro LDAP
Configure syslog para habilitar el registro LDAP.
echo "local4.* /var/log/ldap.log" >> /etc/rsyslog.conf systemctl restart rsyslog
Configurar la replicación multimaestro de OpenLDAP
Copie el archivo de configuración de la base de datos de muestra en /var/lib/ldap directorio y actualice los permisos del archivo. Debería realizar los pasos a continuación en todos sus servidores OpenLDAP a menos que se indique lo contrario.
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap /var/lib/ldap/*
Habilitaremos el módulo syncprov.
vi syncprov_mod.ldif
Copie y pegue las siguientes líneas en el syncprov_mod.ldif anterior. archivo.
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la
Ahora envíe la configuración al servidor LDAP.
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
Salida:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config"
Habilitar replicación de configuración
Cambiar el olcServerID en todos los servidores . Por ejemplo, para ldpsrv1, establezca olcServerID en 1, para ldpsrv2, establezca olcServerID en 2 y para ldpsrv3, establezca en 3.
vi olcserverid.ldif
Copie y pegue el siguiente texto en el archivo anterior.
dn: cn=config changetype: modify add: olcServerID olcServerID: 1
Actualice la configuración en el servidor LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcserverid.ldif
Salida:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
Necesitamos generar una contraseña para la replicación de la configuración LDAP.
slappasswd
Salida:
New password: Re-enter new password: {SSHA}MAfw/QNizKx4NxueW7CpCSN6jeDB5Z+C
Debe generar una contraseña en cada servidor ejecutando el comando slappasswd.
Establezca una contraseña para la base de datos de configuración.
vi olcdatabase.ldif
Copie y pegue el siguiente texto en el archivo anterior. Debes poner la contraseña que generaste en el paso anterior en este archivo.
dn: olcDatabase={0}config,cn=config add: olcRootPW olcRootPW: {SSHA}MAfw/QNizKx4NxueW7CpCSN6jeDB5Z+C
Actualice la configuración en el servidor LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabase.ldif
Salida:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={0}config,cn=config"
Ahora configuraremos la replicación de la configuración en todos los servidores.
vi configrep.ldif
Copie y pegue el siguiente texto en el archivo anterior.
### Update Server ID with LDAP URL ### dn: cn=config changetype: modify replace: olcServerID olcServerID: 1 ldap://ldpsrv1.itzgeek.local olcServerID: 2 ldap://ldpsrv2.itzgeek.local olcServerID: 3 ldap://ldpsrv3.itzgeek.local ### Enable Config Replication### dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov ### Adding config details for confDB replication ### dn: olcDatabase={0}config,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=002 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=003 provider=ldap://ldpsrv3.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 - add: olcMirrorMode olcMirrorMode: TRUE
Ahora envíe la configuración al servidor LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif
Salida:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config" adding new entry "olcOverlay=syncprov,olcDatabase={0}config,cn=config" modifying entry "olcDatabase={0}config,cn=config"
Habilitar la replicación de la base de datos
En este momento, todas sus configuraciones de LDAP están replicadas. Ahora, habilitaremos la replicación de los datos reales, es decir, la base de datos del usuario. Realice los pasos a continuación en cualquiera de los nodos ya que los otros nodos están en replicación.
Tendríamos que habilitar syncprov para la base de datos hdb.
vi syncprov.ldif
Copie y pegue el siguiente texto en el archivo anterior.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
Actualice la configuración en el servidor LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
Salida:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
Configure la replicación para la base de datos hdb.
vi olcdatabasehdb.ldif
Copie y pegue el contenido a continuación en el archivo anterior. Es posible que obtenga un error para olcSuffix, olcRootDN y olcRootPW si ya los tiene en su configuración. Elimine las entradas, si no es necesario.
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=itzgeek,dc=local - replace: olcRootDN olcRootDN: cn=ldapadm,dc=itzgeek,dc=local - replace: olcRootPW olcRootPW: {SSHA}xtbbtC/1pJclCPzo1n3Szac9jqavSphk - add: olcSyncRepl olcSyncRepl: rid=004 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=005 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=006 provider=ldap://ldpsrv3.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 - add: olcDbIndex olcDbIndex: entryUUID eq - add: olcDbIndex olcDbIndex: entryCSN eq - add: olcMirrorMode olcMirrorMode: TRUE
Una vez que haya actualizado el archivo, envíe la configuración al servidor LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabasehdb.ldif
Salida:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={2}hdb,cn=config"
Realice cambios en olcDatabase={1}monitor.ldif archivo para restringir el acceso del monitor solo a la raíz LDAP (ldapadm ) usuario, no a otros.
# vi monitor.ldif dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=itzgeek,dc=local" read by * none
Una vez que haya actualizado el archivo, envíe la configuración al servidor LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
Agregue los esquemas LDAP.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
Genera base.ldif archivo para su dominio.
# vi base.ldiff dn: dc=itzgeek,dc=local dc: itzgeek objectClass: top objectClass: domain dn: cn=ldapadm ,dc=itzgeek,dc=local objectClass: organizationalRole cn: ldapadm description: LDAP Manager dn: ou=People,dc=itzgeek,dc=local objectClass: organizationalUnit ou: People dn: ou=Group,dc=itzgeek,dc=local objectClass: organizationalUnit ou: Group
Cree la estructura de directorios.
ldapadd -x -W -D "cn=ldapadm,dc=itzgeek,dc=local" -f base.ldif
Salida:
Enter LDAP Password: adding new entry "dc=itzgeek,dc=local" adding new entry "cn=ldapadm ,dc=itzgeek,dc=local" adding new entry "ou=People,dc=itzgeek,dc=local" adding new entry "ou=Group,dc=itzgeek,dc=local"
Probar la replicación LDAP
Vamos a crear un LDAP de usuario llamado “ldaptest “ en cualquiera de sus servidores maestros, para hacer eso, cree un .ldif archivo en ldpsrv1.itzgeek.local (en mi caso).
[root@ldpsrv1 ~]# vi ldaptest.ldif
Actualice el archivo anterior con el contenido a continuación.
dn: uid=ldaptest,ou=People,dc=itzgeek,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldaptest uid: ldaptest uidNumber: 9988 gidNumber: 100 homeDirectory: /home/ldaptest loginShell: /bin/bash gecos: LDAP Replication Test User userPassword: {crypt}x shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
Agregue un usuario al servidor LDAP usando ldapadd comando.
[root@ldpsrv1 ~]# ldapadd -x -W -D "cn=ldapadm,dc=itzgeek,dc=local" -f ldaptest.ldif
Salida:
Enter LDAP Password: adding new entry "uid=ldaptest,ou=People,dc=itzgeek,dc=local"
Busque “ldaptest ” en otro servidor maestro (ldpsrv2.itzgeek.local ).
[root@ldpsrv2 ~]# ldapsearch -x cn=ldaptest -b dc=itzgeek,dc=local
Salida:
# extended LDIF # # LDAPv3 # base <dc=itzgeek,dc=local> with scope subtree # filter: cn=ldaptest # requesting: ALL # # ldaptest, People, itzgeek.local dn: uid=ldaptest,ou=People,dc=itzgeek,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldaptest uid: ldaptest uidNumber: 9988 gidNumber: 100 homeDirectory: /home/ldaptest loginShell: /bin/bash gecos: LDAP Replication Test User userPassword:: e2NyeXB0fXg= shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Ahora, establezca una contraseña para el usuario creado en ldpsrv1.itzgeek.local yendo a ldpsrv2.itzgeek.local . Si puede establecer la contraseña, eso significa que la replicación está funcionando como se esperaba.
[root@ldpsrv2 ~]# ldappasswd -s password123 -W -D "cn=ldapadm,dc=itzgeek,dc=local" -x "uid=ldaptest,ou=People,dc=itzgeek,dc=local"
donde,
-s especifique la contraseña para el nombre de usuario
-x nombre de usuario para el que se cambia la contraseña
-D Nombre distinguido para autenticarse en el servidor LDAP.
En la topología de replicación maestro-esclavo, no puede establecer la contraseña para el usuario LDAP en el servidor esclavo.Accesorios
Configure el cliente LDAP para enlazar también con el nuevo servidor maestro.
authconfig --enableldap --enableldapauth --ldapserver=ldpsrv1.itzgeek.local,ldpsrv2.itzgeek.local,ldpsrv3.itzgeek.local --ldapbasedn="dc=itzgeek,dc=local" --enablemkhomedir --update
Eso es todo.