Mein ursprünglicher Ansatz war die manuelle Änderung des Konfigurationsfiles, allerdings wird das schnell ein Fass ohne Boden und es ist günstiger und weit weniger fehleranfällig den eigentlichen Bock zu suchen.
Letztlich beruht der ‘Fehler’ unter Ubuntu darauf, dass der IP V6-Daemon nicht konfiguriert, aber auch nicht deaktiviert ist. Ein einfaches Deaktivieren des IP V6-Daemons mittels
sudo systemctl disable isc-dhcp-server6
bebebt das Problem und das Verzeichnis /run/dhcp-server bleibt korrekt erhalten
(Vielen Dank an Wolfgang Scherer für den Hinweis!)
Hier nun trotzdem noch die Anleitung zum Editieren der Konfigurationsdatei:
Der DHCP-Daemon versucht beim Start sein PID-File in das Verzeichnis /run/dhcp-server zu legen. Bei Ubuntu wird genau dieses Verzeichnis beim Reboot oder bei Updates immer wieder gelöscht. Das Resultat ist, dass systemctl status isc-dhcp-server dann zwar bestätigt, dass der Dienst läuft, aber kein pid-File anlegen konnte. Auch Webmin zeigt dann nur noch den Button ‘Server starten’ und ein Anwenden von Änderungen ist nicht mehr möglich.
Man könnte die Konfiguration in /etc/default/isc-dhcp-server anpassen, jedoch führt das nicht zum Erfolg, da die Einstellung im Start-Skript hardcoded ist und die Konfiguration gar nicht gelesen wird. Die einfachste und sicherste Änderung ist, das pid-File in /run zu legen, da dieses Verzeichnis immer vorhanden ist und auch die Rechte schon passend gesetzt sind.
Das anzupassende Config-File ist /lib/systemd/system/isc-dhcp-server.service für IP-V4 und /lib/systemd/system/isc-dhcp-server6.service für IP-V6. Da hier nur IP V4 aktiv ist, stelle ich nur die Anpassungen für diesen Teil dar.
sudo -i
nano /lib/systemd/system/isc-dhcp-server.service
[Unit]
Description=ISC DHCP IPv4 server
Documentation=man:dhcpd(8)
Wants=network-online.target
After=network-online.target
After=time-sync.target
ConditionPathExists=/etc/default/isc-dhcp-server
ConditionPathExists=|/etc/ltsp/dhcpd.conf
ConditionPathExists=|/etc/dhcp/dhcpd.conf
[Service]
EnvironmentFile=/etc/default/isc-dhcp-server
RuntimeDirectory=dhcp-server
# The leases files need to be root:dhcpd even when dropping privileges
ExecStart=/bin/sh -ec '\
CONFIG_FILE=/etc/dhcp/dhcpd.conf; \
if [ -f /etc/ltsp/dhcpd.conf ]; then CONFIG_FILE=/etc/ltsp/dhcpd.conf; fi; \
[ -e /var/lib/dhcp/dhcpd.leases ] || touch /var/lib/dhcp/dhcpd.leases; \
chown root:dhcpd /var/lib/dhcp /var/lib/dhcp/dhcpd.leases; \
chmod 775 /var/lib/dhcp ; chmod 664 /var/lib/dhcp/dhcpd.leases; \
exec dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcpd.pid -cf $CONFIG_FILE $INTERFACES'
[Install]
WantedBy=multi-user.target
Mit sudo -i wechselt man in den root-Kontext und ruft dann mit nano die Konfigurationsdatei auf. Die grün hervorgehobene Zeile muss angepasst werden, da sie über den Parameter -pf den Pfad zum pid-File festlegt.
Es gibt zwar die Variable $DHCPD_PID, die die Einstellung aus /etc/default/isc-dhcp-server lesen würde, es funktioniert nur nicht ….
Wenn die Datei angepasst und gespeichert wurde, müssen noch folgende Befehle eingegeben werden:
systemctl daemon-reload systemctl restart isc-dhcp-server systemctl status isc-dhcp-server
systemctl status sollte jetzt zeigen, dass der DHCP-Server aktiv ist und auch den neuen Pfad zum pid-File bestätigen.
root@dhcp3:/lib/systemd/system# systemctl status isc-dhcp-server
● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-06 09:35:09 CET; 59min ago
Docs: man:dhcpd(8)
Main PID: 631 (dhcpd)
Tasks: 4 (limit: 4620)
Memory: 7.6M
CGroup: /system.slice/isc-dhcp-server.service
└─631 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcpd.pid -cf /etc/dhcp/dhcpd.conf
Der dargestellte Workaround funktioniert bisher sicher und ohne Fehler.
Es bleibt die Anpassung des Pfades zum PID-File in den Webmin-Einstellungen zum DHCP-Server.