Debian DHCP-DNS-LDAP

Aus Wiki
Version vom 9. Juni 2013, 19:41 Uhr von Erich (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=Allgemein= Sowohl die DHCP-Konfiguration als auch die Bind9 DNS-Konfiguration kann zentral im LDAP-Directory abgelegt werden. Dies hat den Vorteil, dass neu ange…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Allgemein

Sowohl die DHCP-Konfiguration als auch die Bind9 DNS-Konfiguration kann zentral im LDAP-Directory abgelegt werden. Dies hat den Vorteil, dass neu angelegte Hosts ohne einen Neustart der Serverdiesnte unmittelbar übernommen werden. Desweiteren kann die Administration mit dem webbasierten LDAP-Account-Manager komfortabel vorgenommen werden. Die Konfiguration kann entweder für beide Dienste, oder auch einer der beiden isoliert, ins LDAP Directory transferiert werden.

Voraussetzungen:

  • LDAP Server
  • DHCP-Server installiert und konfiguriert
  • DNS-Server installiert und konfiguriert

LDAP basierence DHCP-Server Konfig

Paketinstallation

apt-get install isc-dhcp-server-ldap

DHCP-Schema

LDAP-Schema einbinden:

cp /usr/share/doc/isc-dhcp-server-ldap/dhcp.schema.gz /etc/ldap/schema/
gzip -d /etc/ldap/schema/dhcp.schema.gz
/usr/local/bin/schema2ldif dhcp

DHCP-Schema in's LDAP-Directory einbinden:

ldapadd -cxWD cn=admin,cn=config -f /etc/ldap/schema/dhcp.ldif 


DHCP-Konfig in LDAP importieren

cp /usr/share/doc/isc-dhcp-server-ldap/dhcpd-conf-to-ldap.pl.gz /usr/local/bin/
gzip -d /usr/local/bin/dhcpd-conf-to-ldap.pl.gz
chmod +x /usr/local/bin/dhcpd-conf-to-ldap.pl
dhcpd-conf-to-ldap.pl  --basedn "ou=dhcp,dc=test,dc=lan"  --dhcpdn "cn=dhcp_config,ou=dhcp,dc=test,dc=lan" --conf "/etc/dhcp/dhcpd.conf" > /root/ldap_ldif/dhcpd.ldif
vi /root/ldap_ldif/dhcp.ldif

Folgende Zeilen am Anfang der Datei einfügen, um eine eigene Organisationseinheit (OU) innerhalb des LDAP-Trees für den DHCP anzulegen:

dn: ou=dhcp,dc=test,dc=lan
ou: dhcp
objectClass: organizationalUnit

dn: cn=...

Einbinden in den LDAP-Tree:

ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/dhcpd.ldif


Konfiguration DHCP-Server

Damit der DHCP-Server die Konfigurationsdaten aus dem LDAP-Directory abruft, sind lediglich ein paar Zeilen erforderlich.

Sichern der originalen DHCP Konfiguration:

mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.noldap
vi /etc/dhcp/dhcpd.conf

Folgende Zeilen einfügen:

ldap-server "IP_LDAP_SERVER";
ldap-port 389;
ldap-base-dn "ou=dhcp,dc=test,dc=lan";
ldap-method dynamic;
ldap-debug-file "/var/log/dhcp-ldap.log";

Neustarten:

/etc/init.d/isc-dhcp-server restart


LAM-Konfiguration

Konfiguration

  • Webbrowser öffnen und http://IP_DES_SERVER/lam eingeben
  • Links oben auf den Link LAM configuration" klicken
  • Edit server profiles anwählen
  • Passwort eingeben (LAM_MASTER_PWD)
  • Account Types:
    • DHCP mit + Symbol im oberen Bereich hinzufügen.
    • Im Bereich DHCP (unten) LDAP Suffix: cn=dhcp_config,ou=dhcp,dc=test,dc=lan
    • Save anklicken
  • Modules
    • Im Bereich DHCP folgende Module aktivieren: DHCP settings, Hosts(fixed_ip), Ranges(range), DDNS(ddns), General information(generalInformation)
    • Save anklicken


LDAP basierence DNS-Server Konfig

Bind9-Paket neu erstellen

Die Debian Version von Bind9 enthält nicht die Erweiterungen zum laden der Zoneninformationen aus einem LDAP-Directory (DLZ: Dynamic Loadable Zones). Bind9 muss daher neu übersetzt werden.

Installation notwendiger Pakete:

apt-get install devscripts build-essential libkrb5-dev debhelper libssl-dev libtool bison libdb-dev libldap2-dev libxml2-dev libpcap-dev hardening-wrapper libgeoip-dev dpkg-dev fakeroot

Vorbereitung:

cd /usr/local/src
mkdir bind9
cd bind9
apt-get source bind9
apt-get build-dep bind9
dpkg-source -x bind9_9*.dsc
cd bind9-9*
vi debian/rules

Folgendermaßen ergänzen:

./configure --prefix=/usr \
               --mandir=\$${prefix}/share/man \
               --infodir=\$${prefix}/share/info \
               --sysconfdir=/etc/bind \
               --localstatedir=/var \
               --enable-threads \
               --enable-largefile \
               --with-libtool \
               --enable-shared \
               --enable-static \
               --with-openssl=/usr \
               --with-gssapi=/usr \
               --with-gnu-ld \
               --with-geoip=/usr \
               --enable-ipv6 \
               --with-dlz-bdb=yes \
               --with-dlz-filesystem=yes \
               --with-dlz-ldap=yes \
               --with-dlz-stub=yes \
               --with-dlz-dlopen=yes \
               $(EXTRA_FEATURES)

Versionsstring erhöhen, damit das selbst kompilierte Bind9-Paket später nicht von der Version aus den Debian Repositories ersetzt wird, das keinen LDAP-Support bietet:

vi debian/changelog

Die erste Zeile sieht z.B. folgendermaßen aus:

bind9 (1:9.8.4.dfsg.P1-6+nmu2) unstable; urgency=medium

Folgende Zeilen davor einfügen (an Versionsnummer .1 angehängt):

bind9 (1:9.8.4.dfsg.P1-6+nmu2.1) unstable; urgency=medium
 * activate dlz support

Debian Paket neu erstellen:

fakeroot debian/rules binary

Im übergeordneten Ordner sollten zahlreiche Pakete erstellt worden sein.

ls ../

Bind9 mit DLZ support installieren

Falls Bind9 bereits installiert sein sollte, muss dieses nun deinstalliert werden. Vorher evtl. noch die Konfigfiles sichern:
cp /etc/bind/named.conf.local /root/
apt-get remove bind9

Selbst kompiiertes Debian Bind9- Paket, incl. der ebenfalls ertellten abhängigen Pakete, installieren:

dpkg -i ../bind9*.deb ../dnsutils*.deb  ../lib*.deb


DNS Schema

Um die DNS-Zonen im LDAP Directory zu verwalten, ist ein Schema erforderlich. Das Schema ist im DLZ-Paket (Dynamic Loadable Zones) enthalten, das nun heruntergeladen und entpackt wird:

cd /usr/local/src
mkdir bind-dlz
cd bind-dlz
wget http://downloads.sourceforge.net/project/bind-dlz/Bind%20DLZ/DLZ-0.7.0/DLZ-0.7.0.tar.gz
tar xvf DLZ-0.7.0.tar.gz
vi dlz.schema

alle Leerzeilen am Ende des Schema-files entfernen, da die Leerzeilen Fehler beim konvertieren Fehler verursachen würden.

cp dlz.schema /etc/ldap/schema/

Schema in LDAP einbinden:

/usr/local/bin/schema2ldif dlz
ldapadd -cxWD cn=admin,cn=config -f /etc/ldap/schema/dlz.ldif


DLZ Zonen im LDAP erstellen

Organisational Unit für DNS-Einträge:

vi /root/ldap_ldif/dns_ou.ldif

Folgende Zeilen einfügen:

dn: ou=dns,dc=test,dc=lan
ou: dns
objectClass: organizationalUnit

ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/dns_ou.ldif

DNS-Zone und Nameserverdefinition:

vi /root/ldap_ldif/dns_zone.ldif

Folgenden Inhalt einfügen und anpassen (Zone: test.lan, Reverse Zone 178.168.192.in-addr.arpa: Erste drei Stellen der IP-Adress in umgekehrter Reihenfolge, LDAP Base dn dc=test,dc=lan, dlzAdminEmail: root@test.org => root.test.org.):

dn: dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectClass: dlzZone
objectClass: top
dlzZoneName: test.lan

dn: dlzHostName=@,dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectclass: dlzHost
dlzHostName: @

dn: dlzRecordID=1,dlzHostName=@,dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectclass: dlzNSRecord
dlzRecordID: 1
dlzHostName: @
dlzType: ns
dlzData: ns1.test.lan.
dlzTTL: 86400

dn: dlzRecordID=2,dlzHostName=@,dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectclass: dlzSOARecord
dlzRecordID: 2
dlzHostName: @
dlzType: soa
dlzSerial: 2
dlzRefresh: 2800
dlzRetry: 7200
dlzExpire: 604800
dlzMinimum: 86400
dlzAdminEmail: root.test.org.
dlzPrimaryns: ns1.test.lan.
dlzTTL: 86400

dn: dlzZoneName=178.168.192.in-addr.arpa,ou=dns,dc=test,dc=lan
objectClass: dlzZone
dlzZoneName: 178.168.192.in-addr.arpa

Zonendaten ins LDAP Directory aufnehmen:

ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/dns_zone.ldif


DNS Server konfigurieren

vi /etc/bind/named.conf.local Evtl. existente Zoneneinträge, die ins LDAP transferiert werden, auskommentieren und evtl. basedn dc=test,dc=lan anpassen:

dlz "test.lan"
{database "ldap 2 v3 simple {} {} {IP_LDAP_SERVER}
ldap:///dlzZoneName=$zone$,ou=dns,dc=test,dc=lan???objectclass=dlzZone
ldap:///dlzHostName=$record$,dlzZoneName=$zone$,ou=dns,dc=test,dc=lan?dlzTTL,dlzType,dlzPreference,dlzData,dlzIPAddr?sub?(&(objectclass=dlzAbstractRecord)(!(dlzType=soa)))
ldap:///dlzHostName=@,dlzZoneName=$zone$,ou=dns,dc=test,dc=lan?dlzTTL,dlzType,dlzData,dlzPrimaryNS,dlzAdminEmail,dlzSerial,dlzRefresh,dlzRetry,dlzExpire,dlzMinimum?sub?(&(objectclass=dlzAbstractRecord)(dlzType=soa))
ldap:///dlzZoneName=$zone$,ou=dns,dc=test,dc=lan?dlzTTL,dlzType,dlzHostName,dlzPreference,dlzData,dlzIPAddr,dlzPrimaryNS,dlzAdminEmail,dlzSerial,dlzRefresh,dlzRetry,dlzExpire,dlzMinimum?sub?(&(objectclass=dlzAbstractRecord)(!(dlzType=soa)))";};

Bind neu starten

/etc/init.d/bind9 restart


DNS Hosteinträge

Je nach Anforderung können A-Einträge (Forward-Zone), PTR-Einträge (Reverse-Zone) und CNAME-Einträge (ALias) durch Generierung von ldif-Files nach folgendem Muster generiert werden: z.B.:

  • Hostname: mailserver
  • IP-Adresse: 192.168.178.200
  • Forward Zone: test.lan
  • Reverse Zone: 178.168.192.in-addr.arpa
  • LDAP Basedn: dc=test,dc=lan
  • A-Eintrag in Forward Zone:
dn: dlzHostName=mailserver,dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectclass: dlzHost
dlzHostName: mailserver

dn: dlzRecordID=1,dlzHostName=mailserver,dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectclass: dlzARecord
dlzRecordID: 1
dlzHostName: mailserver
dlzType: a
dlzIPAddr: 192.168.178.200
dlzTTL: 86400
  • PTR-Eintrag in Reverse Zone (Als Hostname dient in der Reverse Zone die letzte Stelle der IP-Adresse => 200 im Beispiel):
dn: dlzHostName=200,dlzZoneName=178.168.192.in-addr.arpa,ou=dns,dc=test,dc=lan
objectclass: dlzHost
dlzHostName: 200

dn: dlzRecordID=1,dlzHostName=200,dlzZoneName=178.168.192.in-addr.arpa,ou=dns,dc=test,dc=lan
objectclass: dlzPTRRecord
dlzRecordID: 1
dlzHostName: 200
dlzType: ptr
dlzData: mailserver.test.lan.
dlzTTL: 86400
  • CNAME-Eintrag (Alias imap für den host mailserver):
dn: dlzHostName=imap,dlzZoneName=schile.lan,ou=dns,dc=test,dc=lan
objectclass: dlzHost
dlzHostName: imap

dn: dlzRecordID=1,dlzHostName=imap,dlzZoneName=test.lan,ou=dns,dc=test,dc=lan
objectclass: dlzCNameRecord
dlzRecordID: 1
dlzHostName: imap
dlzType: cname
dlzData: mailserver
dlzTTL: 86400

Je nach Bedarf können auch mehrere Einträge in einem ldif-File zusammengefasst werden und ins LDAP Directory übernommen werden.


DHCP/DNS Host Script

TBD