Debian DHCP-DNS-LDAP

Aus Wiki
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 basierende 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 (Kein SSL):

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

Um SSL-Verbindung zu nutzen:

ldap-port 636;
ldap-ssl on;


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 basierende 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 fakeroot
apt-get install libkrb5-dev debhelper libssl-dev libtool bison libdb-dev libldap2-dev libxml2-dev libcap-dev libpcap-dev hardening-wrapper libgeoip-dev dpkg-dev 

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-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)))";};
Bulbgraph.png Hinweis:

Die Zeilen, die mit ldap beginnen, wurden der Übersichtlichkeit in mehrere Zeilen aufgeteilt. Die ldap-Einträge müssen aber in einer kompletten Zeile untergebracht werden, ohne dass Leerzeichen dazwischen sind. Jeder komplette ldap-Eintrag kann ohne weiteres in einer neuen Zeile beginnen. D.h. obige Definition sollte aus max. 6 Zeilen bestehen. Ansonsten wird Bind9 nicht starten.


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.


Script um LDAP-DHCP/DNS Host Einträge zu generieren

Das manuelle hinzufügen der Einträge in's LDAP Directory mittels ldif-Files ist nicht nur mühsam, sondern auch fehleranfällig. Die DHCP-Einträge können zwar sehr komfortabel mittels LDAP-Account-Manager verwaltet werden, aber er enthält keine Templates, um die DNS-Einträge zu verwalten. Stattdessen müssen die DNS-Einträge mittels Tree-View bearbeitet werden. Aus diesen Gründen wurde ein Script erstellt, das diese Aufgabe automatisiert. Das Script ermittelt automatisch die LDAP-BaseDN mit Hilfe von /etc/ldap/ldap.conf, validiert IP-Adressen und MAC-Adressen bzgl. korrekter Formatierung und generiert ein ldif File, das ins LDAP eingebunden werden kann.

Scritp herunerladen:

cd /usr/local/src
wget ftp://download:download@schiele.homelinux.org/debian/dhcp-dns_host2ldif.sh

Script ausführbar machen:

chmod +x dhcp-dns_host2ldif.sh

Benutzung:

  • Hilfe
dhcp-dns_host2ldif.sh -h für Hilfe:
Ausgabe sieht folgendermaßen aus:
usage: /usr/local/bin/dhcp-dns_host2ldif.sh [OPTION]

OPTION optional parameter:

  -h, --help             Prints this help
  -m, --mac [MAC]        MAC Adress
  -i, --ip [IP]          IP-Adress
  -z, --zone[ZONE]       Zone Name
  -H, --host [HOST]      Host Name
  -a, --alias [ALIAS]    Alias for Host
  -d, --dhcp             Add DHCP Entry
  -f, --forward          Add Forward DNS Entry
  -r, --reverse          Add Reverse DNS Entry
  -t, --ttl              DNS TTL (Default=86400)
EXAMPLE:
  /usr/local/bin/dhcp-dns_host2ldif.sh -i 192.168.178.200 -m 00:23:54:c1:e7:76 -z test.lan -H mailserver -d -f -r
  • angenommene Daten:
    • Host: mailserver
    • Alias: imap
    • MAC-Adresse: 00:23:54:c1:e7:76
    • IP-Adresse: 192.168.178.200
    • Zone: test.lan
  • DHCP-Host:
dhcp-dns_host2ldif.sh -m 00:23:54:c1:e7:76 -i 192.168.178.200 -H mailserver -d
  • DNS-Forward Eintrag:
dhcp-dns_host2ldif.sh -i 192.168.0.200 -H mailserver -z test.lan -f
  • DNS-Reverse Eintrag:
dhcp-dns_host2ldif.sh -i 192.168.0.200 -H mailserver -z test.lan -r
  • DNS Alias:
dhcp-dns_host2ldif.sh -a imap -H mailserver -D test.lan
  • DHCP, Forward und Reverse Eintrag kombiniert:
dhcp-dns_host2ldif.sh -m 00:23:54:c1:e7:76 -i 192.168.178.200 -H mailserver -z test.lan -d -f -r