Der ISC-DHCP-Server ist so etwas wie der De-facto-Standard der DHCP-Server. Mittlerweile ist er 17 Jahre alt und läuft außer auf Linux und FreeBSD auch auf Solaris, AIX und HP-UX. Jetzt hat das Internet Systems Consortium ISC unter dem Namen Kea eine moderne Alternative entwickelt, die vermutlich künftig den ISC-DHCP-Server ablösen wird.
Beide Programme können als Server für DHCPv4 und DHCPv6 eingesetzt werden. Aber während der alte ISC-DHCPD zur Konfigurationsänderung immer neu gestartet werden musste, lässt sich Kea ohne Neustart zur Laufzeit rekonfigurieren. Ein Neustart ist nur nötig, wenn sich die physischen Netzwerk-Interfaces ändern, auf denen Kea die DHCP-Requests verarbeitet. Das geht Hand in Hand mit der zustandslosen Natur des Kea-Servers, der selbst keine Laufzeitdaten speichert, sondern dies externalisiert. Die DHCP-Leases beispielsweise kann Kea in einer MySQL- oder PostgreSQL-Datenbank speichern. Dabei wurde Kea auch im Hinblick auf hohe Performance entwickelt. Nach Angaben der Entwickler kann Kea mit einem MySQL-Backend über 1000 Leases in der Sekunde verarbeiten. Ein Benchmark-Tool liegt der Kea-Distribution bei.
Über sogenannte Hooks können Entwickler in bestimmten Stufen der Request-Verarbeitung eigenen Code einklinken, um etwa IP-Adressen in einer Configuration Management Database (CMDB) zu verwalten. Bisher müssen Hooks noch in der Programmiersprache C++ geschrieben und als Shared Libraries bereitgestellt werden, aber das soll sich irgendwann ändern. Ein weiterer Pluspunkt ist die ausführliche Dokumentation für Administratoren und Entwickler.
Zur Installation laden Sie von https://www.isc.org/downloads/ das Quellcode-Paket herunter und entpacken es:
wget -O kea.tar.gz https://www.isc.org/downloads/file/kea-1-0/?version=tar-gz tar xfz kea.tar.gz
Nun müssen Sie noch einige Abhängigkeiten installieren, natürlich den C++-Compiler g++ und diverse C++-Bibliotheken, die Kea voraussetzt:
sudo apt-get -y install liblog4cplus-dev libboost-dev libbotan1.10-dev
Kea kann eine In-Memory-Datenbank mit CSV-Backend oder eine SQL-Datenbank verwenden, etwa MySQL oder PostgreSQL. Wir setzen in diesem Artikel MySQL ein:
sudo apt-get -y install mysql-server libmysqlclient-dev
Nun führen Sie das Configure-Skript aus und geben dabei an, dass Sie MySQL verwenden wollen. Anschließend kompilieren Sie den Kea-Server und installieren ihn im Dateisystem:
./configure --with-dhcp-mysql make sudo make install
Unter Umständen müssen Sie noch den Ort der shared Libraries (/usr/local/lib) in der Linker-Konfigurationsdatei /etc/ld.so.conf eintragen und den Linker-Cache aktualisieren.
sudo /sbin/ldconfig
Für DHCPv4 und DHCPv6 gibt es jeweils eigene Binaries, genauso wie für dynamische DNS-Updates, die Kea selbstverständlich auch beherrscht:
$ ls -A1 /usr/local/sbin/ kea-admin keactrl kea-dhcp4 kea-dhcp6 kea-dhcp-ddns kea-lfc perfdhcp
Um Kea in Betrieb zu nehmen, müssen Sie nun noch die Konfigurationsdatei anpassen und die Datenbank initialisieren. In der Config-Datei /usr/local/etc/kea/kea.conf geben Sie das Netzwerk-Interface an, hinter dem der DHCP-Server auf Anfragen wartet, dann die verfügbaren IP-Adressenpools und schließlich die Verbindungsdetails für die Datenbank.
"interfaces-config": { "interfaces": [ "eth0" ], "dhcp-socket-type": "raw" }, ... "lease-database": { "type": "mysql", "user": "kea", "password": "secret", "name": "kea" }, ... "subnet4": [ { "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ] } ]
Einige Beispiele für Konfigurationsdateien finden sich nach der Installation im Verzeichnis /usr/local/share/doc/kea/examples.
In MySQL legen Sie mit dem oben schon eingestellten Namen eine Datenbank an und vergeben dafür alle Rechte an den entsprechenden Benutzer:
mysql> CREATE DATABASE kea; Query OK, 1 row affected (0.02 sec)
mysql> GRANT ALL on kea.* to kea@localhost identified by 'secret'; Query OK, 0 rows affected (0.04 sec)
Die Initialisierung der Datenbank übernimmt ein von Kea bereigestelltes Skript, dem Sie neben dem Datenbanknamen den Benutzernamen und das Passwort übergeben:
kea-admin lease-init mysql -u kea -p secret -n kea
Um DHCPv6 zu deaktivieren und nur DHCPv4 zu verwenden, setzen Sie die folgenden Variablen in der Konfigurationsdatei /usr/local/etc/kea/keactrl.conf:
dhcp4=yes dhcp6=no
Sie starten Kea mit »keactrl start
«
und stoppen den Server mit »keactrl stop
«
. Die Konfiguration laden Sie mit »keactrl reload
«
neu.
Nach dem Starten können Sie sich durch einen Blick in die Datei /usr/local/var/kea/kea.log vergewissern, dass alles nach Plan läuft:
2016-03-22 12:57:49.067 INFO [kea-dhcp4.dhcp4/9575] DHCP4_STARTING Kea DHCPv4 server version 1.0.0 starting 2016-03-22 12:57:49.067 INFO [kea-dhcp4.dhcpsrv/9575] DHCPSRV_CFGMGR_ADD_IFACE listening on interface eth0 2016-03-22 12:57:49.067 INFO [kea-dhcp4.dhcpsrv/9575] DHCPSRV_CFGMGR_SOCKET_TYPE_DEFAULT "dhcp-socket-type" not specified , using default socket type raw 2016-03-22 12:57:49.068 INFO [kea-dhcp4.dhcp4/9575] DHCP4_CONFIG_NEW_SUBNET a new subnet has been added to configuration: 192.0.2.0/24 with params: valid-lifetime=4000 2016-03-22 12:57:49.068 INFO [kea-dhcp4.dhcpsrv/9575] DHCPSRV_MYSQL_DB opening MySQL lease database: name=kea password=***** type=mysql universe=4 user=kea 2016-03-22 12:57:49.071 INFO [kea-dhcp4.dhcp4/9575] DHCP4_CONFIG_COMPLETE DHCPv4 server has completed configuration: added IPv4 subnets: 1; DDNS: disabled
Die Log-Datei für den DHCPv4-Server ist /usr/local/var/log/kea-dhcp4.log. Mit »keactrl status
«
geben Sie den aktuellen Serverstatus inklusive der Konfigurationsdateien aus:
DHCPv4 server: active DHCPv6 server: inactive DHCP DDNS: inactive Kea configuration file: /usr/local/etc/kea/kea.conf keactrl configuration file: /usr/local/etc/kea/keactrl.conf
Um Hosts eine IP-Adresse fix zuzuweisen (Host reservation) fügen Sie einige Zeilen wie die folgenden in die Subnet-Konfiguration ein:
"subnet4": [ { "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], "reservations": [ { "hw-address": "52:54:00:01:5f:33", "ip-address": "192.0.2.201" } ] } ]
Es ist allerdings ausgesprochen mühsam, hier die nötigen eckigen und geschweiften Klammern des JSON-Formats richtig zu setzen. JSON ist eigentlich besser dafür geeignet, von Maschinen verarbeitet zu werden als durch Menschen. Hier sollten die Entwickler lieber ein grafisches Frontend oder ein Kommandozeilentool programmieren, mit dem sich die JSON-Konfiguration bearbeiten lässt. Auch ein Migrationstool für die Konfiguration des ISC-DHCPD zu Kea ist geplant, aber bisher noch nicht fertiggestellt.
Ausgedient hat der ISC-DHCPD nicht. So hinkt Kea noch in einigen Bereichen dem Vorgänger hinterher, etwa bei der Integration von LDAP-Directories. DHCPv4-Failover beherrscht Kea derzeit nicht, auch wenn sich HA-Setups mithilfe eines hochverfügbaren Datenbank-Backends realisieren lassen. Da Kea aber als die moderne Alternative zum ISC-DHCPD gilt, wird Kea in diesen Bereichen wohl bald aufholen. Auch die Installation per BOOTP zum Booten und zur Installation übers Netz beherrscht Kea nicht und das soll nach dem Willen der Entwickler auch so bleiben. In erster Linie ist Kea für dynamische Datacenter gedacht, die derzeit unter dem Schlagwort "Cloud" firmieren.
Ein Beispiel für die Leistungsfähigkeit von Kea gibt Facebook, das vom ISC-DHCPD auf Kea umgestellt hat, um der dynamischen Natur der eigenen Infrastruktur gerecht zu werden. Damit betreibt das soziale Netzwerk einen Cluster virtueller DHCP-Server, die ihre Daten aus einem gemeinsamen IP-Adressenpool beziehen und ansonsten zustandslos arbeiten. Damit werden Konfigurationsänderungen schon nach wenigen Minuten im ganzen Netz sichtbar statt wie mit dem Legacy erst innerhalb mehrerer Stunden. Auch Facebook betont, dass die Architektur von Kea und die gute Dokumentation bei der Umsetzung hilfreich war. So hat es von der Evaluation bis zur Produktion nur zwei Monate gedauert, bis das komplette Facebook-Netz auf Kea umgestellt war.