{{tag>linux docker kea dhcp}}
======Docker - DHCP Server======
Since mid 2023 I have been running a Docker ISC Kea Image using base Docker Alpine Linux images, with S6 init system. (ISC Kea is a modern replacement for their DHCP.) The main DHCP server runs on my main server and I have an automatic fall over back up on my separate Linux router. I basically followed the Kea template [[https://kea.readthedocs.io/en/latest/arm/config-templates.html#template-home-network-of-a-power-user|Home Network of a Power User]]. I was never quite sure I had the automatic fall over back-up working. On 2023-01-02 I modified a configuration file on the primary server with a syntax error, 8 days later I notice millions of lines of errors on my log files. Sure enough the backup had simply been working. I fixed up the simple syntax error and the primary server took back over. Everything basically worked as expected.
ISC also has a project for a simple GUI interface primarily for Kea and basic for Bind9. There is apparently no Alpine package yet for Stork.
ISC-Kea seems to be provided in a number of packages
^Package^Descriptiion^Comment^
|isc-kea-admin|This package provides backend database initialization and migration scripts and a DHCP benchmark tool. If you are not using a database backend, you may not need this.|Not using a database backend at this time|
|isc-kea-common|Common libraries for the ISC Kea DHCP server. Install this.|Need this.|
|isc-kea-ctrl-agent|This package provides the REST API service agent for Kea DHCP.|?|
|isc-kea-dev|Development headers for ISC Kea DHCP server. Install if you plan to create any custom Kea hooks.|Probably do not need.|
|isc-kea-dhcp4-server|DHCPv4 server.|Need this.|
|isc-kea-dhcp6-server|DHCPv6 server.|Do not need at this time.|
|isc-kea-dhcp-ddns-server|DDNS server.|Need this.|
|isc-kea-doc|Kea documentation. Highly recommended.|On a Docker container?|
|isc-kea-hook-flex-option|Flexible Options hook.|What is this?|
|isc-kea-hook-ha|High Availability hook.|What is this?|
|isc-kea-hook-lease-cmds|Lease Commands hook.|What is this?|
|isc-kea-hook-mysql-cb|MySQL Configuration Backend.|Dont need this at this time.|
|isc-kea-hook-pgsql-cb|PostgreSQL Configuration Backend.|Dont need this.|
|isc-kea-hook-stat-cmds|Statistics Commands hook.|?|
|isc-kea-http|This package is essential, install it.|It is essential...|
|isc-kea-perfdhcp|Optional. Includes a DHCP performance testing tool from ISC.|?|
|isc-kea-shell|Text client for Kea DHCP Control Agent.|?|
====Network Ports====
From IANA Service Name and Transport Protocol Port online [[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml|Number Registry]]:
bootps 67 {tcp, udp} Bootstrap Protocol Server (DHCP)
bootpc 68 {tcp, udp} Bootstrap Protocol Client (DHCP)
The Kea Control Agent uses port 8000 by default, but that value can be manually defined in its configuration file. (Usually located at /etc/kea/kea-ctrl-agent.conf.) This port needs to be open and accessible on every server that hosts a Kea DHCP service and a Kea Control Agent.
====Docker Network Type====
This is a good case where the Docker network type needs to be set to host. The DHCP server needs to be directly on the host to function.
====DHCP testing====
''%%sudo nmap --script broadcast-dhcp-discover%%'' will test for DHCP servers on the same network. It will only report the first DHCP server discovered.
===Reference===
*[[https://serverfault.com/questions/171744/command-line-program-to-test-dhcp-service|Command line program to test DHCP service]]
*[[https://nmap.org/book/toc.html|The Official Nmap Project Guide to Network Discovery and Security Scanning]]
*[[https://www.redhat.com/sysadmin/nmap-scripting-engine|5 scripts for getting started with the Nmap Scripting Engine]]
====main dhcp4====
*''kea-dhcp4 -t /app/dhcpv4.conf'' to test the kea-dhcp4 configuration files ''/app/dhcpv4.conf''
*''kea-dhcp4 -c /app/dhcpv4.conf'' to start kea dhcp4 using configuration file ''/app/dhcpv4.conf''
++++Use of symlink, TL;DR;|
Using symlinks in is confusing when using Docker mounted directories.
To control which dhcp4 config file to run (basic or plus):
*''ln -s .config/dhcp_basic.conf .config/dhcp.conf'' to run basic
*''ln -s .config/dhcp_plus.conf .config/dhcp.conf'' to run plus
*The ''-f'' flag can be used to overwrite an existing link file instead of deleting first.
The plus configuration allows a secondary backup dhcp server to be operated.++++
*''kea-dhcp4 -c /app/dhcpv4_plus.conf'' to start kea dhcp4 using configuration file ''/app/dhcpv4_plus.conf''. This configuration file is designed to work with the kea control agent setup. Where as the basic configuration ''/app/dhcpv4_basic.conf'' is not.
====ctrl-agent -t /app/kea-ctrl-agent.conf====
*''kea-ctrl-agent -t /app/kea-ctrl-agent.conf'' to test the kea-cont-agent configuration file ''/app/kea-ctrl-agent.conf''
*''kea-ctrl-agent -c /app/kea-ctrl-agent.conf'' to start the kea-cont-agent configuration file ''/app/kea-ctrl-agent.conf''
*[[https://kea.readthedocs.io/en/latest/arm/agent.html|The Kea Control Agent]]
====Kea logging====
*[[https://kb.isc.org/docs/kea-logging-configuration|Kea Logging Configuration]]
I have stored log files in the .config directory that is a Docker mounted volume for persistence and easy external viewing outside container. The following logs files can be seen.
* ''.config/log/kea-dhcp4-commands.log''
* ''.config/log/kea-dhcp4-dhcpsrv.log''
* ''.config/log/kea-dhcp4-leases.log''
* ''.config/log/kea-dhcp4.log''
* ''.config/log/kea-dhcp4-ha-hooks.log''
====Kea Miscellaneous====
*''docker attach kptr-kea-1'' to attach to running container
*''kea-dhcp4 -v'' To check running version
=====References=====
*KPTree.net's bare metal implementation of [[linux_router:dns_dhcp|dns - dhcp]], based upon ISC Bind9 and DHCP on Debian 10 (was originally Ubuntu).
*ISC documentation
*[[https://kea.readthedocs.io/en/latest/arm/config-templates.html#template-home-network-of-a-power-user|Template: Home Network of a Power User]]
*[[https://kb.isc.org/docs/isc-kea-packages|Using Official ISC Packages for Kea]]
*[[https://kb.isc.org/docs/kea-configuration-sections-explained|Kea Configuration Introduction]]
*[[https://kb.isc.org/docs/kea-configuration-for-small-office-or-home-use|Kea Configuration for Small Office or Home Use]]
*[[https://web-wilke.de/install-and-run-kea-dhcp-with-stork-on-debian-11/|Install and run KEA DHCP with Stork on Debian 11]]
*[[https://github.com/JonasAlfredsson/docker-kea| JonasAlfredsson / docker-kea ]]
<- docker_notes:docker-dns|Back ^ docker_notes:index|Start page ^ docker_notes:diun-ntfy|Next ->