diff --git a/ChangeLog b/ChangeLog index c1bb389174..c440cf1984 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2019. [func] tmark + Added new built-in class "SKIP_DDNS" which may be used in + conjunction with the ddns-tuning hook library to to skip + performing DDNS updates for a given client. + (Gitlab #2354) + 2018. [func] razvan The kea-dhcp4 server now supports portions of RFC 3396, allowing it to send and receive DHCP options longer than 255 diff --git a/doc/sphinx/arm/hooks-ddns-tuning.rst b/doc/sphinx/arm/hooks-ddns-tuning.rst index 0e68e036cb..d81fde69a1 100644 --- a/doc/sphinx/arm/hooks-ddns-tuning.rst +++ b/doc/sphinx/arm/hooks-ddns-tuning.rst @@ -1,10 +1,11 @@ .. _hooks-ddns-tuning: -``ddns_tuning``: Tuning DNS updates -=================================== +``ddns_tuning``: Tuning DDNS updates +==================================== This hook library adds support for fine tuning various DNS update aspects. -Currently it supports procedural host name generation. The DDNS Tuning hook +Currently it supports procedural host name generation and the ability to +skip performing DDNS updates for select clients. The DDNS Tuning hook is a premium feature. The library, which was added in Kea 2.1.5, can be loaded by the ``kea-dhcp4`` @@ -148,3 +149,40 @@ response to a client query (e.g. SOLICIT, REQUEST, RENEW, REBIND) is as follows: 6. If the value calculated by the hook is not an empty string and is different than the host name formed in the prior steps (1 or 2), the calculated value becomes the final host name. + +Skipping DDNS Updates +~~~~~~~~~~~~~~~~~~~~~ + +The ddns-tuning library also provides the ability to skip DDNS updates on a per +client basis. The library recognizes a special client class, "SKIP_DDNS". When a +client is matched to this class, kea servers (kea-dhcp4 and kea-dhcp6) will not +send DDNS update requests (NCRs) to kea-dhcp-ddns. A common use-case would be +to skip DDNS updates for fixed-address host reservations. This is done easily by +simply assiging the class to the host reservation as shown below: + +.. code-block:: javascript + + { + "reservations": [ + { + "hw-address": "01:02:03:04:05:06", + "ip-address": "192.0.2.1", + "client-classes": [ "SKIP_DDNS", "foo", "bar" ] + }] + } + +The ddns-tuning library will spot the presence of the "SKIP_DDNS" class in the +client's class list each time the client requests, renews, or releases its lease, +and instruct kea-dhcp4 to bypass sending DDNS updates. A similar work flow is +supported for kea-dhcp6: + +.. code-block:: javascript + + { + "reservations": [ + { + "duid": "01:02:03:04:05:06", + "ip-address": "2001:db8::1", + "client-classes": [ "SKIP_DDNS", "foo", "bar" ] + }] + } diff --git a/doc/sphinx/arm/hooks.rst b/doc/sphinx/arm/hooks.rst index 0c73cd6d4f..0931cfa3b0 100644 --- a/doc/sphinx/arm/hooks.rst +++ b/doc/sphinx/arm/hooks.rst @@ -427,6 +427,12 @@ loaded by the correct process per the table below. | Backend | |a repository for the Kea configuration information. Kea | | | |servers use this library to fetch their configurations. | +-----------------+---------------+------------------------------------------------------------+ + | PostgreSQL | Kea open |This hook library is an implementation of the Kea | + | Configuration | source |Configuration Backend for PostgreSQL. It uses a PostgreSQL | + | Backend | |database as a repository for the Kea configuration | + | | |information. Kea servers use this library to fetch their | + | | |configurations. | + +-----------------+---------------+------------------------------------------------------------+ | Configuration | ISC support |This hook | | Backend | customers |library implements a collection of commands to manage | | Commands | |Kea configuration information in a | @@ -454,6 +460,10 @@ loaded by the correct process per the table below. | | customers |(kea-ctrl-agent) for Role Based Access Control filtering | | | |of commands. | +-----------------+---------------+------------------------------------------------------------+ + | DDNS-Tuning | ISC support |This hook library adds support for fine tuning various DDNS | + | | customers |update aspects such as generating hostnames via expressions | + | | |and skipping DDNS updates for select cients. | + +-----------------+---------------+------------------------------------------------------------+ ISC hopes to see more hook libraries become available as time progresses, developed both internally and externally. Since this list diff --git a/src/lib/dhcpsrv/client_class_def.cc b/src/lib/dhcpsrv/client_class_def.cc index 092ce5ba0b..2aa36cffde 100644 --- a/src/lib/dhcpsrv/client_class_def.cc +++ b/src/lib/dhcpsrv/client_class_def.cc @@ -478,7 +478,8 @@ builtinNames = { // In fact DROP is set from an expression as callouts can drop // directly the incoming packet. The expression must not depend on // KNOWN/UNKNOWN which are set far after the drop point. - "ALL", "KNOWN", "UNKNOWN", "BOOTP" + // SKIP_DDNS is used by ddns-tuning hook library. + "ALL", "KNOWN", "UNKNOWN", "BOOTP", "SKIP_DDNS" }; std::list