2022-03-18 11:20:37 +01:00
|
|
|
.. _hooks-ddns-tuning:
|
|
|
|
|
|
|
|
``ddns_tuning``: Tuning DNS updates
|
|
|
|
===================================
|
|
|
|
|
|
|
|
This hook library adds support for fine tuning various DNS update aspects.
|
2022-04-06 13:53:34 -04:00
|
|
|
Currently it supports procedural host name generation. The DDNS Tuning hook
|
|
|
|
is a premium feature.
|
2022-03-18 11:20:37 +01:00
|
|
|
|
2022-04-06 13:53:34 -04:00
|
|
|
The library, which was added in Kea 2.1.4, is loaded in a
|
|
|
|
can be loaded by ``kea--dhcp4`` and ``kea-dhcp6`` by adding it
|
|
|
|
to ``hooks-libraries`` element of the server's configuration:
|
2022-03-18 11:20:37 +01:00
|
|
|
|
|
|
|
.. code-block:: javascript
|
|
|
|
|
|
|
|
{
|
|
|
|
"hooks-libraries": [
|
2022-04-06 13:53:34 -04:00
|
|
|
:
|
|
|
|
,
|
2022-03-18 11:20:37 +01:00
|
|
|
{
|
|
|
|
"library": "/usr/local/lib/libdhcp_ddns_tuning.so",
|
|
|
|
"parameters": {
|
2022-04-06 13:53:34 -04:00
|
|
|
:
|
2022-03-18 11:20:37 +01:00
|
|
|
}
|
2022-04-06 13:53:34 -04:00
|
|
|
},
|
|
|
|
:
|
2022-03-18 11:20:37 +01:00
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2022-04-06 13:53:34 -04:00
|
|
|
Procedural Host name generation
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2022-03-18 11:20:37 +01:00
|
|
|
|
2022-04-06 13:53:34 -04:00
|
|
|
This hook library provides the ability to generate host names, procedurally, based on
|
|
|
|
an expression. The expression can be defined globally in the hook parameters, using
|
|
|
|
`hostname-expr`. If defined globally, it will apply to all hosts in all subnets. The
|
|
|
|
expressions can use all tokens defined in :ref:`classify`. An example of a global
|
|
|
|
expression is shown below:
|
|
|
|
|
|
|
|
.. code-block:: javascript
|
|
|
|
|
|
|
|
{
|
|
|
|
"hooks-libraries": [
|
|
|
|
:
|
|
|
|
,
|
|
|
|
{
|
|
|
|
"library": "/usr/local/lib/libdhcp_ddns_tuning.so",
|
|
|
|
"parameters": {
|
|
|
|
:
|
|
|
|
"hostname-expr": "'host-'+hexstring(pkt4.mac,'-')"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
:
|
|
|
|
]
|
|
|
|
}
|
2022-03-18 11:20:37 +01:00
|
|
|
|
2022-04-06 13:53:34 -04:00
|
|
|
It is also possible to define this parameter in a subnet, using user-context mechanism.
|
|
|
|
If defined at the subnet level, the expression applies to specific subnet only. If the
|
|
|
|
subnet expression is defined as empty, "", it will suppresses (or disables) the use of
|
|
|
|
a global expression for that subnet. An example subnet expression is shown below:
|
2022-03-18 11:20:37 +01:00
|
|
|
|
|
|
|
.. code-block:: javascript
|
|
|
|
|
|
|
|
"subnet4": [{
|
|
|
|
"subnet": "192.0.2.0/24",
|
|
|
|
"pools": [{
|
|
|
|
"pool": "192.0.2.10 - 192.0.2.20",
|
|
|
|
} ],
|
|
|
|
|
|
|
|
// This is a subnet-specific user context.
|
|
|
|
"user-context": {
|
2022-03-28 10:37:48 -04:00
|
|
|
"ddns-tuning:" {
|
|
|
|
"hostame-expr": "'guest-'+Int8ToText(substring(pkt4.yiaddr, 0,1))+'-' \
|
|
|
|
+Int8ToText(substring(pkt4.yiaddr, 1,2))+'-' \
|
|
|
|
+Int8ToText(substring(pkt4.yiaddr, 2,3))+'-' \
|
|
|
|
+Int8ToText(substring(pkt4.yiaddr, 3,4))",
|
|
|
|
},
|
2022-03-18 11:20:37 +01:00
|
|
|
"last-modified": "2017-09-04 13:32",
|
|
|
|
"description": "you can put anything you like here",
|
|
|
|
"phones": [ "x1234", "x2345" ],
|
|
|
|
"devices-registered": 42,
|
|
|
|
"billing": false
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
|
2022-03-28 10:37:48 -04:00
|
|
|
.. note::
|
|
|
|
The expression value above uses a slash, '\', to show line continuation. This is for
|
|
|
|
clarity only and is not valid JSON supported by Kea parsing. The actually value has
|
|
|
|
to be expressed in a single line.
|
|
|
|
|
2022-03-18 11:20:37 +01:00
|
|
|
.. note::
|
|
|
|
|
2022-04-06 13:53:34 -04:00
|
|
|
Privacy should be taken into consideration when generating a host name. The host name is
|
2022-03-18 11:20:37 +01:00
|
|
|
usually inserted into the DNS, which is a public system. Exposing identifiers that
|
|
|
|
can be used to track devices, such as MAC address, are usually a very bad idea.
|
|
|
|
The global expression example used MAC address for simplicity.
|
2022-04-06 13:53:34 -04:00
|
|
|
|
|
|
|
DHCPv4 host name generation
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
With this library installed the behavior for ``kea-dhcp4`` when forming host names in
|
|
|
|
response to a client query (e.g. DISCOVER, REQUEST) is as follows:
|
|
|
|
|
|
|
|
1. If a host name is supplied via a host reservation use it along with the DDNS
|
|
|
|
behavioral parameters to form the final host name. Goto step 4.
|
|
|
|
|
|
|
|
2. If the client supplied an FQDN option (option 81) use the domain name value
|
|
|
|
specified within it along with the DDNS behavioral parameters to form the final
|
|
|
|
host name. Goto step 4.
|
|
|
|
|
|
|
|
3. If the client supplied a host name option (option 12) use the host name specified
|
|
|
|
within it along with the DDNS behavioral parameters to form the final host name.
|
|
|
|
|
|
|
|
4. If there is an ddns-tuning in-scope host name expression (either global or subnet),
|
|
|
|
calculate the host name using the expression. If the calculated value is not a fully
|
|
|
|
qualified name and there is an in-scope ddns-qualifying-suffix, append the suffix.
|
|
|
|
|
|
|
|
5. If value calculated by the hook is not an empty string and is different than the
|
|
|
|
the host name formed in the prior steps (1 or 2), the calculated value becomes the
|
|
|
|
final host name.
|
|
|
|
|
|
|
|
DHCPv6 host name generation
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
With this library installed the behavior for ``kea-dhcp6`` when forming host names in
|
|
|
|
response to a client query (e.g. SOLICIT, REQUEST, RENEW, REBIND) is as follows:
|
|
|
|
|
|
|
|
1. If a host name is supplied via a host reservation use it along with the DDNS
|
|
|
|
behavioral parameters to form the final host name. Goto step 3.
|
|
|
|
|
|
|
|
2. If the client supplied an FQDN option (option 39) use the domain name value
|
|
|
|
specified within it along with the DDNS behavioral parameters to form the final
|
|
|
|
host name. Goto step 3.
|
|
|
|
|
|
|
|
3. If there is an ddns-tuning in-scope host name expression (either global or subnet),
|
|
|
|
calculate the host name using the expression. If the calculated value is not a fully
|
|
|
|
qualified name and there is an in-scope ddns-qualifying-suffix, append the suffix.
|
|
|
|
|
|
|
|
4. If value calculated by the hook is not an empty string and is different than the
|
|
|
|
the host name formed in the prior steps (1 or 2), the calculated value becomes the
|
|
|
|
final host name.
|