mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-31 22:15:23 +00:00
[#2122] updated d2.dox
This commit is contained in:
@@ -6,13 +6,6 @@ GSS-TSIG
|
|||||||
|
|
||||||
.. _gss-tsig-overview:
|
.. _gss-tsig-overview:
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
The GSS-TSIG feature is considered experimental. It is possible to perform
|
|
||||||
the TKEY exchanges and sign the DNS updates using GSS-TSIG, but some error
|
|
||||||
handling and fallback scenarios are not covered yet. Use with caution.
|
|
||||||
|
|
||||||
GSS-TSIG Overview
|
GSS-TSIG Overview
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
@@ -25,11 +18,6 @@ additional capabilities as using negotiated dynamic keys.
|
|||||||
Kea provides the support of GSS-TSIG to protect DNS updates sent by
|
Kea provides the support of GSS-TSIG to protect DNS updates sent by
|
||||||
the Kea DHCP-DDNS (aka D2) server in a premium hook, called `gss_tsig`.
|
the Kea DHCP-DDNS (aka D2) server in a premium hook, called `gss_tsig`.
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
This library is still in the experimental phase and is not recommended
|
|
||||||
nor supported for use in production. Use with care!
|
|
||||||
|
|
||||||
The GSS-TSIG is defined in `RFC 3645 <https://tools.ietf.org/html/rfc3645>`__.
|
The GSS-TSIG is defined in `RFC 3645 <https://tools.ietf.org/html/rfc3645>`__.
|
||||||
The GSS-TSIG protocol itself is an implementation of generic GSS-API v2
|
The GSS-TSIG protocol itself is an implementation of generic GSS-API v2
|
||||||
services, defined in `RFC 2743 <https://tools.ietf.org/html/rfc2743>`__.
|
services, defined in `RFC 2743 <https://tools.ietf.org/html/rfc2743>`__.
|
||||||
|
@@ -3,11 +3,6 @@
|
|||||||
BOOTP Support
|
BOOTP Support
|
||||||
=============
|
=============
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
This library is still in the experimental phase. Use with care!
|
|
||||||
|
|
||||||
|
|
||||||
This hook library adds support for BOOTP with vendor-information extensions
|
This hook library adds support for BOOTP with vendor-information extensions
|
||||||
(`RFC 1497 <https://tools.ietf.org/html/rfc1497>`__). Received BOOTP
|
(`RFC 1497 <https://tools.ietf.org/html/rfc1497>`__). Received BOOTP
|
||||||
requests are recognized, translated into DHCPREQUEST packets by adding
|
requests are recognized, translated into DHCPREQUEST packets by adding
|
||||||
|
@@ -18,6 +18,19 @@ update the DNS data.
|
|||||||
The design documentation for D2 can be found here:
|
The design documentation for D2 can be found here:
|
||||||
<a href="https://gitlab.isc.org/isc-projects/kea/wikis/designs/ddns-design">D2 Design</a>.
|
<a href="https://gitlab.isc.org/isc-projects/kea/wikis/designs/ddns-design">D2 Design</a>.
|
||||||
|
|
||||||
|
The implementation is split in several libraries which can be used separately
|
||||||
|
(linked only when required):
|
||||||
|
- src/lib/dns (libkea-dns++) - contains classes and enumerations which define
|
||||||
|
DNS update message, message content, EDNS, RData, RR Types, RCODEs, OPCODEs,
|
||||||
|
DNS Name, TSIG key and TSIG record, exception types, etc.
|
||||||
|
- src/lib/dhcp_ddns (libkea-dhcp_ddns) - contains classes to send and receive,
|
||||||
|
encapsulate and decapsulate DNS messages, etc.
|
||||||
|
- src/lib/d2srv (libkea-d2srv) - contains classes to handle NCR transactions,
|
||||||
|
the DNS client implementation, statistics, configuration parser and manager,
|
||||||
|
logger, DNS Zone, etc.
|
||||||
|
- src/bin/d2 (kea-dhcp-ddns) - contains classes which handle message queues,
|
||||||
|
D2 process and D2 controller internals, etc.
|
||||||
|
|
||||||
This document contains several UML diagrams, and a few conventions used within
|
This document contains several UML diagrams, and a few conventions used within
|
||||||
these diagrams are worth noting:
|
these diagrams are worth noting:
|
||||||
|
|
||||||
@@ -37,15 +50,19 @@ in the diagram below:
|
|||||||
@image html d2_app_classes.svg "D2's CPL Derivations"
|
@image html d2_app_classes.svg "D2's CPL Derivations"
|
||||||
|
|
||||||
- isc::d2::D2Controller - entry point for running D2, it processes command line
|
- isc::d2::D2Controller - entry point for running D2, it processes command line
|
||||||
options, starts and controls the application process, @c D2Process.
|
options, starts and controls the application process, @c D2Process
|
||||||
|
(see @ref src/bin/d2/d2_controller.h).
|
||||||
|
|
||||||
- isc::d2::D2Process - creates and manages D2's primary resources and
|
- isc::d2::D2Process - creates and manages D2's primary resources and
|
||||||
implements the main event loop described in @ref d2EventLoop.
|
implements the main event loop described in @ref d2EventLoop section
|
||||||
|
(see @ref src/bin/d2/d2_process.h).
|
||||||
|
|
||||||
- isc::d2::D2CfgMgr - creates, updates, and provides access to D2's application
|
- isc::d2::D2CfgMgr - creates, updates, and provides access to D2's application
|
||||||
configuration which is embodied by @c D2CfgContext.
|
configuration which is embodied by @c D2CfgContext
|
||||||
|
(see @ref src/lib/d2srv/d2_cfg_mgr.h).
|
||||||
|
|
||||||
- isc::d2::D2CfgContext - warehouses D2's application configuration.
|
- isc::d2::D2CfgContext - warehouses D2's application configuration
|
||||||
|
(see @ref src/lib/d2srv/d2_cfg_mgr.h).
|
||||||
|
|
||||||
@section d2ConfigMgt Configuration Management
|
@section d2ConfigMgt Configuration Management
|
||||||
|
|
||||||
@@ -69,17 +86,24 @@ The runtime classes that embody this model are shown in the following diagram:
|
|||||||
@image html config_data_classes.svg "D2's Configuration Data Classes"
|
@image html config_data_classes.svg "D2's Configuration Data Classes"
|
||||||
|
|
||||||
- isc::d2::D2CfgContext - D2-specific derivation of @c DCfgContextBase. It
|
- isc::d2::D2CfgContext - D2-specific derivation of @c DCfgContextBase. It
|
||||||
houses the "global" configuration for an instance of D2.
|
houses the "global" configuration for an instance of D2
|
||||||
|
(see @ref src/lib/d2srv/d2_cfg_mgr.h).
|
||||||
|
|
||||||
- isc::d2::DdnsDomainListMgr - manages a list of domains. Currently there is
|
- isc::d2::DdnsDomainListMgr - manages a list of domains. Currently there is
|
||||||
one manager instance for the list of forward domains, and one for the list of
|
one manager instance for the list of forward domains, and one for the list of
|
||||||
reverse domains. In addition the domain list, it will may house other values
|
reverse domains. In addition the domain list, it will may house other values
|
||||||
specific to that list of domains (e.g. enable flag)
|
specific to that list of domains (e.g. enable flag)
|
||||||
|
(see @ref src/lib/d2srv/d2_config.h).
|
||||||
|
|
||||||
- isc::d2::DdnsDomain - represents a DNS domain (really a zone). When requests
|
- isc::d2::DdnsDomain - represents a DNS domain (really a zone). When requests
|
||||||
are received they are matched to a domain by comparing their FQDN to the domain's name.
|
are received they are matched to a domain by comparing their FQDN to the
|
||||||
|
domain's name (see @ref src/lib/d2srv/d2_config.h).
|
||||||
|
|
||||||
- isc::d2::DnsServerInfo - describes a DNS server which supports DDNS for a
|
- isc::d2::DnsServerInfo - describes a DNS server which supports DDNS for a
|
||||||
given domain.
|
given domain (see @ref src/lib/d2srv/d2_config.h).
|
||||||
- isc::d2::TSIGKeyInfo - describes a TSIG key used for authenticated DDNS for
|
|
||||||
a given domain.
|
- isc::d2::TSIGKeyInfo - describes a TSIG key used for authenticated DDNS for a
|
||||||
|
given domain (see @ref src/lib/d2srv/d2_config.h).
|
||||||
|
|
||||||
The parsing classes, as one would expect, parallel the runtime classes quite
|
The parsing classes, as one would expect, parallel the runtime classes quite
|
||||||
closely. The parsers are named for the runtime class they instantiate and are
|
closely. The parsers are named for the runtime class they instantiate and are
|
||||||
@@ -89,23 +113,29 @@ class. The parser classes are shown in the diagram below:
|
|||||||
@image html config_parser_classes.svg "D2's Configuration Parsers"
|
@image html config_parser_classes.svg "D2's Configuration Parsers"
|
||||||
|
|
||||||
- isc::d2::DdnsDomainListMgrParser - parser for a domain list manager, it
|
- isc::d2::DdnsDomainListMgrParser - parser for a domain list manager, it
|
||||||
creates a domain list parser
|
creates a domain list parser.
|
||||||
|
|
||||||
- isc::d2::DdnsDomainListParser - parser for a list of domains, it creates a
|
- isc::d2::DdnsDomainListParser - parser for a list of domains, it creates a
|
||||||
domain parser for domain described in a list domains
|
domain parser for domain described in a list domains.
|
||||||
|
|
||||||
- isc::d2::DdnsDomainParser - Parser for a domain, it creates a DNS server list
|
- isc::d2::DdnsDomainParser - Parser for a domain, it creates a DNS server list
|
||||||
parser
|
parser.
|
||||||
- isc::d2::DnsServerInfoListParser - parser for a list of DNS servers, it
|
|
||||||
creates a DNS server parser for server described in a list of servers
|
- isc::d2::DnsServerInfoListParser - parser for a list of DNS servers, it
|
||||||
- isc::d2::DnsServerInfoParser - parser for DNS server
|
creates a DNS server parser for server described in a list of servers.
|
||||||
|
|
||||||
|
- isc::d2::DnsServerInfoParser - parser for DNS server.
|
||||||
|
|
||||||
- isc::d2::TSIGKeyInfoListParser - parser for a list of TSIG keys, it creates a
|
- isc::d2::TSIGKeyInfoListParser - parser for a list of TSIG keys, it creates a
|
||||||
parser for key described in a list of keys
|
parser for key described in a list of keys.
|
||||||
- isc::d2::TSIGKeyInfoParser
|
|
||||||
|
- isc::d2::TSIGKeyInfoParser - parser for TSIG key.
|
||||||
|
|
||||||
|
For more details on the parsers see @ref src/lib/d2srv/d2_config.h.
|
||||||
|
|
||||||
The underlying common libraries for configuration parsing support configuration
|
The underlying common libraries for configuration parsing support configuration
|
||||||
input in JSON format, that complies with a fixed set of generic constructs that
|
input in JSON format, that complies with a fixed set of generic constructs that
|
||||||
may be described by a spec file (also JSON). This mechanism is subject to
|
may be described by a spec file (also JSON).
|
||||||
change, but in the meantime, the spec file describe D2's configuration may be
|
|
||||||
found here: @c src/bin/d2/dhcp-ddns.spec
|
|
||||||
|
|
||||||
@section d2NCRReceipt Request Reception and Queuing
|
@section d2NCRReceipt Request Reception and Queuing
|
||||||
|
|
||||||
@@ -115,23 +145,29 @@ shown in the diagram below:
|
|||||||
|
|
||||||
@image html request_mgt_classes.svg "Request Management Classes"
|
@image html request_mgt_classes.svg "Request Management Classes"
|
||||||
|
|
||||||
- isc::d2::D2QueueMgr - owned by @c D2Process, it listens for @c NameChangeRequests
|
- isc::d2::D2QueueMgr - owned by @c D2Process, it listens for
|
||||||
and queues them for processing. It also provides services for adding,
|
@c NameChangeRequests and queues them for processing. It also provides services
|
||||||
finding, and removing queue entries. It owns the interface used to receive
|
for adding, finding, and removing queue entries. It owns the interface used to
|
||||||
requests and thus shields the remainder of D2 from any specific knowledge or
|
receive requests and thus shields the remainder of D2 from any specific
|
||||||
interaction with this interface.
|
knowledge or interaction with this interface
|
||||||
- isc::d2::RequestQueue - storage container for the received requests.
|
(see @ref src/bin/d2/d2_queue_mgr.h).
|
||||||
|
|
||||||
|
- isc::d2::RequestQueue - storage container for the received requests
|
||||||
|
(see @ref src/bin/d2/d2_queue_mgr.h).
|
||||||
|
|
||||||
- isc::dhcp_ddns::NameChangeListener - Abstract asynchronous interface for
|
- isc::dhcp_ddns::NameChangeListener - Abstract asynchronous interface for
|
||||||
receiving requests which uses ASIO to process IO and invoke a callback upon
|
receiving requests which uses ASIO to process IO and invoke a callback upon
|
||||||
request receipt
|
request receipt (see @ref src/lib/dhcp_ddns/ncr_io.h).
|
||||||
|
|
||||||
- isc::dhcp_ddns::NameChangeUDPListener - Derivation of NameChangeListener
|
- isc::dhcp_ddns::NameChangeUDPListener - Derivation of NameChangeListener
|
||||||
which supports receiving request via UDP socket
|
which supports receiving request via UDP socket
|
||||||
|
(see @ref src/lib/dhcp_ddns/ncr_udp.h).
|
||||||
|
|
||||||
- isc::dhcp_ddns::NameChangeRequest - embodies a request to update DNS entries
|
- isc::dhcp_ddns::NameChangeRequest - embodies a request to update DNS entries
|
||||||
based upon a DHCP lease change
|
based upon a DHCP lease change (see @ref src/lib/dhcp_ddns/ncr_msg.h).
|
||||||
|
|
||||||
D2QueueMgr is state-driven, albeit with a very simple state model. The states
|
D2QueueMgr is state-driven, albeit with a very simple state model. The states
|
||||||
are defined by isc::d2::D2QueueMgr::State, and described in detail in in
|
are defined by isc::d2::D2QueueMgr::State (see @ref src/bin/d2/d2_queue_mgr.h).
|
||||||
@ref d2_queue_mgr.h.
|
|
||||||
|
|
||||||
@section d2DDNSUpdateExecution Update Execution
|
@section d2DDNSUpdateExecution Update Execution
|
||||||
|
|
||||||
@@ -154,34 +190,39 @@ following diagram:
|
|||||||
- isc::d2::D2UpdateMgr owned by @c D2Process, orchestrates the fulfillment of
|
- isc::d2::D2UpdateMgr owned by @c D2Process, orchestrates the fulfillment of
|
||||||
each request by managing the execution of its transaction. Its high level
|
each request by managing the execution of its transaction. Its high level
|
||||||
method @ref isc::d2::D2UpdateMgr::sweep() is meant to be called whenever IO
|
method @ref isc::d2::D2UpdateMgr::sweep() is meant to be called whenever IO
|
||||||
events occur. The following steps are performed each time the method is called:
|
events occur (see @ref src/bin/d2/d2_update_mgr.h). The following steps are
|
||||||
|
performed each time the method is called:
|
||||||
- Any transaction which has been completed, is logged and culled from the
|
- Any transaction which has been completed, is logged and culled from the
|
||||||
transaction list.
|
transaction list.
|
||||||
- Start a new transaction for the next queued request (if any)
|
- Start a new transaction for the next queued request (if any).
|
||||||
|
|
||||||
- isc::d2::NameChangeTransaction - abstract state-driven class which carries
|
- isc::d2::NameChangeTransaction - abstract state-driven class which carries
|
||||||
out the steps necessary to fulfill a single request. Fulfilling a request is
|
out the steps necessary to fulfill a single request. Fulfilling a request is
|
||||||
achieved as IO events in response it DDNS requests drive the transaction
|
achieved as IO events in response it DDNS requests drive the transaction through
|
||||||
through its state model. The type of transaction is based on the nature of
|
its state model (see @ref src/lib/d2srv/nc_trans.h). The type of transaction is
|
||||||
the request, this is discussed further on @ref d2TransDetail
|
based on the nature of the request, this is discussed further on
|
||||||
|
@ref d2TransDetail section.
|
||||||
|
|
||||||
- isc::d2::DNSClient - an asynchronous worker which atomically performs a
|
- isc::d2::DNSClient - an asynchronous worker which atomically performs a
|
||||||
single DDNS packet exchange with a given server, providing the response via a
|
single DDNS packet exchange with a given server, providing the response via a
|
||||||
callback mechanism. Each time a transaction's state model calls for a packet
|
callback mechanism. Each time a transaction's state model calls for a packet
|
||||||
exchange with a DNS server, it uses an instance of this class to do it.
|
exchange with a DNS server, it uses an instance of this class to do it
|
||||||
|
(see @ref src/lib/d2srv/dns_client.h).
|
||||||
|
|
||||||
- isc::d2::D2UpdateMessage - container for sending and receiving DDNS packets
|
- isc::d2::D2UpdateMessage - container for sending and receiving DDNS packets
|
||||||
|
(see @ref src/lib/d2srv/d2_update_message.h).
|
||||||
|
|
||||||
@section d2EventLoop Main Event Loop
|
@section d2EventLoop Main Event Loop
|
||||||
|
|
||||||
Now that all of the primary components have been introduced it is worth while
|
Now that all of the primary components have been introduced it is worth while
|
||||||
discussing D2's main event loop. As mentioned earlier D2 is constructed around
|
discussing D2's main event loop. As mentioned earlier D2 is constructed around
|
||||||
the CPL which is designed to be driven by asynchronous IO processed by a
|
the CPL which is designed to be driven by asynchronous IO processed by a common
|
||||||
common IO service thread (isc::asiolink::io_service). Any IO that needs to be
|
IO service thread (isc::asiolink::io_service). Any IO that needs to be
|
||||||
performed by the application thread uses this service to do so. This organizes
|
performed by the application thread uses this service to do so. This organizes
|
||||||
the IO event processing into a single event loop centered around the service.
|
the IO event processing into a single event loop centered around the service.
|
||||||
(This does not preclude spinning off worker threads to conduct other tasks,
|
(This does not preclude spinning off worker threads to conduct other tasks, with
|
||||||
with their own io_service instances). D2's main event loop, implemented in @ref isc::d2::D2Process::run() may be paraphrased as follows:
|
their own io_service instances). D2's main event loop, implemented in
|
||||||
|
@ref isc::d2::D2Process::run() may be paraphrased as follows:
|
||||||
|
|
||||||
@code
|
@code
|
||||||
As long as we should not shutdown repeat the following steps:
|
As long as we should not shutdown repeat the following steps:
|
||||||
@@ -213,9 +254,14 @@ The transaction classes are shown in the following diagram:
|
|||||||
|
|
||||||
@image html trans_classes.svg "NameChangeTransaction Derivations"
|
@image html trans_classes.svg "NameChangeTransaction Derivations"
|
||||||
|
|
||||||
- isc::d2::NameAddTransaction - carries out a @c NameChangeRequest to add entries
|
- isc::d2::NameAddTransaction - carries out a @c NameChangeRequest to add
|
||||||
- isc::d2::NameRemoveTransaction - carries out a @c NameChangeRequest to remove entries
|
entries (see @ref src/bin/d2/nc_add.h).
|
||||||
|
|
||||||
|
- isc::d2::NameRemoveTransaction - carries out a @c NameChangeRequest to remove
|
||||||
|
entries (see @ref src/bin/d2/nc_remove.h).
|
||||||
|
|
||||||
- isc::util::StateModel - abstract state model described in @ref d2StateModel
|
- isc::util::StateModel - abstract state model described in @ref d2StateModel
|
||||||
|
section (see @ref src/lib/util/state_model.h).
|
||||||
|
|
||||||
The state models for these two transactions implement DDNS with conflict
|
The state models for these two transactions implement DDNS with conflict
|
||||||
resolution as described in <a href="https://tools.ietf.org/html/rfc4703">RFC 4703</a>.
|
resolution as described in <a href="https://tools.ietf.org/html/rfc4703">RFC 4703</a>.
|
||||||
@@ -246,20 +292,19 @@ a common library.
|
|||||||
|
|
||||||
- isc::util::StateModel - provides the mechanics for executing a state model
|
- isc::util::StateModel - provides the mechanics for executing a state model
|
||||||
described by a dictionary events and states. It provides methods to:
|
described by a dictionary events and states. It provides methods to:
|
||||||
- initialize the model - constructs the dictionary of events and states
|
- initialize the model - constructs the dictionary of events and states.
|
||||||
- start the model - sets the model to its initial state, posts a "start"
|
- start the model - sets the model to its initial state, posts a "start"
|
||||||
event and starts the model "running"
|
event and starts the model "running".
|
||||||
"start event"
|
|
||||||
- run the model - process the posted event (if one) until the model reaches
|
- run the model - process the posted event (if one) until the model reaches
|
||||||
a wait state or reaches the end state.
|
a wait state or reaches the end state.
|
||||||
- transition from one state to another
|
- transition from one state to another.
|
||||||
- isc::d2::Event - Defines an event used to stimulate the model
|
- isc::d2::Event - Defines an event used to stimulate the model.
|
||||||
- isc::d2::State - Defines a state with the model, each state has a handler
|
- isc::d2::State - Defines a state with the model, each state has a handler
|
||||||
method that is executed upon transition "into" that state from another
|
method that is executed upon transition "into" that state from another state.
|
||||||
- isc::d2::LabeledValue - An abstract that associates a integer value with a
|
- isc::d2::LabeledValue - An abstract that associates a integer value with a
|
||||||
text label
|
text label.
|
||||||
- isc::d2::LabeledValueSet - A collection of LabeledValues for which the integer
|
- isc::d2::LabeledValueSet - A collection of LabeledValues for which the integer
|
||||||
values must be unique
|
values must be unique.
|
||||||
|
|
||||||
@subsection d2TransExecExample Transaction Execution Example
|
@subsection d2TransExecExample Transaction Execution Example
|
||||||
|
|
||||||
|
@@ -56,7 +56,7 @@ public:
|
|||||||
///
|
///
|
||||||
/// @note Derived classes can implement their own specific context.
|
/// @note Derived classes can implement their own specific context.
|
||||||
///
|
///
|
||||||
/// @return The specific @ref TSIGContext of the @ref TSIGKey.
|
/// @return The specific @ref dns::TSIGContext of the @ref dns::TSIGKey.
|
||||||
virtual dns::TSIGContextPtr createContext();
|
virtual dns::TSIGContextPtr createContext();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
21
src/lib/d2srv/d2srv.dox
Normal file
21
src/lib/d2srv/d2srv.dox
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
// Copyright (C) 2020-2021 Internet Systems Consortium, Inc. ("ISC")
|
||||||
|
//
|
||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
/**
|
||||||
|
@page libd2srv libkea-d2srv - Kea D2 Server Library
|
||||||
|
|
||||||
|
This library contains most of the DNS classes used by the Kea D2 server
|
||||||
|
(kea-dhcp-ddns) but is organized as an independent library so that it
|
||||||
|
can be reused as needed by other components.
|
||||||
|
|
||||||
|
For a more detaliled documentation about the design and class separation
|
||||||
|
see @ref src/bin/d2/d2.dox.
|
||||||
|
|
||||||
|
@section d2srvMTConsiderations Multi-Threading Consideration for D2 Server Library
|
||||||
|
|
||||||
|
By default this library is not thread safe.
|
||||||
|
|
||||||
|
*/
|
Reference in New Issue
Block a user