KEA-ARM(1) Kea KEA-ARM(1) (NAME) kea-arm - Kea [] Kea (DHCP) Internet Systems Consortium (ISC) . Kea 3.2.0 . ( PDF HTML ) Read the Docs . Kea . (INTRODUCTION) Kea DHCP Internet Systems Consortium (ISC) . DHCPv4 DHCPv6 (prefix delegation) DNS . 3.2.0 Kea . (Supported Platforms) . (Supported Platforms) Kea POSIX ++C ( C++14) Botan log4cplus Boost . ISC Kea . ISC " (best-effort)" . (Regularly Tested Platforms) Kea Alpine Debian Fedora FreeBSD RHEL Ubuntu . Kea-3.2.0 : o Alpine -- 3.21, 3.22, 3.23, 3.24 o Debian -- 11, 12, 13 o Fedora -- 44 o FreeBSD -- 15 o RHEL -- 8, 9, 10 o Ubuntu -- 22.04, 24.04, 26.04 Kea Windows . (Best-Effort) Kea . ISC . o macOS -- 14, 15, 26 (Community-Maintained) . Kea . (patch) . . (EOL) : o Alpine -- 3.20 (EOL 1 Apr 2026) o Debian -- 10 (EOL 30 Jun 2024) o Fedora -- 43 (EOL 9 Dec 2026) o FreeBSD -- 14 (EOL 31 Dec 2026) o RHEL -- 7 (EOL 30 Jun 2024) o Ubuntu -- 20.04 (EOL 31 May 2025) o macOS -- 13 (EOL 15 Sep 2025) Kea 1.7 : o Windows ( ) o Windows Server ( ) o OpenSSL 1.0.1 Botan o log4cplus 1.0.2 . o C++14 . (Required Software at Runtime) Kea . . ( <#build-requirements> .) o Kea : Botan OpenSSL. . Kea Botan C++ () 2.0 Botan 2.0 Kea 1.7.0 . Botan Kea OpenSSL () 1.0.2 . o Kea log4cplus C++ () . log4cplus 1.0.3 . o Kea Boost () . header-only Boost . Kea . o (lease) MySQL Kea MySQL . Kea MySQL . o PostgreSQL Kea PostgreSQL . Kea PostgreSQL . o Kea NETCONF kea-netconf . Kea Sysrepo . Kea NETCONF NETCONF <# netconf-install> . Kea NETCONF . o DNS Kea DDNS GSS-TSIG MIT Kerberos 5 Heimdal . GSS-TSIG <#gss-tsig-install> . Kea GSS-TSIG . Kea (Kea Software) Kea DHCP . . Kea : o keactrl <#std-iscman-keactrl> -- Kea . o kea-dhcp4 <#std-iscman-kea-dhcp4> -- DHCPv4. DHCPv4 . o kea-dhcp6 <#std-iscman-kea-dhcp6> -- DHCPv6. DHCPv6 . o kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> -- Dynamic DNS DHCP. DHCP DNS DHCP DNS DNS . o kea-admin <#std-iscman-kea-admin> -- ( ). o kea-lfc <#std-iscman-kea-lfc> -- memfile . DHCP Kea . o kea-netconf <#std-iscman-kea-netconf> - kea-netconf YANG/NETCONF Kea . o kea-shell <#std-iscman-kea-shell> -- REST Kea . o perfdhcp <#std-iscman-perfdhcp> -- (benchmarking) DHCP DHCPv4 DHCPv6 . . (man pages) . Kea C++ DHCP . . (QUICK START) Kea . << Kea>> (ARM) . tarball (Quick Start Guide Using tarball) 1. . <#build-requirements> . 2. tarball Kea isc.org ISC Cloudsmith ISC . 3. tarball . : $ tar -Jxvf kea-3.2.0.tar.xz 4. : $ cd kea-3.2.0 $ meson setup build [your extra parameters] 5. : $ meson compile -C build 6. ( /usr/local/ (root) ): $ meson install -C build ISC Alpine deb RPM Kea . Kea . 1. Kea cloudsmith.io : . 2. Cloudsmith kea-3-2 Kea 3.2.0. : kea-2-6 kea-3-0 . kea-dev . 3. "Set Me Up" : Alpine Debian RedHat. 4. . : Debian Kea 3.0 : . 5. Kea . Cloudsmith Packages apk/apt/dnf . +--------------+---------------------------+ |Debian/Ubuntu | 0.0 3.5 $ apt search | | | isc-kea 168u 168u | | | : 0.0 3.5 | | | | | | isc-kea-dhcp4-server | | | isc-kea-dhcp6-server | | | | | | | | | | | | (transitional) | | | . | | | | | | | | | isc-kea-dhcp4 | | | isc-kea-dhcp6 | | | . | | | 168u 168u | +--------------+---------------------------+ |Fedora/RedHat | 0.0 3.5 $ dnf search | | | 'isc-kea*' 168u 168u | +--------------+---------------------------+ |Alpine | 0.0 3.5 $ apk search | | | isc-kea 168u 168u | +--------------+---------------------------+ 6. - (metapackage) (hooks) : +--------------+----------------------------+ |Debian/Ubuntu | 0.0 3.5 $ sudo apt | | | install isc-kea 168u | | | 168u | +--------------+----------------------------+ |Fedora/RedHat | 0.0 3.5 $ sudo dnf | | | install isc-kea 168u | | | 168u | +--------------+----------------------------+ |Alpine | 0.0 3.5 # apk add isc-kea | | | 168u 168u | +--------------+----------------------------+ : +--------------+----------------------------+ |Debian/Ubuntu | 0.0 3.5 $ sudo apt | | | install isc-kea-dhcp6 | | | 168u 168u | +--------------+----------------------------+ |Fedora/RedHat | 0.0 3.5 $ sudo dnf | | | install isc-kea-dhcp6 | | | 168u 168u | +--------------+----------------------------+ |Alpine | 0.0 3.5 $ apk add | | | isc-kea-dhcp6 168u 168u | +--------------+----------------------------+ Kea (debug symbols) ( ): +--------------+-----------------------------+ |Debian/Ubuntu | 0.0 3.5 $ sudo apt install | | | 'isc-kea*' 168u 168u | +--------------+-----------------------------+ |Fedora/RedHat | 0.0 3.5 $ sudo dnf install | | | 'isc-kea*' 168u 168u | +--------------+-----------------------------+ |Alpine | | | | | | | | | | | | | | | | (*) Alpine | | | | | | | | | | | | | | | | | | | | | : 0.0 3.5 # apk | | | search isc-kea | sed | | | 's/-[0-9].*//g' | xargs apk | | | add 168u 168u | +--------------+-----------------------------+ : +--------------+------------------------------------+ |Debian/Ubuntu | 0.0 3.5 $ sudo apt install | | | 'isc-kea*=2.4.0-isc20230921141113' | | | 168u 168u | +--------------+------------------------------------+ |Fedora/RedHat | 0.0 3.5 $ sudo dnf install | | | 'isc-kea*2.4.0-isc20230921141113*' | | | 168u 168u | +--------------+------------------------------------+ |Alpine | | | | | | | | | | (*) | | | Alpine | | | | | | | | | | | | | | | | | | : 0.0 3.5 # apk search | | | isc-kea | sed 's/-[0-9].*//g' | | | | grep r20230921141113 | xargs apk | | | add 168u 168u | +--------------+------------------------------------+ . : # kea-dhcp6 -c /etc/kea/kea-dhcp6.conf systemd: # systemctl restart kea-dhcp6 OpenRC Alpine: # service kea-dhcp6 restart : keactrl <#std-iscman-keactrl> systemctl . 9. Debian/Ubuntu . Fedora/RHEL Alpine . systemd Fedora/RedHat: # systemctl enable kea-dhcp6 OpenRC Alpine: # rc-update add kea-dhcp6 Docker 1. ISC cloudsmith.io . 2. ipvlan Kea . $ docker network create --driver ipvlan --ipv6 --subnet 2001:db8::/64 --opt parent=eth0 ipvlan0 3. pull . $ docker pull docker.cloudsmith.io/isc/docker/kea-dhcp6 4. . (mount) . $ docker create \ --name kea-dhcp6 \ --network ipvlan0 \ --volume /local/kea/config:/etc/kea \ --volume /local/kea/data:/var/lib/kea \ docker.cloudsmith.io/isc/docker/kea-dhcp6 5. . $ docker start kea-dhcp6 6. : $ docker stop kea-dhcp6 : kea-docker . 1. Kea "[kea-install-dir]/etc/kea/" . : kea-dhcp4.conf kea-dhcp6.conf kea-dhcp-ddns.conf keactrl.conf DHCPv4 DHCPv6 D2 keactrl . 2. DHCPv4 ( root) : # keactrl start -s dhcp4 DHCPv6 : # keactrl start -s dhcp6 : # keactrl start 3. () Kea : # keactrl status "inactive" . ( "[kea-install-dir]/var/log/kea/kea-dhcp4.log" "[kea-install-dir]/var/log/kea/kea-dhcp6.log" "[kea-install-dir]/var/log/kea/kea-ddns.log" ) . 4. DHCP ISC DHCP . 5. (): # keactrl stop Kea ISC . keactrl <#std- iscman-keactrl> Managing Kea with keactrl <#keactrl> . Kea . Monitoring Kea With Stork <#stork> . Kea Kea keactrl <#std-iscman-keactrl> systemctl . DHCPv4 : # kea-dhcp4 -c /path/to/your/kea4/config/file.json DHCPv6 : # kea-dhcp6 -c /path/to/your/kea6/config/file.json (INSTALLATION) ISC RPM deb APK tarball . Cloudsmith ISC . ( dpkg rpm) . Kea . Kea "Set Me Up" . . ISC : (stable) (development). ( kea-2-6 kea-3-0) . . kea-dev ISC . kea-dev ..SS Cloudsmith ISC Kea Alpine Debian Fedora RHEL Ubuntu . Kea isc-kea Cloudsmith . Kea . Kea : o isc-kea-dhcp4 -- Kea DHCPv4 o isc-kea-dhcp6 -- Kea DHCPv6 o isc-kea-dhcp-ddns -- Kea DHCP DDNS o isc-kea-admin -- Kea o isc-kea-hooks -- Kea DHCP Kea isc-kea-hooks . ISC isc-kea-subscriber- . ISC . . : kea-dhcp4 <# std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns>. : Debian Ubuntu . systemd . systemctl enable : isc-kea-dhcp4-server isc-kea-dhcp6-server isc-kea-dhcp-ddns-server. Kea Kea 2.3.2 Debian Ubuntu apt upgrade apt dist-upgrade . apt upgrade Debian Ubuntu . 2.3.2 Kea 2.3.2 . . . : o isc-kea-dhcp4 o isc-kea-dhcp6 o isc-kea-dhcp-ddns o isc-kea-hooks Kea apt install isc-kea Kea . RPM Alpine . ISC . kea-users . Kea . ( .) o etc/kea/ -- . o include/ -- C++. o lib/ -- . o lib/kea/hooks -- . o sbin/ -- . o share/doc/kea/ -- . o share/kea/ -- API (schema). o share/man/ -- ( ). o var/lib/kea/ -- (DHCPv6) (lease). o var/log/kea/ - (log). o var/run/kea - PID . ( <#required-software>) Kea . : . Kea . : o meson ninja pkg-config. o C++ Boost () ( 1.66). 1.69 Boost system . o OpenSSL ( 1.0.2) Botan ( 3.4.0). 1.1.1 OpenSSL . o log4cplus ( 1.0.3). o C++ ( C++14) . o MySQL -D mysql=enabled MySQL Kea. MySQL . (unit tests) MySQL . o PostgreSQL -D postgresql=enabled PostgreSQL Kea. PostgreSQL . PostgreSQL . o Sysrepo 1.4.140 libyang 1.0.240 Sysrepo . . -D netconf=enabled . PKG_CONFIG_PATH . o MIT Kerberos 5 Heimdal Kea DDNS DNS GSS-TSIG . -D krb5=enabled . PKG_CONFIG_PATH .pc PATH krb5-config . o googletest ( 1.8 ) -D tests=enabled . o Sphinx texlive Doxygen . Fedora python3-sphinx python3-sphinx_rtd_theme texlive texlive-collection-latexextra . Ubuntu python3-sphinx python3-sphinx-rtd-theme texlive texlive-latex-extra . LaTeX Kea PDF HTML . ISC ..SS Kea ++C . tar ISC . Kea . Kea . Tar (tarball) Kea : . Tar tar GPG . tar .asc . FTP CloudSmith . ISC . ISC ISC ( Current Set of ISC Code-Signing Keys ) . gpg GnuPG . (isc-keyblock.asc) (import) : $ gpg --import isc-keyblock.asc $ gpg --verify kea-X.Y.Z.tar.xz.asc kea-X.Y.Z.tar.xz tar ISC . Git GitLab (: ). Kea <> . "bleeding edge" . . : git : automake ( 1.11 ) libtoolize autoconf ( 2.69 ). . https://gitlab.isc.org/isc-projects/kea.git (clone) : $ git clone https://gitlab.isc.org/isc-projects/kea.git git . meson setup build . Kea ISC . Kea (Contributor's Guide) . Kea (Kea Developer's Guide) ISC . Kea Meson . ninja : $ meson setup build meson configure . : o --prefix ( /usr/local ). o -D mysql=enabled Kea (leases) (host reservations) MySQL . o -D postgresql=enabled Kea PostgreSQL . o -D krb5=enabled Kea Kerberos5 GSS-API libddns_gss_tsig.so <#std-ischooklib-libddns_gss_tsig .so> . o -D netconf=enabled Kea libyang sysrepo kea-netconf <#std-iscman-kea-netconf> . o -D crypto=botan Botan OpenSSL. Meson pkg-config 'botan-3' 'botan' . o --D crypto=openssl OpenSSL. 'crypto' 'openssl' . : Kea DHCP Database Installation and Configuration . meson setup build . meson setup build . build/config.report kea-dhcp6 <#std- iscman-kea-dhcp6>..SS (setup) C++ Python : $ meson compile -C build Kea : $ meson install -C build : (superuser) . ldconfig (root) /usr/local/lib ( ${prefix}/lib --prefix ) /etc/ld.so.conf ( ) : $ ldconfig ldconfig : program: error while loading shared libraries: libkea-something.so.1: cannot open shared object file: No such file or directory DHCP Kea (leases) . . Kea backend : MySQL PostgreSQL memfile. MySQL PostgreSQL memfile . backend Kea . Kea backend . : (unit tests) Kea ( -D tests=enabled ) . Kea Developer's Guide . MySQL MySQL . (client development libraries) . Kea Installation : MySQL ( Set Up the Build) -D mysql=enabled : $ meson setup build -D mysql=enabled MySQL PKG_CONFIG_PATH=/path/to/mariadb.pc:${PKG_CONFIG_PATH} PATH=/path/to/mariadb-config:${PATH} meson setup . $ PKG_CONFIG_PATH=/opt/mariadb/lib/pkgconfig PATH=/opt/mariadb/bin meson setup build -D mysql=enabled MySQL First-Time Creation of the MySQL Database <#mysql-database- create> . PostgreSQL PostgreSQL . . libpq . Kea Installation : PostgreSQL ( Set Up the Build) -D postgresql=enabled . PostgreSQL PKG_CONFIG_PATH=/path/to/libpq.pc:${PKG_CONFIG_PATH} PATH=/path/to/pg_config:${PATH} meson setup . $ PKG_CONFIG_PATH=/opt/postgresql/lib/pkgconfig PATH=/opt/postgresql/bin meson setup build -D postgresql=enabled PostgreSQL First-Time Creation of the PostgreSQL Database <# pgsql-database-create> ..SS Hammer Hammer Python 3 Kea Kea Kea unit-test . (QA) ISC Kea git Kea . ISC . . : . . Hammer : $ ./hammer.py --help . Hammer LXC VirtualBox . supported-systems : $ ./hammer.py supported-systems fedora: - 37: lxc - 38: centos: - 8: lxc, virtualbox - 9: rhel: - 8: virtualbox - 9: ubuntu: - 18.04: lxc, virtualbox - 20.04: lxc - 22.04: lxc debian: - 10: lxc, virtualbox - 11: lxc - 12: lxc freebsd: - 12.0: virtualbox - 12.1: - 13.0: virtualbox alpine: - 3.15: lxc - 3.16: lxc - 3.17: lxc ( ). Hammer : Vagrant VirtualBox LXC. Hammer Vagrant Vagrant : $ ./hammer.py ensure-hammer-deps VirtualBox LXC . Hammer unit test . : $ ./hammer.py build -p local --with (-w) --without (-x) . build Kea unit test . : $ ./hammer.py build -p local -x install docs mysql pgsql native-pkg shell forge . ./hammer.py build --help . : Kea Hammer Vagrant . Hammer : $ ./hammer.py prepare-system -p virtualbox -s freebsd -r 12.0 . SSH : $ ./hammer.py ssh -p virtualbox -s freebsd -r 12.0 Hammer ccache . ccache . ccache . VM LXC . --ccache-dir Hammer . . $ ./hammer.py build -p lxc -s ubuntu -r 18.04 --ccache-dir ~/kea-ccache : ccache Hammer LXC VirtualBox . : $ ./hammer.py --help DHCPv4 DHCPv6 Kea (root) . DHCPv4 raw DHCPv4 DHCPv6 UDP (privileged) . Kea . : useradd admin (binaries) . . --prefix meson setup : chown -R admin /opt/kea chgrp -R admin /opt/kea chown -R admin /var/log/kea/kea-dhcp4.log chgrp -R admin /var/log/kea/kea-dhcp4.log chown -R admin /var/log/kea/kea-dhcp6.log chgrp -R admin /var/log/kea/kea-dhcp6.log systemd ( /etc/systemd/system/kea-dhcp6.service): User=admin Group=admin (capabilities) . capabilities . setcap 'cap_net_bind_service,cap_net_raw=+ep' /opt/kea/sbin/kea-dhcp4 setcap 'cap_net_bind_service=+ep' /opt/kea/sbin/kea-dhcp6 systemd ( /etc/systemd/system/kea-dhcp6.service): ExecStartPre=setcap 'cap_net_bind_service=+ep' /opt/kea/sbin/kea-dhcp6 admin Kea . DHCPv4 raw . (relayed) Kea UDP ( dhcp-socket-type <#dhcp4-interface-configuration> ) cap_net_raw . : Kea Kea ( 1024) (redirecting) . . . ! -p /etc/systemd/system/kea-dhcp4.service ( 1547 1548) : ExecStart=/opt/kea/sbin/kea-dhcp4 -d -c /etc/kea/kea-dhcp4.conf -p 2067 /etc/systemd/system/kea-dhcp4.service: ExecStart=/opt/kea/sbin/kea-dhcp6 -d -c /etc/kea/kea-dhcp6.conf -p 1547 iptables ip6tables ( 1547 1548) . ens4 . iptables -t nat -A PREROUTING -i ens4 -p udp --dport 67 -j REDIRECT --to-port 2067 iptables -t nat -A PREROUTING -i ens4 -p udp --dport 2068 -j REDIRECT --to-port 68 ip6tables -t nat -A PREROUTING -i ens4 -p udp --dport 547 -j REDIRECT --to-port 1547 ip6tables -t nat -A PREROUTING -i ens4 -p udp --dport 1548 -j REDIRECT --to-port 548 (Deprecated Features) . . ..SS Sysrepo 0.x 1.x 2.3.2 Kea Sysrepo 2.x . Sysrepo (backward-incompatible) Kea 2.x Sysrepo . KEA (KEA DATABASE ADMINISTRATION) (Databases and Schema Versions) Kea (leases) ( ) . Kea (schemas) . Kea . Kea . Kea Kea . (backend) MySQL PostgreSQL . major.minor . minor major . minor (backward-compatible) (index) . major . Kea ( ) . kea-admin <#std-iscman-kea-admin> Kea kea-admin <#std-iscman-kea-admin> . (lease) (dump) . kea-admin <#std-iscman-kea-admin> : command backend. . : o db-init -- Kea . Kea . Kea DHCP kea-admin <#std-iscman-kea-admin> . o db-version -- . Kea . o db-upgrade -- . Kea . o lease-dump -- ( MySQL PostgreSQL) CSV ( ) (dump). . memfile . . o lease-upload -- CSV ( ) MySQL PostgreSQL . CSV memfile . backend . : o memfile -- . o mysql -- MySQL . o pgsql -- PostgreSQL . : (username) (password) . (man 8 kea-admin). (Supported Backends) . . . +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | Memfile | MySQL | PostgreSQL | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | CSV | SQL RMDB | SQL RMDB | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | |Memfile | | | | | memfile (lease) | | | | | | | | | | . ( | | | | | .) | | | | | memfile . | | | | | kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> | | | | | . | | | | | . | | | | |" Memfile Kea" | | | | | memfile Kea | | | | | . | | | | | . | | | | | | | | | |LFC . | | | | | | | | | | Kea (downgrade) | | | | | . | | | | | . | | | | | | | | | | . | | | | | (LFC) . << LFC>> <#kea-lfc> . | | | | |MySQL | | | | | MySQL | | | | | | | | | |( ). | | | | |" MySQL 5.7 MySQL 8 MariaDB 10 11" | | | | | Kea MySQL 8 | | | | | MySQL 5.7 . | | | | | (EOL) MySQL 5.7 MySQL 8 MariaDB . | | | | | MySQL 5.7 MySQL 8 MariaDB 10 MariaDB 11 | | | | | Kea . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | MySQL MariaDB JSON . | | | | | . SQL : | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> SELECT JSON_EXTRACT('{ "foo-bar": 1 }', '$."foo-bar"'); | | | | |+-------------------------------------------------+ | | | | || JSON_EXTRACT('{ "foo-bar": 1 }', '$."foo-bar"') | | | | | |+-------------------------------------------------+ | | | | || 1 | | | | | |+-------------------------------------------------+ | | | | |1 row in set (0.01 sec) | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | JSON . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |" MySQL " | | | | | Kea MySQL | | | | | . | | | | | MySQL UTC . | | | | | : | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |date +%Z | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL: | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> SELECT @@system_time_zone; | | | | |mysql> SELECT @@global.time_zone; | | | | |mysql> SELECT @@session.time_zone; | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL | | | | | . | | | | | [mysqld] /etc/mysql/my.cnf | | | | |/etc/mysql/mysql.cnf /etc/mysql/mysqld.cnf | | | | |/etc/mysql/mysql.conf.d/mysqld.cnf . | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |[mysqld] | | | | |# using default-time-zone | | | | |default-time-zone='+00:00' | | | | | | | | | |# or using timezone | | | | |timezone='UTC' | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL | | | | | MySQL MySQL Kea | | | | | . | | | | | kea-admin <#std-iscman-kea-admin>. | | | | | : | | | | |0.0 | | | | |1. 3 | | | | | "root" MySQL : | | | | |3.0 | | | | |3.5 | | | | | | | | | |$ mysql -u root -p | | | | |Enter password: | | | | |mysql> | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |2. 3 | | | | | MySQL : | | | | |3.0 | | | | |3.5 | | | | | | | | | |mysql> CREATE DATABASE database_name; | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |(database_name .) | | | | |3. 3 | | | | | Kea ( | | | | | ) : | | | | |3.0 | | | | |3.5 | | | | | | | | | |mysql> CREATE USER 'user-name'@'localhost' IDENTIFIED BY '1234'; | | | | |mysql> GRANT ALL ON database-name.* TO 'user-name'@'localhost'; | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |(user-name password | | | | | Kea MySQL . | | | | | .) | | | | |4. 3 | | | | | . | | | | |3.0 | | | | |3.5 | | | | | MySQL | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> quit | | | | |Bye | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | kea-admin <#std-iscman-kea-admin> . | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-init mysql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL | | | | | kea-admin <#std-iscman-kea-admin> Kea | | | | | . | | | | | | | | | | . | | | | | . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |ERROR 1419 (HY000) at line 1: You do not have the SUPER privilege and binary logging is | | | | |enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) | | | | |ERROR/kea-admin: mysql_can_create cannot trigger, check user permissions, mysql status = 1 | | | | |mysql: [Warning] Using a password on the command line interface can be insecure. | | | | |ERROR/kea-admin: Create failed, the user, keatest, has insufficient privileges. | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL | | | | |log_bin_trust_function_creators 1 MySQL . | | | | | SUPER : | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> set @@global.log_bin_trust_function_creators = 1; | | | | |Query OK, 0 rows affected (0.00 sec) | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL : | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> CONNECT database-name; | | | | |mysql> SOURCE path-to-kea/share/kea/scripts/mysql/dhcpdb_create.mysql | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | |( path-to-kea Kea .) | | | | |3.0 | | | | |3.5 | | | | | (drop) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> CONNECT database-name; | | | | |mysql> SOURCE path-to-kea/share/kea/scripts/mysql/dhcpdb_drop.mysql | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | |( path-to-kea Kea .) | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |0.0.IP | | | | | MySQL: | | | | |3.0 | | | | |3.5 | | | | | | | | | |mysql> quit | | | | |Bye | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | 4 kea-admin <#std-iscman-kea-admin> | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-init mysql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | 4 . kea-admin <#std-iscman-kea-admin> | | | | | | | | | | . | | | | | . ( | | | | | kea-admin <#std-iscman-kea-admin> .) | | | | | MySQL Kea | | | | | Kea | | | | | . | | | | | kea-admin db-upgrade . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-version mysql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |( Databases and Schema Versions | | | | | .) Kea | | | | |( ) . | | | | | . | | | | | | | | | | (downgrade) . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-upgrade mysql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | (host reservations) hostname (collation) | | | | | hostname host (case-insensitive). | | | | | MySQL : | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> SELECT COLLATION(''); | | | | |+-----------------+ | | | | || COLLATION('') | | | | | |+-----------------+ | | | | || utf8_general_ci | | | | | |+-----------------+ | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL _ci | | | | | (collation) . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL | | | | | MySQL innodb_flush_log_at_trx_commit | | | | |1 2 Kea . | | | | | 1000% ( 2 1 ). | | | | | (per-session) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2; | | | | |mysql> SHOW SESSION VARIABLES LIKE 'innodb_flush_log%'; | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | /etc/mysql/my.cnf: | | | | |0.0 | | | | |3.5 | | | | | | | | | |[mysqld] | | | | |innodb_flush_log_at_trx_commit=2 | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (crash) | | | | | MySQL . | | | | | 1 MySQL INSERT UPDATE | | | | |( Kea ). | | | | |innodb_flush_log_at_trx_commit 2 MySQL | | | | | . . | | | | | | | | | | . Kea | | | | | ..SS PostgreSQL | | | | | PostgreSQL (leases) (host reservations) (per-host) . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | PostgreSQL JSON . 9.4 . SQL : | | | | |0.0 | | | | |3.5 | | | | | | | | | |=> SELECT proname FROM pg_proc WHERE proname = 'json_extract_path'; | | | | | proname | | | | |------------------- | | | | |json_extract_path | | | | |(1 row) | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | JSON . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL | | | | | Kea PostgreSQL (timezone) . PostgreSQL UTC . | | | | | : | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |date +%Z | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL: | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |postgres=# show timezone; | | | | |postgres=# SELECT * FROM pg_timezone_names WHERE name = current_setting('TIMEZONE'); | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL . | | | | | postgresql.conf /etc/postgresql//main/postgresql.conf /var/lib/pgsql/data . | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |timezone = 'UTC' | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . : | | | | |0.0 | | | | |1. 3 | | | | | "postgres" PostgreSQL : | | | | |3.0 | | | | |3.5 | | | | | | | | | |$ sudo -u postgres psql postgres | | | | |Enter password: | | | | |postgres=# | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |2. 3 | | | | | : | | | | |3.0 | | | | |3.5 | | | | | | | | | |postgres=# CREATE DATABASE database-name; | | | | |CREATE DATABASE | | | | |postgres=# | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |(database-name .) | | | | |3. 3 | | | | | Kea ( ) : | | | | |3.0 | | | | |3.5 | | | | | | | | | |postgres=# CREATE USER user-name WITH PASSWORD '1234'; | | | | |CREATE ROLE | | | | |postgres=# GRANT ALL PRIVILEGES ON DATABASE database-name TO user-name; | | | | |GRANT | | | | |postgres=# \c database-name | | | | |You are now connected to database "database-name" as user "postgres". | | | | |postgres=# GRANT ALL PRIVILEGES ON SCHEMA public TO user-name; | | | | |GRANT | | | | |postgres=# | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |4. 3 | | | | | PostgreSQL : | | | | |3.0 | | | | |3.5 | | | | | | | | | |postgres=# \q | | | | |Bye | | | | |$ | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |5. 3 | | | | | kea-admin <#std-iscman-kea-admin> () . . PostgreSQL . Kea . : | | | | |3.0 | | | | |3.5 | | | | | | | | | |$ psql -d database-name -U user-name -f path-to-kea/share/kea/scripts/pgsql/dhcpdb_create.pgsql | | | | |Password for user user-name: | | | | |CREATE TABLE | | | | |CREATE INDEX | | | | |CREATE INDEX | | | | |CREATE TABLE | | | | |CREATE INDEX | | | | |CREATE TABLE | | | | |START TRANSACTION | | | | |INSERT 0 1 | | | | |INSERT 0 1 | | | | |INSERT 0 1 | | | | |COMMIT | | | | |CREATE TABLE | | | | |START TRANSACTION | | | | |INSERT 0 1 | | | | |COMMIT | | | | |$ | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |(path-to-kea Kea .) | | | | | : | | | | |3.0 | | | | |3.5 | | | | | | | | | |psql: FATAL: no pg_hba.conf entry for host "[local]", user "user-name", database "database-name", SSL off | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |... PostgreSQL . Kea pg_hba.conf PostgreSQL . PostgreSQL . PostgreSQL /etc/postgresql/*/main/postgresql.conf . /var/lib/pgsql/data . | | | | | Kea PostgreSQL Kea : | | | | |3.0 | | | | |3.5 | | | | | | | | | |local database-name user-name password | | | | |host database-name user-name 127.0.0.1/32 password | | | | |host database-name user-name ::1/128 password | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL . PostgreSQL . PostgreSQL . | | | | | | | | | | kea-admin <#std-iscman-kea-admin> : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-init pgsql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . kea-admin <#std-iscman-kea-admin> | | | | | | | | | | . | | | | | . ( | | | | | kea-admin <#std-iscman-kea-admin> .) | | | | | PostgreSQL | | | | | PostgreSQL 15.0 | | | | | : | | | | | "postgres" PostgreSQL : | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ sudo -u postgres psql -d database-name -U postgres | | | | |Enter password: | | | | |postgres=# | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (schema) public . | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |postgres=# GRANT ALL PRIVILEGES ON SCHEMA public TO user-name; | | | | |GRANT | | | | |postgres=# | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL : | | | | |0.0 | | | | |3.5 | | | | |0.0 | | | | |3.5 | | | | | | | | | |postgres=# \q | | | | |Bye | | | | |$ | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL Kea | | | | | PostgreSQL | | | | | << MySQL Kea>> | | | | | backend "pgsql" . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-version pgsql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ kea-admin db-upgrade pgsql -u database-user -p database-password -n database-name | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PostgreSQL | | | | | synchronous_commit PostgreSQL | | | | |ON OFF Kea | | | | | . (per-session) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |postgres=# SET synchronous_commit = OFF; | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | ( ): | | | | |0.0 | | | | |3.5 | | | | | | | | | |postgres=# ALTER SYSTEM SET synchronous_commit=OFF; | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | /etc/postgresql/[version]/main/postgresql.conf: | | | | |0.0 | | | | |3.5 | | | | | | | | | |synchronous_commit = off | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (crash) | | | | | PostgreSQL . | | | | | ON PostgreSQL INSERT UPDATE | | | | |( Kea (lease) ). | | | | |synchronous_commit OFF PostgreSQL . | | | | | | | | | | | | | | | . Kea | | | | | ..SS | | | | | (host reservations) Kea | | | | | (read-only) . | | | | | Using Read-Only Databases for Host Reservations With DHCPv4 <#read-only-database-configuration4> | | | | |Using Read-Only Databases for Host Reservations with DHCPv6 <#read-only-database-configuration6> | | | | | Kea DHCPv4 DHCPv6 . | | | | | SQL | | | | | | | | | | (lease) Kea (timestamp) SQL | | | | |. Kea MySQL 2147483647 ( | | | | | ) (00:00:00 ) . PostgreSQL | | | | | . (backends) | | | | | | | | | | . Kea | | | | | 2147483647 ( ) . | | | | | . | | | | |" KEA (KEA SECURITY)" | | | | | Kea | | | | | . | | | | | HTTP (TLS) Kea . | | | | | TLS/HTTPS | | | | | Kea 1.9.6 TLS HTTP . : | | | | |0.0 | | | | |o 2 | | | | | TLS. (plain-text) HTTP . ( Kea 1.9.6 .) | | | | |o 2 | | | | | (passive) . | | | | | . | | | | | . | | | | |o 2 | | | | | () . TLS | | | | | . | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | TLS TLS . TLS HTTP | | | | | TLS | | | | | HTTP . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | ( / Kea ) | | | | | (privileged ports) HTTP/HTTPS . HTTP | | | | | (Denial of Service) . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | HTTP HTTPS HTTPS HTTP . | | | | | . | | | | | "config-set" HTTP HTTPS HTTPS HTTP | | | | | . "config-reload" . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea TLS/HTTPS | | | | | TLS/HTTPS OpenSSL Botan . Boost | | | | | : | | | | |0.0 | | | | |o 2 | | | | | OpenSSL 1.0.2 . Kea TLS . | | | | |o 2 | | | | | OpenSSL 1.0.2 OpenSSL. TLS Kea . | | | | |o 2 | | | | | OpenSSL 1.1.x . TLS 1.3 . | | | | |o 2 | | | | | OpenSSL 3.x Kea . | | | | |o 2 | | | | | LibreSSL 3.2.4 . LibreSSL (API) OpenSSL 1.0.2 . | | | | |o 2 | | | | | Botan 1.x 2.x . | | | | |o 2 | | | | | Botan 3.4.0 . Kea TLS Asio | | | | |Botan Botan --with-boost . | | | | | Ubuntu 20.10 Botan Boost | | | | | Kea TLS . | | | | | Botan include Botan | | | | | . | | | | | Botan 3.4.0 Kea TLS/HTTPS | | | | | . | | | | |o 2 | | | | | Boost SSL ( OpenSSL) TLS Kea | | | | | . | | | | |o 2 | | | | | Boost 1.64 SSL TLS Kea TLS 1.2 . | | | | |o 2 | | | | | Boost 1.64 SSL TLS () | | | | | . | | | | | TLS : | | | | |0.0 | | | | |o 2 | | | | |trust-anchor - (CA) . OpenSSL (hash symbolic links) . Botan . | | | | |o 2 | | | | |cert-file - (end-entity) Kea . | | | | |o 2 | | | | |key-file - Kea . . | | | | | | | | | |168u | | | | | (TLS ) (TLS ). | | | | | TLS : . TLS TLS . | | | | |0.0 | | | | |o 2 | | | | |cert-required - (boolean) . true . . | | | | | | | | | |168u | | | | | PEM . . | | | | | Botan CA CA ( TLS ) PKCS 8 . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | ( Botan OpenSSL) ( ) RSA. | | | | | | | | | |168u | | | | | | | | | |168u | | | | | src/lib/asiolink/testutils/ca Kea doc.txt openssl . . . | | | | | TLS ( TLS handshake) . . OpenSSL Botan verify . | | | | | OpenSSL | | | | | Kea OpenSSL OpenSSL . TLS . | | | | | OpenSSL openssl.cnf . etc OPENSSL_CONF . OpenSSL 1.0.2 MinProtocol . | | | | | . | | | | | openssl_conf : default_conf. openssl_conf OpenSSL ( ) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |openssl_conf = default_conf | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | default_conf ssl_conf SSL/TLS : ssl_sect. | | | | |0.0 | | | | |3.5 | | | | | | | | | |[ default_conf ] | | | | |ssl_conf = ssl_sect | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | ssl_sect system_default : system_default_sect. | | | | |0.0 | | | | |3.5 | | | | | | | | | |[ ssl_sect ] | | | | |system_default = system_default_sect | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | system_default_sect MinProtocol SSL/TLS : TLSv1.2. | | | | |0.0 | | | | |3.5 | | | | | | | | | |[ system_default_sect ] | | | | |MinProtocol = TLSv1.2 | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | | openssl.cnf config.5ssl man config ..SS Kea | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea Control Agent () HTTPS Kea . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea HTTP TLS . (reverse proxy) . TLS/HTTPS Kea TLS/HTTPS Support . | | | | | TLS (boolean) : | | | | |0.0 | | | | |o 2 | | | | | trust-anchor (Certification Authority) . | | | | |o 2 | | | | | cert-file . | | | | |o 2 | | | | | key-file . . | | | | |o 2 | | | | | cert-required . (mutual authentication) . | | | | | | | | | |168u | | | | | PEM . HTTP TLS ( HTTPS) HTTP . . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | . (passive) " " (man-in-the-middle) . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | HTTP (end entity) TLS . TLS HTTP . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | kea-shell <#std-iscman-kea-shell> TLS . | | | | | Kea | | | | | Kea . . | | | | | | | | | | Kea . Kea DHCPv4 DHCPv6 Dynamic DNS kea-lfc <#std-iscman-kea-lfc> (lease) MySQL PostgreSQL Netconf Kea Stork. | | | | | (attack surface) . | | | | | kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> DNS . | | | | | memfile kea-lfc <#std-iscman-kea-lfc> ( ). | | | | | Kea . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea 2.7.9 data-directory ( DHCPv6) . (DHCPv4 DHCPv6) duid ( DHCPv6) : "[kea-install-dir]/var/lib/kea". | | | | | KEA_DHCP_DATA_DIR . name data-directory Kea . | | | | | lease4-write lease6-write . filename Kea . filename . (cache) cache-write . filename . | | | | | KEA_DHCP_DATA_DIR DHCPv6 (kea-dhcp6-serverid) . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | DHCPv4 DHCPv6 UDP 67 ( DHCPv4) 547 ( DHCPv6) (root) . (capabilities) Kea . Kea <> <#non-root> . | | | | | Kea | | | | | Kea (kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns>) UNIX . UNIX . (root) Kea (non-root) . POSIX ( /) . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea 2.7.9 "[kea-install-dir]/var/run/kea" 0750 . KEA_CONTROL_SOCKET_DIR . socket-name Kea . socket-name . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea 2.7.2 DHCP HTTP/HTTPS Kea 3.1.8 (Control Agent) . | | | | | Kea-2.7.6 Kea HTTP/HTTPS . IPv4 IPv6 . HTTPS . | | | | | Kea JSON Kea . ( ) . (clear text) . Kea . | | | | | Kea . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea 2.7.9 ( config-write) Kea ( -c) . | | | | | | | | | |168u | | | | |Kea MySQL PostgreSQL | | | | |/ (leases) / (forensic logging) . | | | | | (flat file) . | | | | | Kea : | | | | | (port) . (clear text) | | | | | . | | | | | . | | | | | MySQL PostgreSQL . | | | | |Kea SSL/TLS MySQL PostgreSQL | | | | | ( | | | | | ) . | | | | | (Database Connectivity <#database-connectivity>) . | | | | | | | | | | Kea . | | | | | 1.9.7 Kea | | | | |password secret . | | | | | stdout stderr syslog | | | | |stdout/stderr . syslog . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | 2.7.9 Kea | | | | | : "[kea-install-dir]/var/log/kea". | | | | | | | | | |KEA_LOG_FILE_DIR (override) . | | | | | output Kea | | | | | . | | | | | output . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | 2.7.9 Kea (legal log) | | | | | : "[kea-install-dir]/var/log/kea". | | | | | | | | | |KEA_LEGAL_LOG_DIR . | | | | | path Kea | | | | | . | | | | |path . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | | | | | | : | | | | |box center; | | | | |l|l|l. | | | | | | | | | | | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | (config-write) | | N/A | | | | | | | | | | | | | | | | | | | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | (cache-write) | var/lib/kea | KEA_DHCP_DATA_DIR | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | (Lease) | var/lib/kea | KEA_DHCP_DATA_DIR | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | DHCPv6 | var/lib/kea | KEA_DHCP_DATA_DIR | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | var/log/kea | KEA_LOG_FILE_DIR | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | (Forensic) | var/log/kea | KEA_LEGAL_LOG_DIR | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | (Unix Sockets) | var/run/kea | KEA_CONTROL_SOCKET_DIR | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | Hook | share/kea/scripts/ | KEA_HOOK_SCRIPTS_PATH | | |Kea : Botan OpenSSL. | | | | | | | | | | Kea . OpenSSL | | | | | Botan . | | | | | : | | | | |0.0 | | | | |o 2 | | | | | TLS HTTPS Kea 1.9.6. | | | | |o 2 | | | | | TSIG DNS. | | | | |o 2 | | | | | DHCID DNS. | | | | |o 2 | | | | | ( ). | | | | | | | | | |168u | | | | | OpenSSL Botan ( libcrypto). Kea | | | | | libssl (link) . | | | | | . | | | | | OpenSSL Botan DDNS . | | | | | Kea | | | | | . | | | | | TSIG | | | | | Kea DNS TSIG : | | | | |0.0 | | | | |o 2 | | | | |HMAC-MD5 | | | | |o 2 | | | | |HMAC-SHA1 | | | | |o 2 | | | | |HMAC-SHA224 | | | | |o 2 | | | | |HMAC-SHA256 | | | | |o 2 | | | | |HMAC-SHA384 | | | | |o 2 | | | | |HMAC-SHA512 | | | | | | | | | |168u | | | | | TSIG <#d2-tsig-key-list-config> . | | | | | Kea DHCID SHA256 . | | | | | DHCID | | | | | IP . | | | | | (Raw Socket) | | | | | Kea DHCPv4 (raw sockets) . | | | | | IPv4 . | | | | |( ) | | | | | IP 0.0.0.0 . Kea | | | | | . | | | | | ( ) | | | | | . UDP . | | | | |dhcp-socket-type . | | | | | . | | | | | Kea | | | | |( iptables) . iptables | | | | | DHCP . . | | | | | Kea UDP . . | | | | | . Kea UDP | | | | |iptables . | | | | | . | | | | | | | | | | DHCP DDNS RESTful API HTTP HTTPS ( HTTP TLS) . | | | | | . | | | | | loopback ( 127.0.0.1 ::1) . | | | | | TLS TLS/HTTPS . | | | | | iptables . | | | | | (HA) (multi-threaded) | | | | | HA RESTful API (peers) . | | | | | Kea HTTP/HTTPS . IPv4 IPv6 . | | | | | HTTPS . | | | | | RESTful API Kea | | | | | Kea 1.9.0 HTTP ( RFC 7617 ) | | | | | REST HTTP . ( ) | | | | | Kea . API | | | | | . | | | | | (logger) auth . HTTP | | | | | << >> ("man in the middle") | | | | | HTTP . HTTP TLS . | | | | | TLS HTTP . | | | | | Kea 1.9.2 (hook point) auth . | | | | | (RBAC) | | | | | . http_auth 2.7.2 Kea DHCP | | | | | DDNS . | | | | | Kea (kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns>) | | | | | UNIX . UNIX . | | | | | Blast RADIUS | | | | | Blast-RADIUS RADIUS | | | | | RADIUS . <#radius-security-warning> . | | | | | Kea | | | | | 2.7.9 Kea Kea kea-dhcp4 <#std-iscman-kea-dhcp4> | | | | |kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> . Kea 3.0 . | | | | | . | | | | | : | | | | |0.0 | | | | |o 2 | | | | | | | | | |o 2 | | | | | (clear text) 'user' 'password' HTTP ( Kea 3.0) | | | | |o 2 | | | | | 'secret' TSIG ( Kea 3.0) | | | | |o 2 | | | | | API HTTP ( Kea 3.0) | | | | |o 2 | | | | | Kea root. ( ) | | | | | | | | | |168u | | | | | 3.0 Kea '-X' | | | | | . | | | | | "_SECURITY_WARNING" . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | '-X' | | | | | . | | | | | . | | | | | | | | | |168u | | | | | Kea DHCP . | | | | | (Vulnerability Handling) | | | | | ISC ISC . | | | | | ISC . | | | | | Kea ISC (patch) / . | | | | | (tarball) ISC . ( apt Debian Ubuntu dnf RedHat) . | | | | | (Code Quality and Testing) | | | | | Kea . : | | | | |0.0 | | | | |o 2 | | | | | (formal review) . . | | | | |o 2 | | | | | (unit tests) . . commit . | | | | |o 2 | | | | | Kea . ( DHCP DNS HTTP HTTPS ) API . | | | | |o 2 | | | | | Kea ( CPU ). | | | | |o 2 | | | | | Kea (CI) . ( ) commit . "" . | | | | |o 2 | | | | | API (truncated) ( ) . | | | | |o 2 | | | | | Kea danger (sanity checkers) . | | | | |o 2 | | | | | Kea (static code analyzers) : Coverity Scan cppcheck clang-static-analyzer shellcheck flawfinder semgrep danger. | | | | |o 2 | | | | | Kea (dynamic code analyzers) : Valgrind Thread Sanitizer (TSAN) Address Sanitizer (ASAN) Undefined Behavior Sanitizer (UBSAN). | | | | | | | | | |168u | | | | | (Fuzz Testing) | | | | | Kea . | | | | | (crash) (hang) . | | | | | Kea : | | | | | . (harness function) libfuzzer LLVMFuzzerTestOneInput. | | | | | . AFL (American Fuzzy Lop ). | | | | | LLVMFuzzerTestOneInput: | | | | | . | | | | | : | | | | |0.0 | | | | |o 2 | | | | | Config | | | | |o 2 | | | | | HTTP | | | | |o 2 | | | | | Packet | | | | |o 2 | | | | | Unix | | | | | | | | | |168u | | | | | : | | | | |0.0 | | | | |o 2 | | | | |kea-dhcp4 | | | | |o 2 | | | | |kea-dhcp6 | | | | | | | | | |168u | | | | | (Release Integrity) | | | | | ISC PGP ISC DNSSEC . | | | | | (Bus Factor) | | | | | Core Infrastructure " " " " (" ") . Kea . ( IT ) . . | | | | | (Miscellaneous) | | | | | core dump | | | | | core dump . core dump coredumpsize core file size ulimit limit . | | | | | <> Things to check if a core file does not get generated . | | | | | core dump gcore / . . : | | | | |0.0 | | | | |o 2 | | | | | gcore dump (suspend) | | | | |o 2 | | | | | core dump ( core dump ). | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | core dump ... . | | | | | | | | | |168u | | | | |" KEA (KEA CONFIGURATION)" | | | | |Kea JSON . . | | | | |" JSON (JSON Configuration)" | | | | |JSON Kea . JSON Management API (: Management API <#ctrl-channel>) DHCP DDNS . | | | | | keactrl <#std-iscman-keactrl> . -c . | | | | |" JSON (JSON Syntax)" | | | | | DHCPv4 DHCPv6 DDNS NETCONF JSON . JSON RFC 7159 ECMA 404 . true false ( ) . (True False) . | | | | | JSON ( ECMA 404) JSON ( /) Kea map C++ STL . / . Kea 1.9.0 . | | | | | Kea JSON : | | | | |0.0 | | | | |o 2 | | | | | : (#) . | | | | |o 2 | | | | | C: (//) . | | | | |o 2 | | | | | : /* */ . . | | | | |o 2 | | | | | : JSON JSON . | | | | |o 2 | | | | | : . . | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | JSON . . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | ( ) . "Dhcp4" "Dhcp6" "DhcpDdns" "Netconf" . . | | | | | DHCPv4 : | | | | |0.0 | | | | |3.5 | | | | | | | | | |# The whole configuration starts here. | | | | |{ | | | | | # DHCPv4 specific configuration starts here. | | | | | "Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth0" ], | | | | | "dhcp-socket-type": "raw" | | | | | }, | | | | | "valid-lifetime": 4000, | | | | | "renew-timer": 1000, | | | | | "rebind-timer": 2000, | | | | | "subnet4": [{ | | | | | "pools": [ { "pool": "192.0.2.1-192.0.2.200" } ], | | | | | "subnet": "192.0.2.0/24", | | | | | "id": 1 | | | | | }], | | | | | | | | | | # Now loggers are inside the DHCPv4 object. | | | | | "loggers": [{ | | | | | "name": "*", | | | | | "severity": "DEBUG" | | | | | }] | | | | | } | | | | | | | | | |# The whole configuration structure ends here. | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | share/doc/kea/examples . | | | | | . IPv6 DHCPv6 subnet6 . ( Dhcp6 ) . (...) . | | | | |" (Comments and User Context)" | | | | | JSON C C++ . . JSON JSON . Kea C C++ . config-get <#std-isccmd-config-get> config-write <#std-isccmd-config-write> . . | | | | | Kea comment JSON . ( config-get <#std-isccmd-config-get>) JSON . JSON : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [{ | | | | | "id": 1, | | | | | "subnet": "192.0.2.0/24", | | | | | "pools": [{ "pool": "192.0.2.10 - 192.0.2.20" }], | | | | | "comment": "second floor" | | | | | }] | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . . (user context) JSON Kea . | | | | | . JSON Kea . ( ) ( ) . . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [{ | | | | | "id": 1, | | | | | "subnet": "192.0.2.0/24", | | | | | "pools": [{ "pool": "192.0.2.10 - 192.0.2.20" }], | | | | | "user-context": { | | | | | "comment": "second floor", | | | | | "floor": 2 | | | | | } | | | | | }] | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | JSON ( ) . . | | | | | user-context JSON ISC user context . Kea JSON user context . | | | | | JSON config-get <#std-isccmd-config-get> . config-set <#std-isccmd-config-set> config-get <#std-isccmd-config-get> . JSON user context . | | | | |Kea : (global scope) (interfaces configuration) (multi-threading) (shared networks) (subnets) (client classes) (option data and definitions) (pools) (prefix delegation pools) (host reservations) (control socket) HTTP (authentication) (clients) (queue control) DHCP-DDNS (loggers) (leases) (server ID). DHCPv4 DHCPv6 DHCPv6 . | | | | | . | | | | | Kea . | | | | | subnet4-update <#std-isccmd-subnet4-update> . | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | |"subnet4": [ { | | | | | "id": 1, | | | | | "subnet": "10.20.30.0/24", | | | | | "user-context": { | | | | | "building": "Main", | | | | | "floor": 1 | | | | | } | | | | | } ] | | | | | } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | lease6-add <#std-isccmd-lease6-add> . | | | | |Kea . Storing Extended Lease Information <#dhcp4-store-extended-info> . | | | | | ISC user-context . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | |"arguments": { | | | | | "client-id": "42:42:42:42:42:42:42:42", | | | | | "cltt": 12345678, | | | | | "fqdn-fwd": false, | | | | | "fqdn-rev": true, | | | | | "hostname": "myhost.example.com.", | | | | | "hw-address": "08:08:08:08:08:08", | | | | | "ip-address": "192.0.2.1", | | | | | "state": 0, | | | | | "subnet-id": 44, | | | | | "valid-lft": 3600, | | | | | "user-context": { | | | | | "ISC": { | | | | | "relays": [ | | | | | { | | | | | "hop": 2, | | | | | "link": "2001:db8::1", | | | | | "peer": "2001:db8::2" | | | | | }, | | | | | { | | | | | "hop": 1, | | | | | "link": "2001:db8::3", | | | | | "options": "0x00C800080102030405060708", | | | | | "peer": "2001:db8::4" | | | | | }] | | | | | } | | | | | } | | | | |} | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | | User Contexts in Hooks <#user-context-hooks> ..SS " (Simplified Notation)" | | | | | . . | | | | | ( | | | | | ). valid-lifetime | | | | |Dhcp4 Dhcp4/valid-lifetime pool | | | | | DHCPv4 | | | | |Dhcp4/subnet4[0]/pool . | | | | |" (Configuration Files Inclusion)" | | | | | . | | | | | PHP HTML Apache . | | | | | include | | | | | JSON . | | | | | . include | | | | | . . | | | | | . | | | | | include : | | | | |0.0 | | | | |3.5 | | | | | | | | | | | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | [PATH] | | | | | Kea . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | | "Dhcp6": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "*" ]}, | | | | | "preferred-lifetime": 3000, | | | | | "rebind-timer": 2000, | | | | | "renew-timer": 1000, | | | | | | | | | | "valid-lifetime": 4000 | | | | | } | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | "subnets.json" : | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | |"subnet4": [ | | | | | { | | | | | "id": 123, | | | | | "subnet": "192.0.2.0/24" | | | | | }, | | | | | { | | | | | "id": 234, | | | | | "subnet": "192.0.3.0/24" | | | | | }, | | | | | { | | | | | "id": 345, | | | | | "subnet": "10.0.0.0/8" | | | | | } | | | | |], | | | | |... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |" Kea (Kea Configuration Backend)" | | | | |" (Applicability)" | | | | | Kea ( CB config backend) Kea | | | | | . | | | | | : | | | | |0.0 | | | | |o 2 | | | | | Kea | | | | |o 2 | | | | | " " Kea | | | | |o 2 | | | | | API | | | | |o 2 | | | | | | | | | |o 2 | | | | | (atomicity) | | | | |o 2 | | | | | | | | | |o 2 | | | | | (replication) | | | | | | | | | |168u | | | | | : | | | | |0.0 | | | | |o 2 | | | | | / | | | | |o 2 | | | | | API | | | | |o 2 | | | | | API ISC | | | | |o 2 | | | | | | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | (leases) / (host reservations) | | | | | CB . host-databases | | | | |lease-database . | | | | | | | | | |168u | | | | | (site) Kea (HA) . . HA . (provisioning) . | | | | | (CB) . Kea . JSON ("stub") ( ) CB . CB Kea . CB " " (single source of truth) DHCP . | | | | | | | | | | | | | | |libdhcp_cb_cmds.so <#std-ischooklib-libdhcp_cb_cmds.so> ISC . . CB (hook) . | | | | | | | | | | (Configuration Backend) ("plug-and-play") . CB API . API CB CB . CB (provisioning) . config-databases . | | | | | | | | | | CB libdhcp_cb_cmds.so <#std-ischooklib-libdhcp_cb_cmds.so> API . CB Kea CB API . | | | | | CB API ( MySQL Workbench MySQL) . | | | | | | | | | | CB JSON . JSON CB . CB Kea CB . | | | | | CB JSON . Kea . | | | | | CB JSON . | | | | | . JSON () CB . . (client classes) CB DHCP JSON . | | | | | CB CB . | | | | | | | | | | API Kea ( CB API) . libdhcp_subnet_cmds.so <#std-ischooklib-libdhcp_subnet_cmds.so> . API (in-memory) Kea config-write JSON . | | | | | Stork CB . Stork API JSON . CB Stork . | | | | | CB "" (read-only) Kea . . | | | | | | | | | | Kea CB : | | | | |0.0 | | | | |o 2 | | | | | MySQL PostgreSQL . | | | | |o 2 | | | | | DHCPv4 DHCPv6 D2 NETCONF . | | | | |o 2 | | | | | DHCP : . JSON . | | | | | | | | | |168u | | | | | | | | | | . . . . . | | | | | . . | | | | | . | | | | | | | | | | Kea Configuration Backend CB ( ) CB ( ) (MySQL PostgreSQL) (schema) Kea . | | | | | "Configuration Backend" Kea . MySQL libdhcp_mysql.so <#std-ischooklib-libdhcp_mysql.so> MySQL . PostgreSQL libdhcp_pgsql.so <#std-ischooklib-libdhcp_pgsql.so> PostgreSQL . "" MySQL PostgreSQL . | | | | | CB Kea . API libdhcp_cb_cmds.so <#std-ischooklib-libdhcp_cb_cmds.so> . DHCPv4 DHCPv6 . . . CB API remote- . libdhcp_cb_cmds.so: Configuration Backend Commands <#hooks-cb-cmds> . | | | | | . | | | | | (schema) kea-admin <#std-iscman-kea-admin> . Installation . : | | | | |dhcpdb_create.mysql | | | | | | | | | |dhcpdb_create.pgsql . | | | | | Kea API CB . | | | | | GitLab : | | | | |0.0 | | | | |o 2 | | | | | CB | | | | |o 2 | | | | | CB | | | | | Backend | | | | |(libdhcp_mysql.so <#std-ischooklib-libdhcp_mysql.so> libdhcp_pgsql.so <#std-ischooklib-libdhcp_pgsql.so>) | | | | | Kea . -D | | | | | : -D mysql=enabled -D postgresql=enabled. | | | | | . | | | | | Kea << DHCP>> <#dhcp-install-configure> . | | | | | Kea ISC | | | | | . | | | | | CB Kea | | | | | . Kea | | | | | . kea-admin <#std-iscman-kea-admin> | | | | | << kea-admin>> <#kea-admin> . | | | | | DHCP | | | | |hooks-libraries . config-databases | | | | | Kea backend . | | | | | DHCPv4 DHCPv6 CB | | | | | < DHCPv4>> <#dhcp4-cb> | | | | | < DHCPv6>> <#dhcp6-cb> . | | | | | API CB Kea . | | | | |" (Configuration Sharing and Server Tags)" | | | | | Kea . | | | | | | | | | | | | | | | . | | | | | " " (server tags) . | | | | | Kea . DHCPv4 DHCPv6 | | | | | DHCPv4 DHCPv6 . | | | | | server-tag Dhcp4 Dhcp6 . | | | | | server-tag-get <#std-isccmd-server-tag-get> . | | | | | | | | | | . | | | | | | | | | | (High Availability) | | | | | . | | | | | all | | | | | . all | | | | | remote-server4-get-all <#std-isccmd-remote-server4-get-all> | | | | |remote-server6-get-all <#std-isccmd-remote-server6-get-all> . | | | | | | | | | | | | | | | . Kea | | | | | Kea | | | | |config-control ( << Backend >> <#dhcp4-cb-json> | | | | |<< Backend >> <#dhcp6-cb-json> ). Kea | | | | | . | | | | | Kea | | | | | Kea . | | | | | | | | | | . Kea | | | | | . all . | | | | | Kea | | | | | . DHCPv4 DHCPv6 | | | | | remote-server4-set <#std-isccmd-remote-server4-set> remote-server6-set <#std-isccmd-remote-server6-set> . | | | | | . | | | | | DHCP ( | | | | | "") | | | | |( ""). < DHCPv4>> <#dhcp4-cb> | | | | | < DHCPv6>> <#dhcp6-cb> DHCP | | | | | . | | | | | | | | | | . DHCP | | | | | (subnet) : | | | | | . : | | | | | . Kea | | | | | (host reservations) . | | | | | libdhcp_cb_cmds.so <#std-ischooklib-libdhcp_cb_cmds.so> | | | | | | | | | | . | | | | | . ( unassigned). | | | | | . | | | | | . | | | | | . | | | | | . | | | | | | | | | | ( ). | | | | | (context) . DHCP | | | | | renew-timer . | | | | | . | | | | | . | | | | | . | | | | | . | | | | |remote-global-parameter4-get <#std-isccmd-remote-global-parameter4-get> | | | | |remote-global-parameter6-get <#std-isccmd-remote-global-parameter6-get> | | | | | . | | | | |( ) . | | | | | | | | | | | | | | | ( all) . | | | | | "" "" | | | | | all . | | | | | : renew-timer all | | | | | . | | | | | | | | | | all . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | . Backend | | | | | | | | | | . : (shared network) | | | | | | | | | | . | | | | | . | | | | | . | | | | | | | | | |168u | | | | |" (Overview)" | | | | | keactrl <#std-iscman-keactrl> Kea ( kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> kea-netconf <#std-iscman-kea-netconf>) . . | | | | | keactrl <#std-iscman-keactrl> Kea . Kea systemd . Native Packages and systemd . | | | | |" (Command Line Options)" | | | | |keactrl <#std-iscman-keactrl> : | | | | |0.0 | | | | |3.5 | | | | | | | | | |# keactrl [-c keactrl-config-file] [-s server[,server,...]] | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Commands . | | | | | -c keactrl-config-file keactrl <#std-iscman-keactrl> . (--ctrl-config -c .) -c keactrl <#std-iscman-keactrl> "[kea-install-dir]/etc/kea/keactrl.conf" . | | | | | -s server[,server,...] . (--server -s .) keactrl <#std-iscman-keactrl> . . | | | | |" keactrl <#std-iscman-keactrl>" | | | | | . | | | | | keactrl <#std-iscman-keactrl> . "[kea-install-dir]/etc/kea/keactrl.conf" -c . | | | | | keactrl.conf : | | | | |0.0 | | | | |3.5 | | | | | | | | | |# This is a configuration file for keactrl script which controls | | | | |# the startup, shutdown, reconfiguration and gathering the status | | | | |# of the Kea processes. | | | | | | | | | |# prefix holds the location where the Kea is installed. | | | | |prefix=@prefix@ | | | | | | | | | |# Location of Kea configuration file. | | | | |kea_dhcp4_config_file=@sysconfdir@/@PACKAGE@/kea-dhcp4.conf | | | | |kea_dhcp6_config_file=@sysconfdir@/@PACKAGE@/kea-dhcp6.conf | | | | |kea_dhcp_ddns_config_file=@sysconfdir@/@PACKAGE@/kea-dhcp-ddns.conf | | | | |kea_netconf_config_file=@sysconfdir@/@PACKAGE@/kea-netconf.conf | | | | | | | | | |# Location of Kea binaries. | | | | |exec_prefix=@exec_prefix@ | | | | |dhcp4_srv=@sbindir@/kea-dhcp4 | | | | |dhcp6_srv=@sbindir@/kea-dhcp6 | | | | |dhcp_ddns_srv=@sbindir@/kea-dhcp-ddns | | | | |netconf_srv=@sbindir@/kea-netconf | | | | | | | | | |# Start DHCPv4 server? | | | | |dhcp4=yes | | | | | | | | | |# Start DHCPv6 server? | | | | |dhcp6=yes | | | | | | | | | |# Start DHCP DDNS server? | | | | |dhcp_ddns=no | | | | | | | | | |# Start Netconf? | | | | |netconf=no | | | | | | | | | |# Be verbose? | | | | |kea_verbose=no | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | @something@ Kea . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | dhcp4 dhcp6 dhcp_ddns netconf "yes" keactrl <#std-iscman-keactrl> ( ) kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> kea-netconf <#std-iscman-kea-netconf>. "no" keactrl <#std-iscman-keactrl> Kea . (dhcp_ddns netconf) . | | | | | Kea keactrl <#std-iscman-keactrl> "[kea-install-dir]/sbin" . . dhcp4_srv dhcp6_srv dhcp_ddns_srv netconf_srv . | | | | | kea_verbose . kea_verbose yes DEBUG . Logging <#logging> kea_verbose "yes" . "no" Kea . . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | . kea_verbose . | | | | | | | | | |168u | | | | | keactrl <#std-iscman-keactrl> : | | | | |0.0 | | | | |o 2 | | | | |start - . | | | | |o 2 | | | | |stop - . | | | | |o 2 | | | | |reload - SIGHUP . | | | | |o 2 | | | | |status - ( ) . | | | | |o 2 | | | | |version - keactrl <#std-iscman-keactrl> Kea . | | | | | | | | | |168u | | | | | keactrl <#std-iscman-keactrl> : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl start | | | | |INFO/keactrl: Starting kea-dhcp4 -c /usr/local/etc/kea/kea-dhcp4.conf -d | | | | |INFO/keactrl: Starting kea-dhcp6 -c /usr/local/etc/kea/kea-dhcp6.conf -d | | | | |INFO/keactrl: Starting kea-dhcp-ddns -c /usr/local/etc/kea/kea-dhcp-ddns.conf -d | | | | |INFO/keactrl: Starting kea-netconf -c /usr/local/etc/kea/kea-netconf.conf -d | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea PID . | | | | |keactrl <#std-iscman-keactrl> . start | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl start | | | | |INFO/keactrl: kea-dhcp4 appears to be running, see: PID 10918, PID file: /usr/local/var/run/kea/kea.kea-dhcp4.pid. | | | | |INFO/keactrl: kea-dhcp6 appears to be running, see: PID 10924, PID file: /usr/local/var/run/kea/kea.kea-dhcp6.pid. | | | | |INFO/keactrl: kea-dhcp-ddns appears to be running, see: PID 10930, PID file: /usr/local/var/run/kea/kea.kea-dhcp-ddns.pid. | | | | |INFO/keactrl: kea-netconf appears to be running, see: PID 10123, PID file: /usr/local/var/run/kea/kea.kea-netconf.pid. | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | PID | | | | | (crash) . | | | | | PID Kea . | | | | | keactrl <#std-iscman-keactrl> | | | | |. PID keactrl <#std-iscman-keactrl> | | | | | . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl stop | | | | |INFO/keactrl: Stopping kea-dhcp4... | | | | |INFO/keactrl: Stopping kea-dhcp6... | | | | |INFO/keactrl: Stopping kea-dhcp-ddns... | | | | |INFO/keactrl: Stopping kea-netconf... | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | stop | | | | | keactrl.conf "" (enabled) . | | | | | stop . | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl stop | | | | |INFO/keactrl: kea-dhcp4 isn't running. | | | | |INFO/keactrl: kea-dhcp6 isn't running. | | | | |INFO/keactrl: kea-dhcp-ddns isn't running. | | | | |INFO/keactrl: kea-netconf isn't running. | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea | | | | | SIGHUP . reload SIGHUP | | | | | keactrl <#std-iscman-keactrl> | | | | | . SIGHUP | | | | | | | | | | . | | | | | | | | | | | | | | | : . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl reload | | | | |INFO/keactrl: Reloading kea-dhcp4... | | | | |INFO/keactrl: Reloading kea-dhcp6... | | | | |INFO/keactrl: Reloading kea-dhcp-ddns... | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | reload . | | | | |kea-netconf <#std-iscman-kea-netconf> SIGHUP . | | | | | | | | | | . | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl stop | | | | |INFO/keactrl: kea-dhcp4 isn't running. | | | | |INFO/keactrl: kea-dhcp6 isn't running. | | | | |INFO/keactrl: kea-dhcp-ddns isn't running. | | | | |INFO/keactrl: kea-netconf isn't running. | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | NETCONF | | | | | . Kea NETCONF | | | | |keactrl <#std-iscman-keactrl> . NETCONF | | | | | keactrl.conf NETCONF | | | | | . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | keactrl <#std-iscman-keactrl> | | | | | . | | | | | Kea . syslog | | | | | . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | | status : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl status | | | | |DHCPv4 server: active | | | | |DHCPv6 server: inactive | | | | |DHCP DDNS: active | | | | |Netconf agent: inactive | | | | |Kea configuration file: /usr/local/etc/kea/kea.conf | | | | |Kea DHCPv4 configuration file: /usr/local/etc/kea/kea-dhcp4.conf | | | | |Kea DHCPv6 configuration file: /usr/local/etc/kea/kea-dhcp6.conf | | | | |Kea DHCP DDNS configuration file: /usr/local/etc/kea/kea-dhcp-ddns.conf | | | | |Kea Netconf configuration file: /usr/local/etc/kea/kea-netconf.conf | | | | |keactrl configuration file: /usr/local/etc/kea/keactrl.conf | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | keactrl status . | | | | | Kea Stork . Monitoring Kea With Stork <#stork> ..SS " (Overriding the Server Selection)" | | | | | -s () keactrl <#std-iscman-keactrl> . keactrl <#std-iscman-keactrl> kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> : | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl stop -s dhcp4,dhcp6 | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> kea-dhcp6 <#std-iscman-kea-dhcp6>. | | | | |0.0 | | | | |3.5 | | | | | | | | | |$ keactrl start -s dhcp4,dhcp_ddns | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | -s start reload stop . start reload keactrl <#std-iscman-keactrl> -s keactrl <#std-iscman-keactrl> . stop . | | | | | -s : | | | | |0.0 | | | | |o 2 | | | | |dhcp4 kea-dhcp4 <#std-iscman-kea-dhcp4>. | | | | |o 2 | | | | |dhcp6 kea-dhcp6 <#std-iscman-kea-dhcp6>. | | | | |o 2 | | | | |dhcp_ddns kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns>. | | | | |o 2 | | | | |netconf kea-netconf <#std-iscman-kea-netconf>. | | | | |o 2 | | | | |all (). | | | | | | | | | |168u | | | | |" systemd (Native Packages and systemd)" | | | | | keactrl <#std-iscman-keactrl> Kea . | | | | | | | | | | systemd. | | | | | . systemd | | | | | Kea HTTP | | | | | . systemd | | | | | . Kea | | | | | . | | | | | | | | | | . | | | | | systemctl . | | | | | Kea keactrl <#std-iscman-keactrl> systemctl | | | | | . . | | | | | Kea : | | | | |0.0 | | | | |3.5 | | | | | | | | | |# systemctl start kea-dhcp4 | | | | |# systemctl stop kea-dhcp6 | | | | |# systemctl restart kea-dhcp-ddns | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | . | | | | | isc- . | | | | |" DHCPV4 (THE DHCPV4 SERVER)" | | | | |" DHCPv4 (Starting and Stopping the DHCPv4 Server)" | | | | | Kea DHCPv4 keactrl <#std-iscman-keactrl> | | | | | ( << Kea keactrl>> <#keactrl> ) | | | | | kea-dhcp4 <#std-iscman-kea-dhcp4> | | | | | : | | | | |0.0 | | | | |o 2 | | | | |-c file - . | | | | | . | | | | |o 2 | | | | |-d - / | | | | | . debuglevel | | | | | "debug" | | | | | debuglevel ( 99) . | | | | | | | | | | . | | | | |o 2 | | | | |-p server-port - UDP | | | | | . DHCPv4 | | | | | | | | | | DHCPv4 . | | | | |o 2 | | | | |-P client-port - UDP | | | | | . | | | | | DHCPv4 | | | | | DHCPv4 . | | | | |o 2 | | | | |-t file - . kea-dhcp4 <#std-iscman-kea-dhcp4> | | | | | . | | | | | . | | | | | (0 = | | | | | 1 = ). | | | | | | | | | | . | | | | |o 2 | | | | |-T file - . kea-dhcp4 <#std-iscman-kea-dhcp4> | | | | | . -t | | | | | ( lease backend | | | | | host reservations configuration forensic logging) | | | | | (hook) . | | | | | UNIX TCP/UDP | | | | | (rotate) | | | | | . | | | | |o 2 | | | | |-v - Kea . | | | | |o 2 | | | | |-V - Kea | | | | | . | | | | | Kea . | | | | |o 2 | | | | |-W - Kea . | | | | | config.report meson setup | | | | | . | | | | | config.report | | | | | . | | | | |2.0 | | | | |3.5 | | | | | | | | | |# from installation using libkea-process.so | | | | |$ strings ${prefix}/lib/libkea-process.so | sed -n 's/;;;; //p' | | | | | | | | | |# from sources using libkea-process.so | | | | |$ strings src/lib/process/.libs/libkea-process.so | sed -n 's/;;;; //p' | | | | | | | | | |# from sources using libkea-process.a | | | | |$ strings src/lib/process/.libs/libkea-process.a | sed -n 's/;;;; //p' | | | | | | | | | |# from sources using libcfgrpt.a | | | | |$ strings src/lib/process/cfgrpt/.libs/libcfgrpt.a | sed -n 's/;;;; //p' | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | |o 2 | | | | |-X - Kea 3.0 . | | | | | | | | | | . | | | | |<< Kea>> <#sec-kea-runtime-security-policy-checking> . | | | | | | | | | |168u | | | | | | | | | | UDP | | | | | . DHCPv4 (privileged) | | | | | (root) . | | | | | PID | | | | |[pidfile_dir]/[conf name].kea-dhcp4.pid : | | | | |0.0 | | | | |o 2 | | | | |pidfile_dir - [prefix]/[localstatedir]/run/kea | | | | |prefix localstatedir --prefix | | | | |--localstatedir meson setup /usr/local | | | | |var . pidfile_dir | | | | |/usr/local/var . | | | | | KEA_PIDFILE_DIR | | | | | . | | | | |o 2 | | | | |conf name: | | | | | . | | | | | /usr/local/etc/kea/myconf.txt | | | | |myconf . | | | | | | | | | |168u | | | | | PID | | | | | DHCP4_ALREADY_RUNNING . | | | | | (system crash) | | | | | PID Kea . | | | | | PID . | | | | | kill . | | | | | Ctrl-c . Kea | | | | | . | | | | | Kea SIGHUP . | | | | | SIGHUP | | | | | . | | | | | | | | | | | | | | | : | | | | | ..SS DHCPv4 | | | | | | | | | | DHCPv4 Kea | | | | | . | | | | | DHCPv4 | | | | |. : | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | |# DHCPv4 configuration starts on the next line | | | | |"Dhcp4": { | | | | | | | | | |# First we set up global values | | | | | "valid-lifetime": 4000, | | | | | "renew-timer": 1000, | | | | | "rebind-timer": 2000, | | | | | | | | | |# Next we set up the interfaces to be used by the server. | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth0" ] | | | | | }, | | | | | | | | | |# And we specify the type of lease database | | | | | "lease-database": { | | | | | "type": "memfile", | | | | | "persist": true, | | | | | "name": "/var/lib/kea/dhcp4.leases" | | | | | }, | | | | | | | | | |# Finally, we list the subnets from which we will be leasing addresses. | | | | | "subnet4": [ | | | | | { | | | | | "id": 1, | | | | | "subnet": "192.0.2.0/24", | | | | | "pools": [ | | | | | { | | | | | "pool": "192.0.2.1 - 192.0.2.200" | | | | | } | | | | | ] | | | | | } | | | | | ] | | | | |# DHCPv4 configuration ends with the next line | | | | |} | | | | | | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | . | | | | | . | | | | | (#) () | | | | | . | | | | | ( ) . | | | | | Kea | | | | |. Dhcp4 . | | | | | Dhcp4 "Dhcp4": { | | | | | ( ) . | | | | | Dhcp4 . | | | | | | | | | | . | | | | | JSON (well-formed) | | | | | (scope) | | | | | . | | | | | . | | | | | JSON | | | | | . | | | | | . | | | | | | | | | | . | | | | | DHCPv4 (global) | | | | | . valid-lifetime () | | | | | | | | | | . ( | | | | | .) renew-timer rebind-timer | | | | | ( ) T1 T2 | | | | | (renewal) (rebind) . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | | | | | | | | | | |min-valid-lifetime valid-lifetime max-valid-lifetime . | | | | | Kea 1.9.5 . | | | | | : | | | | | BOOTP | | | | | ( 0xffffffff) . | | | | | | | | | | . | | | | | | | | | | . | | | | | | | | | | . | | | | | shared-network | | | | | ( ) | | | | | . | | | | | DHCP option 51 | | | | | | | | | | . | | | | | | | | | | . | | | | | . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | renew-timer rebind-timer | | | | | . rebind-timer DHCPv4 option code 59 | | | | | valid-lifetime renew-timer | | | | |DHCPv4 option code 58 rebind-timer | | | | |( valid-lifetime rebind-timer ). | | | | | T1 T2 RFC 2131 . | | | | | T1 T2 Sending T1 (Option 58) and T2 (Option 59) | | | | | . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | interfaces-config | | | | | DHCP . interfaces | | | | | . | | | | | () . | | | | | interfaces-config : | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | |"interfaces-config": { | | | | | "interfaces": [ "eth0", "eth1" ] | | | | |}, | | | | |... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (lease database) | | | | | . | | | | | memfile backend | | | | |. (in-memory) | | | | | CSV ( ) . | | | | | | | | | | . lease-database | | | | | . ( : | | | | |type) . | | | | | . . | | | | | Dhcp4 . | | | | | IPv4 . | | | | | DHCPv4 | | | | | . | | | | | DHCP . | | | | | subnet4 . | | | | | . | | | | | | | | | | . | | | | | : subnet | | | | |pools (dynamically allocated pools) | | | | | DHCP . | | | | | . | | | | | subnet4 . | | | | | (syntax) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |{ | | | | |"subnet4": [ | | | | | { | | | | | "id": 1, | | | | | "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], | | | | | "subnet": "192.0.2.0/24" | | | | | }, | | | | | { | | | | | "id": 2, | | | | | "pools": [ { "pool": "192.0.3.100 - 192.0.3.200" } ], | | | | | "subnet": "192.0.3.0/24" | | | | | }, | | | | | { | | | | | "id": 3, | | | | | "pools": [ { "pool": "192.0.4.1 - 192.0.4.254" } ], | | | | | "subnet": "192.0.4.0/24" | | | | | } | | | | |], | | | | |... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | . . | | | | | (context) : | | | | |global Dhcp4 ( ) | | | | | ..SS " (Lease Storage)" | | | | | . | | | | | : memfile | | | | |() MySQL PostgreSQL. | | | | |"Memfile - (Memfile - Basic Storage for Leases)" | | | | | . | | | | | | | | | | Lease Database Configuration . | | | | | | | | | | CSV . | | | | | | | | | | . | | | | | memfile | | | | |Dhcp4/lease-database . type | | | | | "memfile" | | | | | . | | | | | memfile . | | | | |0.0 | | | | |o 2 | | | | |persist: | | | | | . | | | | | true . | | | | | ( ) | | | | | . | | | | | . | | | | |false . | | | | | persist true | | | | | . | | | | |o 2 | | | | |name: | | | | | . : | | | | |"[kea-install-dir]/var/lib/kea/kea-leases4.csv". | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea 2.7.9 | | | | | : "[kea-install-dir]/var/lib/kea". | | | | | | | | | |KEA_DHCP_DATA_DIR (override) . | | | | | name Kea | | | | | . | | | | | name . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |0.0 | | | | |o 2 | | | | |lfc-interval: | | | | | (LFC) . | | | | | () | | | | | . | | | | | . | | | | |lfc-interval 3600 . 0 LFC . | | | | |o 2 | | | | |max-row-errors: | | | | | . | | | | | . | | | | | | | | | | . | | | | | . | | | | |0 | | | | | . | | | | | | | | | |168u | | | | | memfile : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "lease-database": { | | | | | "type": "memfile", | | | | | "persist": true, | | | | | "name": "kea-leases4.csv", | | | | | "lfc-interval": 1800, | | | | | "max-row-errors": 100 | | | | | } | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | kea-leases4.csv | | | | | ( ) | | | | | . | | | | | 1800 (30 ) | | | | | 100 . | | | | |" (Why Is Lease File Cleanup Necessary?)" | | | | | | | | | | . | | | | | . | | | | | | | | | | . | | | | | (append) . | | | | | ( ) | | | | | . | | | | | | | | | | . | | | | | | | | | | . | | | | | (LFC) | | | | | . | | | | | . | | | | | lfc-interval . | | | | | LFC ( ) lfc-interval | | | | | . | | | | | | | | | | | | | | | . (overhead) | | | | | (spawn) | | | | | . | | | | |lfc-interval LFC | | | | | . | | | | | ( ) | | | | | . | | | | | LFC Kea | | | | | LFC . | | | | | . | | | | | LFC Kea Administrator's Reference Manual | | | | |The LFC Process <#kea-lfc> ..SS (Lease Database Configuration) | | | | |: | | | | |0.0 | | | | |3.5 | | | | | DHCPv4 DHCPv6 . . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea (timezone) . First-Time Creation of the MySQL Database <#mysql-database-create> First-Time Creation of the PostgreSQL Database <#pgsql-database-create> . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Dhcp4/lease-database . memfile mysql postgresql : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "type": "mysql", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | ( First-Time Creation of the MySQL Database <#mysql-database-create> First-Time Creation of the PostgreSQL Database <#pgsql-database-create>). | | | | | MySQL PostgreSQL: | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "name": "database-name" , ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | DHCPv4 (host name) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "host": "remote-host-name", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | DHCPv4 . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "host" : "", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "port" : 12345, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (connection timeout) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "connect-timeout" : timeout-in-seconds, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "max-reconnect-tries" : number-of-tries, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . 0 () ( MySQL PostgreSQL). | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "reconnect-wait-time" : number-of-milliseconds, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL PostgreSQL 0 . | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "on-fail" : "stop-retry-exit", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | : | | | | |0.0 | | | | |o 2 | | | | |stop-retry-exit - DHCP max-reconnect-tries . . | | | | |o 2 | | | | |serve-retry-exit - DHCP max-reconnect-tries . | | | | |o 2 | | | | |serve-retry-continue - DHCP . forensic logging . | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | . . | | | | | ( ) . (instance) . | | | | | stop-retry-exit DHCP . . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "retry-on-startup" : true, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | retry-on-startup false () . . (nanny scripts) . retry-on-startup true on-fail . | | | | | host MySQL PostgreSQL . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "lease-database": { | | | | | "user": "user-name", | | | | | "password": "1234", | | | | | ... | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | "" . ( .).SS (Tuning Database Timeouts) | | | | | (hang ). . Kea / (IO) . (timeout) . | | | | | MySQL . read-timeout write-timeout Kea . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "read-timeout" : 10, "write-timeout": 20, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | 0 Kea MySQL . Kea . | | | | | 5.6 MySQL . read-timeout write-timeout MySQL . | | | | | PostgreSQL tcp-user-timeout . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "lease-database": { "tcp-user-timeout" : 10, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | TCP . MySQL Kea host localhost (UNIX domain socket) 127.0.0.1 TCP . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea.2.7.4 libdhcp_mysql.so MySQL . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hooks-libraries": [ | | | | | { | | | | | // the MySQL lease backend hook library required for lease storage. | | | | | "library": "libdhcp_mysql.so" | | | | | }, ... ], ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea.2.7.4 libdhcp_pgsql.so PostgreSQL . . | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hooks-libraries": [ | | | | | { | | | | | // the PostgreSQL lease backend hook library required for lease storage. | | | | | "library": "libdhcp_pgsql.so" | | | | | }, ... ], ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (Hosts Storage) | | | | | Kea (host reservations) . . Kea . Kea . MySQL PostgreSQL . | | | | | MySQL : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "hosts-database": { | | | | | "type": "mysql", | | | | | "name": "kea", | | | | | "user": "kea", | | | | | "password": "1234", | | | | | "host": "localhost", | | | | | "port": 3306 | | | | | } | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | | . . . ( ) . . | | | | | . (read-only) - (read-write) . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | Kea (timezone) . First-Time Creation of the MySQL Database <#mysql-database-create> First-Time Creation of the PostgreSQL Database <#pgsql-database-create> . | | | | | | | | | |168u | | | | | | | | | |Dhcp4/hosts-database . | | | | | mysql postgresql . | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "type": "mysql", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | (lease) ( | | | | | <#supported-databases> ): | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "name": "database-name" , ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | DHCPv4 | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "host": remote-host-name, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | DHCPv4 . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "host" : "", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "port" : 12345, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "max-reconnect-tries" : number-of-tries, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | . 0 () | | | | | | | | | | ( MySQL PostgreSQL). | | | | | | | | | | | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "reconnect-wait-time" : number-of-milliseconds, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | MySQL PostgreSQL 0 | | | | | | | | | | . | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "on-fail" : "stop-retry-exit", ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | : | | | | |0.0 | | | | |o 2 | | | | |stop-retry-exit - | | | | | DHCP . | | | | |max-reconnect-tries . MySQL PostgreSQL . | | | | |o 2 | | | | |serve-retry-exit - | | | | | DHCP . | | | | |max-reconnect-tries . | | | | |o 2 | | | | |serve-retry-continue - DHCP | | | | | . | | | | | | | | | |168u | | | | |: | | | | |0.0 | | | | |3.5 | | | | | | | | | | . | | | | | . | | | | | . | | | | | | | | | |( ) . | | | | | | | | | | . | | | | | | | | | |168u | | | | | | | | | |168u | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "retry-on-startup" : true, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | retry-on-startup false | | | | |() . | | | | | . | | | | | (nanny scripts) . | | | | | retry-on-startup true | | | | | | | | | | on-fail . | | | | | | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "hosts-database": { | | | | | "user": "user-name", | | | | | "password": "1234", | | | | | ... | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | |"" . ( .) | | | | | multiple-storage | | | | | hosts-database hosts-databases | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-databases": [ { "type": "mysql", ... }, ... ], ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (in-file) (in-database) Kea | | | | | . | | | | | | | | | | ..SS - DHCPv4 | | | | | backend . . (inventory) . (view) Kea - (read-only) . | | | | | Kea . ( ) . - / Kea "read-only" . readonly : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hosts-database": { "readonly": true, ... }, ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | false "read-write" . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | readonly MySQL PostgreSQL . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea.2.7.4 (hook library) libdhcp_mysql.so MySQL Host Database Backend . | | | | | (lease) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hooks-libraries": [ | | | | | { | | | | | // the MySQL host backend hook library required for host storage. | | | | | "library": "libdhcp_mysql.so" | | | | | }, ... ], ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea.2.7.4 libdhcp_pgsql.so PostgreSQL Host Database Backend . | | | | | . | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { "hooks-libraries": [ | | | | | { | | | | | // the PostgreSQL host backend hook library required for host storage. | | | | | "library": "libdhcp_pgsql.so" | | | | | }, ... ], ... } | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | Tuning Database Timeouts . | | | | | (Interface Configuration) | | | | | DHCPv4 . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "*" ] | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (wildcard) " " . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3" ] | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (*) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3", "*" ] | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | | DHCP IPv4 . IPv4 : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1/10.0.0.1", "eth3/192.0.2.3" ] | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | IPv4 : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1/10.0.0.1", "eth1/10.0.0.2" ] | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . | | | | | Kea . (data-link layer) . DHCPv4 (raw sockets) IP/UDP . ( iptables) . | | | | | IPv4 (bind) . DHCP DHCP ( BPF) (unicast) . UDP ( ) (relayed) ( UDP). | | | | | (unicast) (relay agents) Kea UDP . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3" ], | | | | | "dhcp-socket-type": "udp" | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | dhcp-socket-type IP/UDP ( "eth1" "eth3") . dhcp-socket-type raw . dhcp-socket-type raw . | | | | | UDP (broadcast) . UDP (relayed) . . | | | | | IPv4 . (broadcast) . IPv4 . "interface-name/address" . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | raw ! Linux BSD . IP/UDP . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | DHCP . . () . . Kea outbound-interface . : same-as-inbound Kea . . use-routing Kea UDP . dhcp-socket-type udp . : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3" ], | | | | | "dhcp-socket-type": "udp", | | | | | "outbound-interface": "use-routing" | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . re-detect false : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3" ], | | | | | "re-detect": false | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (re-detect) . | | | | | config-test <#std-isccmd-config-test> config-set <#std-isccmd-config-set> . | | | | | config-test <#std-isccmd-config-test> config-set <#std-isccmd-config-set> . | | | | | ( lo lo0) IP/UDP . | | | | | Kea FreeBSD jail DHCP (relayed) : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "lo0" ], | | | | | "dhcp-socket-type": "udp" | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | Kea (bind). (port) Kea . DHCP . | | | | | "service-sockets-require-all" Kea . Kea ( false ). | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3" ], | | | | | "service-sockets-require-all": true | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | . . Kea : | | | | |service-sockets-max-retries service-sockets-retry-wait-time. | | | | | Kea . () Kea . | | | | | ( ) . 5000 (5 ) . | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "interfaces-config": { | | | | | "interfaces": [ "eth1", "eth3" ], | | | | | "service-sockets-max-retries": 5, | | | | | "service-sockets-retry-wait-time": 5000 | | | | | }, | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | "service-sockets-max-retries" "service-sockets-require-all" false Kea ..SS (Unicast) DHCPINFORM | | | | | UDP | | | | | Interface Configuration | | | | | . | | | | | UDP | | | | | . | | | | | | | | | | DHCP . | | | | | DHCPINFORM | | | | | . RFC 2131 | | | | | | | | | | DHCPACK unicast ciaddr | | | | |. UDP DHCP | | | | | (data link) IP UDP | | | | | . | | | | | ARP | | | | | . ARP | | | | | DHCP unicast | | | | | . | | | | | ARP | | | | | DHCPINFORM | | | | | ARP DHCPACK . | | | | | ARP DHCP | | | | | DHCP ARP | | | | | (drop) DHCP . DHCP | | | | | . (hooks) | | | | | . | | | | | raw | | | | | DHCP | | | | | ARP . chaddr | | | | | DHCPINFORM . | | | | | DHCPINFORM | | | | | ARP UDP | | | | | raw . | | | | | IPv4 | | | | | (subnet ID) | | | | | . (leases) | | | | | . | | | | | . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | (Subnet ID) 4294967295 . | | | | | | | | | |168u | | | | | | | | | |168u | | | | | | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [ | | | | | { | | | | | "subnet": "192.0.2.0/24", | | | | | "id": 1024, | | | | | ... | | | | | } | | | | | ] | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | IPv4 | | | | | . Kea | | | | | (non-canonical) | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [ | | | | | { | | | | | "subnet": "192.0.2.1/24", | | | | | ... | | | | | } | | | | | ] | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | "192.0.2.0/24" | | | | | | | | | | . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | | | | | |( How the DHCPv4 Server Selects a Subnet for the Client ). | | | | | | | | | |168u | | | | | | | | | |168u | | | | | IPv4 | | | | | DHCPv4 . | | | | | (pool) | | | | | . | | | | | 192.0.2.0/24 . | | | | | 192.0.2.10 192.0.2.20 DHCPv4 | | | | |. : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [ | | | | | { | | | | | "subnet": "192.0.2.0/24", | | | | | "pools": [ | | | | | { "pool": "192.0.2.10 - 192.0.2.20" } | | | | | ], | | | | | ... | | | | | } | | | | | ] | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | subnet | | | | | pools | | | | | | | | | | . | | | | | pool | | | | |. pool | | | | | . | | | | | | | | | | 192.0.2.64/26 . | | | | | 192.0.2.64 192.0.2.127 | | | | |192.0.2.64/26 . Dhcp4 | | | | | . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [ | | | | | { | | | | | "subnet": "192.0.2.0/24", | | | | | "pools": [ | | | | | { "pool": "192.0.2.10-192.0.2.20" }, | | | | | { "pool": "192.0.2.64/26" } | | | | | ], | | | | | ... | | | | | } | | | | | ], | | | | | ... | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | (white space) | | | | | . | | | | | . | | | | | | | | | | . | | | | | . | | | | | : | | | | |0.0 | | | | |3.5 | | | | | | | | | |"Dhcp4": { | | | | | "subnet4": [ | | | | | { | | | | | "subnet": "192.0.2.0/24", | | | | | "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], | | | | | ... | | | | | }, | | | | | { | | | | | "subnet": "192.0.3.0/24", | | | | | "pools": [ { "pool": "192.0.3.100 - 192.0.3.200" } ], | | | | | ... | | | | | }, | | | | | { | | | | | "subnet": "192.0.4.0/24", | | | | | "pools": [ { "pool": "192.0.4.1 - 192.0.4.254" } ], | | | | | ... | | | | | } | | | | | ] | | | | |} | | | | | | | | | | | | | | |168u | | | | | | | | | |168u | | | | | DHCPv4 / | | | | |(prefix/length) . | | | | | | | | | | ( ) ( | | | | |broadcast) . 192.0.3.0/24 | | | | | 192.0.3.0 192.0.3.255 . | | | | | . | | | | | min-max . | | | | | 24 | | | | | .0 .255 . | | | | | 10.0.0.0/8 10.x.y.0 | | | | | 10.x.y.255 x y | | | | | RFC 10.0.0.0 10.255.255.255 . | | | | | exclude-first-last-24 ( Kea DHCPv4 Compatibility Configuration Parameters) | | | | | | | | | | . | | | | |true 24 ( | | | | | ) false . | | | | | "exclude" ( ) | | | | | | | | | | .0 .255 | | | | | . | | | | |: | | | | |0.0 | | | | |3.5 | | | | | | | | | | Kea : | | | | |box center; | | | | |l|l|l. | | | | | Kea | | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | | | | : | | | | | DHCP4_PARSER_FAIL | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (global) | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ | | | | | | | | : | | | | | DHCP4_PARSER_FAIL | | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------+-----------------------------------+--------------------+ RFC 2131 T1 T2 . . kea-dhcp4 <#std-iscman-kea-dhcp4> . . : o renew-timer - T1 . o rebind-timer - T2 . T2 . T1 T2 T1 T2 T2 T1 . : o calculate-tee-times - true T1 T2 . false . o t1-percent - T1. 0.0 1.0 t2-percent . RFC 2131 0.50 . o t2-percent - T2. 0.0 1.0 t1-percent . RFC 2131 .875 . : calculate-tee-times true . shared-network . (global) (shared-networks ) . DHCPv4 DHCPv4 . Parameter Request List . Parameter Request List "Domain Server" "Client FQDN" . << DHCPv4 >> DHCPv4 . . Parameter Request List . DNS . . "Dhcp4": { "option-data": [ { "name": "domain-name-servers", "code": 6, "space": "dhcp4", "csv-format": true, "data": "192.0.2.1, 192.0.2.2" }, ... ] } name code . space dhcp4 ( ) DHCPv4 . csv-format true . : "Dhcp4": { "option-data": [ { "name": "domain-name-servers", "data": "192.0.2.1, 192.0.2.2" }, ... ] } . always-send true : "Dhcp4": { "option-data": [ { "name": "domain-name-servers", "data": "192.0.2.1, 192.0.2.2", "always-send": true }, ... ] } Parameter Request List ( /vendor) : "Dhcp4": { "option-data": [ { "name": "domain-name-servers", "data": "192.0.2.1, 192.0.2.2", "always-send": true }, ... ], "subnet4": [ { "subnet": "192.0.3.0/24", "option-data": [ { "name": "domain-name-servers", "data": "192.0.3.1, 192.0.3.2" }, ... ], ... }, ... ], ... } domain-name-servers always-send 192.0.3.0/24 . always-send never-send true . Parameter Request List ( vendor) : "Dhcp4": { "option-data": [ { "name": "domain-name-servers", "data": "192.0.2.1, 192.0.2.2" }, ... ], "subnet4": [ { "subnet": "192.0.3.0/24", "option-data": [ { "name": "domain-name-servers", "never-send": true }, ... ], ... }, ... ], ... } domain-name-servers 192.0.3.0/24 . never-send always-send true . : always-send never-send (sticky) . - . . : never-send libdhcp_flex_option.so <#std-ischooklib-libdhcp_flex_option.so> . always-send never-send (custom space) . : Kea 2.7.4 Option Class-Tagging <#option-class-tagging> . name . << DHCPv4 >> . code . (option space) dhcp4 DHCPv4 . Nested DHCPv4 Options (Custom Option Spaces) . CSV ( ) . . data . . csv-format false . domain-name-servers : 192.0.3.1 192.0.3.2. csv-format false . "Dhcp4": { "option-data": [ { "name": "domain-name-servers", "code": 6, "space": "dhcp4", "csv-format": false, "data": "C0 00 03 01 C0 00 03 02" }, ... ], ... } Kea : Delimited octets - () (":" " ") . . "ab:cd:ef" "ab cd ef" . o String of digits - "0x". "0xabcdef" "abcdef" . Kea . ( csv-format false ): "Dhcp4": { "option-data": [ { "name": "user-class", "code": 77, "space": "dhcp4", "csv-format": false, "data": "'convert this text to binary'" }, ... ], ... } option-data Unspecified Parameters for DHCPv4 Option Configuration . (override) . (global) . . DNS DNS 192.0.2.3 : "Dhcp4": { "subnet4": [ { "option-data": [ { "name": "domain-name-servers", "code": 6, "space": "dhcp4", "csv-format": true, "data": "192.0.2.3" }, ... ], ... }, ... ], ... } (address pool) . . DNS : "Dhcp4": { "subnet4": [ { "pools": [ { "pool": "192.0.2.1 - 192.0.2.200", "option-data": [ { "name": "domain-name-servers", "data": "192.0.2.3" }, ... ], ... }, ... ], ... }, ... ], ... } class host-reservation . Kea ( ) : host reservation pool subnet shared network class global. (, U+002C) (\\, U+005C) (escape ). CSV JSON (\,) JSON . "foo,bar" : "Dhcp4": { "subnet4": [ { "pools": [ { "option-data": [ { "name": "boot-file-name", "data": "foo\\,bar" } ] }, ... ], ... }, ... ], ... } . time-servers IPv4 NTP . Custom DHCPv4 Options () . RFC . Kea . Custom DHCPv4 Options dhcp4 . RFC . DHCPv4 . "Name" "Code" name/code option-data . "Type" List of standard DHCP option types ..SS DHCPv4 +---------------------------------------+--------+---------------+--------------------+-----------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |time-offset | 2 | int32 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |routers | 3 | ipv4-address | true | true | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |time-servers | 4 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |name-servers | 5 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |domain-name-servers | 6 | ipv4-address | true | true | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |log-servers | 7 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |cookie-servers | 8 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |lpr-servers | 9 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |impress-servers | 10 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |resource-location-servers | 11 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |boot-size | 13 | uint16 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |merit-dump | 14 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |domain-name | 15 | fqdn | false | true | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |swap-server | 16 | ipv4-address | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |root-path | 17 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |extensions-path | 18 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |ip-forwarding | 19 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |non-local-source-routing | 20 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |policy-filter | 21 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |max-dgram-reassembly | 22 | uint16 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |default-ip-ttl | 23 | uint8 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |path-mtu-aging-timeout | 24 | uint32 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |path-mtu-plateau-table | 25 | uint16 | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |interface-mtu | 26 | uint16 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |all-subnets-local | 27 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |broadcast-address | 28 | ipv4-address | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |perform-mask-discovery | 29 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |mask-supplier | 30 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |router-discovery | 31 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |router-solicitation-address | 32 | ipv4-address | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |static-routes | 33 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |trailer-encapsulation | 34 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |arp-cache-timeout | 35 | uint32 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |ieee802-3-encapsulation | 36 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |default-tcp-ttl | 37 | uint8 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |tcp-keepalive-interval | 38 | uint32 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |tcp-keepalive-garbage | 39 | boolean | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nis-domain | 40 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nis-servers | 41 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |ntp-servers | 42 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |vendor-encapsulated-options | 43 | empty | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |netbios-name-servers | 44 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |netbios-dd-server | 45 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |netbios-node-type | 46 | uint8 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |netbios-scope | 47 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |font-servers | 48 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |x-display-manager | 49 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |dhcp-option-overload | 52 | uint8 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |dhcp-server-identifier | 54 | ipv4-address | false | true | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |dhcp-message | 56 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |dhcp-max-message-size | 57 | uint16 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |vendor-class-identifier | 60 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nwip-domain-name | 62 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nwip-suboptions | 63 | binary | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nisplus-domain-name | 64 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nisplus-servers | 65 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |tftp-server-name | 66 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |boot-file-name | 67 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |mobile-ip-home-agent | 68 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |smtp-server | 69 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |pop-server | 70 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nntp-server | 71 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |www-server | 72 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |finger-server | 73 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |irc-server | 74 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |streettalk-server | 75 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |streettalk-directory-assistance-server | 76 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |user-class | 77 | binary | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |slp-directory-agent | 78 | record | true | false | | | | (boolean, | | | | | | ipv4-address) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |slp-service-scope | 79 | record | false | false | | | | (boolean, | | | | | | string) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nds-servers | 85 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nds-tree-name | 86 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |nds-context | 87 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |bcms-controller-names | 88 | fqdn | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |bcms-controller-address | 89 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |client-system | 93 | uint16 | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |client-ndi | 94 | record | false | false | | | | (uint8, | | | | | | uint8, uint8) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |uuid-guid | 97 | record | false | false | | | | (uint8, | | | | | | binary) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |uap-servers | 98 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |geoconf-civic | 99 | binary | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |pcode | 100 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |tcode | 101 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v6-only-preferred | 108 | uint32 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |netinfo-server-address | 112 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |netinfo-server-tag | 113 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v4-captive-portal | 114 | string | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |auto-config | 116 | uint8 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |name-service-search | 117 | uint16 | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |domain-search | 119 | fqdn | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |classless-static-route | 121 | internal | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |cablelabs-client-conf | 122 | empty | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |vivco-suboptions | 124 | record | false | false | | | | (uint32, | | | | | | binary) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |vivso-suboptions | 125 | uint32 | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |pana-agent | 136 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v4-lost | 137 | fqdn | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |capwap-ac-v4 | 138 | ipv4-address | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |sip-ua-cs-domains | 141 | fqdn | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v4-sztp-redirect | 143 | tuple | true | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |rdnss-selection | 146 | record | true | false | | | | (uint8, | | | | | | ipv4-address, | | | | | | ipv4-address, | | | | | | fqdn) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v4-portparams | 159 | record | false | false | | | | (uint8, psid) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v4-dnr | 162 | record | false | false | | | | (uint16, | | | | | | uint16, | | | | | | uint8, fqdn, | | | | | | binary) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |option-6rd | 212 | record | true | false | | | | (uint8, | | | | | | uint8, | | | | | | ipv6-address, | | | | | | ipv4-address) | | | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ |v4-access-domain | 213 | fqdn | false | false | +---------------------------------------+--------+---------------+--------------------+-----------------------------+ kea4/all-options.json <#config- example-kea4-all-options-json> . : default-url Kea 2.1.2 v4-captive-portal RFC 8910 . . default-url . default-url v4-captive-portal . Kea Kea ..SS DHCPv4 Kea +-----------------------------+--------+----------------+-----------------------------------------+ | | | | | +-----------------------------+--------+----------------+-----------------------------------------+ |subnet-mask | 1 | ipv4-address | | | | | | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |host-name | 12 | string | | | | | | | | | | | | | | | | DNS | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-requested-address | 50 | ipv4-address | | | | | | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-lease-time | 51 | uint32 | | | | | | | | | | | valid-lifetime | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-message-type | 53 | string | | | | | | | | | | | | | | | | . | | | | | | | | | | Kea | | | | | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-parameter-request-list | 55 | uint8 array | | | | | | | | | | | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-renewal-time | 58 | uint32 | | | | | | renew-timer | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-rebinding-time | 59 | uint32 | | | | | | rebind-timer | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-client-identifier | 61 | binary | | | | | | | | | | | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |fqdn | 81 | record (uint8, | | | | | uint8, uint8, | DDNS D2. | | | | fqdn) | | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-agent-options | 82 | empty | | | | | | (relay agent) | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | RAI | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |authenticate | 90 | binary | | | | | | | | | | | Kea | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |client-last-transaction-time | 91 | uint32 | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |associated-ip | 92 | ipv4-address | | | | | array | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |subnet-selection | 118 | ipv4-address | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |status-code | 151 | record (uint8, | | | | | string) | bulk | | | | | leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |base-time | 152 | uint32 | | | | | | bulk | | | | | leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |start-time-of-state | 153 | uint32 | | | | | | bulk | | | | | leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |query-start-time | 154 | uint32 | | | | | | | | | | | bulk leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |query-end-time | 155 | uint32 | | | | | | | | | | | bulk leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |dhcp-state | 156 | uint8 | | | | | | bulk | | | | | leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ |data-source | 157 | uint8 | | | | | | bulk | | | | | leasequery | | | | | . | +-----------------------------+--------+----------------+-----------------------------------------+ ..SS " DHCP (List of standard DHCP option types)" +-------------+-----------------------------------------------------------+ | | | +-------------+-----------------------------------------------------------+ |binary | | | | | | | | | | | | | . | +-------------+-----------------------------------------------------------+ |boolean | | | | true false. | +-------------+-----------------------------------------------------------+ |empty | | | | (sub-options) | | | . | +-------------+-----------------------------------------------------------+ |fqdn | | | | ( www.example.com). | +-------------+-----------------------------------------------------------+ |ipv4-address | IPv4 | | | | | | ( 192.0.2.1). | +-------------+-----------------------------------------------------------+ |ipv6-address | IPv6 | | | | | | ( 2001:db8::1). | +-------------+-----------------------------------------------------------+ |ipv6-prefix | IPv6 | | | | | | CIDR | | | 2001:db8:1::/64. | | | | | | | | | | | | . | +-------------+-----------------------------------------------------------+ |psid | PSID PSID | | | | | | 3/4 | | | PSID=3 PSID | | | . | | | (wire | | | format) | | | PSID ( | | | ) | | | PSID ( | | | | | | "0011000000000000b" | | | ) | | | . | | | PSID | | | . | | | PSID | | | RFC 7597 | | | . | +-------------+-----------------------------------------------------------+ |record | | | | | | | | | | ( "record" "empty") | | | . (flag) | | | | | | . | +-------------+-----------------------------------------------------------+ |string | . | | | Kea | | | | | | | | | (null) | | | | | | "string" | | | . | | | | | | RFC 2132 . | +-------------+-----------------------------------------------------------+ |tuple | | | | | | | | | | | | | | | | . | | | DHCPv4 DHCPv6 | | | . | | | | | | | | | | | | DHCPv4 SZTP Redirect Option | | | bootstrap-server-list | | | (tuples) | | | | | | URI-length | | | | | | . | +-------------+-----------------------------------------------------------+ |uint8 | | | | | | | . | +-------------+-----------------------------------------------------------+ |uint16 | | | | | | | | | | . | +-------------+-----------------------------------------------------------+ |uint32 | | | | | | | | | | . | +-------------+-----------------------------------------------------------+ |int8 | | | | | | | -128 127. | +-------------+-----------------------------------------------------------+ |int16 | | | | | | | -32768 32767. | +-------------+-----------------------------------------------------------+ |int32 | | | | | | | -2147483648 2147483647. | +-------------+-----------------------------------------------------------+ : classless-static-route "internal" : subnet1/prefix_len1 - router1, subnetN/prefix_lenN - routerN. : 10.229.0.128/25 - 10.229.0.1, 10.198.122.47/32 - 10.198.122.1 Kea Relay Agent Information ( RAI RFC 3046 ) relay option agent option option 82 . (container) . RAI Kea . RAI Kea Kea . (flexible ID) Kea ..SS RAI Kea +-------------------+--------+------------------------------+ | | | | +-------------------+--------+------------------------------+ |circuit-id | 1 | | | | | | | | | | | | | host-reservation-identifiers | | | | circuit-id | | | | | | | | . | +-------------------+--------+------------------------------+ |remote-id | 2 | | | | | | | | | flex-id | | | | | | | | | | | | | | | | . | +-------------------+--------+------------------------------+ |link-selection | 5 | | | | | | | | | | | | | | | | | | | | | | | | | . | +-------------------+--------+------------------------------+ |subscriber-id | 6 | | | | | | | | | flex-id | | | | | | | | | | | | | | | | . | +-------------------+--------+------------------------------+ |server-id-override | 11 | | | | | | | | | Kea | | | | | | | | server-id | | | | . | +-------------------+--------+------------------------------+ |relay-id | 12 | | | | | | | | | | +-------------------+--------+------------------------------+ |relay-port | 19 | | | | | | | | | Kea | | | | | | | | | | | | | | | | | | | | . | +-------------------+--------+------------------------------+ RAI ( ) / libdhcp_flex_id.so <#std-ischooklib-libdhcp_flex_id.so> . << >> (Client Classification) <#classify> . relay4[option-code].hex RAI remote-id ( ) relay4[2].hex . remote-id : "Dhcp4": { "client-classes": [ { "name": "remote-id-1020304", "test": "relay4[2].hex == 0x01020304", ... } ], ... } (pools) . (host reservations) . CableLabs Client Conf ("cablelabs-client-conf" ) "cablelabs-client-conf" . CableLabs Client Conf Kea +-----------------------+--------+--------------------------+ | | | | +-----------------------+--------+--------------------------+ |tsp-primary-server | 1 | IPv4 | +-----------------------+--------+--------------------------+ |tsp-secondary-server | 2 | IPv4 | +-----------------------+--------+--------------------------+ |tsp-as-parameters | 4 | | | | | | | | | | | | | uint32 | +-----------------------+--------+--------------------------+ |tsp-ap-parameters | 5 | | | | | | | | | | | | | uint32 | +-----------------------+--------+--------------------------+ |tsp-realm | 6 | | | | | | | | | | | | | (FQDN) | +-----------------------+--------+--------------------------+ |tsp-use-tgt | 7 | (boolean) | +-----------------------+--------+--------------------------+ |tsp-provisioning-timer | 8 | uint8 | +-----------------------+--------+--------------------------+ |tsp-sct | 9 | uint16 | +-----------------------+--------+--------------------------+ |kdc-server | 10 | | | | | | | | | | | | | IPv4 | +-----------------------+--------+--------------------------+ RFC 3495 ( realm ) RFC 3594 RFC 3634 . : TSP IPv4 FQDN . Kea IPv4 FQDN uint8 ( 0) ipv4-address uint8 ( 1) fqdn CSV . Kea ( ) DHCPv4 . DHCPv4 foo 222 32 . : "Dhcp4": { "option-def": [ { "name": "foo", "code": 222, "type": "uint32", "array": false, "record-types": "", "space": "dhcp4", "encapsulate": "" }, ... ], ... } false array uint32 . : record-types encapsulate. . record-types type "record" . . . option-def ( ) . name code type . array false . record-types encapsulate ("") . space dhcp4 . . . "Dhcp4": { "option-data": [ { "name": "foo", "code": 222, "space": "dhcp4", "csv-format": true, "data": "12345" }, ... ], ... } ( uint8 string ipv4-address ) . IPv4 16 (boolean) . : "Dhcp4": { "option-def": [ { "name": "bar", "code": 223, "space": "dhcp4", "type": "record", "array": false, "record-types": "ipv4-address, uint16, boolean, string", "encapsulate": "" }, ... ], ... } type "record" . record-types << DHCP>> (List of standard DHCP option types) . option-data : "Dhcp4": { "option-data": [ { "name": "bar", "space": "dhcp4", "code": 223, "csv-format": true, "data": "192.0.2.100, 123, true, Hello World" } ], ... } csv-format true data . data record-types . array true type "record" : "Dhcp4": { "option-def": [ { "name": "bar", "code": 223, "space": "dhcp4", "type": "record", "array": true, "record-types": "ipv4-address, uint16", "encapsulate": "" }, ... ], ... } IPv4 16 . : true false . "true" "false" 0 1 "0" "1" . : (decimal) (hexadecimal) . ( abcd) 0x ( 0xabcd) . 224 254 . (global scope) client-class (context) . PXEClient: "Dhcp4": { "client-classes": [ { "name": "pxeclient", "test": "option[vendor-class-identifier].text == 'PXEClient'", "option-def": [ { "name": "configfile", "code": 209, "type": "string" } ], ... }, ... ], ... } Vendor-Specific Information (VSI) ( 43) (vendor-specific) (sub-options) . 43 : "Dhcp4": { "option-def": [ { "name": "cookie", "code": 1, "type": "string", "space": "APC" }, { "name": "mtftp-ip", "code": 1, "type": "ipv4-address", "space": "PXE" }, ... ], "client-classes": [ { "name": "APC", "test": "option[vendor-class-identifier].text == 'APC'", "option-def": [ { "name": "vendor-encapsulated-options", "type": "empty", "encapsulate": "APC" } ], "option-data": [ { "name": "cookie", "space": "APC", "data": "1APC" }, { "name": "vendor-encapsulated-options" }, ... ], ... }, { "name": "PXE", "test": "option[vendor-class-identifier].text == 'PXE'", "option-def": [ { "name": "vendor-encapsulated-options", "type": "empty", "encapsulate": "PXE" } ], "option-data": [ { "name": "mtftp-ip", "space": "PXE", "data": "0.0.0.0" }, { "name": "vendor-encapsulated-options" }, ... ], ... }, ... ], ... } (decode) VSI : 1. 2. (global) 3. (last-resort) DHCPv4 Vendor-Specific Options ( Kea). : Vendor-Specific Information ( 43) . client class VSI binary (encapsulation) . : Vendor-Specific Information ( 43) 0 255 RFC 2132 PAD END . 0 255 . Kea 0 255 . 0 / 255 VSI PAD END . 43 ( unpacking ) (classification) . 43 . unpack 43 : o . o client class client class . o client class . "vendor-encapsulated-options-space" . : o client class 43 . o . o . / (per vendor) . : ( 43 224 254) DHCPv4 . : Kea (hook) libdhcp_flex_option.so: Flexible Option Actions for Option Value Settings <#hooks-flex-option> . (Knowledgebase) : . (option space) kea-dhcp4 <#std-iscman-kea-dhcp4> : dhcp4 ( DHCPv4) "vendor-encapsulated-options-space" . (Vendor-Specific Information - 43) . foo 1 IPv4 . foo Vendor-Specific Information . : "Dhcp4": { "option-def": [ { "name": "foo", "code": 1, "space": "vendor-encapsulated-options-space", "type": "record", "array": false, "record-types": "ipv4-address, uint16, string", "encapsulate": "" } ], ... } "vendor-encapsulated-options-space" . : "Dhcp4": { "option-data": [ { "name": "foo", "space": "vendor-encapsulated-options-space", "code": 1, "csv-format": true, "data": "192.0.2.3, 123, Hello World" } ], ... } Vendor-Specific Information foo . . "Dhcp4": { "option-data": [ { "name": "vendor-encapsulated-options" } ], ... } . "Dhcp4": { "option-data": [ { "code": 43 } ], ... } "vendor option" 125 . "vendor-independent vendor-specific information option" "vivso" . vivso . enterprise-number vendor-id . Kea : o vendor-4491: Cable Television Laboratories, Inc. DOCSIS3: +----------------+-----------------+-----------------------------+ | | | | | | | | +----------------+-----------------+-----------------------------+ |1 | oro | ORO ( | | | | Option Request Option) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +----------------+-----------------+-----------------------------+ |2 | tftp-servers | | | | | | | | | IPv4 | | | | TFTP | | | | | | | | | | | | | | | | . | +----------------+-----------------+-----------------------------+ Kea (vendor space) . Kea . . (home gateway) Genexis vivso 125 2 URL TFTP . : Kea (client classification). : "Dhcp4": { // First, we need to define that the sub-option 2 in vivso option for // vendor-id 25167 has a specific format (it's a plain string in this example). // After this definition, we can specify values for option tftp. "option-def": [ { // We define a short name, so the option can be referenced by name. // The option has code 2 and resides within vendor space 25167. // Its data is a plain string. "name": "tftp", "code": 2, "space": "vendor-25167", "type": "string" } ], "client-classes": [ { // We now need to tell Kea how to recognize when to use vendor space 25167. // Usually we can use a simple expression, such as checking if the device // sent a vivso option with specific vendor-id, e.g. "vendor[4491].exists". // Unfortunately, Genexis is a bit unusual in this aspect, because it // doesn't send vivso. In this case we need to look into the vendor class // (option code 60) and see if there's a specific string that identifies // the device. Alternatively, one can make use of the automated `VENDOR_CLASS_` // client class and replace "name" and "test" with `"name": "VENDOR_CLASS_HMC1000"` // and no test expression. "name": "cpe_genexis", "test": "substring(option[60].hex,0,7) == 'HMC1000'", // Once the device is recognized, we want to send two options: // the vivso option with vendor-id set to 25167, and a sub-option 2. "option-data": [ { "name": "vivso-suboptions", "data": "25167" }, // The sub-option 2 value is defined as any other option. However, // we want to send this sub-option 2, even when the client didn't // explicitly request it (often there is no way to do that for // vendor options). Therefore we use always-send to force Kea // to always send this option when 25167 vendor space is involved. { "name": "tftp", "space": "vendor-25167", "data": "tftp://192.0.2.1/genexis/HMC1000.v1.3.0-R.img", "always-send": true } ] } ] } Kea DHCP . . RFC . ( DOCSIS 4491 ) Kea ( 1). Genexis ( 25167 ) Kea . (persistent options) . Kea . "always-send": true . 25167 . always-send 25167 . kea-dhcp4 <#std-iscman-kea-dhcp4> . (enterprise number) "always-send": true vivso-suboptions ( 125) . "Dhcp4": { "option-data": [ # Typically DHCPv4 clients will send a Parameter Request List option (code 55) for # vivso-suboptions (code 125), and that is enough for Kea to understand that it needs to # send the option. These options still need to be defined in the configuration, one per # each vendor, but they don't need "always-send" enabled in that case. For misbehaving # clients that do not explicitly request it, one may alternatively set "always-send" # to true for them as well. This is referring to the following two entries in option-data. { "name": "vivso-suboptions", "space": "dhcp4", "data": "2234" }, { "name": "vivso-suboptions", "space": "dhcp4", "data": "3561" }, { "always-send": true, "data": "tagged", "name": "tag", "space": "vendor-2234" }, { "always-send": true, "data": "https://example.com:1234/path", "name": "url", "space": "vendor-3561" } ], "option-def": [ { "code": 22, "name": "tag", "space": "vendor-2234", "type": "string" }, { "code": 11, "name": "url", "space": "vendor-3561", "type": "string" } ] } <> . Kea . 60 43 . kea4/vendor-specific.json <#config-example-kea4-vendor-specific-json> kea4/vivso.json <#config-example-kea4-vivso-json> . : kea-dhcp4 <#std-iscman-kea-dhcp4> Vendor Class Identifier ( 60) vivso ( 125) . kea-dhcp4 <#std-iscman-kea-dhcp4> 1 DOCSIS ( ORO) . vivco-suboptions ( 124) . . (dhcp4) (sub-options) . . ( DHCPv4 Vendor-Specific Options ). DHCPv4 container 222 1 2 : "Dhcp4": { "option-def": [ { "name": "subopt1", "code": 1, "space": "isc", "type": "ipv4-address", "record-types": "", "array": false, "encapsulate": "" }, { "name": "subopt2", "code": 2, "space": "isc", "type": "string", "record-types": "", "array": false, "encapsulate": "" } ], ... } ( "isc"). DHCPv4 : "Dhcp4": { "option-def": [ { "name": "container", "code": 222, "space": "dhcp4", "type": "empty", "array": false, "record-types": "", "encapsulate": "isc" }, ... ], ... } encapsulate . type "empty" . : { "Dhcp4": { "option-data": [ { "name": "subopt1", "code": 1, "space": "isc", "data": "192.0.2.3" }, { "name": "subopt2", "code": 2, "space": "isc", "data": "Hello world" }, { "name": "container", "code": 222, "space": "dhcp4" } ] } } . container uint16 type "uint16" . ( : DHCP uint16 .) data -- "123" -- uint16 container ..SS DHCPv4 . . : o name - . . o code - name . ( option-def ) . ( ) . . o space - dhcp4 DHCPv4 . o data - . ( / boolean) . data . o csv-format - DHCP . kea-dhcp4 <#std-iscman-kea-dhcp4> (RFC 3396) . Kea 2.1.6 ( ) . (unwrapped) . . { "option-def": [ { "array": false, "code": 240, "encapsulate": "", "name": "my-option", "space": "dhcp4", "type": "string" } ], "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "option-data": [ { "always-send": false, "code": 240, "name": "my-option", "csv-format": true, "data": "data \ -00010203040506070809-00010203040506070809-00010203040506070809-00010203040506070809 \ -00010203040506070809-00010203040506070809-00010203040506070809-00010203040506070809 \ -00010203040506070809-00010203040506070809-00010203040506070809-00010203040506070809 \ -data", "space": "dhcp4" } ] } ] } ], ... } : Kea . ( ) . . : . ( ) . . IPv6-Only Preferred v6-only-preferred ( ) kea-dhcp4 <#std-iscman-kea- dhcp4> RFC 8925 : ( DHCP ) 0.0.0.0 ..SS DHCPv4 DHCPv4 (stateless) IP ( ) DNS . DHCPINFORM ciaddr . DHCPACK (unicast) ("yiaddr" ). DHCPINFORM . : "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "option-data": [ { "name": "domain-name-servers", "code": 6, "data": "192.0.2.200,192.0.2.201", "csv-format": true, "space": "dhcp4" } ] } ] } DHCPINFORM DHCPACK . (pool) . : o DHCPINFORM (relay) giaddr . o DHCPINFORM ciaddr . o DHCPINFORM ciaddr IP . o DHCPINFORM IP . DHCPv4 DHCPv4 (client classification) . Client Classification <#classify> . DHCP . DHCP . Kea (deferred unpacking) TFTP (boot file) . Kea . (link) . : (lease) A B . . Configuring Subnets With Class Information <#classification-subnets> . (shared network) . : Configuring Pools With Class Information <# classification-pools> . . KNOWN UNKNOWN ( ) . : . KNOWN/UNKNOWN . . . . DROP (drop) (debug) . KNOWN/UNKNOWN (host reservation lookup) . true . . Client Classification <#classify> . . (vendor class options) . . . true . : early-global-reservations-lookup . : o o UNKNOWN : . : 3.1.7 Kea REJECT DROP DHCPOFFER DHCPDISCOVER DHCPREQUEST DHCPNAK . . : next-server ( IPv4 siaddr ) server-hostname ( sname ) boot-file-name ( file ). PXE ( ) . PXE EFI x86-64 . 2.1 RFC 4578 (errata) . "Dhcp4": { "client-classes": [ { "name": "ipxe_efi_x64", "test": "option[93].hex == 0x0007", "next-server": "192.0.2.254", "server-hostname": "hal9000", "boot-file-name": "/dev/null" }, ... ], ... } . : . () . VENDOR_CLASS_ . docsis3.0 VENDOR_CLASS_docsis3.0 . : VENDOR_CLASS_docsis3.0 VENDOR_CLASS_docsis3.0 next-server boot-file-name . VENDOR_CLASS_ . 192.0.2.10 192.0.2.20 Dhcp4 DOCSIS 3.0 (pool) . "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10 - 192.0.2.20" } ], "client-classes": [ "VENDOR_CLASS_docsis3.0" ] } ], ... } (subnet) . Client_foo . ( ) foo . 192.0.2.10 192.0.2.20 DNS 192.0.2.1 192.0.2.2 . "Dhcp4": { "client-classes": [ { "name": "Client_foo", "test": "substring(option[61].hex,0,3) == 'foo'", "option-data": [ { "name": "domain-name-servers", "code": 6, "space": "dhcp4", "csv-format": true, "data": "192.0.2.1, 192.0.2.2" } ] }, ... ], "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10 - 192.0.2.20" } ], "client-classes": [ "Client_foo" ] }, ... ], ... } (scope) pool subnet shared network . (test expressions) . evaluate-additional-classes pool subnet shared network . (additional) pool/subnet/shared network (output-option) . only-in-additional-list false . true evaluate-additional-classes . subnet : "Dhcp4": { "client-classes": [ { "name": "Client_foo", "test": "member('ALL')", "only-in-additional-list": true }, ... ], "subnet4": [ { "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10 - 192.0.2.20" } ], "evaluate-additional-classes": [ "Client_foo" ], ... }, ... ], ... } subnet . (precedence) option-data subnet option-data . option-data subnet . shared network pool . : pool subnet shared network option-data . 2.7.4 Kea true . : (lease assignment) ( valid-lifetime offer-lifetime) only-in-additional-list true . : 2.7.4 Kea only-if-required require-client-classes only-in-additional-list evaluate-additional-classes . . : Vendor-Identifying Vendor Options : (code point) vivco-suboptions ( 124) vivso-suboptions ( 125) (vendor identifier) . vivso-suboptions vivco-suboptions . : "Dhcp4": { "option-data": [ { "name": "vivco-suboptions", "always-send": true, "data": "1234, 03666f6f" }, { "name": "vivco-suboptions", "always-send": true, "data": "5678, 03626172" }, ... ], ... } option-data (1234 5678) : vivco-suboptions ..SS "DDNS DHCPv4" kea-dhcp4 <#std-iscman-kea-dhcp4> DHCP-DDNS kea-dhcp-ddns <#std- iscman-kea-dhcp-ddns> ( "D2" ) DNS . NameChangeRequests NCR . NCR : 1. () DNS . 2. DNS ( A) DNS ( PTR) . 3. (FQDN) (lease) DHCID ( FQDN). DDNS : 1. (Connectivity Parameters) kea-dhcp4 <#std-iscman-kea-dhcp4> D2 . dhcp-ddns kea-dhcp4 <#std-iscman-kea-dhcp4> . : o enable-updates o server-ip o server-port o sender-ip o sender-port o max-queue-size o ncr-protocol o ncr-format 2. (Behavioral Parameters) FQDN . dhcp-ddns global shared-network subnet / pool . global shared-network subnet pool . . : o ddns-send-updates o ddns-override-no-update o ddns-override-client-update o ddns-replace-client-name o ddns-generated-prefix o ddns-qualifying-suffix o ddns-update-on-renew o ddns-conflict-resolution-mode o ddns-ttl o ddns-ttl-percent o ddns-ttl-min o ddns-ttl-max o hostname-char-set o hostname-char-replacement : Kea 2.7.6 pool . : FQDN enable-updates ddns-send-updates false DNS . ddns-replace-client-name ddns-generated-prefix ddns-qualifying-suffix hostname-char-set hostname-char-replacement . : "Dhcp4": { "dhcp-ddns": { // Connectivity parameters "enable-updates": false, "server-ip": "127.0.0.1", "server-port":53001, "sender-ip":"", "sender-port":0, "max-queue-size":1024, "ncr-protocol":"UDP", "ncr-format":"JSON" }, // Behavioral parameters (global) "ddns-send-updates": true, "ddns-override-no-update": false, "ddns-override-client-update": false, "ddns-replace-client-name": "never", "ddns-generated-prefix": "myhost", "ddns-qualifying-suffix": "", "ddns-update-on-renew": false, "ddns-conflict-resolution-mode": "check-with-dhcid", "hostname-char-set": "[^A-Za-z0-9.-]", "hostname-char-replacement": "x", ... } kea-dhcp4 <#std-iscman- kea-dhcp4> DDNS D2 : dhcp-ddns:enable-updates kea-dhcp4 <#std-iscman-kea-dhcp4> D2 ddns-send-updates DDNS ( global shared-network subnet) . :.SS DDNS +------------------------+-------------------------+-----------------------------------+ |dhcp-ddns: | | | |enable-updates | ddns-send-updates | | +------------------------+-------------------------+-----------------------------------+ |false | false | | |() | | | | | | | | | | | +------------------------+-------------------------+-----------------------------------+ |false | true | | | | () | | | | | | | | | | +------------------------+-------------------------+-----------------------------------+ |true | false | | | | | | | | | | | | | | | | | true | | | | ddns-enable-updates | +------------------------+-------------------------+-----------------------------------+ |true | true | | | | | | | | | | | | | | | | | | | | | false | | | | ddns-enable-updates | +------------------------+-------------------------+-----------------------------------+ Kea 1.9.1 ddns-update-on-renew . DNS DNS ( FQDN DNS) . ddns-update-on-renew true DNS DNS . Kea DNS DNS <<>> ("self-heal") . : ddns-update-on-renew true . Kea 1.9.1 ddns-use-conflict-resolution . D2 RFC 4703 . Kea 2.5.0 ddns-conflict-resolution-mode : o check-with-dhcid - () D2 RFC 4703 . DNS DHCID DHCID . ddns-use-conflict-resolution: true o no-check-with-dhcid - DNS DHCID . DHCID . ddns-use-conflict-resolution: false o check-exists-with-dhcid - DNS DHCID . DHCID DHCID . DNS ( DHCID ) ( DHCID ) . Kea 2.4.0 . o no-check-without-dhcid - DNS DHCID . Kea 2.4.0 . : ddns-use-conflict-resolution JSON . ddns-conflict-resolution-mode : check-with-dhcid true no-check-with-dhcid false. : ddns-conflict-resolution-mode check-with-dhcid ( RFC 4703 ) . FQDN IP Client-A Client-B . ( FQDN IP) : . Client-B FQDN Client-A IP . DNS ( A DHCID) Client-A FQDN Client-B . DNS ( PTR DHCID) Client-A IP Client-B . . Client-B IP Client-A FQDN . DNS ( PTR DHCID) Client-A IP Client-B . DNS ( A DHCID) Client-A FQDN Client-B . . DNS FQDN IP Kea lease4-del <#std-isccmd-lease4-del> . kea-dhcp4 <#std-iscman-kea-dhcp4> DNS D2 . DNS Kea TTL ( ) . kea-dhcp4 <#std-iscman-kea-dhcp4> RFC 4702 TTL / . TTL : o ddns-ttl - TTL . . . o ddns-ttl-percent - / ( RFC 4702) . ( 0.75 0.50) . o ddns-ttl-min - ( RFC 4702) . TTL . . . o ddns-ttl-max - TTL . . . : TTL ( << >> "unspecify") . NCR D2 kea-dhcp4 <#std-iscman-kea-dhcp4> . kea-dhcp4 <#std-iscman-kea-dhcp4> : o enable-updates - kea-dhcp-ddns <#std-iscman- kea-dhcp-ddns> DDNS . NCR D2 true . false . o server-ip - IP D2 . 127.0.0.1 . IPv4 IPv6 . o server-port - D2 . 53001 . o sender-ip - IP kea-dhcp4 <# std-iscman-kea-dhcp4> D2 . kea-dhcp4 <#std-iscman-kea-dhcp4> . o sender-port - kea-dhcp4 <# std-iscman-kea-dhcp4> D2 . 0 kea-dhcp4 <#std-iscman-kea-dhcp4> . o max-queue-size - D2 . . DDNS . kea-dhcp4 <#std-iscman-kea-dhcp4> (lease) . 1024 . o ncr-protocol - D2 . UDP . o ncr-format - (packet format) D2 . JSON . kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> kea-dhcp4 <#std-iscman-kea-dhcp4> . D2 . D2 192.168.1.10 900 : "Dhcp4": { "dhcp-ddns": { "server-ip": "192.168.1.10", "server-port": 900, ... }, ... } kea-dhcp4 <#std-iscman-kea-dhcp4> DDNS kea-dhcp4 <#std-iscman-kea-dhcp4> DHCP RFC 4702 . kea-dhcp4 <#std-iscman-kea- dhcp4> NCR D2 . DNS (conflict resolution) D2 ( The DHCP-DDNS Server <#dhcp-ddns-server> ). kea-dhcp4 <#std-iscman-kea-dhcp4> NCR . enable-updates ddns-send-updates true . kea-dhcp4 <#std-iscman-kea-dhcp4> DDNS : 1. DHCPREQUEST 2. FQDN 3. DHCPRELEASE . ( ) DDNS : FQDN FQDN . ( ) DDNS . . DHCPREQUEST FQDN ( 81) Host Name ( 12) kea-dhcp4 <#std-iscman-kea-dhcp4> DDNS . FQDN . kea-dhcp4 <#std-iscman-kea- dhcp4> N S FQDN : FQDN +-------------------------+-----------------------------------------------+-----------------------------------+--------------------------+ | | | | | |: N-S | | | : N-S-O | +-------------------------+-----------------------------------------------+-----------------------------------+--------------------------+ |0-0 | | | 1-0-0 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------------------+-----------------------------------------------+-----------------------------------+--------------------------+ |0-1 | | | 0-1-0 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------------------+-----------------------------------------------+-----------------------------------+--------------------------+ |1-0 | | | 1-0-0 | | | | | | | | | | | | | | | | +-------------------------+-----------------------------------------------+-----------------------------------+--------------------------+ " (client delegation)" . DHCP DNS . kea-dhcp4 <#std-iscman-kea-dhcp4> DDNS D2 DNS . ddns-override-client-update . true kea-dhcp4 <#std-iscman-kea-dhcp4> DDNS DNS . N-S-O 0-1-1 . ( RFC 4702 N=1, S=1 . kea-dhcp4 <#std-iscman-kea-dhcp4> .) : "Dhcp4": { "ddns-override-client-update": true, ... } DNS . ddns-override-no-update . true kea-dhcp4 <#std-iscman-kea-dhcp4> DDNS kea-dhcp-ddns <# std-iscman-kea-dhcp-ddns> . N-S-O 0-1-1 . : "Dhcp4": { "ddns-override-no-update": true, ... } kea-dhcp4 <#std-iscman-kea-dhcp4> Host Name DDNS . FQDN FQDN N-S-O 0-1-0 . FQDN DDNS D2 ..SS kea-dhcp4 <#std-iscman-kea-dhcp4> - DDNS NameChangeRequest (FQDN) DNS . kea-dhcp4 <#std- iscman-kea-dhcp4> DHCPREQUEST . FQDN DNS : 1. DHCPREQUEST FQDN Host Name . 2. ( unqualified) FQDN . 3. FQDN . 4. DNS . ddns-replace-client-name : o never - . . . o always - . . o when-present - . . o when-not-present - . . : Kea (boolean) true false . . . true when-present false never . kea-dhcp4 <#std- iscman-kea-dhcp4> FQDN ddns-replace-client-name always : "Dhcp4": { "ddns-replace-client-name": "always", ... } FQDN ddns-generated-prefix . "myhost" . : "Dhcp4": { "ddns-generated-prefix": "another.host", ... } FQDN (qualifying) ddns-qualifying-suffix . DDNS . . "Dhcp4": { "ddns-qualifying-suffix": "foo.example.org", ... } kea-dhcp4 <#std-iscman-kea-dhcp4> : [candidate-name].[ddns-qualifying-suffix]. candidate-name DHCPREQUEST . FQDN "some-computer" ddns-qualifying-suffix "example.com" FQDN : some-computer.example.com. kea-dhcp4 <#std- iscman-kea-dhcp4> : [ddns-generated-prefix]-[address-text].[ddns-qualifying-suffix]. address-text IP (hyphenated) . 172.16.1.10 "example.com" ddns-generated-prefix FQDN : myhost-172-16-1-10.example.com. : host name kea-dhcp4 . . FQDN FQDN . DHCP Host Name ( ) FQDN ( ) . kea-dhcp4 <#std-iscman-kea-dhcp4> . RFC 1035 : A-Z a-z 0-9 "-". : o hostname-char-set - . POSIX . (0x00) ( ) . "[^A-Za-z0-9.-]" . . ("") . o hostname-char-replacement - . (OMITTED) . "" . "x" : "Dhcp4": { "hostname-char-set": "[^A-Za-z0-9.-]", "hostname-char-replacement": "x", ... } "myhost-$[123.org" "myhost-xx123.org" . (qualifying suffix ) . : . Host Name FQDN . (hook) . Host Name "." hostname-char-set : "[^A-Za-z0-9.-]". FQDN . FQDN . hostname-char-set . DDNS . DNS . hostname-char-replacement . : hostname-char-set / hostname-char-replacement (global scope) . libdhcp_ddns_tuning.so <#std-ischooklib-libdhcp_ddns_tuning.so> kea-dhcp4 <#std-iscman-kea-dhcp4> kea-dhcp6 <#std-iscman-kea-dhcp6> DDNS DNS . libdhcp_ddns_tuning.so: DDNS Tuning <#hooks- ddns-tuning> . : Kea 3.1.3 (hostname FQDN) . 'hostname-char-set' 'hostname-char-replacement' "". (siaddr) TFTP . siaddr DHCPv4 . next-server . . . "0.0.0.0" next-server . . server-hostname ( sname ) boot-file-name ( file ) next-server . "Dhcp4": { "next-server": "192.0.2.123", "boot-file-name": "/dev/null", "subnet4": [ { "next-server": "192.0.2.234", "server-hostname": "some-name.example.org", "boot-file-name": "bootfile.efi", ... } ], ... } DHCPv4 ( RFC 2131 ) DHCPv4 client-id . MAC client-id RFC 6842 . RFC 6842 RFC 2131 . client-id Kea . RFC 6842 client-id . . : "Dhcp4": { "echo-client-id": false, ... } DHCP . : o (lease) . o . o (static reservations) IP . . o (dual-stack) DHCPv4 DHCPv6 . DHCPv4 DHCPv6 . 2.1.2 Kea DUID DHCPv6 Client Identifier DHCPv4 RFC 4361 . DHCPv4 : chaddr client-identifier. BOOTP DHCP ( MAC ) . client-identifier RFC 2132 . RFC 2131 chaddr . . . RFC 4361 DUID ( RFC 9915 DHCPv6) . Kea chaddr . DHCPDISCOVER DHCPREQUEST . / chaddr . ( ) chaddr chaddr . MAC DHCP . chaddr . . . (PXE) . MAC chaddr . Kea chaddr . . : { "Dhcp4": { "match-client-id": true, "subnet4": [ { "id": 1, "subnet": "192.0.10.0/24", "pools": [ { "pool": "192.0.2.23-192.0.2.87" } ], "match-client-id": false }, { "id": 1, "subnet": "10.0.0.0/8", "pools": [ { "pool": "10.0.0.23-10.0.2.99" } ] } ] } } match-client-id . true chaddr . false chaddr . DHCID DNS chaddr . match-client-id . match-client-id 192.0.10.0/24 false . match-client-id 10.0.0.0/8 true . true . match-client-id . match-client-id true . ( ) chaddr . chaddr . MAC . . chaddr . chaddr . match-client-id true . . chaddr . match-client-id . . Kea How Kea Recognizes the Same Client In Different DHCP Messages <#uml- recognizing-same-client> ..SS DHCPv4 DHCPv4 (RFC 2131 ) INIT-REBOOT ( ) IP . Kea ISC dhcpd IP () . Kea DHCPREQUEST DHCPNAK (lease) IP . authoritative ( false) . authoritative true Kea INIT-REBOOT DHCPNAK . authoritative (global) (shared-network) (subnet) . shared-network authoritative . DHCPv4-over-DHCPv6: DHCPv4 DHCPv4-over-DHCPv6 RFC 7341 DHCPv4 DHCPv6 . DHCPv4 ( DHCPv6 DHCPv4-over-DHCPv6: DHCPv6 <#dhcp6-dhcp4o6-config> ). : DHCPv4-over-DHCPv6 (RFC 8357) . DHCPv4 DHCPv6 Kea . dhcp4o6-port UDP DHCPv6 DHCPv4 . DHCPv4 ::1 port + 1 (bound) ::1 port . DHCPv4-over-DHCPv6 DHCPv4 . DHCPv4-over-DHCPv6 . : o 4o6-subnet: ( IPv6 ) . o 4o6-interface-id: . o 4o6-interface: . ISC : { # DHCPv4 conf "Dhcp4": { "interfaces-config": { "interfaces": [ "eno33554984" ] }, "lease-database": { "type": "memfile", "name": "leases4" }, "valid-lifetime": 4000, "subnet4": [ { "id": 1, "subnet": "10.10.10.0/24", "4o6-interface": "eno33554984", "4o6-subnet": "2001:db8:1:1::/64", "pools": [ { "pool": "10.10.10.100 - 10.10.10.199" } ] } ], "dhcp4o6-port": 786, "loggers": [ { "name": "kea-dhcp4", "output-options": [ { "output": "kea-dhcp4.log" } ], "severity": "DEBUG", "debuglevel": 0 } ] } } DHCPv4 DHCP . . Kea (sanity checks) . Kea sanity-checks . lease-checks . Kea . subnet-id Kea . subnet-id . subnet-id . subnet-id . Kea subnet-id . . lease-checks . : o none - . o warn - . . o fix - . . o fix-del - . . . . o del - . . memfile . . : "Dhcp4": { "sanity-checks": { "lease-checks": "fix-del" }, ... } DHCP Leasequery (RFC 4388 ) stash agent (Stash Agent Options) (lease) . store-extended-info . false global shared-network subnet . "Dhcp4": { "store-extended-info": true, ... } true DHCPREQUEST "ISC" (user context) . DHCPREQUEST (DHCP Option 82) relay-agent-info (DHCP Option 82) sub-options remote-id relay-id . DHCPREQUEST DHCPREQUEST . : { "ISC": { "relay-agent-info": { "sub-options": "0x0104AABBCCDD" } } } remote relay: { "ISC": { "relay-agent-info": { "sub-options": "0x02030102030C03AABBCC", "remote-id": "03010203", "relay-id": "AABBCC" } } } : (hook libraries) user-context . store-extended-info user-context "ISC" . user-context . "ISC" user-context . (sanity checking) . sanity-checks extended-info-checks : o none - . ( ) . o fix - . Leasequery . o strict - (Bulk) Leasequery . o pedantic - Kea comment . : memfile . . Stash Agent (Stash Agent Options) 2.5.8 ISC DHCP . stash-agent-options true (relay agent information options) DHCPREQUEST ( SELECTING ) DHCPREQUEST RENEWING . DHCPREQUEST RENEWING unicast . false . (Multi-Threading Settings) Kea (thread) . multi-threading : o enable-multi-threading - . true . o thread-pool-size - . 0 ( ) . 0 . o packet-queue-size - (thread pool) . 0 () . 64 . : "Dhcp4": { "multi-threading": { "enable-multi-threading": true, "thread-pool-size": 4, "packet-queue-size": 16 }, ... } Kea DHCPv4 ISC . . . Kea . . (multi-threading) thread-pool-size . kea-dhcp4 <#std-iscman-kea-dhcp4> : o thread-pool-size: memfile . o thread-pool-size: mysql . o thread-pool-size: postgresql. packet-queue-size thread-pool-size . thread-pool-size . : o packet-queue-size: 7 * thread-pool-size memfile 7 * 4 = 28 . . o packet-queue-size: 66 * thread-pool-size mysql 66 * 12 = 792 . . o packet-queue-size: 11 * thread-pool-size postgresql 11 * 8 = 88 . IPv6 RFC 8925 IETF DHCPv4 IPv6 IPv6 IPv4 . (dual-stack) IPv6 IPv4 . v6-only-preferred . . RFC V6ONLY_WAIT . Kea v6-only-preferred . pool subnet shared network (global) (host reservations) . Kea . . : { "subnet4": [ { "id": 1, "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], "subnet": "192.0.2.0/24", "option-data": [ { // This will make the v6-only capable devices to disable their // v4 stack for half an hour and then try again "name": "v6-only-preferred", "data": "1800" } ] } ], ... } (Lease Caching) . DHCP . CLTT ( Client Last Transmission Time) ( ). cache-threshold cache-max-age. global shared-network subnet . subnet shared-network global . : { "subnet4": [ { "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], "subnet": "192.0.2.0/24", "cache-threshold": .25, "cache-max-age": 600, "valid-lifetime": 2000, ... } ], ... } : Kea 3.0.0 cache-threshold 0.25 cache-max-age . . cache-threshold 0.0 cache-max-age 0 . : o DDNS . o ( ). o cache-max-age . 0 cache-max-age . o cache-threshold 0.0 1.0 . 0.0 1.0 . . . ( DHCPACK) dhcp-lease-time . dhcp-renewal-time dhcp-rebinding-time ..SS " DHCPDISCOVER" kea-dhcp4 <#std-iscman-kea- dhcp4> DHCPDISCOVER . kea-dhcp4 <#std-iscman-kea-dhcp4> DHCPREQUEST . offer-lifetime kea-dhcp4 <#std-iscman-kea- dhcp4> ( ) DHCPOFFER (persist) . : o offer-lifetime ( ) . o DHCPOFFER (option 51) valid-lifetime . . o DDNS . DHCPREQUEST . o HA . o . o (reclamation) DHCPREQUEST . o (Lease caching) . o kea-dhcp4 <#std-iscman-kea-dhcp4> (races) DHCPDISCOVER DHCPREQUEST. NAK . DHCPDISCOVER . . o DHCPDISCOVER . : { "subnet4": [ { "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], "subnet": "192.0.2.0/24", "offer-lifetime": 60, "valid-lifetime": 2000, ... } ], ... } offer-lifetime valid-lifetime . kea-dhcp4 <#std-iscman-kea-dhcp4> DHCPOFFER DHCPREQUEST . 0 global shared-network subnet class . offer-lifetime . DNR (Discovery of Network-designated Resolvers) DHCPv4 Discovery of Network-designated Resolvers DNR RFC 9463 DNS (resolvers) DNS UDP . DoT (DNS-over-TLS) DoH (DNS-over-HTTPS) DoQ (DNS-over-QUIC) . DHCPv4 DHCPv6 (cardinality): DHCPv4 DHCPv6 . (entry) DNR DHCPv4 DNS . DHCPv6 IPv6 IPv4 . DNR DHCPv4 DNR DNR <> (0x7C) . DNR DNR (Discovery of Network-designated Resolvers) Options for DHCPv6 <#dnr6-options> . DNR : o Service Priority () o ADN FQDN () o () IP ( ) o SvcParams = (key=value) ( - ). alpn-id (escape) ( ). : { "name": "v4-dnr", // 2 DNR Instances: // - Service priority 2, ADN, resolver IPv4 address and Service Parameters // - Service priority 3, ADN - this is ADN-only mode as per RFC 9463 3.1.6 "data": "2, resolver.example., 10.0.5.6, alpn=dot\\,doq port=8530 | 3, fooexp.resolver.example." } : <> <> (\\, \\|). ALPN . <> (0x7C) dohpath URI . DNR DHCPv4 Kea kea4/all-options.json <#config-example-kea4-all-options-json> ..SS " DHCPv4 (Host Reservations in DHCPv4)" (per-host) . () . DHCP . . . "" (conflict) . . (renew) . . /MAC. reservations subnet4 . . DHCPv4 MAC . IP . hostname DHCPv4 siaddr sname file . : . : { "subnet4": [ { "id": 1, "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], "subnet": "192.0.2.0/24", "interface": "eth0", "reservations": [ { "hw-address": "1a:1b:1c:1d:1e:1f", "ip-address": "192.0.2.202" }, { "duid": "0a:0b:0c:0d:0e:0f", "ip-address": "192.0.2.100", "hostname": "alice-laptop" }, { "circuit-id": "'charter950'", "ip-address": "192.0.2.203" }, { "client-id": "01:11:22:33:44:55:66", "ip-address": "192.0.2.204" } ] } ], ... } 192.0.2.202 MAC 1a:1b:1c:1d:1e:1f . 192.0.2.100 "alice-laptop" DUID 0a:0b:0c:0d:0e:0f . ( DNS .) 192.0.3.203 (relay agent) circuit-id "charter950" . 192.0.2.204 01:11:22:33:44:55:66 . ( ) . Fine-Tuning DHCPv4 Host Reservation . . . . . (lease) . : ( ) ( ). . (Address Reservation Types) Kea IPv4 ( 192.0.2.0/24) DHCPv4 . (dynamic pool) pool . . " " (in-pool reservations) . " " (out-of-pool reservations) . (syntax) . Kea . (global) . Kea "global" Kea . . : . Conflicts in DHCPv4 Reservations . : Kea 1.9.1 (boolean flags) reservations-global reservations-in-subnet reservations-out-of-pool . . . : 192.0.2.10 192.0.2.20 . Host A 192.0.2.10 . 192.0.2.10 Host B . . . Host B 192.0.2.10 . Host A Host B . Host B ( Host A) DHCPDECLINE . ( ) Host B . Host A - Host B - . DHCPNAK Host A . (lossy) DHCPNAK . DHCPREQUEST . DHCPNAK Host A (server discovery) . . 192.0.2.10 . Host B . DHCPNAK Host B ( DHCPNAK ). Host B DHCPREQUEST . 192.0.2.10 . Host B . . Host C 192.0.2.10 ( DHCPDISCOVER) DHCPNAK ( DHCPREQUEST). renew-timer . . (out-of-pool) . : (global reservations) . . . (Reserving a Hostname) hostname Client FQDN Hostname . Client FQDN Client FQDN . Hostname Hostname Parameter Request List Hostname . DNS Hostname . ( IPv4) . ddns-qualifying-suffix (qualify) . : { "subnet4": [ { "id": 1, "subnet": "10.0.0.0/24", "pools": [ { "pool": "10.0.0.10-10.0.0.100" } ], "ddns-qualifying-suffix": "example.isc.org.", "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "hostname": "alice-laptop" } ] } ], "dhcp-ddns": { "enable-updates": true } } "alice-laptop.example.isc.org." MAC "aa:bb:cc:dd:ee:ff" . ddns-qualifying-suffix () hostname (FQDN) . ddns-qualifying-suffix : { "subnet4": [ { "id": 1, "subnet": "10.0.0.0/24", "pools": [ { "pool": "10.0.0.10-10.0.0.100" } ], "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "hostname": "alice-laptop.isc.org." }, { "hw-address": "12:34:56:78:99:AA", "hostname": "mark-desktop.example.org." } ] } ], "dhcp-ddns": { "enable-updates": true } } "alice-laptop.isc.org." MAC "aa:bb:cc:dd:ee:ff" "mark-desktop.example.org." MAC "12:34:56:78:99:AA" ..SS DHCPv4 Kea . . ( Standard DHCPv4 Options ) ( Custom DHCPv4 Options ) ( DHCPv4 Vendor-Specific Options ) . : { "subnet4": [ { "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "ip-address": "192.0.2.1", "option-data": [ { "name": "cookie-servers", "data": "10.1.1.202,10.1.1.203" }, { "name": "log-servers", "data": "10.1.1.200,10.1.1.201" } ] } ], ... } ], ... } : { "subnet4": [ { "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "ip-address": "10.0.0.7", "option-data": [ { "name": "vivso-suboptions", "data": "4491" }, { "name": "tftp-servers", "space": "vendor-4491", "data": "10.1.1.202,10.1.1.203" } ] } ], ... } ], ... } . . Next Server Server Hostname Boot File Name BOOTP/DHCPv4 "siaddr" "sname" "file" . DHCPv4 . "siaddr" "sname" "file" . Kea DHCPv4 : { "subnet4": [ { "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "next-server": "10.1.1.2", "server-hostname": "server-hostname.example.org", "boot-file-name": "/usr/local/share/kea/bootfile.efi" } ], ... } ], ... } IPv4 . . DHCPv4 Using Expressions in Classification <#classification-using- expressions> . . Kea . reserved-class1 reserved-class2 . . { "client-classes": [ { "name": "reserved-class1", "option-data": [ { "name": "routers", "data": "10.0.0.200" } ] }, { "name": "reserved-class2", "option-data": [ { "name": "domain-name-servers", "data": "10.0.0.201" } ] } ], "subnet4": [ { "id": 1, "subnet": "10.0.0.0/24", "pools": [ { "pool": "10.0.0.10-10.0.0.100" } ], "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "client-classes": [ "reserved-class1", "reserved-class2" ] } ] } ] } : client-classes . . Kea . "KNOWN" . "UNKNOWN" . Kea "member" "KNOWN" "UNKNOWN" . : { "client-classes": [ { "name": "dependent-class", "test": "member('KNOWN')", "only-in-additional-list": true } ] } only-in-additional-list . : only-in-additional-list false . . only-in-additional-list true . . only-in-additional-list evaluate-additional-classes . : Kea . only-in-additional-list . Pool Selection with Client Class Reservations Subnet Selection with Client Class Reservations . Kea MySQL PostgreSQL . Kea MySQL PostgreSQL Hosts Storage . Kea (hook) libdhcp_host_cmds.so: Host Commands <#hooks-host-cmds> . Kea . : Kea (per-host-reservation) . DHCPv4 ( Kea ) (lease) . . DHCP . . ( ) . . Kea reservations-global reservations-in-subnet reservations-out-of-pool . . : o reservations-in-subnet - true (in-pool) . . . . true . o reservations-out-of-pool - true (out-of-pool) . . . . Kea reservations-out-of-pool . false . o reservations-global - . . . Kea reservations-global true . false . : false . . . . Kea 1.9.1 reservations-global reservations-in-subnet reservations-out-of-pool . reservations-global reservations-in-subnet reservations-out-of-pool : o (global): .Dhcp4["reservations-global"] ( : ) o (subnet): .Dhcp4.subnet4[]["reservations-in-subnet"] ( ) o (shared-network): .Dhcp4["shared-networks"][]["reservations-out-of-pool"] ( ) o (shared-network subnet): .Dhcp4["shared-networks"][].subnet4[]["reservations-out-of-pool"] ( : ) : O | v +-----------------------------+------------------------------+ | Is per-host configuration needed, such as | | reserving specific addresses, | | assigning specific options or | | assigning packets to specific classes on per-device basis? | +-+-----------------+----------------------------------------+ | | no| yes| | | +--------------------------------------+ | | | For all given hosts, | +--> "disabled" +-->+ can the reserved resources | | be used in all configured subnets? | +--------+---------------------------+-+ | | +----------------------------+ |no |yes | Is | | | | at least one reservation +<--+ "global" <--+ | used to reserve addresses? | +-+------------------------+-+ | | no| yes| +---------------------------+ | | | Is high leases-per-second | +--> "out-of-pool" +-->+ performance or efficient | ^ | resource usage | | | (CPU ticks, RAM usage, | | | database roundtrips) | | | important to your setup? | | +-+----------------+--------+ | | | | yes| no| | | | | +-------------+ | | | | | | +----------------------+ | | | | Can it be guaranteed | | | +-->+ that the reserved | | | | addresses | | | | aren't part of the | | | | pools configured | | | | in the respective | | | | subnet? | | | +-+------------------+-+ | | | | | | yes| no| | | | | V +----------------+ +--> "in-subnet" : { "Dhcp4": { "subnet4": [ { "id": 1, "pools": [ { "pool": "192.0.2.10-192.0.2.100" } ], "reservations-global": false, "reservations-in-subnet": false, "subnet": "192.0.2.0/24" } ] } } : { "Dhcp4": { "reservations-global": true, "reservations": [ { "hostname": "host-one", "hw-address": "01:bb:cc:dd:ee:ff" }, { "hostname": "host-two", "hw-address": "02:bb:cc:dd:ee:ff" } ], "subnet4": [ { "id": 1, "pools": [ { "pool": "192.0.2.10-192.0.2.100" } ], "subnet": "192.0.2.0/24" } ] } } : reservations-global: . o reservations-in-subnet: . . o reservations-out-of-pool: reservations-in-subnet true . reservations-out-of-pool true . . . ( ) . disabled : { "Dhcp4": { "reservations-global": false, "reservations-in-subnet": false } } global reservations-global : { "Dhcp4": { "reservations-global": true, "reservations-in-subnet": false } } out-of-pool reservations-out-of-pool : { "Dhcp4": { "reservations-global": false, "reservations-in-subnet": true, "reservations-out-of-pool": true } } in-subnet reservations-in-subnet : { "Dhcp4": { "reservations-global": false, "reservations-in-subnet": true, "reservations-out-of-pool": false } } global in-subnet : { "Dhcp4": { "reservations-global": true, "reservations-in-subnet": true, "reservations-out-of-pool": false } } global out-of-pool : { "Dhcp4": { "reservations-global": true, "reservations-in-subnet": true, "reservations-out-of-pool": true } } out-of-pool in-subnet out-of-pool in-subnet true . (global) (subnet) (shared-network) . : { "Dhcp4": { "subnet4": [ { "reservations-global": false, "reservations-in-subnet": false, "subnet": "192.0.2.0/24", "id": 1 } ] } } : { "Dhcp4": { "reservations": [ { "hostname": "host-one", "hw-address": "01:bb:cc:dd:ee:ff" }, { "hostname": "host-two", "hw-address": "02:bb:cc:dd:ee:ff" } ], "reservations-global": true, "reservations-in-subnet": false, "subnet4": [ { "pools": [ { "pool": "192.0.2.10-192.0.2.100" } ], "subnet": "192.0.2.0/24", "id": 1 } ] } } Global Reservations in DHCPv4 . . Kea : hw-address duid client-id circuit-id. . Kea . . . Kea . host-reservation-identifiers . . Kea host-reservation-identifiers . . Kea . host-reservation-identifiers : { "host-reservation-identifiers": [ "circuit-id", "hw-address", "duid", "client-id" ], "subnet4": [ { "subnet": "192.0.2.0/24", ... } ], ... } : "host-reservation-identifiers": [ "hw-address", "duid", "circuit-id", "client-id" ] : . . host-reservation-identifiers . (roam ) . Kea (global reservation) . subnet ID . Kea . hostname . . (feasible) . . shared network (siblings) . . : 2.3.5 (leases) . Kea . : "Dhcp4": { # This specifies global reservations. # They will apply to all subnets that # have global reservations enabled. "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "hostname": "hw-host-dynamic" }, { "hw-address": "01:02:03:04:05:06", "hostname": "hw-host-fixed", # Use of IP addresses in global reservations is risky. # If used outside of a matching subnet, such as 192.0.1.0/24, # it will result in a broken configuration being handed # to the client. "ip-address": "192.0.1.77" }, { "duid": "01:02:03:04:05", "hostname": "duid-host" }, { "circuit-id": "'charter950'", "hostname": "circuit-id-host" }, { "client-id": "01:11:22:33:44:55:66", "hostname": "client-id-host" } ], "valid-lifetime": 600, "subnet4": [ { "id": 1, "subnet": "10.0.0.0/24", # Specify if the server should look up global reservations. "reservations-global": true, # Specify if the server should look up in-subnet reservations. "reservations-in-subnet": false, # Specify if the server can assume that all reserved addresses # are out-of-pool. It can be ignored because "reservations-in-subnet" # is false. # "reservations-out-of-pool": false, "pools": [ { "pool": "10.0.0.10-10.0.0.100" } ] } ] } backend 0 subnet-id . (Client classes) Kea / . Kea DHCP client-classes (scope) . . shared network . shared network (lease) . shared network . shared network (pool) : { "Dhcp4": { "client-classes": [ { "name": "reserved_class" }, { "name": "unreserved_class", "test": "not member('reserved_class')" } ], "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:fe", "client-classes": [ "unreserved_class" ] } ], "pools": [ { "pool": "192.0.2.10 - 192.0.2.20", "client-classes": [ "unreserved_class" ] }, { "pool": "192.0.2.30 - 192.0.2.40", "client-classes": [ "reserved_class" ] }, { "pool": "192.0.2.50 - 192.0.2.60" } ] } ] } } reserved_class test . unreserved_class reserved_class . . reserved_class . reserved_class unreserved_class . MAC aa:bb:cc:dd:ee:fe reserved_class . IP . shared network ..SS (Subnet Selection with Client Class Reservations) : (shared network) . . : { "Dhcp4": { "client-classes": [ { "name": "reserved_class" }, { "name": "unreserved_class", "test": "not member('reserved_class')" } ], "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:fe", "client-classes": [ "reserved_class" ] } ], "reservations-global": true, "reservations-in-subnet": false, "shared-networks": [ { "name": "net", "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10-192.0.2.20", "client-classes": [ "unreserved_class" ] }, { "pool": "192.0.2.30-192.0.2.40", "client-classes": [ "unreserved_class" ] } ] }, { "id": 2, "subnet": "192.0.3.0/24", "pools": [ { "pool": "192.0.3.10-192.0.3.20", "client-classes": [ "reserved_class" ] }, { "pool": "192.0.3.30-192.0.3.40", "client-classes": [ "reserved_class" ] } ] }, { "id": 3, "subnet": "192.0.4.0/24", "pools": [ { "pool": "192.0.4.10-192.0.4.20" }, { "pool": "192.0.4.30-192.0.4.40" } ] } ] } ] } } Pool Selection with Client Class Reservations . (pools) . reserved_class . reserved_class . . reserved_class unreserved_class . ( ) reservations-global true . client-classes . client-classes early-global-reservations-lookup . IP (Multiple Reservations for the Same IP) IP . IP Kea . libdhcp_host_cmds.so <#std- ischooklib-libdhcp_host_cmds.so> reservation-add <#std-isccmd-reservation-add> IP . DHCP IP . MAC MAC IP . IP IPv4 IP . IP Kea 1.9.1 ip-reservations-unique . ip-reservations-unique (boolean) true IP . false Kea libdhcp_host_cmds.so <#std-ischooklib-libdhcp_host_cmds .so> . ip-reservations-unique false memfile MySQL PostgreSQL . Host Cache ( libdhcp_host_cache.so: Host Cache Reservations for Improved Performance <#hooks-host-cache>) RADIUS ( libdhcp_radius.so: RADIUS Server Support <#hooks-radius>) . IP (hooks) ip-reservations-unique false . : ip-reservations-unique true ( ) IP / Kea . . IP Kea . IP MAC : "Dhcp4": { "ip-reservations-unique": false, "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "reservations": [ { "hw-address": "1a:1b:1c:1d:1e:1f", "ip-address": "192.0.2.11" }, { "hw-address": "2a:2b:2c:2d:2e:2f", "ip-address": "192.0.2.11" } ] } ] } ip-reservations-unique Configuration Backend DHCPv4 . ( ) . IP . IP . IP ( ) . IP . . IP (lease) . : Kea ip-reservations-unique false true IP MySQL / PostgreSQL . . IP . reservations-lookup-first (lease lookup) . (multi-threading) . . reservations-lookup-first false ..SS (host reservation) . KNOWN . . . IPv4 . ( ) . . "Dhcp4": { "client-classes": [ { "name": "KNOWN", "option-data": [ { "name": "routers", "data": "192.0.2.250" } ] } ], "reservations": [ // KNOWN . { "hw-address": "aa:bb:cc:dd:ee:fe" }, { "hw-address": "11:22:33:44:55:66" } ], "reservations-global": true, "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.1-192.0.2.200" } ] } ] } ( Option Class-Tagging <# option-class-tagging>) . ISP . (captive portal) . "blocked" : "Dhcp4": { "client-classes": [ { "name": "blocked" } ], "reservations": [ // KNOWN . // blocked . { "hw-address": "aa:bb:cc:dd:ee:fe", "client-classes": [ "blocked" ] }, { "hw-address": "11:22:33:44:55:66" } ], "reservations-global": true, "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.1-192.0.2.200" } ], "option-data": [ { // . "client-classes": [ "blocked" ], "name": "routers", "data": "192.0.2.251" }, { // . "name": "routers", "data": "192.0.2.250" } ] } ] } DHCPv4 DHCP . . IP . DHCP . Kea " " (shared networks) "shared subnets" Microsoft "multinet" . . IPv4 . . ( /24 ) . . . : . . . . . ( ) . . (hint) . : Kea . (scope) : { "Dhcp4": { "shared-networks": [ { # . # . "name": "my-secret-lair-level-1", # shared-network . # # "eth0" . "interface": "eth0", # . # . "subnet4": [ { "id": 1, "subnet": "10.0.0.0/8", "pools": [ { "pool": "10.0.0.1 - 10.0.0.99" } ] }, { "id": 2, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.100 - 192.0.2.199" } ] } ] } ], # shared-networks # # "" . # . # # . . "subnet4": [ { "id": 3, "subnet": "192.0.3.0/24", "pools": [ { "pool": "192.0.3.1 - 192.0.3.200" } ], "interface": "eth1" } ] } } ("") . . (ID) . (logging) . . . . . . shared-network . : { "shared-networks": [ { "name": "lab-network3", "interface": "eth0", # # . "valid-lifetime": 600, # # . "option-data": [ { "name": "log-servers", "data": "1.2.3.4" } ], "subnet4": [ { "id": 1, "subnet": "10.0.0.0/8", "pools": [ { "pool": "10.0.0.1 - 10.0.0.99" } ], # . "valid-lifetime": 1200, "option-data": [ { "name": "log-servers", "data": "10.0.0.254" }, { "name": "routers", "data": "10.0.0.254" } ] }, { "id": 2, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.100 - 192.0.2.199" } ], # valid-lifetime # . "option-data": [ { "name": "routers", "data": "192.0.2.1" } ] } ] } ], ... } log-servers . (valid lifetime) (600s) . ( IP log-servers ) ( ). log-servers (lease) 10.0.0.254 log-servers routers . 1.2.3.4 log-servers routers 192.0.2.1 ..SS " " shared-network ( ) . . interface . : { "shared-networks": [ { "name": "office-floor-2", "subnet4": [ { "id": 1, "subnet": "10.0.0.0/8", "pools": [ { "pool": "10.0.0.1 - 10.0.0.99" } ], "interface": "eth0" }, { "id": 2, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.100 - 192.0.2.199" } ], # Specifying the different interface name is a configuration # error. This value should rather be "eth0" or the interface # name in the other subnet should be "eth1". "interface": "eth1" } ] } ], ... } shared-network . { "shared-networks": [ { "name": "office-floor-2", # This tells Kea that the whole shared network is reachable over a # local interface. This applies to all subnets in this network. "interface": "eth0", "subnet4": [ { "id": 1, "subnet": "10.0.0.0/8", "pools": [ { "pool": "10.0.0.1 - 10.0.0.99" } ] }, { "id": 2, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.100 - 192.0.2.199" } ] } ] } ], ... } . ( ) . . : { "shared-networks": [ { "name": "kakapo", "subnet4": [ { "id": 1, "subnet": "192.0.2.0/26", "relay": { "ip-addresses": [ "192.1.1.1" ] }, "pools": [ { "pool": "192.0.2.63 - 192.0.2.63" } ] }, { "id": 2, "subnet": "10.0.0.0/24", "relay": { # Specifying a different relay address for this # subnet is a configuration error. In this case # it should be 192.1.1.1 or the relay address # in the previous subnet should be 192.2.2.2. "ip-addresses": [ "192.2.2.2" ] }, "pools": [ { "pool": "10.0.0.16 - 10.0.0.16" } ] } ] } ], ... } shared-network . { "shared-networks": [ { "name": "kakapo", "relay": { # This relay address is inherited by both subnets. "ip-addresses": [ "192.1.1.1" ] }, "subnet4": [ { "id": 1, "subnet": "192.0.2.0/26", "pools": [ { "pool": "192.0.2.63 - 192.0.2.63" } ] }, { "id": 2, "subnet": "10.0.0.0/24", "pools": [ { "pool": "10.0.0.16 - 10.0.0.16" } ] } ] } ], ... } ( ) . Kea . (host reservation) ( ). ( ) shared-network ..SS . << >> Client Classification <#classify> . . . . . . client-classes (shared network) (subnet) / (pool) . . (host reservations) . pool pool (lease) pool . : { "client-classes": [ { "name": "b-devices", "test": "option[93].hex == 0x0002" } ], "shared-networks": [ { "name": "galah", "interface": "eth0", "subnet4": [ { "id": 1, "subnet": "192.0.2.0/26", "pools": [ { "pool": "192.0.2.1 - 192.0.2.63" } ] }, { "id": 2, "subnet": "10.0.0.0/24", "pools": [ { "pool": "10.0.0.2 - 10.0.0.250" } ], "client-classes": [ "b-devices" ] } ] } ] } "b-devices" ( option 93 0x0002 ) 10.0.0.0/24 ( ). 192.0.2.0/26 . . "b-devices" 192.0.2.0/26 10.0.0.0/24 . (cable networks) . . option 93 . { "client-classes": [ { "name": "a-devices", "test": "option[93].hex == 0x0001" }, { "name": "b-devices", "test": "option[93].hex == 0x0002" } ], "shared-networks": [ { "name": "galah", "interface": "eth0", "subnet4": [ { "id": 1, "subnet": "192.0.2.0/26", "pools": [ { "pool": "192.0.2.1 - 192.0.2.63" } ], "client-classes": [ "a-devices" ] }, { "id": 2, "subnet": "10.0.0.0/24", "pools": [ { "pool": "10.0.0.2 - 10.0.0.250" } ], "client-classes": [ "b-devices" ] } ] } ] } . "a-devices" 192.0.2.0/26 "b-devices" 10.0.0.0/24 . . ( VoIP ) . . (global subnets scope) . shared-network interface relay. ..SS (Host Reservations in Shared Networks) (shared network) : { "shared-networks": [ { "name": "frog", "interface": "eth0", "subnet4": [ { "subnet": "192.0.2.0/26", "id": 100, "pools": [ { "pool": "192.0.2.1 - 192.0.2.63" } ], "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "ip-address": "192.0.2.28" } ] }, { "subnet": "10.0.0.0/24", "id": 101, "pools": [ { "pool": "10.0.0.1 - 10.0.0.254" } ], "reservations": [ { "hw-address": "11:22:33:44:55:66", "ip-address": "10.0.0.29" } ] } ] } ] } Kea . Kea . . . (bad practice) . "id" . Kea . . DHCPv4 (Server Identifier in DHCPv4) DHCPv4 " " (server identifier) (link) IPv4 . IPv4 ( ) . . (override) dhcp-server-identifier . . (host-reservation) . dhcp-server-identifier only-in-additional-list DHCP . . (Additional Classification) . : { "subnet4": [ { "subnet": "192.0.2.0/24", "option-data": [ { "name": "dhcp-server-identifier", "data": "10.2.5.76" } ], ... } ], ... } DHCPv4 DHCPv4 (lease) (relays) . . interface . eth0 : "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.100 - 192.0.2.199" } ], "interface": "eth0" } ], ... } IPv4 192.0.2.3 IPv4 192.0.2.0/24. IPv4 . (unicast) . ciaddr IPv4 ( ). . giaddr . IPv4 . . (Using a Specific Relay Agent for a Subnet) . : (client classification) . . : . . IPv4 . IPv4 ( giaddr DHCPv4) . . -- -- . . ( ) . . DHCPv4 ( IPv4 ) . 192.0.2.0/24 IPv4 10.0.0.1 . 192.0.2.0/24 . 10.0.0.1 . { "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10 - 192.0.2.20" } ], "relay": { "ip-addresses": [ "10.0.0.1" ] } } ] } } relay ip-addresses . ip-addresses . IPv4 ( << >>) ( Client Classification <#classify>) . . Cable Modem Termination System (CMTS) CM MAC ( ) . 10.1.1.0/24 192.0.2.0/24 . CMTS 10.1.1.1 . : "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "10.1.1.0/24", "pools": [ { "pool": "10.1.1.2 - 10.1.1.20" } ], "client-classes": [ "docsis3.0" ], "relay": { "ip-addresses": [ "10.1.1.1" ] } }, { "id": 2, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10 - 192.0.2.20" } ], "relay": { "ip-addresses": [ "10.1.1.1" ] } } ], ... } ( DHCPDECLINE) DHCPv4 DHCPv4 . (authoritative) . . ( ARP ICMP Echo Request) DHCPDECLINE DHCPv4 . (sanity check) ( ) . DNS . (declined) ( ) (probation time) . (lease) ( ) . . . : "Dhcp4": { "decline-probation-period": 3600, "subnet4": [ { ... }, ... ], ... } . (hook point) . lease4_decline DHCPDECLINE . declined-addresses ( ). ( DHCPv4 Kea Statistics in the DHCPv4 Server Hook Libraries <#hooks-libraries> .) . declined-addresses ( ) . reclaimed-declined-addresses ( ) . : Kea DHCPDECLINE assigned-addresses . assigned-addresses . declined-addresses assigned-addresses/total-addresses . . ISC DHCPDECLINE assigned-addresses Kea ..SS " DHCPv4" DHCPv4 : DHCPv4 +---------------------------------------------------+--------------+-----------------------------------------------+ | | | | | | | | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-received | integer | | | | | DHCPv4 . | | | | | | | | : | | | | | | | | . | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-discover-received | integer | | | | | DHCPDISCOVER . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Kea | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-offer-received | integer | | | | | DHCPOFFER . | | | | | | | | | | | | | | | | DHCPOFFER | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | . | | | | | | | | | | | | | | | | | | | | DHCPOFFER | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-request-received | integer | | | | | DHCPREQUEST . | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | (DHCPOFFER) | | | | | | | | | | | | | | | | | | | | (DHCPREQUEST) . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-ack-received | integer | | | | | DHCPACK . | | | | | | | | | | | | | | | | DHCPACK | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | DHCPACK | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-nak-received | integer | | | | | DHCPNAK . | | | | | | | | | | | | | | | | DHCPNAK | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | DHCPNAK | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-release-received | integer | | | | | DHCPRELEASE . | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-decline-received | integer | | | | | DHCPDECLINE . | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-inform-received | integer | | | | | DHCPINFORM . | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-received | integer | | | | | DHCPLEASEQUERY | | | | | | | | leasequery. | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-unknown-received | integer | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( | | | | message-type). | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-sent | integer | | | | | DHCPv4 . | | | | | | | | | | | | | | | | | | | | . | | | | | | | | pkt4-received | | | | | | | | | | | | | | | | | | | | . | | | | | | | | ( DHCPRELEASE) | | | | | | | | pkt4-received | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-offer-sent | integer | | | | | DHCPOFFER . | | | | | | | | | | | | | | | | DHCPDISCOVER | | | | . | | | | | | | | | | | | | | | | DHCPDISCOVER | | | | | | | | | | | | | | | | | | | | | | | | pkt4-discover-received | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-ack-sent | integer | | | | | DHCPACK . | | | | | | | | | | | | | | | | DHCPREQUEST | | | | | | | | | | | | DHCPNAK | | | | . | | | | | | | | pkt4-ack-sent | | | | pkt4-nak-sent | | | | pkt4-request-received . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-nak-sent | integer | | | | | DHCPNAK . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | pkt4-ack-sent | | | | pkt4-nak-sent | | | | pkt4-request-received . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-response-unassigned-sent | integer | | | | | DHCPLEASEUNASSIGNED | | | | | | | | | | | | leasequery. | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-response-unknown-sent | integer | | | | | DHCPLEASEUNKNOWN | | | | | | | | leasequery. | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-response-active-sent | integer | | | | | DHCPLEASEACTIVE | | | | | | | | leasequery. | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-service-disabled | integer | | | | | | | | | | | | | DHCP | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-parse-failed | integer | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-queue-full | integer | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-duplicate | integer | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-rfc-violation | integer | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-admin-filtered | integer | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DROP. | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-not-for-us | integer | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-processing-failed | integer | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-limit-exceeded | integer | | | | | | | | | limits | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-receive-drop | integer | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].total-addresses | integer | | | | | | | | | DHCPv4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].pool[pid].total-addresses | integer | | | | | | | | | DHCPv4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | | | | | . pid | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |assigned-addresses | integer | | | | | . | | | | | | | | ( | | | | | | | | DHCPREQUEST) | | | | | | | | | | | | ( | | | | DHCPRELEASE) | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |cumulative-assigned-addresses | integer | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].cumulative-assigned-addresses | integer | | | | | | | | | | | | | . | | | | | | | | ( | | | | | | | | DHCPREQUEST) | | | | | | | | . | | | | id | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].pool[pid].cumulative-assigned-addresses | integer | | | | | | | | | | | | | | | | | . | | | | | | | | ( | | | | DHCPREQUEST) | | | | | | | | | | | | . id | | | | | | | | . pid | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].assigned-addresses | integer | | | | | | | | | . | | | | | | | | ( | | | | | | | | DHCPREQUEST) | | | | | | | | | | | | ( DHCPRELEASE) | | | | | | | | . id | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].pool[pid].assigned-addresses | integer | | | | | | | | | | | | | . | | | | | | | | ( | | | | DHCPREQUEST) | | | | | | | | | | | | ( | | | | DHCPRELEASE) | | | | | | | | . id | | | | | | | | . pid | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |reclaimed-leases | integer | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].reclaimed-leases | integer | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].pool[pid].reclaimed-leases | integer | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | pid | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |declined-addresses | integer | | | | | IPv4 | | | | (declined) | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].declined-addresses | integer | | | | | IPv4 | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . id | | | | | | | | | | | | . | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].pool[pid].declined-addresses | integer | | | | | IPv4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . id | | | | | | | | . | | | | pid | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |reclaimed-declined-addresses | integer | | | | | IPv4 | | | | | | | | . | | | | declined-addresses | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].reclaimed-declined-addresses | integer | | | | | IPv4 | | | | | | | | . | | | | declined-addresses | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].pool[pid].reclaimed-declined-addresses | integer | | | | | IPv4 | | | | | | | | . | | | | declined-addresses | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | pid | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-received | integer | | | | | DHCPLEASEQUERY IPv4 | | | | . | | | | ( | | | | | | | | | | | | Leasequery | | | | .) | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-response-unknown-sent | integer | | | | | DHCPLEASEUNKNOWN IPv4 | | | | . | | | | ( | | | | | | | | | | | | Leasequery | | | | .) | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-response-unassigned-sent | integer | | | | | DHCPLEASEUNASSIGNED IPv4 | | | | . | | | | ( | | | | | | | | | | | | Leasequery | | | | .) | +---------------------------------------------------+--------------+-----------------------------------------------+ |pkt4-lease-query-response-active-sent | integer | | | | | DHCPLEASEACTIVE IPv4 | | | | . | | | | ( | | | | | | | | | | | | Leasequery | | | | .) | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-allocation-fail | integer | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-allocation-fail | integer | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-allocation-fail-shared-network | integer | | | | | | | | | | | | | | | | | (shared network). | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-allocation-fail-shared-network | integer | | | | | | | | | | | | | | | | | . id | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-allocation-fail-subnet | integer | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-allocation-fail-subnet | integer | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-allocation-fail-no-pools | integer | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-allocation-fail-no-pools | integer | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | id | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-allocation-fail-classes | integer | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | : | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-allocation-fail-classes | integer | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | : | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . id | | | | | | | | . | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-lease-reuses | integer | | | | | | | | | | | | | (lease caching) | | | | CLTT | | | | IPv4 | | | | | | | | | | | | | | | | | | | | . | | | | << | | | | >> (lease | | | | reuse) . | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-lease-reuses | integer | | | | | | | | | | | | | (lease caching) | | | | CLTT | | | | IPv4 | | | | | | | | | | | | | | | | | | | | . | | | | << | | | | >> | | | | . | | | | | | | | . | | | | id | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |v4-reservation-conflicts | integer | | | | | | | | | | | | | | | | | | | | | . | | | | DHCP | | | | Discover | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ |subnet[id].v4-reservation-conflicts | integer | | | | | | | | | | | | | | | | | . | | | | DHCP | | | | Discover | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +---------------------------------------------------+--------------+-----------------------------------------------+ pkt4-receive-drop : pkt4-service-disabled - DHCP o pkt4-parse-failed - o pkt4-queue-full - o pkt4-duplicate - o pkt4-rfc-violation - RFC ( ) o pkt4-admin-filtered - o pkt4-not-for-us - o pkt4-processing-failed - o pkt4-limit-exceeded - (libdhcp_limits.so: Limits to Manage Lease Allocation and Packet Processing <#hooks- limits>) : (pool ID) pool-id . pool-id 0 . 0 pool-id . . . : DHCPv4 . Statistics <#stats> . DHCPv4 : o statistic-default-sample-count - . 0 . o statistic-default-sample-age - ( ) . 1 : "Dhcp4": { "statistic-default-sample-count": 1, "subnet4": [ { ... }, ... ], ... } Kea . ISC Stork . Monitoring Kea With Stork <# stork> . DHCPv4 (Management API for the DHCPv4 Server) (management API) . Management API <#ctrl- channel> . Kea : "Dhcp4": { "control-sockets": [ { "socket-type": "unix", "socket-name": "/path/to/the/unix/socket" } ], "subnet4": [ { ... }, ... ], ... } (UNIX Control Socket) 2.7.2 Kea UNIX socket-type unix socket-name UNIX/LOCAL . socket-name UNIX sun_path sockaddr_un . . Linux FreeBSD . Kea unix "control-sockets" . : Kea 2.7.9 "[kea-install-dir]/var/run/kea" 0750 . KEA_CONTROL_SOCKET_DIR . socket-name Kea . socket-name . JSON . Control Channel Kea Developer's Guide . DHCPv4 : o build-report <#std-isccmd-build-report> o config-get <#std-isccmd-config-get> o config-hash-get <#std-isccmd-config-hash-get> o config-reload <#std-isccmd-config-reload> o config-set <#std-isccmd-config-set> o config-test <#std-isccmd-config-test> o config-write <#std-isccmd-config-write> o dhcp-disable <#std-isccmd-dhcp-disable> o dhcp-enable <#std-isccmd-dhcp-enable> o interface-add <#std-isccmd-interface-add> o interface-list <#std-isccmd-interface-list> o interface-redetect <#std-isccmd-interface-redetect> o leases-reclaim <#std-isccmd-leases-reclaim> o list-commands <#std-isccmd-list-commands> o shutdown <#std-isccmd-shutdown> o status-get <#std-isccmd-status-get> o version-get <#std-isccmd-version-get> Commands Supported by Both the DHCPv4 and DHCPv6 Servers <#commands-common> . : o statistic-get <#std-isccmd-statistic-get> o statistic-reset <#std-isccmd-statistic-reset> o statistic-remove <#std-isccmd-statistic-remove> o statistic-get <#std-isccmd-statistic-get>-all o statistic-reset <#std-isccmd-statistic-reset>-all o statistic-remove <#std-isccmd-statistic-remove>-all o statistic-sample-age-set <#std-isccmd-statistic-sample-age-set> o statistic-sample-age-set <#std-isccmd-statistic-sample-age-set>-all o statistic-sample-count-set <#std-isccmd-statistic-sample-count-set> o statistic-sample-count-set <#std-isccmd-statistic-sample-count- set>-all Commands for Manipulating Statistics <#command-stats> ..SS HTTP/HTTPS (HTTP/HTTPS Control Socket) socket-type http https ( https TLS ). socket-address ( 127.0.0.1) socket-port ( 8000) IP HTTP (bound) . Kea 2.7.5 http-headers HTTP HTTP . trust-anchor cert-file key-file cert-required TLS HTTP HTTPS . HTTP . TLS/HTTPS Kea TLS/HTTPS Support <#tls> . HTTP (Basic HTTP authentication) . HTTPS reverse proxy . authentication type . HTTP ( basic) . realm ( kea-dhcpv4-server) HTTP . clients HTTP . . (:) . . : HTTP UTF-8 JSON Kea Latin-1 ( 0x00..0xff) . / . : o directory . . o password-file directory HTTP . o user-file directory . Kea-2.7.6 Kea HTTP/HTTPS . IPv4 IPv6 . HTTP HTTPS HTTPS HTTP . . "config-set" HTTP HTTPS HTTPS HTTP . "config-reload" . . "Dhcp4": { "control-sockets": [ { "socket-type": "https", "socket-address": "10.20.30.40", "socket-port": 8004, "http-headers": [ { "name": "Strict-Transport-Security", "value": "max-age=31536000" } ], "trust-anchor": "/path/to/the/ca-cert.pem", "cert-file": "/path/to/the/agent-cert.pem", "key-file": "/path/to/the/agent-key.pem", "cert-required": true, "authentication": { "type": "basic", "realm": "kea-dhcpv4-server", "clients": [ { "user": "admin", "password": "1234" } ] } }, { "socket-type": "http", "socket-address": "2010:30:40::50", "socket-port": 8004 } ], "subnet4": [ { ... }, ... ], ... } IPv4 (User Contexts in IPv4) Kea (hook libraries) . . (pool) . user-context Comments and User Context <#user-context> . User Contexts in Hooks <#user-context-hooks> . (User contexts) (global scope) shared-network subnet pool client-class option-data (definition) (host reservation) . . LED . . (vendor option) . pool . (user contexts) . JSON . LED : "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.10 - 192.0.2.20", # This is pool specific user context "user-context": { "color": "red" } } ], # This is a subnet-specific user context. Any type # of information can be entered here as long as it is valid JSON. "user-context": { "comment": "network on the second floor", "last-modified": "2017-09-04 13:32", "description": "you can put anything you like here", "phones": [ "x1234", "x2345" ], "devices-registered": 42, "billing": false } } ] } Kea user-context . . comment ..SS DHCP (Supported DHCP Standards) Kea : o BOOTP Vendor Information Extensions RFC 1497 : (hook) BOOTP . libdhcp_bootp.so: Support for BOOTP Clients <# hooks-bootp> . o Dynamic Host Configuration Protocol RFC 1531 : RFC RFC 1541 RFC 2131 . Kea RFC . o Clarifications and Extensions for the Bootstrap Protocol RFC 1532 : RFC RFC 1542 . Kea . o DHCP Options and BOOTP Vendor Extensions RFC 1533 : RFC RFC 2132 . Kea . o Dynamic Host Configuration Protocol RFC 1541 : RFC RFC 2131 . Kea . o Clarifications and Extensions for the Bootstrap Protocol RFC 1542 : RFC . o Dynamic Host Configuration Protocol RFC 2131 : DHCPDISCOVER (1) DHCPOFFER (2) DHCPREQUEST (3) DHCPRELEASE (7) DHCPINFORM (8) DHCPACK (5) DHCPNAK (6). o DHCP Options and BOOTP Vendor Extensions RFC 2132 : PAD (0) END (255) Message Type (53) DHCP Server Identifier (54) Domain Name (15) DNS Servers (6) IP Address Lease Time (51) Subnet Mask (1) Routers (3). o DHCP Options for Novell Directory Services RFC 2241 : . o Management of IP numbers by peg-dhcp RFC 2322 : RFC . o DHCP Option for The Open Group's User Authentication Protocol RFC 2485 : . o DHCP Option to Disable Stateless Auto-Configuration in IPv4 Clients RFC 2563 : . o DHCP Options for Service Location Protocol RFC 2610 : . o The Name Service Search Option for DHCP RFC 2937 : . o The User Class Option for DHCP RFC 3004 : . hex . o The IPv4 Subnet Selection Option for DHCP RFC 3011 : subnet-selection . o DHCP Relay Agent Information Option RFC 3046 : Relay Agent Information Circuit ID Remote ID . o The DOCSIS (Data-Over-Cable Service Interface Specifications) Device Class DHCP (Dynamic Host Configuration Protocol) Relay Agent Information Sub-option RFC 3256 : DOCSIS . o Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4) RFC 3396 : Kea . (payload) Kea . o Dynamic Host Configuration Protocol (DHCP) Domain Search Option RFC 3397 : . o The Classless Static Route Option for Dynamic Host Configuration Protocol (DHCP) version 4 RFC 3442 : . o Dynamic Host Configuration Protocol (DHCP) Option for CableLabs Client Configuration RFC 3495 : . CableLabs Client Conf Suboptions . o Link Selection sub-option for the Relay Agent Option RFC 3527 : link selection . o PacketCable Security Ticket Control Sub-Option for the DHCP CableLabs Client Configuration (CCC) Option RFC 3594 : Security Ticket Control . o Key Distribution Center (KDC) Server Address Sub-option for the Dynamic Host Configuration Protocol (DHCP) CableLabs Client Configuration (CCC) Option RFC 3634 : IP Key Distribution Center . o Unused Dynamic Host Configuration Protocol (DHCP) Option Codes RFC 3679 : Kea RFC . o Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 RFC 3925 : Vendor-Identifying Vendor Class Vendor-Identifying Vendor-Specific Information . o Reclassifying Dynamic Host Configuration Protocol version 4 (DHCPv4) Options RFC 3942 : Kea . o Subscriber-ID Suboption for the DHCP Relay Agent Option RFC 3993 : Subscriber-ID . o Dynamic Host Configuration Protocol (DHCP) Options for Broadcast and Multicast Control Servers RFC 4280 : DHCPv4 . o Node-specific Client Identifiers for Dynamic Host Configuration Protocol Version Four (DHCPv4) RFC 4361 : DUID DHCPv4 . o Dynamic Host Configuration Protocol (DHCP) Leasequery RFC 4388 : . leasequery . libdhcp_lease_query.so: Leasequery Support <# hooks-lease-query> . o Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE) RFC 4578 : . o A DNS Resource Record (RR) for Encoding Dynamic Host Configuration Protocol (DHCP) Information (DHCID RR) RFC 4701 : DHCPv4 DHCID . DHCP-DDNS DHCID / . o The Dynamic Host Configuration Protocol (DHCP) Client Fully Qualified Domain Name (FQDN) Option RFC 4702 : Kea Client FQDN . kea-dhcp-ddns <#std-iscman-kea-dhcp-ddns> DNS . o Resolution of Fully Qualified Domain Name (FQDN) Conflicts among Dynamic Host Configuration Protocol (DHCP) Clients RFC 4703 : DHCPv6 DHCP-DDNS . o Timezone Options for DHCP: RFC 4833 : DHCPv4 . o The Dynamic Host Configuration Protocol Version 4 (DHCPv4) Relay Agent Flags Suboption: RFC 5010 : Relay Agent Flags Kea . o Server Identifier Override sub-option for the Relay Agent Option RFC 5107 : server identifier override . RFC RAI . o DHCP Options for Protocol for Carrying Authentication for Network Access (PANA) Authentication Agents: RFC 5192 : PANA . o Discovering Location-to-Service Translation (LoST) Servers Using the Dynamic Host Configuration Protocol (DHCP): RFC 5223 : LOST . o Control And Provisioning of Wireless Access Points (CAPWAP) Access Controller DHCP Option: RFC 5417 : CAPWAP IPv4 . o DHCPv4 Lease Query by Relay Agent Remote ID RFC 6148 : leasequery remote-id . leasequery . libdhcp_lease_query.so: Leasequery Support <#hooks-lease-query> . o Client Identifier Option in DHCP Server Replies RFC 6842 : client-id . . Echoing Client-ID (RFC 6842) . o The DHCPv4 Relay Agent Identifier Sub-Option RFC 6925 : relay-id ( flex-id ) . o DHCPv4 Bulk Leasequery RFC 6926 : ( TCP ) . leasequery . libdhcp_lease_query.so: Leasequery Support <#hooks-lease-query> . o Generalized UDP Source Port for the DHCP Relay Agent Option RFC 8357 : Kea Relay Agent Information Source Port UDP UDP . o Captive-Portal Identification in DHCP and Router Advertisements (RAs) RFC 8910 : Kea v4 v6 (captive portal) . o IPv6-Only Preferred Option for DHCPv4 RFC 8925 : Kea IPv6-Only Preferred v6-only-preferred . o DHCP and Router Advertisement Options for the Discovery of Network-designated Resolvers (DNR) RFC 9463 . Kea DNR . Kea RFC . Kea RFC . o RFC 2131 DHCPREQUEST "requested IP address" ciaddr NAK . DHCPREQUEST . Kea DHCPREQUEST ACK . o RFC 2131 DHCPDECLINE DHCPRELEASE (server identifier) (drop) . ISC DHCP Kea . DHCPv4 Kea DHCPv4 . << >> . . . o Linux BSD DHCP ( LPF BPF) ( IP UDP) Kea . Kea IEEE 802.3 . Kea ( Infiniband) . DHCPv4 Kea DHCPv4 Kea doc/examples/kea4 . DHCPv4 Kea <# config-backend> (CB) . CB Kea DHCPv4 . DHCPv4 CB . DHCPv6 CB DHCPv6 <#dhcp6-cb> . CB Kea . Kea DHCPv4 . JSON . libdhcp_cb_cmds.so <#std-ischooklib-libdhcp_cb_cmds .so> . remote-global-parameter4-set <#std-isccmd-remote-global- parameter4-set> remote-network4-set <#std-isccmd-remote-network4-set> remote-subnet4-set <#std-isccmd-remote- subnet4-set> . . DHCPv4 (option-data) remote-option4-global-set <#std-isccmd-remote-option4-global- set> . DHCPv4 remote-class4-set <#std-isccmd-remote- class4-set> . <#cb-sharing> . DHCP ( DHCPv4 DHCPv6) . . . all . all ( all ) . DHCPv4 . DHCPv4 +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ | | | | | | | | | | | | | | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |4o6-interface | n/a | n/a | n/a | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |4o6-interface-id | n/a | n/a | n/a | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |4o6-subnet | n/a | n/a | n/a | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |allocator | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |boot-file-name | | | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |cache-max-age | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |cache-threshold | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |calculate-tee-times | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |client-class | n/a | n/a | | | | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |ddns-send-update | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |ddns-override-no-update | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |ddns-override-client-update | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |ddns-replace-client-name | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |ddns-generated-prefix | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |ddns-qualifying-suffix | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |decline-probation-period | | n/a | n/a | n/a | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |dhcp4o6-port | | n/a | n/a | n/a | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |echo-client-id | | n/a | n/a | n/a | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |hostname-char-set | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |hostname-char-replacement | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |interface | n/a | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |match-client-id | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |min-valid-lifetime | | | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |max-valid-lifetime | | | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |next-server | | | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |option-data | ( | | | | | | | | | | | | | | remote-option4-global-set) | | | | | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |option-def | ( | | n/a | n/a | n/a | | | | | | | | | | remote-option-def4-set) | | | | | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |rebind-timer | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |renew-timer | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |server-hostname | | | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |valid-lifetime | | | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |relay | n/a | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |require-client-classes | | n/a | | | | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |evaluate-additional-classes | | n/a | | | | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |reservations-global | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |reservations-in-subnet | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |reservations-out-of-pool | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |t1-percent | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ |t2-percent | | n/a | | | n/a | +----------------------------+----------------------------+--------------------+-----------------+-----------------------+-----------------+ yes - . o no - . o n/a - . . DHCPv4 +----------------------------------------------------------+---------------------------+---------------------------------+ | ( | | | | ) | | | +----------------------------------------------------------+---------------------------+---------------------------------+ |compatibility.ignore-dhcp-server-identifier | compatibility | ignore-dhcp-server-identifier | +----------------------------------------------------------+---------------------------+---------------------------------+ |compatibility.ignore-rai-link-selection | compatibility | ignore-rai-link-selection | +----------------------------------------------------------+---------------------------+---------------------------------+ |compatibility.lenient-option-parsing | compatibility | lenient-option-parsing | +----------------------------------------------------------+---------------------------+---------------------------------+ |compatibility.exclude-first-last-24 | compatibility | exclude-first-last-24 | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.enable-updates | dhcp-ddns | enable-updates | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.max-queue-size | dhcp-ddns | max-queue-size | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.ncr-format | dhcp-ddns | ncr-format | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.ncr-protocol | dhcp-ddns | ncr-protocol | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.sender-ip | dhcp-ddns | sender-ip | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.sender-port | dhcp-ddns | sender-port | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.server-ip | dhcp-ddns | server-ip | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-ddns.server-port | dhcp-ddns | server-port | +----------------------------------------------------------+---------------------------+---------------------------------+ |expired-leases-processing.flush-reclaimed-timer-wait-time | expired-leases-processing | flush-reclaimed-timer-wait-time | +----------------------------------------------------------+---------------------------+---------------------------------+ |expired-leases-processing.hold-reclaimed-time | expired-leases-processing | hold-reclaimed-time | +----------------------------------------------------------+---------------------------+---------------------------------+ |expired-leases-processing.max-reclaim-leases | expired-leases-processing | max-reclaim-leases | +----------------------------------------------------------+---------------------------+---------------------------------+ |expired-leases-processing.max-reclaim-time | expired-leases-processing | max-reclaim-time | +----------------------------------------------------------+---------------------------+---------------------------------+ |expired-leases-processing.reclaim-timer-wait-time | expired-leases-processing | reclaim-timer-wait-time | +----------------------------------------------------------+---------------------------+---------------------------------+ |expired-leases-processing.unwarned-reclaim-cycles | expired-leases-processing | unwarned-reclaim-cycles | +----------------------------------------------------------+---------------------------+---------------------------------+ |multi-threading.enable-multi-threading | multi-threading | enable-multi-threading | +----------------------------------------------------------+---------------------------+---------------------------------+ |multi-threading.thread-pool-size | multi-threading | thread-pool-size | +----------------------------------------------------------+---------------------------+---------------------------------+ |multi-threading.packet-queue-size | multi-threading | packet-queue-size | +----------------------------------------------------------+---------------------------+---------------------------------+ |sanity-checks.lease-checks | sanity-checks | lease-checks | +----------------------------------------------------------+---------------------------+---------------------------------+ |sanity-checks.extended-info-checks | sanity-checks | extended-info-checks | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-queue-control.enable-queue | dhcp-queue-control | enable-queue | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-queue-control.queue-type | dhcp-queue-control | queue-type | +----------------------------------------------------------+---------------------------+---------------------------------+ |dhcp-queue-control.capacity | dhcp-queue-control | capacity | +----------------------------------------------------------+---------------------------+---------------------------------+ ..SS DHCPv4 +--------------------------------------+ | | || | | | | | +--------------------------------------+ |host-reservation-identifiers | | |string | +--------------------------------------+ MySQL : { "Dhcp4": { "server-tag": "my DHCPv4 server", "config-control": { "config-databases": [ { "type": "mysql", "name": "kea", "user": "kea", "password": "1234", "host": "192.0.2.1", "port": 3302 } ], "config-fetch-wait-time": 20 }, "hooks-libraries": [ { "library": "libdhcp_mysql.so" }, { "library": "libdhcp_cb_cmds.so" } ] } } PostgreSQL : { "Dhcp4": { "server-tag": "my DHCPv4 server", "config-control": { "config-databases": [ { "type": "postgresql", "name": "kea", "user": "kea", "password": "1234", "host": "192.0.2.1", "port": 3302 } ], "config-fetch-wait-time": 20 }, "hooks-libraries": [ { "library": "libdhcp_pgsql.so" }, { "library": "libdhcp_cb_cmds.so" } ] } } config-control . config-databases . ( (lease) .) config-databases . . . : . Kea . . (IDs) / . Kea (poll) . config-fetch-wait-time ( ) . . ( ) ( ) . config-fetch-wait-time . DHCP . config-fetch-wait-time . config-backend-pull <#std-isccmd-config-backend-pull> . (hook library) . : libdhcp_mysql.so <#std-ischooklib-libdhcp_mysql.so> MySQL libdhcp_pgsql.so <#std-ischooklib-libdhcp_pgsql .so> PostgreSQL . type config-control . libdhcp_cb_cmds.so <#std-ischooklib-libdhcp_cb_cmds.so> . Kea . libdhcp_cb_cmds.so: Configuration Backend Commands <#hooks-cb-cmds> ..SS Kea DHCPv4 ISC Kea RFC . DHCP . Kea . : { "Dhcp4": { "compatibility": { } } } (Lenient Option Parsing) (tuple) - (length-value) . "lenient-option-parsing": true Kea unable to parse the opaque data tuple, the buffer length is x, but the tuple length is y x < y . y x . { "Dhcp4": { "compatibility": { "lenient-option-parsing": true } } } 2.5.8 Kea FQDN (81) 3.1.9 Kea 'S' 'N' 1 'N' ISC DHCP 0 . DHCP (DHCP Server Identifier) "ignore-dhcp-server-identifier": true DHCP Server Identifier ( ). { "Dhcp4": { "compatibility": { "ignore-dhcp-server-identifier": true } } } Link Selection RAI "ignore-rai-link-selection": true Relay Agent Information Link Selection (subnet) . . RFC false . true DHCP Relay Agent Information Link Selection . { "Dhcp4": { "compatibility": { "ignore-rai-link-selection": true } } } 24/ exclude-first-last-24 IPv4 ( true 0. 255. 24 ). DHCPv4 DHCP IPv4 . . . "allocator" () Kea . Kea DHCPv4 (global) (shared-network) (subnet) . : { "Dhcp4": { "allocator": "random", "subnet4": [ { "id": 1, "subnet": "10.0.0.0/8", "allocator": "iterative" }, { "id": 2, "subnet": "192.0.2.0/24" } ] } } iterative () random () . 2 1 . ..SS (Allocators Comparison) . Kea DHCPv4 +----------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+---------------------------------------------------------+-------------------+ | | | | | / | | | | | | | | | | | | | | | | +----------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+---------------------------------------------------------+-------------------+ |Iterative | | | | | | +----------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+---------------------------------------------------------+-------------------+ |Random | | | | | | | | | | | | () | +----------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+---------------------------------------------------------+-------------------+ |Free Lease Queue | | | | ( | | | | | | | pool) | () | +----------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+---------------------------------------------------------+-------------------+ |Shared FLQ | | | pool | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+---------------------------------------------------------+-------------------+ (Iterative Allocator) Kea DHCPv4 . . : 192.0.2.10 192.0.2.11 192.0.2.12 . pool . DHCP . . . (Random Allocator) pool . . . . . . pool . : { "Dhcp4": { "allocator": "random", "subnet4": [ { "id": 1, "subnet": "10.0.0.0/8", "allocator": "random" } ] } } (allocator) . (iterative) (random) . DHCP . Free Lease Queue (FLQ) . . (released) (reclaimed) . FLQ : { "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "allocator": "flq" } ] } } . FLQ (startup) (reconfiguration) . libdhcp_subnet_cmds.so <#std-ischooklib- libdhcp_subnet_cmds.so> . FLQ . (lease reclamation) reclaim-timer-wait-time . Lease Reclamation <# lease-reclamation> . FLQ . /8 . /16 . (global) (shared-network) (override) FLQ . . : FLQ ( Kea ). . . . Kea 3.1.1 adaptive-lease-time-threshold . (global) (shared network) 0.0 () 1.0 . 1.0 . FLQ . min-valid-lifetime . . . ( ) ( client-classes ). (Shared Free Lease Queue Allocator) : Shared Free Lease Queue Allocator Kea 3.1.9 (experimental) (production) . Shared Free Lease Queue (SFLQ) (MySQL PostgreSQL) . . . DHCP . Free Lease Queue SFLQ . SFLQ . . SFLQ Kea SFLQ . FLQ SFLQ SFLQ SFLQ Kea . . SFLQ (persistent) Kea . SFLQ : { "Dhcp4": { "subnet4": [ { "id": 1, "subnet": "192.0.2.0/24", "allocator": "shared-flq" } ] } } . FLQ SFLQ SFLQ . libdhcp_subnet_cmds.so <#std-ischooklib-libdhcp_subnet_cmds.so> . FLQ SFLQ . SFLQ . SFLQ . SFLQ Kea. SFLQ SFLQ . SFLQ . SFLQ . SFLQ ( ``/8``) . ( ``/16`` ) . SFLQ . SFLQ . SFLQ SFLQ . SFLQ . SFLQ . . . . : SFLQ (maintenance windows) . SFLQ . SFLQ . SFLQ . (initialize) . SFLQ SFLQ . SFLQ . SFLQ . SFLQ (exclusive) . SFLQ (block) SFLQ . SFLQ SFLQ . . (overlapping pools) . Kea . SFLQ SFLQ . : reclaim-timer-wait-time SFLQ . . Lease Reclamation <#lease-reclamation> . : SFLQ /8 ( ). . SFLQ adaptive-lease-time-threshold ..SH " DHCPV6 (THE DHCPV6 SERVER)" DHCPv6 (Starting and Stopping the DHCPv6 Server) Kea DHCPv6 keactrl <#std-iscman-keactrl> ( Kea keactrl <#keactrl>) kea-dhcp6 <#std-iscman-kea-dhcp6> : o -c file - . . o -d - / (debug/verbose) . debuglevel "debug" debuglevel ( 99) . . o -p server-port - UDP . DHCPv6 DHCPv6 . o -P client-port - UDP . DHCPv6 DHCPv6 . o -t file - . kea-dhcp6 <#std-iscman-kea-dhcp6> . . ( = = ). . o -T file - . kea-dhcp6 <#std-iscman-kea-dhcp6> . -t ( lease backend host reservations backend configuration backend forensic logging backend) hook hook-library . UNIX TCP/UDP (rotate) . o -v - Kea . o -V - Kea . Kea (link) . o -W - Kea . config.report meson setup . config.report . # from installation using libkea-process.so $ strings ${prefix}/lib/libkea-process.so | sed -n 's/;;;; //p' # from sources using libkea-process.so $ strings src/lib/process/.libs/libkea-process.so | sed -n 's/;;;; //p' # from sources using libkea-process.a $ strings src/lib/process/.libs/libkea-process.a | sed -n 's/;;;; //p' # from sources using libcfgrpt.a $ strings src/lib/process/cfgrpt/.libs/libcfgrpt.a | sed -n 's/;;;; //p' o -X - Kea 3.0 . . Kea Runtime Security Policy Checking <#sec- kea-runtime-security-policy-checking> . UDP . DHCPv6 (privileged) root root . PID : [pidfile_dir]/[conf name].kea-dhcp6.pid : o pidfile_dir - [prefix]/[localstatedir]/run/kea prefix localstatedir meson setup --prefix --localstatedir /usr/local var . pidfile_dir /usr/local/var . KEA_PIDFILE_DIR . o conf name: . /usr/local/etc/kea/myconf.txt myconf . PID DHCP6_ALREADY_RUNNING . (crash) PID Kea . PID . kill . Ctrl-c . Kea . Kea SIGHUP . SIGHUP . (fatal) : ..SS DHCPv6 DHCPv6 Kea . DHCPv6 . : { # DHCPv6 configuration starts on the next line "Dhcp6": { # First we set up global values "valid-lifetime": 4000, "renew-timer": 1000, "rebind-timer": 2000, "preferred-lifetime": 3000, # Next we set up the interfaces to be used by the server. "interfaces-config": { "interfaces": [ "eth0" ] }, # And we specify the type of lease database "lease-database": { "type": "memfile", "persist": true, "name": "/var/lib/kea/dhcp6.leases" }, # Finally, we list the subnets from which we will be leasing addresses. "subnet6": [ { "id": 1, "subnet": "2001:db8:1::/64", "pools": [ { "pool": "2001:db8:1::1-2001:db8:1::ffff" } ] } ] # DHCPv6 configuration ends with the next line } } . . (#) (comment) . ( ) . Kea . Dhcp6 . Dhcp6 "Dhcp6": { ( ) . Dhcp6 . . JSON (well-formed) (scope) . . -- JSON . . . DHCPv6 (global) . valid-lifetime ( leases) . ( .) (deprecated) . renew-timer rebind-timer ( ) T1 T2 (renewal) (rebind) . interfaces-config DHCP . interfaces . . interfaces-config : { "interfaces-config": { "interfaces": [ "eth0", "eth1" ] }, ... } (lease database) . memfile (backend) . CSV ( ) . . lease-database . ( : type) . . . Dhcp6 . (subnets) IPv6 . DHCPv6 . DHCP . subnet6 . . . : subnet pools DHCP . . subnet6 . (syntax) : { "subnet6": [ { "id": 1, "pools": [ { "pool": "2001:db8:1::/112" } ], "subnet": "2001:db8:1::/64" }, { "id": 2, "pools": [ { "pool": "2001:db8:2::1-2001:db8:2::ffff" } ], "subnet": "2001:db8:2::/64" } ], ... } (indentation) . . (context) : global Dhcp6 ( ) ..SS (Lease Storage) (leases) . : memfile () MySQL PostgreSQL. Memfile - (Memfile - Basic Storage for Leases) . << >> (Lease Database Configuration) . CSV . . memfile Dhcp6/lease-database . type "memfile" . memfile . o persist: . true . ( ) . . false . persist true . o name: . "[kea-install-dir]/var/lib/kea/kea-leases6.csv" . : Kea 2.7.9 : "[kea-install-dir]/var/lib/kea". KEA_DHCP_DATA_DIR (override) . name Kea . name . o lfc-interval: ( ) (LFC) . () . . lfc-interval 3600 . 0 LFC . o max-row-errors: . . . . 0 . memfile : "Dhcp6": { "lease-database": { "type": "memfile", "persist": true, "name": "kea-leases6.csv", "lfc-interval": 1800, "max-row-errors": 100 } } kea-leases6.csv ( ) . ( ) . (Why Is Lease File Cleanup Necessary?) . . . (append) . . . . (LFC) . . lfc-interval . LFC ( ) lfc-interval . . (spawn) . lfc-interval LFC . ( ) . LFC Kea LFC . . LFC Kea : LFC <#kea- lfc>..SS (Lease Database Configuration) : DHCPv6 DHCPv4 . . : Kea . <> <#mysql-database- create> <> <# pgsql-database-create> . Dhcp6/lease-database . memfile mysql postgresql : "Dhcp6": { "lease-database": { "type": "mysql", ... }, ... } ( <> <#mysql-database-create> <> <#pgsql-database- create> ). MySQL PostgreSQL: "Dhcp6": { "lease-database": { "name": "database-name" , ... }, ... } DHCPv6 : "Dhcp6": { "lease-database": { "host": "remote-host-name", ... }, ... } DHCPv6 . : "Dhcp6": { "lease-database": { "host" : "", ... }, ... } : "Dhcp6": { "lease-database": { "port" : 12345, ... }, ... } (timeout) : "Dhcp6": { "lease-database": { "connect-timeout" : timeout-in-seconds, ... }, ... } . . : "Dhcp6": { "lease-database": { "max-reconnect-tries" : number-of-tries, ... }, ... } . 0 () ( MySQL PostgreSQL). : "Dhcp6": { "lease-database": { "reconnect-wait-time" : number-of-milliseconds, ... }, ... } MySQL PostgreSQL 0 . "Dhcp6": { "lease-database": { "on-fail" : "stop-retry-exit", ... }, ... } : o stop-retry-exit - DHCP max-reconnect-tries . . o serve-retry-exit - DHCP max-reconnect-tries . o serve-retry-continue - DHCP . (forensic logging) . : . . ( ) . . stop-retry-exit (lease manager) DHCP . . "Dhcp6": { "lease-database": { "retry-on-startup" : true, ... }, ... } (fatal) retry-on-startup false () . . (nanny scripts) . retry-on-startup true on-fail . host MySQL PostgreSQL . : "Dhcp6": { "lease-database": { "user": "user-name", "password": "1234", ... }, ... } "" . ( .).SS (Tuning Database Timeouts) (hang ). . Kea I/O . (timeout) . MySQL . Kea read-timeout write-timeout . : "Dhcp6": { "lease-database": { "read-timeout" : 10, "write-timeout": 20, ... }, ... } 0 Kea MySQL . Kea . MySQL 5.6 . read-timeout write-timeout MySQL . PostgreSQL tcp-user-timeout . : "Dhcp6": { "lease-database": { "tcp-user-timeout" : 10, ... }, ... } . : TCP . MySQL Kea host localhost (UNIX domain socket) 127.0.0.1 TCP . 2.7.4 Kea (hook library) libdhcp_mysql.so MySQL . : "Dhcp6": { "hooks-libraries": [ { // the MySQL lease backend hook library required for lease storage. "library": "libdhcp_mysql.so" }, ... ], ... } 2.7.4 Kea libdhcp_pgsql.so PostgreSQL . . "Dhcp6": { "hooks-libraries": [ { // the PostgreSQL lease backend hook library required for lease storage. "library": "libdhcp_pgsql.so" }, ... ], ... } (Hosts Storage) Kea (host reservations) . . Kea . Kea . MySQL PostgreSQL . MySQL : "Dhcp6": { "hosts-database": { "type": "mysql", "name": "kea", "user": "kea", "password": "1234", "host": "localhost", "port": 3306 } } . . . . ( ) . . . (read-only) - (read-write) . : Kea (timezone) . First-Time Creation of the MySQL Database <#mysql-database-create> First-Time Creation of the PostgreSQL Database <#pgsql-database-create> . Dhcp6/hosts-database . mysql postgresql . "Dhcp6": { "hosts-database": { "type": "mysql", ... }, ... } ( <#supported-databases> ): "Dhcp6": { "hosts-database": { "name": "database-name" , ... }, ... } DHCPv6 : "Dhcp6": { "hosts-database": { "host": remote-host-name, ... }, ... } DHCPv6 . : "Dhcp6": { "hosts-database": { "host" : "", ... }, ... } : "Dhcp6": { "hosts-database": { "port" : 12345, ... }, ... } : "Dhcp6": { "hosts-database": { "max-reconnect-tries" : number-of-tries, ... }, ... } . 0 () ( MySQL PostgreSQL). : "Dhcp6": { "hosts-database": { "reconnect-wait-time" : number-of-milliseconds, ... }, ... } MySQL PostgreSQL 0 . "Dhcp6": { "hosts-database": { "on-fail" : "stop-retry-exit", ... }, ... } : o stop-retry-exit - DHCP . max-reconnect-tries . MySQL PostgreSQL . o serve-retry-exit - DHCP . max-reconnect-tries . o serve-retry-continue - DHCP . : . . . ( ) . . "Dhcp6": { "hosts-database": { "retry-on-startup" : true, ... }, ... } retry-on-startup false () . . . retry-on-startup true on-fail . : "Dhcp6": { "hosts-database": { "user": "user-name", "password": "1234", ... }, ... } "" . ( .) hosts-database hosts-databases : "Dhcp6": { "hosts-databases": [ { "type": "mysql", ... }, ... ], ... } Kea . ..SS - DHCPv6 backend . . (inventory) . (view) Kea - . backend Kea . backend ( ) . - / Kea "read-only" . readonly : "Dhcp6": { "hosts-database": { "readonly": true, ... }, ... } false backend "read-write" . : readonly MySQL PostgreSQL . Kea.2.7.4 libdhcp_mysql.so backend MySQL . backend (lease) : "Dhcp6": { "hooks-libraries": [ { // the MySQL host backend hook library required for host storage. "library": "libdhcp_mysql.so" }, ... ], ... } Kea.2.7.4 libdhcp_pgsql.so backend PostgreSQL . backend . "Dhcp6": { "hooks-libraries": [ { // the PostgreSQL host backend hook library required for host storage. "library": "libdhcp_pgsql.so" }, ... ], ... } Tuning Database Timeouts . DHCPv6 . : "Dhcp6": { "interfaces-config": { "interfaces": [ "*" ] }, ... } : Kea IPv6 . (unicast) Unicast Traffic Support . (wildcard) " " . : "Dhcp6": { "interfaces-config": { "interfaces": [ "eth1", "eth3" ] }, ... } (*) : "Dhcp6": { "interfaces-config": { "interfaces": [ "eth1", "eth3", "*" ] }, ... } . DHCPv4 . dhcp-socket-type DHCPv6 UDP/IPv6 . . re-detect false : "Dhcp6": { "interfaces-config": { "interfaces": [ "eth1", "eth3" ], "re-detect": false }, ... } . config-test <#std-isccmd-config-test> config-set <#std-isccmd- config-set> . config-test <#std-isccmd-config-test> config-set <#std-isccmd-config-set> . ( lo lo0) . Kea - (link-local) ( ) (unicast) : "Dhcp6": { "interfaces-config": { "interfaces": [ "enp0s2/2001:db8::1234:abcd" ] }, ... } Kea (bind) . (port) Kea . DHCP . "service-sockets-require-all" Kea . Kea . ( false ). "Dhcp6": { "interfaces-config": { "interfaces": [ "eth1", "eth3" ], "service-sockets-require-all": true }, ... } . . . Kea : service-sockets-max-retries service-sockets-retry-wait-time. Kea . () Kea . ( ) . 5000 ( ) . "Dhcp6": { "interfaces-config": { "interfaces": [ "eth1", "eth3" ], "service-sockets-max-retries": 5, "service-sockets-retry-wait-time": 5000 }, ... } "service-sockets-max-retries" "service-sockets-require-all" false Kea ( ) ..SS IPv6 (IPv6 Subnet Identifier) (subnet ID) . (leases) . . : 4294967295 . : "Dhcp6": { "subnet6": [ { "subnet": "2001:db8:1::/64", "id": 1024, ... } ] } IPv6 (IPv6 Subnet Prefix) (subnet prefix) . Kea (non-canonical) : "Dhcp6": { "subnet6": [ { "subnet": "2001:db8:1::1/64", ... } ] } "2001:db8:1::/64" . : ( << IPv6>> ). (Unicast Traffic Support) DHCPv6 DHCP (multicast) ff02::1:2 ( << >> ). (global unicast) (relays) . (/) . (binding) (link-local) ff02::1:2 . 2001:db8::1 ( ) eth1 . "Dhcp6": { "interfaces-config": { "interfaces": [ "eth1/2001:db8::1" ] }, "option-data": [ { "name": "unicast", "data": "2001:db8::1" } ], ... } eth1 link-local (ff02::1:2) 2001:db8::1 . (server unicast option) . : RFC 9915 ( ) . . (wildcards) << />> . . (bind) . ..SS IPv6 DHCPv6 . . 2001:db8:1::/64 . 2001:db8:1::1 2001:db8:1::ffff DHCPv6 . : "Dhcp6": { "subnet6": [ { "subnet": "2001:db8:1::/64", "pools": [ { "pool": "2001:db8:1::1-2001:db8:1::ffff" } ], ... } ] } subnet pools () . pool . pool . 2001:db8:1:0:5::/80 . 2001:db8:1:0:5:: 2001:db8:1::5:ffff:ffff:ffff f . 2001:db8:1:0:5::/80 . Dhcp6 . : "Dhcp6": { "subnet6": [ { "subnet": "2001:db8:1::/64", "pools": [ { "pool": "2001:db8:1::1-2001:db8:1::ffff" }, { "pool": "2001:db8:1:05::/80" } ], ... } ] } . . . . : "Dhcp6": { "subnet6": [ { "id": 1, "subnet": "2001:db8:1::/64", "pools": [ { "pool": "2001:db8:1::1-2001:db8:1::ffff" } ] }, { "id": 2, "subnet": "2001:db8:2::/64", "pools": [ { "pool": "2001:db8:2::/64" } ] }, ... ] } . /64 . Kea . DHCPv6 / (prefix/length) . ( ) . 2001:db8:2::/64 2001:db8:2:: . min-max . (Prefix Delegation) 6.3 RFC 9915 . . (prefix) (prefix-len) (delegated-len) . ( ). . . : "Dhcp6": { "subnet6": [ { "id": 1, "subnet": "2001:d8b:1::/64", "pd-pools": [ { "prefix": "3000:1::", "prefix-len": 64, "delegated-len": 96 } ] } ], ... } (delegated prefix) RFC 6603 . (downstream interfaces) . DHCPv6 . (prefix pool) . 2001:db8:1:8000:cafe:80::/72 Prefix Exclude (ORO Option Request option) . "Dhcp6": { "subnet6": [ { "id": 1, "subnet": "2001:db8:1::/48", "pd-pools": [ { "prefix": "2001:db8:1:8000::", "prefix-len": 56, "delegated-len": 64, "excluded-prefix": "2001:db8:1:8000:cafe:80::", "excluded-prefix-len": 72 } ] } ] } (Overlapping Pools) : Kea : +----------------------------------+--------------+-----------------------------------------+ | | | | | Kea | | | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | : | | | | DHCP6_PARSER_FAIL | | | | | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (global address | | | | pool) . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | : | | | | DHCP6_PARSER_FAIL | | | | | | | | | | | | | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | : | | | | DHCP6_PARSER_FAIL | | | | | | | | | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . | +----------------------------------+--------------+-----------------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3000::/96 | | | | 2001:db8:1::/64. | | | | | | | | Kea DHCPv6 | | | | | | | | . | +----------------------------------+--------------+-----------------------------------------+ DHCPv6 . . DNS . (global) . "Dhcp6": { "option-data": [ { "name": "dns-servers", "code": 23, "space": "dhcp6", "csv-format": true, "data": "2001:db8::cafe, 2001:db8::babe" }, ... ] } option-data option-data . . name . ( <> .) . space dhcp6 DHCPv6 . <> . CSV ( ) . data . data . . csv-format false . dns-servers 2001:db8:1::cafe 2001:db8:1::babe . "Dhcp6": { "option-data": [ { "name": "dns-servers", "code": 23, "space": "dhcp6", "csv-format": false, "data": "20 01 0D B8 00 01 00 00 00 00 00 00 00 00 CA FE \ 20 01 0D B8 00 01 00 00 00 00 00 00 00 00 BA BE" }, ... ] } : data . Kea : o (Delimited octets) - (":" " ") . . "ab:cd:ef" "ab cd ef". o (String of digits) - "0x" . "0xabcdef" "abcdef". Kea . (single-quoted) (double quotes) ( csv-format false ): "Dhcp6": { "option-data": [ { "name": "subscriber-id", "code": 38, "space": "dhcp6", "csv-format": false, "data": "'convert this text to binary'" }, ... ], ... } option-data <> . name code . Space dhcp6 ( ) DHCPv6 . csv-format true (hexstring) . : "Dhcp6": { "option-data": [ { "name": "dns-servers", "data": "2001:db8::cafe, 2001:db8::babe" }, ... ] } . . always-send true : "Dhcp6": { "option-data": [ { "name": "dns-servers", "data": "2001:db8::cafe, 2001:db8::babe", "always-send": true }, ... ] } Option Request Option ( vendor) : "Dhcp6": { "option-data": [ { "name": "dns-servers", "data": "2001:db8::cafe, 2001:db8::babe", "always-send": true }, ... ], "subnet6": [ { "subnet": "2001:db8:1::/64", "option-data": [ { "name": "dns-servers", "data": "2001:db8:1::cafe, 2001:db8:1::babe" }, ... ], ... }, ... ], ... } dns-servers always-send 2001:db8:1::/64 . always-send never-send true . Option Request Option ( vendor) : "Dhcp6": { "option-data": [ { "name": "dns-servers", "data": "2001:db8::cafe, 2001:db8::babe" }, ... ], "subnet6": [ { "subnet": "2001:db8:1::/64", "option-data": [ { "name": "dns-servers", "never-send": true }, ... ], ... }, ... ], ... } dns-server 2001:db8:1::/64 . never-send always-send true . : always-send never-send (sticky) . - . . : never-send libdhcp_flex_option.so <#std-ischooklib-libdhcp_flex_option.so> . always-send never-send . . . . dns-servers DNS 2001:db8:1::3 . "Dhcp6": { "subnet6": [ { "option-data": [ { "name": "dns-servers", "code": 23, "space": "dhcp6", "csv-format": true, "data": "2001:db8:1::3" }, ... ], ... }, ... ], ... } (pool) (lease) . . . . . dns-servers : "Dhcp6": { "subnet6": [ { "pools": [ { "pool": "2001:db8:1::100-2001:db8:1::300", "option-data": [ { "name": "dns-servers", "data": "2001:db8:1::10" } ] } ] }, ... ], ... } (host-reservation) . Kea ( ) : (pool) (subnet) (shared network) (class) (global). : 2.7.4 Kea (option class-tagging) <