diff --git a/Dockerfile b/Dockerfile index 5588891..21475b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,8 @@ FROM debian:13.2-slim ## https://github.com/isc-projects/dhcp/tags -ENV dhcpV="isc-dhcp-server=4.4.3-P1-8" +ENV dhcpV4="kea-dhcp4-server=2.6.3-1" +ENV dhcpV6="kea-dhcp6-server=2.6.3-1" LABEL org.opencontainers.image.authors="rardcode " LABEL Description="Dhcp server based on Debian." @@ -28,7 +29,7 @@ RUN set -xe && \ : "---------- SPECIFIC packages INSTALLATION ----------" \ && apt-get -q -y update \ && apt-get -q -y -o "DPkg::Options::=--force-confold" -o "DPkg::Options::=--force-confdef" install \ - $dhcpV \ + $dhcpV4 $dhcpV6 \ && apt-get -q -y autoremove \ && apt-get -q -y clean \ && rm -rf /var/lib/apt/lists/* @@ -36,6 +37,4 @@ RUN set -xe && \ ADD rootfs / ENTRYPOINT ["/entrypoint.sh"] -CMD ["/usr/sbin/dhcpd", "-4", "-f", "-d", "--no-pid", "-cf", "/data/dhcpd4.conf", "-lf", "/data/dhcpd4.leases", "-user", "dhcpd", "-group", "dhcpd"] - - +CMD ["kea-dhcp4", "-c", "/var/lib/kea/kea-dhcp4.conf"] diff --git a/README.md b/README.md index 249b684..e918b50 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# Dhcp +# Kea-Dhcp Dhcp server based on Debian. ## Quick reference * Where to file issues: -[Gitea](https://git.gmmg.it/kom23/dhcp/issues) +[Gitea](https://git.gmmg.it/kom23/kea-dhcp/issues) * Supported architectures: amd64 , armv7 , arm64v8 @@ -14,27 +14,27 @@ Dhcp server based on Debian. ``` docker run --rm -d \ --net host \ --v ./data:/data \ +-v ./data:/var/lib/kea \ -e DHCP4=1 -e DHCP6=0 -e TZ=Europe/Rome \ ---name dhcp rardcode/dhcp +--name dhcp rardcode/kea-dhcp ``` ### ...by docker-compose file: ``` services: - dhcp: - image: rardcode/dhcp - container_name: dhcp + kea-dhcp: + image: rardcode/kea-dhcp + container_name: kea-dhcp environment: - TZ=Europe/Rome #- DHCP4=0 # (decomment for disable DHCPv4 server, default enabled|1) #- DHCP6=1 # (enable DHCPv6 server, default disabled|0) volumes: - - ./data:/data + - ./data:/var/lib/kea network_mode: host restart: unless-stopped ``` ## Changelog -v132.443p18 - 02.01.2026 +v132.2361 - 13.01.2026 - Debian v13.2 -- isc-dhcp-server v4.4.3-P1-8 +- kea-dhcp-server v2.6.3-1 diff --git a/compose.yml b/compose.yml index 0bb057f..b2a0772 100644 --- a/compose.yml +++ b/compose.yml @@ -1,15 +1,15 @@ -# https://hub.docker.com/repository/docker/rardcode/dhcp/tags +# https://hub.docker.com/repository/docker/rardcode/kea-dhcp/tags services: - dhcp: - image: rardcode/dhcp - container_name: dhcp + kea-dhcp: + image: rardcode/kea-dhcp + container_name: kea-dhcp environment: - TZ=Europe/Rome #- DHCP4=0 # (decomment for disable DHCPv4 server, default enabled|1) #- DHCP6=1 # (enable DHCPv6 server, default disabled|0) volumes: - - ./data:/data + - ./data:/var/lib/kea network_mode: host restart: unless-stopped diff --git a/rootfs/entrypoint.sh b/rootfs/entrypoint.sh index 9a6cbc0..87aec6f 100755 --- a/rootfs/entrypoint.sh +++ b/rootfs/entrypoint.sh @@ -30,19 +30,12 @@ done } function _main { - [ -e "/data/dhcpd4.conf" ] || cp "/template/dhcpd4.conf" "/data/" - [ -e "/data/dhcpd6.conf" ] || cp "/template/dhcpd6.conf" "/data/" - [ -e "/data/dhcpd4.leases" ] || touch "/data/dhcpd4.leases" - [ -e "/data/dhcpd6.leases" ] || touch "/data/dhcpd6.leases" - useradd dhcpd - uid=$(id -u dhcpd) - gid=$(id -g dhcpd) - chown -R dhcpd: "/data/dhcpd4.leases" "/data/dhcpd6.leases" + [ ! -e /var/run/kea ] && mkdir -p /var/run/kea + [ -e "/var/lib/kea/kea-dhcp4.conf" ] || cp "/template/kea-dhcp4.conf" "/var/lib/kea/" + [ -e "/var/lib/kea/kea-dhcp6.conf" ] || cp "/template/kea-dhcp6.conf" "/var/lib/kea/" + export CMDv6="kea-dhcp6 -c /var/lib/kea/kea-dhcp6.conf" - #export CMDv4="/usr/sbin/dhcpd -4 -f -d --no-pid -cf /data/dhcpd4.conf -lf /data/dhcpd4.leases -user dhcpd -group dhcpd" - export CMDv6="/usr/sbin/dhcpd -6 -f -d --no-pid -cf /data/dhcpd6.conf -lf /data/dhcpd6.leases -user dhcpd -group dhcpd" - -chown -R dhcpd: "/data" +chown -R _kea: "/var/lib/kea" } custom_bashrc() { diff --git a/rootfs/template/dhcpd4.conf b/rootfs/template/dhcpd4.conf deleted file mode 100644 index d4f1043..0000000 --- a/rootfs/template/dhcpd4.conf +++ /dev/null @@ -1,44 +0,0 @@ - -# 3600 = 1 hour -# 86400 = 1 day -# 604800 = 1 week -# 2419200 = 1 month - -default-lease-time 604800; -max-lease-time 2419200; -log-facility local7; - -## assign 10.10.10.x/24 address (ex 10.10.10.1) to the interface from which you want to propagate the dhcp. -subnet 10.10.10.0 netmask 255.255.255.0 { - - ## dhcp inclusion range - range 10.10.10.50 10.10.10.200; - - ddns-domainname "domain.com"; - option domain-name "domain.com"; - option subnet-mask 255.255.255.0; - option broadcast-address 10.10.10.255; - option routers 10.10.10.145; - option domain-name-servers 10.10.10.131, 10.10.10.132; - option ntp-servers ntp; - option smtp-server mail; - # option time-offset -10000; - # option netbios-name-servers 192.168.111.5; - # default-lease-time 604800; - # max-lease-time 2419200; - # deny unknown-clients; - deny bootp; - deny duplicates; - deny declines; - - ## reservation - #host dsk01 {hardware ethernet bc:24:11:cf:a4:86; fixed-address 10.10.10.129;} - #host dsk02 {hardware ethernet dc:a6:32:d5:f3:f4; fixed-address 10.10.10.133;} - - ## deny from dhcp - class "ignored" {match substring (hardware, 1, 6); ignore booting;} - # subclass "ignored" 18:45:91:c3:d9:00; - # subclass "ignored" 18:45:91:c3:d9:00; - -} - diff --git a/rootfs/template/dhcpd6.conf b/rootfs/template/dhcpd6.conf deleted file mode 100644 index 800fe89..0000000 --- a/rootfs/template/dhcpd6.conf +++ /dev/null @@ -1,44 +0,0 @@ - -# 3600 = 1 hour -# 86400 = 1 day -# 604800 = 1 week -# 2419200 = 1 month - -default-lease-time 2592000; -preferred-lifetime 604800; -option dhcp-renewal-time 3600; - -option dhcp-rebinding-time 7200; -allow leasequery; - -option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e; -option dhcp6.domain-search "test.example.com","example.com"; - -option dhcp6.info-refresh-time 21600; - -# Static definition (must be global) -#host myclient { -# dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2; -# -# fixed-address6 3ffe:501:ffff:100::1234; -# fixed-prefix6 3ffe:501:ffff:101::/64; -# -# # Override of the global definitions, -# option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e; -#} - - -#host otherclient { -# hardware ethernet 01:00:80:a2:55:67; -# fixed-address6 3ffe:501:ffff:100::4321; -#} - -#subnet6 3ffe:501:ffff:100::/64 { -# range6 3ffe:501:ffff:100::10 3ffe:501:ffff:100::11; -#} - -#subnet6 3ffe:501:ffff:102::/64 { -# range6 3ffe:501:ffff:102::10 3ffe:501:ffff:102::11; -#} - - diff --git a/rootfs/template/kea-dhcp4.conf b/rootfs/template/kea-dhcp4.conf new file mode 100644 index 0000000..d96589d --- /dev/null +++ b/rootfs/template/kea-dhcp4.conf @@ -0,0 +1,66 @@ +{ + "Dhcp4": { + "interfaces-config": { + "interfaces": [ "eth0" ] + }, + + "lease-database": { + "type": "memfile", + "persist": true, + "name": "/var/lib/kea/leases4.csv" + }, + + "valid-lifetime": 604800, + "renew-timer": 302400, + "rebind-timer": 453600, + "max-valid-lifetime": 2419200, + + "subnet4": [ + { + "id": 1, + "subnet": "10.10.10.0/24", + "pools": [ + { "pool": "10.10.10.50 - 10.10.10.200" } + ], + "option-data": [ + { "name": "subnet-mask", "data": "255.255.255.0" }, + { "name": "routers", "data": "10.10.10.254" }, + { "name": "broadcast-address", "data": "10.10.10.255" }, + { "name": "domain-name-servers", "data": "10.10.10.131, 10.10.10.132" }, + { "name": "domain-name", "data": "domain.com" }, + { "name": "ntp-servers", "data": "10.10.10.254" }, + { "name": "smtp-server", "data": "10.10.10.254" } + ], + "reservations": [ + // { + // "hw-address": "bc:24:11:cf:a4:86", + // "ip-address": "10.10.10.129", + // "hostname": "dsk01" + // }, + // { + // "hw-address": "dc:a6:32:d5:f3:f4", + // "ip-address": "10.10.10.133", + // "hostname": "dsk02" + // } + ] + } + ], + + //"deny-clients": { + // "bootp": true + //}, + + "loggers": [ + { + "name": "kea-dhcp4", + "output_options": [ + { + "output": "stdout", + "pattern": "%d{%Y-%m-%d %H:%M:%S} %m" + } + ], + "severity": "INFO" + } + ] + } +} diff --git a/rootfs/template/kea-dhcp6.conf b/rootfs/template/kea-dhcp6.conf new file mode 100644 index 0000000..15a0c0a --- /dev/null +++ b/rootfs/template/kea-dhcp6.conf @@ -0,0 +1,76 @@ +{ + "Dhcp6": { + "interfaces-config": { + "interfaces": [ "eth0" ] + }, + + "lease-database": { + "type": "memfile", + "persist": true, + "name": "/var/lib/kea/leases6.csv" + }, + + "valid-lifetime": 2592000, + "preferred-lifetime": 604800, + "renew-timer": 3600, + "rebind-timer": 7200, + + "subnet6": [ + // { + // "id": 1, + // "subnet": "3ffe:501:ffff:100::/64", + // "pools": [ + // { "pool": "3ffe:501:ffff:100::10 - 3ffe:501:ffff:100::11" } + // ] + // }, + // { + // "subnet": "3ffe:501:ffff:102::/64", + // "pools": [ + // { "pool": "3ffe:501:ffff:102::10 - 3ffe:501:ffff:102::11" } + // ] + // } + ], + + "option-data": [ + { + "name": "dns-servers", + "data": "3ffe:501:ffff:100:200:ff:fe00:3f3e" + }, + { + "name": "domain-search", + "data": "test.example.com,example.com" + } + ], + + "reservations": [ + // { + // "dhcp6-client-id": "00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2", + // "ip-addresses": ["3ffe:501:ffff:100::1234"], + // "prefixes": ["3ffe:501:ffff:101::/64"], + // "option-data": [ + // { + // "name": "dns-servers", + // "data": "3ffe:501:ffff:100:200:ff:fe00:4f4e" + // } + // ] + // }, + // { + // "dhcp6-client-id": "hardware-addr-01:00:80:a2:55:67", + // "ip-addresses": ["3ffe:501:ffff:100::4321"] + // } + ], + + "loggers": [ + { + "name": "kea-dhcp6", + "output_options": [ + { + "output": "stdout", + "pattern": "%d{%Y-%m-%d %H:%M:%S} %m" + } + ], + "severity": "INFO" + } + ] + } +}