2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-22 01:49:48 +00:00
kea/doc/examples/kea4/all-keys.json
2025-08-20 18:14:43 +02:00

1484 lines
66 KiB
JSON

// WARNING: This example configuration is not meant for production use.
// The Kea DHCPv4 server will refuse this configuration because it contains
// mutually exclusive configuration parameters.
//
// The primary purpose of the example file is to provide a comprehensive
// list of parameters supported by the Kea DHCPv4 server, along with a brief
// description of each parameter.
//
// This current version should be up to date, i.e. new keywords should be
// added in this file at the same time as in the parser specification.
{
// Kea DHCPv4 server configuration begins here.
"Dhcp4": {
// Global flag selecting an IP address allocation strategy for all
// subnets. Use "random" for a random allocation strategy.
"allocator": "iterative",
// Global authoritative flag to handle requests by clients for
// unknown IP addresses (ignore if disabled, NAK if enabled).
"authoritative": false,
// Global bootfile name to be set in the 'file' field.
"boot-file-name": "/dev/null",
// Ordered list of client classes used by the DHCPv4 server.
"client-classes": [
{
// Class-specific bootfile name to be set in the 'file' field.
"boot-file-name": "/usr/local/share/kea/bootfile.efi",
// Class name.
"name": "phones_server1",
// Class-specific next server address to use in bootstrap, which
// is set in 'siaddr' field.
"next-server": "10.2.3.4",
// Class-specific DHCPv4 options list.
"option-data": [],
// Class-specific DHCPv4 option definitions, i.e. custom formats
// specified for non-standard options.
"option-def": [],
// Class-specific optional server hostname, which is set in
// 'sname' field.
"server-hostname": "",
// Class selection expression. The DHCP packet is assigned to this
// class when the given expression evaluates to true.
"test": "member('HA_server1')",
// Class valid lifetime.
"valid-lifetime": 6000,
// Class min valid lifetime.
"min-valid-lifetime": 4000,
// Class max valid lifetime.
"max-valid-lifetime": 8000,
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 65
},
{
// Default value of the class-specific bootfile name. An empty name
// means that the bootfile name is unspecified.
"boot-file-name": "",
// Second class name.
"name": "phones_server2",
// Default value of the class-specific next server address. The
// zero IPv4 address means that it is unspecified.
"next-server": "0.0.0.0",
// Class-specific DHCPv4 options list.
"option-data": [],
// Class-specific DHCPv4 option definitions, i.e. custom formats
// specified for non-standard options.
"option-def": [],
// Class-specific optional server hostname, which is set in
// 'sname' field.
"server-hostname": "",
// Class selection expression. The DHCP packet is assigned to this
// class when the given expression evaluates to true.
"test": "member('HA_server2')"
},
{
// Third class name.
"name": "late",
// Boolean flag indicating whether the class expression is only evaluated
// when the selected configuration (i.e. pool, subnet, shared-network)
// includes this class name in its "evaluate-additional-classes" list. The
// default value false means that the class test expression must
// always be evaluated.
"only-in-additional-list": true,
// Class selection expression.
"test": "member('ALL')"
},
{
// Fourth class name.
"name": "my-template-class",
// Template class flag that holds the expression used to generate the names for all
// the spawned subclasses. In this case, the classes are named after the client ID.
"template-test": "substring(option[61].hex, 0, all)"
}
],
// Parameters for triggering behaviors compatible with broken or
// non-compliant clients, relays, or other agents
"compatibility": {
// Ignore DHCP Server Identifier option if set to true.
// Enabling this will cause Kea to accept any query, even
// if the address in the option belongs to another server,
// instead of dropping it. This config option defaults to
// false, as enabling it breaks RFC compliance.
"ignore-dhcp-server-identifier": false,
// Ignore Relay Agent Information Link Selection suboption if set
// to true. Enabling this will cause Kea to use normal subnet
// selection logic instead of attempting to use the subnet
// specified in the suboption. This config option defaults to
// false, as enabling it breaks RFC compliance.
"ignore-rai-link-selection": false,
// Parse options more leniently where fields can be deduced
// deterministically, even if against RFC or common practice.
"lenient-option-parsing": true,
// Boolean flag indicating whether .0 and .255 addresses
// must be considered as never free in subnets with a prefix length
// of 24 or less. The default is false, as these addresses are not
// special; only the first and the last addresses are.
"exclude-first-last-24": false
},
// Command control socket configuration parameters for the Kea DHCPv4 server.
"control-sockets": [
{
// Control socket type used by the Kea DHCPv4 server.
// Must be unix, http or https.
"socket-type": "unix",
// Location of the UNIX domain socket file the DHCPv4
// server uses to receive control commands from the
// local server administrator.
"socket-name": "kea4-ctrl-socket"
},
{
// Control socket type used by the Kea DHCPv4 server.
// Must be unix, http or https.
"socket-type": "https",
// Address of the HTTPS socket the Kea DHCPv4 server should
// listen for incoming queries.
"socket-address": "127.0.0.1",
// Port of the HTTPS socket the Kea DHCPv4 server
// should listen for incoming queries. If enabling HA
// and multi-threading, the 8000 port is used by the
// HA hook library http listener. When using HA hook
// library with multi-threading to function, make sure
// the port used by dedicated listener is different
// (e.g. 8001) than the one specified here. Note the
// commands should still be sent to a control socket.
// The dedicated listener is specifically for HA
// updates only.
"socket-port": 8004,
// TLS trust anchor (Certificate Authority). This is a
// file name or a directory path. Make sense with other
// TLS parameters only for the https control socket type.
"trust-anchor": "my-ca",
// TLS server certificate file name.
"cert-file": "my-cert",
// TLS server private key file name.
"key-file": "my-key",
// TLS require client certificates flag. Default is
// true and means require client certificates. False
// means they are optional.
"cert-required": true,
// Extra HTTP headers to add in responses.
"http-headers":
[
{
// Optional user context.
"user-context": { "comment": "HSTS header" },
// Required HTTP header name.
"name": "Strict-Transport-Security",
// Required HTTP header value.
"value": "max-age=31536000"
}
],
// Optional authentication.
"authentication": {
// Required authentication type. The only
// supported value is basic for the basic HTTP
// authentication.
"type": "basic",
// An optional parameter is the basic HTTP
// authentication realm. Its default is
// "kea-dhcpv4-server"
"realm": "kea-dhcpv4-server",
// This optional parameter can be used to specify a common
// prefix for files handling client credentials.
"directory": "/usr/local/share/kea/kea-creds",
// This list specifies the user ids and passwords
// to use for basic HTTP authentication. If empty
// or not present any client is authorized.
"clients": [
// This specifies an authorized client.
{
// The user id must not be empty or
// contain the ':' character. It is a
// mandatory parameter.
"user": "admin",
// If password is not specified an empty
// password is used.
"password": "1234"
},
// This specifies a hidden client.
{
// The user id is the content of the
// file /usr/local/share/kea/kea-creds/hiddenu.
"user-file": "hiddenu",
// The password is the content of the
// file /usr/local/share/kea/kea-creds/hiddenp.
"password-file": "hiddenp"
},
// This specifies a hidden client using a
// secret in a file.
{
// The secret is the content of the file
// /usr/local/share/kea/kea-creds/hiddens which must be in
// the <user-id>:<password> format.
"password-file": "hiddens"
}
]
}
}
],
// Specifies a prefix to be prepended to the generated Client FQDN.
// It may be specified at the global, shared-network, and subnet levels.
"ddns-generated-prefix": "myhost",
// Boolean flag indicating whether the server should ignore DHCP client
// wishes to update DNS on its own. With that flag set to true,
// the server will send DNS updates for both forward and
// reverse DNS data. The default value is false, which indicates
// that the server will delegate a DNS update to the client when
// requested. It may be specified at the global, shared-network,
// and subnet levels.
"ddns-override-client-update": false,
// Boolean flag indicating whether the server should override the DHCP
// client's wish to not update the DNS. With this parameter
// set to true, the server will send a DNS update even when
// the client requested no update. It may be specified at the
// global, shared-network, and subnet levels.
"ddns-override-no-update": false,
// Suffix appended to the partial name sent to the DNS. The
// default value is an empty string, which indicates that no
// suffix is appended. It may be specified at the global,
// shared-network, and subnet levels.
"ddns-qualifying-suffix": "",
// Enumeration specifying whether the server should honor
// the hostname or Client FQDN sent by the client or replace
// this name. The acceptable values are: "never" (use the
// name the client sent), "always" (replace the name the
// client sent), "when-present" (replace the name the client
// sent, but do not generate one when the client didn't send
// the name), "when-not-present" (generate the name when
// client didn't send one, otherwise leave the name the
// client sent). The default value is "never". It may be
// specified at the global, shared-network, and subnet levels.
"ddns-replace-client-name": "never",
// Boolean flag which enables or disables DDNS updating. It
// defaults to true. It may be specified at the global, shared-
// network, and subnet levels. It works in conjunction with
// dhcp-ddns:enable-updates, which must be true to enable connectivity
// to kea-dhcp-ddns.
"ddns-send-updates": true,
// Boolean flag, which when true instructs the server to always
// update DNS when leases are renewed, even if the DNS information
// has not changed. The server's default behavior (i.e. flag is false)
// is to only update DNS if the DNS information has changed. It
// may be specified at the global, shared-network, and subnet levels.
"ddns-update-on-renew": true,
// Boolean flag which is passed to kea-dhcp-ddns with each DDNS
// update request, to indicate whether DNS update conflict
// resolution as described in RFC 4703 should be employed for the
// given update request. The default value for this flag is true.
// It may be specified at the global, shared-network, and subnet levels.
// This field has been replaced by ddns-conflict-resolution-mode.
// Parsing is maintained only for backwards compatibility.
// "ddns-use-conflict-resolution": true,
// Enumeration, which is passed to kea-dhcp-ddns with each DDNS
// update request to indicate the mode used for resolving conflicts
// while performing DDNS updates. The acceptable values are:
// check-with-dhcid (this includes adding a DHCID record and checking
// that record via conflict detection as per RFC 4703,
// no-check-with-dhcid (this will ignore conflict detection but add
// a DHCID record when creating/updating an entry),
// check-exists-with-dhcid (this will check if there is an existing
// DHCID record but does not verify the value of the record matches
// the update. This will also update the DHCID record for the entry),
// no-check-without-dhcid (this ignores conflict detection and will
// not add a DHCID record when creating/updating a DDNS entry).
// The default value is "check-with-dhcid". It may be
// specified at the global, shared-network and subnet levels.
"ddns-conflict-resolution-mode": "check-with-dhcid",
// When greater than 0.0, it is the percent of the lease's lifetime
// to use for the DNS TTL.
"ddns-ttl-percent": 0.75,
// When greater than 0 it will be used as the DNS TTL. Specified in seconds.
// You cannot specify both ddns-ttl and any of ddns-ttl-percent, ddns-ttl-min, or
// ddns-ttl-max. They are mutually exclusive.
// "ddns-ttl": 500,
// When greater than 0 it used as the lower boundary for calculated DNS TTL values.
// Specified in seconds.
"ddns-ttl-min": 24000,
// When greater than 0 it used as the upper boundary for calculated DNS TTL values.
// Specified in seconds.
"ddns-ttl-max": 64000,
// Time in seconds specifying how long a declined lease should be
// excluded from DHCP assignments. The default value is 86400 (24 hours).
"decline-probation-period": 86400,
// Name Change Request forwarding configuration for the Kea DHCPv4 server.
// NCRs are sent to the Kea D2 module to update DNS upon allocation of
// DHCP leases.
"dhcp-ddns": {
// Boolean flag indicating whether Kea DHCPv4 server should connect to
// kea-dhcp-ddns. This must be true for NCRs to be created and
// sent to kea-dhcp-ddns. By default, NCRs are not generated.
"enable-updates": false,
// Specifies maximum number of NCRs to queue waiting to be sent
// to the Kea D2 server.
"max-queue-size": 1024,
// Packet format to use when sending NCRs to the Kea D2 server.
// Currently, only JSON format is supported.
"ncr-format": "JSON",
// Socket protocol to use when sending NCRs to D2. Currently,
// only UDP is supported.
"ncr-protocol": "UDP",
// IP address that the Kea DHCPv4 server should use to send
// NCRs to D2. The default value of zero indicates that Kea
// should pick a suitable address.
"sender-ip": "0.0.0.0",
// Port number that the Kea DHCPv4 server should use to send
// NCRs to D2. The default value of zero indicates that Kea
// should pick a suitable port.
"sender-port": 0,
// IP address on which D2 listens for NCRs.
"server-ip": "127.0.0.1",
// Port number on which D2 listens for NCRs.
"server-port": 53001
},
// Specifies the first of the two consecutive ports of the UDP
// sockets used for communication between DHCPv6 and DHCPv4
// servers. See RFC 7341. (defaults to 0 - disabled).
// If enabled, use e.g. 786.
"dhcp4o6-port": 0,
// Boolean flag indicating whether the Kea DHCPv4 server
// should send back the Client Identifier option in its responses.
// The default value is true, which indicates that the option
// must be sent back if the client included it. The false
// value instructs the server to not send this option for
// backward compatibility with older DHCP specifications, which
// stated that Client Identifier must not be sent back.
"echo-client-id": true,
// Collection of Kea DHCPv4 server parameters configuring how
// the server should process expired DHCP leases.
"expired-leases-processing": {
// Specifies the number of seconds since the last removal of
// the expired leases, when the next removal should occur.
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
// message the lease is expired instead of being deleted from
// lease storage.
"flush-reclaimed-timer-wait-time": 25,
// Specifies the length of time in seconds to keep expired
// leases in the lease database (lease affinity).
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
// message the lease is expired instead of being deleted from
// lease storage.
"hold-reclaimed-time": 3600,
// Specifies the maximum number of expired leases that can be
// processed in a single attempt to clean up expired leases
// from the lease database. If there are more
// expired leases, they will be processed during the next
// cleanup attempt.
"max-reclaim-leases": 100,
// Specifies the maximum time in milliseconds that a single attempt
// to clean up expired leases from the lease database may take.
"max-reclaim-time": 250,
// Specifies the length of time in seconds since the last attempt
// to process expired leases before initiating the next attempt.
"reclaim-timer-wait-time": 10,
// Specifies the maximum number of expired lease-processing cycles
// which didn't result in full cleanup of exired leases from the
// lease database, after which a warning message is issued.
"unwarned-reclaim-cycles": 5
},
// List of hook libraries and their specific configuration parameters
// to be loaded by Kea DHCPv4 server.
"hooks-libraries": [
{
// Location of the hook library to be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_lease_cmds.so",
// Hook library-specific configuration parameters.
"parameters": { }
},
{
// The MySQL host backend hook library required for host storage.
"library": "/opt/lib/kea/hooks/libdhcp_mysql.so"
},
{
// The PostgreSQL host backend hook library required for host storage.
"library": "/opt/lib/kea/hooks/libdhcp_pgsql.so"
}
],
// List of access credentials to external sources of IPv4 reservations,
"hosts-databases": [
{
// Name of the database to connect to.
"name": "keatest",
// Host on which the database resides.
"host": "localhost",
// Database password.
"password": "1234",
// Port on which the database is available.
"port": 3306,
// Type of database, e.g. "mysql", "postgresql".
"type": "mysql",
// Username to be used to access the database.
"user": "keatest",
// Read-only mode.
"readonly": false,
// The next entries are for OpenSSL support in MySQL.
// Trust anchor aka certificate authority file or directory.
"trust-anchor": "my-ca",
// Client certificate file name.
"cert-file": "my-cert",
// Private key file name.
"key-file": "my-key",
// Cipher list (see the OpenSSL ciphers command manual).
"cipher-list": "AES",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
// to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// Connection maximum reconnect tries.
"max-reconnect-tries": 3,
// Action to take when connection recovery fails.
// Supported values: stop-retry-exit, serve-retry-exit,
// serve-retry-continue
"on-fail": "stop-retry-exit",
// Flag which indicates if the DB recovery should be attempted
// at server startup and on reconfiguration events.
"retry-on-startup": false,
// Connection connect timeout in seconds.
"connect-timeout": 100,
// Timeout of database read operations in seconds.
"read-timeout": 120,
// Timeout of database write operations in seconds.
"write-timeout": 180
},
{
// Name of the database to connect to.
"name": "keatest",
// Host on which the database resides.
"host": "localhost",
// Database password.
"password": "1234",
// Port on which the database is available.
"port": 5432,
// Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
// Username to be used to access the database.
"user": "keatest",
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100,
// Trust anchor aka certificate authority file or directory.
"trust-anchor": "my-ca",
// Client certificate file name.
"cert-file": "my-cert",
// Private key file name.
"key-file": "my-key",
// SSL mode.
"ssl-mode": "verify-ca"
}
],
// List of host reservation identifier types to be used by the
// Kea DHCPv4 server to fetch static reservations for
// DHCP clients. All identifiers are used by default, which
// means that the server will issue multiple queries to the
// database to find if there is a reservation for a particular
// client. If a particular deployment uses only a subset, e.g.
// one identifier type, this identifier should be only listed
// here to prevent unnecessary queries to the database.
"host-reservation-identifiers": [
"hw-address",
"duid",
"circuit-id",
"client-id",
"flex-id"
],
// Specifies configuration of interfaces on which the Kea DHCPv4
// server is listening to the DHCP queries.
"interfaces-config": {
// Specifies whether the server should use "udp" sockets or
// "raw" sockets to listen to DHCP traffic. The "raw"
// sockets are useful when direct DHCP traffic is being
// received.
"dhcp-socket-type": "udp",
// Specifies a list of interfaces on which the Kea DHCPv4
// server should listen to DHCP requests.
"interfaces": [
"eth0"
],
// Enumeration which indicates what interface should be used
// to send DHCP responses to the client. The default value is
// "same-as-inbound", which indicates that the response should
// be sent via the interface on which the client's query
// was received. The "use-routing" value indicates that the
// Kea server should use the kernel's routing table to find a
// suitable interface.
"outbound-interface": "same-as-inbound",
// Boolean flag indicating whether the available interfaces should
// be re-detected upon server reconfiguration. The default value
// is true, which means that the interfaces are always
// re-detected.
"re-detect": true,
// Kea tries to bind the service sockets during initialization, but it may
// fail due to a port being already opened or a misconfiguration. Kea can
// suppress these errors and only log them. This flag prevents starting
// the DHCP server without binding all sockets. If unspecified, it
// defaults to false.
"service-sockets-require-all": true,
// Kea tries to bind the service sockets during initialization. This
// option specifies how many times binding to interface will be retried.
// The default value is 0, which means that the operation will not be
// repeated.
"service-sockets-max-retries": 5,
// The time interval in milliseconds to wait before the next attempt to
// retry opening a service socket.
"service-sockets-retry-wait-time": 5000
},
// Boolean parameter which controls whether an early global host
// reservations lookup should be performed. This lookup takes place
// before subnet selection and when a global reservation is found
// with some client classes, it triggers a second phase classification.
// It can also be used to drop queries using host reservations as a
// decision table indexed by reservation identifiers.
"early-global-reservations-lookup": true,
// Boolean parameter which controls the DHCP server's behavior with respect
// to creating host reservations for the same IP address. By default
// this flag is set to true, in which case the server prevents creation
// of multiple host reservations for the same IP address. When this
// parameter is set to false, the server allows for creating multiple
// reservations for the same IP address within a subnet. This setting
// is useful in deployments in which a given host may be communicating
// with a DHCP server over multiple interfaces and, depending on the
// chosen interface, a different MAC address (or other identifier) will
// be used to identify the host. Note that some host backends do not
// support the mode in which multiple reservations for the same IP
// address are used. If these backends are in use and this setting
// is attempted, a configuration error will occur. The MySQL and
// PostgreSQL backends do support this mode.
"ip-reservations-unique": true,
// Boolean parameter which controls whether host reservations lookup
// should be performed before lease lookup. This parameter has effect
// only when multi-threading is disabled. When multi-threading is
// enabled, host reservations lookup is always performed first to avoid
// lease-lookup resource locking.
"reservations-lookup-first": true,
// Specifies credentials to access lease database.
"lease-database": {
// memfile backend-specific parameter specifying the interval
// in seconds at which the lease file should be cleaned up (outdated
// lease entries are removed to prevent the lease file from growing
// infinitely).
"lfc-interval": 3600,
// Maximum number of lease-file read errors allowed before
// loading the file is abandoned. Defaults to 0 (no limit).
"max-row-errors": 100,
// Name of the lease file. In the case of a database it specifies the
// database name.
"name": "kea-leases4.csv",
// memfile-specific parameter indicating whether leases should
// be saved on persistent storage (disk) or not. The true value
// is the default and it indicates that leases are stored in
// persistent storage. This setting must be used in production.
// The false value should only be used for testing purposes
// because non-stored leases will be lost upon Kea server restart.
"persist": true,
// Lease database backend type, i.e. "memfile", "mysql" or
// "postgresql".
"type": "memfile"
},
// Boolean value indicating whether the Kea DHCPv4 server should use the client
// identifier value sent by the client or ignore it. The default value
// is true, which indicates that the server should use the client identifier
// and that it takes precedence over the client's MAC address. In deployments
// where MAC address should take precedence, this value can be set to
// false, in which case the clients will be identified by MAC address.
// This is specifically useful when clients don't generate unique
// identifiers or these identifiers are not stable, etc.
"match-client-id": false,
// Global value of the next server address set in 'siaddr' field.
// The global value may be overridden in lower-level configuration
// scopes.
"next-server": "192.0.2.123",
// Global value which limits the number of client packets (e.g.
// DHCPREQUESTs) that may be parked while waiting for hook library
// work to complete, prior to a response (e.g. DHCPACK) being sent
// back to the client. A typical example is when kea-dhcp4 parks a
// DHCPREQUEST while it sends the lease update(s) to its HA peer(s).
// The packet is unparked once the update(s) have been acknowledged.
// This value limits the number of packets that can be held pending
// the updates. In times of heavy client traffic, this value can keep
// kea-dhcp4 from building an insurmountable backlog of updates.
"parked-packet-limit": 256,
// List of global DHCP options that the Kea DHCPv4 server assigns to
// clients.
"option-data": [
{
// Boolean flag indicating whether the given option is always
// sent in response or only when requested. The default
// value of false indicates that it is only sent when
// requested.
"always-send": false,
// An optional list of classes for which this option applies.
// If the the client matches any of the classes in this list the
// option will be applied. If the list is empty or is
// omitted this option will be applied regardless of class
// membership.
"client-classes": [ "class1", "class2" ],
// Option code. It is not required if the option name is
// provided.
"code": 6,
// Boolean value indicating whether the option data specified
// in the "data" field is specified as a string of hexadecimal
// digits or in human-readable CSV format.
"csv-format": true,
// Option data to be stored in the option payload.
"data": "192.0.3.1, 192.0.3.2",
// Option name. It is not required if the option code is
// provided.
"name": "domain-name-servers",
// Boolean flag indicating whether the given option is never
// sent in response. The default value of false indicates
// that it is sent when it should be. When true, the option
// is not sent despite any other setting, i.e. it is
// a final flag.
"never-send": false,
// Option space. The default is the "dhcp4" option space which
// groups top-level DHCPv4 options.
"space": "dhcp4"
}
],
// List of global option definitions, i.e. option formats, that the
// Kea DHCPv4 server is using.
"option-def": [
{
// Boolean flag indicating whether the option definition comprises
// an array of values of some type, e.g. an array of IPv4 addresses.
// The default value of false means that the option does not
// comprise an array of values.
"array": false,
// Option code.
"code": 6,
// Holds a name of the option space encapsulated by this option.
// All options that belong to this option space will be sent
// as sub-options of this option. An empty string means that this
// option doesn't encapsulate any option.
"encapsulate": "",
// Option name.
"name": "my-option",
// Specifies the types of fields within the option if the option
// is said to be a "record" (see "type"). In this particular example
// this option comprises two fields, 1 byte and 2 bytes long.
"record-types": "uint8, uint16",
// Name of the option space to which this option belongs.
"space": "my-space",
// Option type. All possible types are listed in the Kea
// Administrator Reference Manual.
"type": "record"
}
],
// Global value for the rebind timer, i.e. the time after which the
// DHCP client enters the rebind state if it fails to renew the lease.
"rebind-timer": 40,
// Global value for the renew timer, i.e. the time after which the
// DHCP client renews the lease.
"renew-timer": 30,
// Global value to store extended information (e.g. relay agent
// information) with each lease.
"store-extended-info": true,
// Statistics keep some samples per observation point.
// There are two default values: maximum count and maximum age.
// Setting the maximum count to zero disables it.
"statistic-default-sample-count": 0,
// When the maximum count is 0 the maximum age (in seconds) applies.
"statistic-default-sample-age": 60,
// Multi-threading parameters.
"multi-threading": {
// By default, Kea processes packets on multiple threads if the hardware permits.
"enable-multi-threading": true,
// When multi-threading is enabled, Kea will process packets on a
// number of multiple threads configurable through this option. The
// value must be a positive integer (0 means auto-detect).
"thread-pool-size": 0,
// When multi-threading is enabled, Kea will read packets from the
// interface and append a working item to the thread pool. This
// option configures the maximum number of items that can be queued.
// The value must be a positive integer (0 means unlimited).
"packet-queue-size": 0
},
// Governs how the Kea DHCPv4 server should deal with invalid
// data received from the client.
"sanity-checks": {
// Specifies how the Kea DHCPv4 server should behave when invalid
// data is read for a lease from the lease file. The following
// values are supported: "none" (don't attempt to correct the
// lease information), "warn" (print a warning for subnet-id
// related inconsistencies), "fix" (correct the subnet id by
// trying to find the suitable subnet), "fix-del" (similar
// to "fix" but delete the lease if no suitable subnet found),
// "del" (delete the lease if the lease has invalid subnet
// identifier value).
"lease-checks": "warn",
// Specifies how Kea DHCPv4 server should behave when invalid
// extended info is read for a lease from the lease file, or
// whether to upgrade from the old format. The following values
// are supported: "none" (don't attempt to correct or upgrade
// the extended info), "fix" (fix common inconsistencies and
// upgrade from the old format; this is the default), "strict"
// (fix inconsistencies with an impact on Leasequery),
// "pedantic" (enforce full Kea code format).
"extended-info-checks": "fix"
},
// List of shared networks used by the Kea DHCPv4 server. The shared
// networks group subnets together.
"shared-networks": [
{
// A flag selecting an IP address allocation strategy for all
// subnets in this shared network.
"allocator": "random",
// Shared-network level authoritative flag.
"authoritative": false,
// Shared-network level bootfile name.
"boot-file-name": "/dev/null",
// Restricts this shared network to allow only clients
// that belong to at least one class in this list. If omitted
// or an empty list is provided, no restriction is applied.
"client-classes": [],
// Shared-network level value. See description at the global level.
"ddns-generated-prefix": "myhost",
// Shared-network level value. See description at the global level.
"ddns-override-client-update": false,
// Shared-network level value. See description at the global level.
"ddns-override-no-update": false,
// Shared-network level value. See description at the global level.
"ddns-qualifying-suffix": "",
// Shared-network level value. See description at the global level.
"ddns-replace-client-name": "never",
// Shared-network level value. See description at the global level.
"ddns-send-updates": true,
// Shared-network level value. See description at the global level.
"ddns-update-on-renew": true,
// Shared-network level value. See description at the global level.
// This field has been replaced by ddns-conflict-resolution-mode.
// Parsing is maintained only for backwards compatibility.
// "ddns-use-conflict-resolution": true,
// Shared-network level value. See description at the global level.
"ddns-conflict-resolution-mode": "check-with-dhcid",
// Shared-network level value. See description at the global level.
"ddns-ttl-percent": 0.65,
// Shared-network level value. See description at the global level.
// You cannot specify both ddns-ttl and any of ddns-ttl-percent, ddns-ttl-min, or
// ddns-ttl-max. They are mutually exclusive.
// "ddns-ttl": 500,
// Shared-network level value. See description at the global level.
"ddns-ttl-min": 10000,
// Shared-network level value. See description at the global level.
"ddns-ttl-max": 20000,
// Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
// Shared-network level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
// Specifies that this shared network is selected for
// requests received on a particular interface.
"interface": "eth0",
// Shared-network level flag specifying whether the client
// identifier should be used for identifying clients.
"match-client-id": true,
// Shared network name.
"name": "my-secret-network",
// Shared-network level specification of the next server
// to be sent in 'siaddr'.
"next-server": "192.0.2.123",
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// List of shared network-specific DHCP options.
"option-data": [],
// List of IPv4 relay addresses for which this shared
// network is selected.
"relay": {
"ip-addresses": []
},
// Shared-network level rebind timer.
"rebind-timer": 41,
// Shared-network level renew timer.
"renew-timer": 31,
// Shared-network level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
"t1-percent": .5,
// T2 = valid lifetime * .75.
"t2-percent": .75,
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
// Cache maximum: when the client last-transmission time
// is close enough, the lease is not renewed and the current
// lease is returned as it was "cached".
"cache-max-age": 1000,
// Adaptive lease time threshold (1.0 is disabled).
"adaptive-lease-time-threshold": 0.8,
// Specify whether the server should look up global reservations.
"reservations-global": false,
// Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
// Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet4" levels.
"reservations-out-of-pool": false,
// List of client classes which must be evaluated when this shared
// network is selected for client assignments.
"evaluate-additional-classes": [ "late" ],
// Turn off storage of extended information (e.g. relay agent
// information) with each lease for this shared network.
"store-extended-info": false,
// Shared-network level server hostname set in 'sname' field.
"server-hostname": "",
// List of IPv4 subnets belonging to this shared network.
"subnet4": [
{
// Interface name matched against inbound interface name.
// Used in DHCPv4o6. See RFC 7341.
"4o6-interface": "",
// Interface ID option value. See RFC 7341.
"4o6-interface-id": "",
// Prefix matched against source address. See RFC7341.
"4o6-subnet": "2001:db8:1:1::/64",
// A flag selecting an IP address allocation strategy for
// the subnet.
"allocator": "iterative",
// Subnet-level authoritative flag.
"authoritative": false,
// Subnet-level bootfile name, set in 'file' field.
"boot-file-name": "",
// Restricts this subnet to allow only clients
// that belong to at least one class in this list. If omitted
// or an empty list is provided, no restriction is applied.
"client-classes": [],
// Subnet-level value. See description at the global level.
"ddns-generated-prefix": "myhost",
// Subnet-level value. See description at the global level.
"ddns-override-client-update": false,
// Subnet-level value. See description at the global level.
"ddns-override-no-update": false,
// Subnet-level value. See description at the global level.
"ddns-qualifying-suffix": "",
// Subnet-level value. See description at the global level.
"ddns-replace-client-name": "never",
// Subnet-level value. See description at the global level.
"ddns-send-updates": true,
// Subnet-level value. See description at the global level.
"ddns-update-on-renew": true,
// Shared-network level value. See description at the global level.
// This field has been replaced by ddns-conflict-resolution-mode.
// Parsing is maintained only for backwards compatibility.
// "ddns-use-conflict-resolution": true,
// Subnet-level value. See description at the global level.
"ddns-conflict-resolution-mode": "check-with-dhcid",
// Subnet-level value. See description at the global level.
// "ddns-ttl-percent": 0.55,
// Subnet-level value. See description at the global level.
// You cannot specify both ddns-ttl and any of ddns-ttl-percent, ddns-ttl-min, or
// ddns-ttl-max. They are mutually exclusive.
"ddns-ttl": 500,
// Subnet-evel value. See description at the global level.
// "ddns-ttl-min": 10000,
// Subnet-level value. See description at the global level.
// "ddns-ttl-max": 20000,
// Subnet-level value. See description at the global level.
"hostname-char-replacement": "x",
// Subnet-level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
// Subnet unique identifier.
"id": 1,
// Specifies that this subnet is selected for requests
// received on a particular interface.
"interface": "eth0",
// Subnet-level flag specifying whether the client identifier
// should be used for identifying clients.
"match-client-id": true,
// Subnet-level specification of the next server to be sent
// in 'siaddr'.
"next-server": "0.0.0.0",
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// Turn on storage of extended information (e.g. relay agent
// information) with each lease for this subnet.
"store-extended-info": true,
// Subnet-level list of DHCP options.
"option-data": [
{
// Boolean flag indicating whether the particular option
// should be always sent or sent only when requested.
"always-send": false,
// An optional list of classes for which this option applies.
// If the the client matches any of the classes in this list the
// option will be applied. If the list is empty or is
// omitted this option will be applied regardless of class
// membership.
"client-classes": [],
// Option code.
"code": 3,
// Boolean flag indicating whether the option value specified
// in "data" is a string of hexadecimal values or human-readable
// CSV value.
"csv-format": true,
// Option data to be included in the option payload.
"data": "192.0.3.1",
// Option name.
"name": "routers",
// Boolean flag indicating whether the given option is never
// sent in response.
"never-send": false,
// Option space. The default value "dhcp4" designates the
// top-level option space.
"space": "dhcp4"
}
],
// List of IP address pools belonging to the subnet.
"pools": [
{
// Restricts this pool to allow only clients
// that belong to at least one class in this list. If omitted
// or an empty list is provided, no restriction is applied.
"client-classes": [ "phones_server1" ],
// Pool-level list of DHCP options.
"option-data": [],
// Address range used for client assignments.
"pool": "192.1.0.1 - 192.1.0.200",
// List of client classes which must be evaluated when this pool
// is selected for client assignments.
"evaluate-additional-classes": [ "late" ],
// Pool-level value. See description at the global level.
"ddns-generated-prefix": "mypool",
// Pool-level value. See description at the global level.
"ddns-override-client-update": false,
// Pool-level value. See description at the global level.
"ddns-override-no-update": false,
// Pool-level value. See description at the global level.
"ddns-qualifying-suffix": "pool.example.com.",
// Pool-level value. See description at the global level.
"ddns-replace-client-name": "always",
// Pool-level value. See description at the global level.
"ddns-send-updates": true,
// Pool-level value. See description at the global level.
"ddns-update-on-renew": false,
// Pool-level value. See description at the global level.
"ddns-conflict-resolution-mode": "check-with-dhcid",
// Pool-level value. See description at the global level.
"ddns-ttl-percent": 0.55,
// Pool-level value. See description at the global level.
// You cannot specify both ddns-ttl and any of ddns-ttl-percent,
// ddns-ttl-min, or ddns-ttl-max. They are mutually exclusive.
// "ddns-ttl": 500,
// Pool-evel value. See description at the global level.
"ddns-ttl-min": 10000,
// Pool-level value. See description at the global level.
"ddns-ttl-max": 20000,
// Pool-level value. See description at the global level.
"hostname-char-replacement": "x",
// Pool-level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]"
},
{
// Restricts this pool to allow only clients
// that belong to at least one class in this list. If omitted
// or an empty list is provided, no restriction is applied.
"client-classes": [ "phones_server2" ],
// Pool-level list of DHCP options.
"option-data": [],
// Address range used for client assignments.
"pool": "192.3.0.1 - 192.3.0.200",
// List of client classes which must be evaluated when this pool
// is selected for client assignments.
"evaluate-additional-classes": [],
// Pool identifier used to enable statistics for this pool.
// The pool ID does not need to be unique within the subnet
// or across subnets.
// If not unconfigured, it defaults to 0. The statistics
// regarding this pool will be combined with the other statistics
// of all other pools with the same pool ID in this subnet.
"pool-id": 1
}
],
// Subnet-level value of the rebind timer.
"rebind-timer": 40,
// List of IPv4 relay addresses for which this subnet is selected.
"relay": {
"ip-addresses": [
"192.168.56.1"
]
},
// Subnet-level value of the renew timer.
"renew-timer": 30,
// Specify whether the server should look up global reservations.
"reservations-global": false,
// Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
// Specify whether the server can assume that all reserved
// addresses are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
// Subnet-level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
"t1-percent": .5,
// T2 = valid lifetime * .75.
"t2-percent": .75,
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
// Subnet-level cache maximum.
"cache-max-age": 1000,
// Adaptive lease time threshold (1.0 is disabled).
"adaptive-lease-time-threshold": 0.8,
// List of static IPv4 reservations assigned to clients belonging
// to this subnet. For a detailed example, see reservations.json.
"reservations": [
{
// Identifier used for client matching. Supported values are
// "hw-address", "client-id", "duid", "circuit-id", "flex-id".
"circuit-id": "01:11:22:33:44:55:66",
// Reserved IP address.
"ip-address": "192.0.2.204",
// Hostname.
"hostname": "foo.example.org",
// Reservation-specific option data.
"option-data": [
{
// Option name.
"name": "vivso-suboptions",
// Option data.
"data": "4491"
}
]
}
],
// List of client classes which must be evaluated when this subnet
// is selected for client assignments.
"evaluate-additional-classes": [ "late" ],
// Subnet-level server hostname set in 'sname' field.
"server-hostname": "",
// Subnet prefix.
"subnet": "192.0.0.0/8",
// Subnet-level (default) valid lifetime.
"valid-lifetime": 6000,
// Subnet-level min valid lifetime.
"min-valid-lifetime": 4000,
// Subnet-level max valid lifetime.
"max-valid-lifetime": 8000
}
],
// Shared-network level (default) valid lifetime.
"valid-lifetime": 6001,
// Shared-network level min valid lifetime.
"min-valid-lifetime": 4001,
// Shared-network level max valid lifetime.
"max-valid-lifetime": 8001
}
],
// Global server hostname set in the 'sname' field.
"server-hostname": "",
// Stash agent options (aka RAI) to make direct queries to come
// through a relay.
"stash-agent-options": false,
// List of IPv4 subnets which don't belong to any shared network.
"subnet4": [],
// Global valid lifetime value.
"valid-lifetime": 6000,
// Global min valid lifetime value.
"min-valid-lifetime": 4000,
// Global max valid lifetime value.
"max-valid-lifetime": 8000,
// Reservations (examples are in other files).
"reservations": [],
// Configuration control (currently not used, i.e. this syntax
// is already defined but the corresponding feature is not implemented).
"config-control": {
// Only the configuration databases entry is defined.
"config-databases": [
{
// Name of the database to connect to.
"name": "config",
// Type of database, e.g. "mysql", "postgresql".
"type": "mysql"
}
],
// Interval between attempts to fetch configuration updates
// via the configuration backends used.
"config-fetch-wait-time": 30
},
// Server tag.
"server-tag": "my DHCPv4 server",
// DHCP queue-control parameters.
"dhcp-queue-control": {
// Enable queue is mandatory.
"enable-queue": true,
// Queue type is mandatory.
"queue-type": "kea-ring4",
// Capacity is optional.
"capacity": 64
},
// Specify whether the server should look up global reservations.
"reservations-global": false,
// Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
// Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
// "subnet4" levels.
"reservations-out-of-pool": false,
// Global compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
"t1-percent": .5,
// T2 = valid lifetime * .75.
"t2-percent": .75,
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
// Global cache maximum.
"cache-max-age": 1000,
// Adaptive lease time threshold (1.0 is disabled).
"adaptive-lease-time-threshold": 0.8,
// String of zero or more characters with which to replace each
// invalid character in the hostname or Client FQDN. The default
// value is an empty string, which will cause invalid characters
// to be omitted rather than replaced.
"hostname-char-replacement": "x",
// Regular expression describing the invalid character set in
// the hostname or Client FQDN.
"hostname-char-set": "[^A-Za-z0-9.-]",
// List of loggers used by the servers using this configuration file.
"loggers": [
{
// Debug level, a value between 0..99. The greater the value
// the more detailed the debug log.
"debuglevel": 99,
// Name of the logger.
"name": "kea-dhcp4",
// Configures how the log should be output.
"output-options": [
{
// Determines whether the log should be flushed to a file.
"flush": true,
// Specifies maximum filesize before the file is rotated.
"maxsize": 10240000,
// Specifies the maximum number of rotated files to be kept.
"maxver": 1,
// Specifies the logging destination.
"output": "stdout",
// Specifies log entry content
"pattern": "%D{%Y-%m-%d %H:%M:%S.%q} %-5p [%c/%i] %m\n"
}
],
// Specifies logging severity, i.e. "ERROR", "WARN", "INFO", "DEBUG".
"severity": "INFO"
}
],
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// Look at advanced examples for the use of user-contexts.
"user-context": { }
}
}