Debian hat bind-dyndb-ldap derzeit nicht in Unterstützung, compilieren wir einfach unter Debian selbst:
root@linux:~# apt install autotools-dev git build-essential autoconf autoconf-archive libtool pkg-config libldap2-dev bind9-dev libkrb5-dev uuid-dev libsasl2-dev
root@linux:~# git clone https://pagure.io/bind-dyndb-ldap
root@linux:~# cd bind-dyndb-ldap/
root@linux:~# autoreconf -fvi
root@linux:~# ./configure --libdir=/usr/lib/x86_64-linux-gnu
root@linux:~# make
root@linux:~# make install
--> /usr/lib/x86_64-linux-gnu/bind/ldap.so
Im BIND-Server dran die config per view angeben, also nicht global. Beispiel:
named.conf
view "external" {
dyndb "domain-tld-bind-dyndb-ldap" "/usr/lib/x86_64-linux-gnu/bind/ldap.so" {
uri "ldaps://ldap.domain.tld";
base "ou=dns,dc=domain,dc=tld";
auth_method "simple";
bind_dn "cn=dns,ou=Dienste,dc=domain,dc=tld";
password xxxxxxxxxxxxxxxxxxxxxx;
};
}
korrekte olcAccess bedenken:
{6}to dn.subtree="ou=dns,dc=krei,dc=se" by dn="cn=dns,ou=Dienste,dc=krei,dc=se" write by * none break
Vorbereitetes LDIF von Krei.se holen:
root@linux:~# wget https://krei.se/docs/tutorials/files/bind-dyndb-ldap.ldif -o /tmp/bind-dyndn-ldap.ldif
oder manuell erstellen:
root@linux:~# wget https://raw.githubusercontent.com/freeipa/bind-dyndb-ldap/refs/heads/master/doc/schema.ldif -o /tmp/schema.ldif
root@linux:~# cat /tmp/schema.ldif | sed 's/^attributeTypes:/olcAttributeTypes:/;
s/^objectClasses:/olcObjectClasses:/;
1,/1.3.6.1.4.1.2428.20.0.0/ {/1.3.6.1.4.1.2428.20.0.0/!s/^/#/};
1idn: cn=dns,cn=schema,cn=config\nobjectClass: olcSchemaConfig
' >> /tmp/bind-dyndb-ldap.ldif
LDIF einspielen:
ldapadd -H ldapi:/// -f /tmp/bind-dyndb-ldap.ldif -Y EXTERNAL
bind-dyndb-ldap kommuniziert mit dem LDAP-Server über SyncRepl, also was auch LDAP-Server untereinander nutzen um sich zu synchronisieren. Der Vorteil liegt auf der Hand: Wir erhalten an allen Nameservern umgehend die Änderungen direkt von LDAP und sparen uns das Verteilen von master/slave BIND-Servern. Das vereinfach die Konfiguration von BIND ungemein!
Die indizes entryCSN und entryUUID kann man von Hand machen:
# Add indexes to the frontend db.
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
Dann das Module in cn=module{0},cn=config einfügen, auch das ging hier problemlos per LDAP-Browser:
#Load the syncprov module.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
syncprov wird dann noch pro Datenbank aktiviert und das musste ich zwingend per LDIF machen. Hier kann openldap auch gern mal einen Neustart verweigern wenn was nicht passt, daher UNBEDINGT nach dem Einfügen von olcOverlay=syncprov,olcDatabase={1}mdb,cn=config den Server testweise neu starten.
Klemmt hier dann was hat man Datenbank-Leichen in der DB und muss ohne syncprov Overlay diese bereinigen ({2}mdb oder {3}mdb erstellen und wieder löschen, je nach Fehlermeldung):
# syncrepl Provider for primary db
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpSessionLog: 100
Das wars eigentlich schon. Wer die Fehlermeldung
config error processing olcOverlay={0}syncprov,olcDatabase={3}mdb,cn=config:
erhält - das ist ein Hinweis darauf, dass eine Datenbank-Leiche rumliegt. Findet man diese nicht in /etc/ldap/slap.d/cn=config definiert hilft die Datenbank mit einem freien suffix testweise anzulegen und wieder zu löschen. Hilft alles nix muss die komplette Datenbank als LDIF exportiert und neu eingelesen werden (/var/lib/ldap/domain.tld/ leeren)
Wenn Deine Zone in LDAP gut ist klappt das bereits.
version: 1
dn: idnsName=domain.tld,ou=dns,dc=domain,dc=tld
objectClass: idnsRecord
objectClass: idnsZone
objectClass: top
idnsName: domain.tld
idnsSOAexpire: 604800
idnsSOAminimum: 86400
idnsSOAmName: ns1.domain.tld
idnsSOArefresh: 3600
idnsSOAretry: 600
idnsSOArName: hostmaster
idnsSOAserial: 12345678901
idnsZoneActive: TRUE
aRecord: 12.34.56.78
idnsAllowTransfer: 95.216.149.44; 2a01:4f9:c010:1ea8::1;
idnsUpdatePolicy: grant certbot_rndc-key subdomain domain.tld. txt; grant domaintld_rndc-key name domain.tld.;
nSRecord: ns1
nSRecord: ns2
dn: idnsName=ns1,idnsName=domain.tld,ou=dns,dc=domain,dc=tld
objectClass: idnsRecord
objectClass: top
idnsName: ns1
aAAARecord: 2000:123:456:789::1
aRecord: 34.56.78.90
dn: idnsName=ns2,idnsName=domain.tld,ou=dns,dc=domain,dc=tld
objectClass: idnsRecord
objectClass: top
idnsName: ns2
aAAARecord: 2000:345:678:901::1
aRecord: 23.45.67.89