📱 Erkannter Endgerättyp ⛱️ Tag und Nacht. Verbraucht keinen oder einen 🍪.
guest
Login 🍪 1 Anzahl Ihrer gespeicherten Kekse, führt zur Keksdose

DRAFT

OpenLDAP für BIND-Unterstützung

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

Schema in OpenLDAP einspielen:

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

LDAP-Replikation aktivieren

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!

syncRepl aktivieren ldif:

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

Current PTF

Hintergrund ändern. Verbraucht keinen oder einen 🍪.

Verknüpften Viewport öffnen

🎮 Steuerung
Dokumentation 🕹️

Content Nodes Amount

Diligence / PTF Amount

FPS

Vertex-Count