DHCP6S.CONF(5)

πŸ’– DHCP6S.CONF(5) πŸ’–

okay bestie, gather round, because today we're learning about dhcp6s.conf β€” the file formats manual page for the DHCPv6 server configuration file. yes this is a File Formats Manual situation, not a command situation. she's a config file. she's iconic. let's go πŸ¦‹


✨ NAME ✨

dhcp6s.conf β€” DHCPv6 server configuration file


🌸 SYNOPSIS 🌸

/etc/wide-dhcpv6/dhcp6s.conf

πŸ’… DESCRIPTION πŸ’…

So. The dhcp6s.conf file is where all the configuration info lives for KAME's DHCPv6 server, dhcp6s. That's the whole vibe.

The config file is basically a sequence of statements, and every statement gets terminated by a semi-colon (`;`). Statements are made of tokens separated by white space β€” and white space here can be literally any combo of blanks, tabs, and newlines. In some cases a whole set of statements gets bundled together with a pair of brackets, and that whole bundle counts as a single token. Also, any line starting with β€˜#’ is a comment. periodt πŸ’œ

πŸŽ€ Interface specification πŸŽ€

Some statements may specify an interface, and some have to. Interfaces get specified in the form "name unit" β€” think fxp0 and gif1. iykyk.

🌈 Include statement 🌈

An include statement is like "hey, also read this other config file." Format goes like this:

include "filename";

Where "filename" is the name (full path, bestie, full path) of the file to be included.

✨ Option statement ✨

An option statement specifies configuration parameters that get provided for every client. Here's the format:

option option-name [option-value] ;

These are the options you can throw into an option statement:

  • domain-name-servers dns-address [dns-addresses...]; β€” provides DNS server address(es). Every dns-address must be a numeric IPv6 address. You can also specify multiple server addresses by just doing a sequence of these statements. slay.
  • domain-name "dns-name"; β€” provides a domain name of a DNS search path. Multiple names in the path can be specified with a sequence of these statements.
  • ntp-servers ntp-address [ntp-addresses...]; β€” provides NTP server address(es). Each ntp-address must be a numeric IPv6 address. Multiple server addresses can also be specified by a sequence of these statements.
  • sip-server-address sip-server-address [sip-server-addresses...]; β€” provides SIP server address(es). Each sip-server-address must be a numeric IPv6 address. Multiple server addresses can also be specified by a sequence of these statements.
  • sip-server-domain-name "sip-server-domain-name"; β€” provides a domain name of a SIP server. Multiple names in the path can be specified by a sequence of these statements.
  • nis-server-address nis-server-address [nis-server-addresses...]; β€” provides NIS server address(es). Each nis-server-address must be a numeric IPv6 address. Multiple server addresses can also be specified by a sequence of these statements.
  • nis-domain-name "nis-domain-name"; β€” provides a NIS domain name. Multiple names in the path can be specified by a sequence of these statements.
  • nisp-server-address nisp-server-address [nisp-server-addresses...]; β€” provides NIS+ server address(es). Each nisp-server-address must be a numeric IPv6 address. Multiple server addresses can also be specified by a sequence of these statements.
  • nisp-domain-name "nisp-domain-name"; β€” provides a NIS+ domain name. Multiple names in the path can be specified by a sequence of these statements.
  • bcmcs-server-address bcmcs-server-address [bcmcs-server-addresses...]; β€” provides BCMCS server address(es). Each bcmcs-server-address must be a numeric IPv6 address. Multiple server addresses can also be specified by a sequence of these statements.
  • bcmcs-server-domain-name "bcmcs-server-domain-name"; β€” provides a domain name of a BCMCS server. Multiple names in the path can be specified by a sequence of these statements.
  • refreshtime interval; β€” specifies the refresh time of stateless information that doesn't have a particular lease duration, in seconds. Heads up: this option is only applicable to stateless configuration by information-request and reply exchanges. no cap.

🫢 Interface statement 🫢

An interface statement specifies configuration parameters on the interface. Generic format:

interface interface { substatements };

These are the possible substatements inside an interface statement:

  • allow allow-options ; β€” specifies DHCPv6 options accepted by the server. Currently only rapid-commit can be specified in an allow statement, which tells the server to accept a rapid-commit option in solicit messages.
  • preference pref; β€” sets the server's preference value on the interface to the value pref. That specified value ends up inside a preference option of advertise messages. The preference value must be a decimal integer between 0 and 255 (inclusive, bestie).
  • address-pool pool pltime [vltime]; β€” assigns an address pool pool to the interface. When dhcp6s.conf receives an allocation request for an IA-NA, it assigns one IPv6 address from this pool. The pool name you use here gets defined in a pool statement. As for the pltime and vltime, go peek at the explanation in the prefix substatement in the host statement section. it's all connected πŸ”₯

πŸ‘‘ Host statement πŸ‘‘

A host statement specifies configuration parameters for one particular client. Generic format:

host name { substatements };

name is an arbitrary string. It does not affect the server's behavior β€” it's just there so log messages are readable. Possible substatements:

  • duid ID; β€” defines the client's DHCP unique identifier (DUID). ID is a colon-separated hexadecimal sequence where each separated part must be composed of two hexadecimal values. This statement is how the server identifies a particular host, and it must be included in a host statement. mandatory, babes.
  • prefix ipv6-prefix pltime [vltime]; β€” specifies an IPv6 prefix to be delegated to the client. ipv6-prefix is a string representing a valid IPv6 prefix (there's an example below, don't worry). pltime and vltime are the preferred and valid lifetimes of the prefix. When the latter is omitted, it gets set to the same value as pltime. You can specify either a positive decimal number or the special string infinity as a lifetime. A decimal number gives the lifetime in seconds, while infinity means that lifetime never expires. When both lifetimes are specified, pltime must not be larger than vltime. You can specify multiple prefixes, each one via a single prefix statement β€” and in that case, all or some of the specified prefixes get delegated to the client, based on the parameters the client requires.
  • address ipv6-address pltime [vltime]; β€” specifies an IPv6 address to be assigned to the client. Everything is the same as the prefix option, except you don't need to specify a prefix length. easy πŸ’…
  • delayedkey keyname; β€” specifies a secret key shared with the client for the DHCPv6 delayed authentication protocol. keyname is a string that identifies a particular set of key parameters. A separate keyinfo statement for keyname must be provided in the config file. When this statement is specified and the client includes an authentication option for the delayed authentication protocol in a Solicit message, dhcp6s will perform the authentication protocol for the succeeding message exchanges. dramatic but correct.

πŸ’œ Pool statement πŸ’œ

A pool statement specifies an address pool for a particular interface. Generic format:

pool name { substatements; };

name is an arbitrary string. It does not affect the server's behavior β€” again, purely for readability of log messages. Possible substatements:

  • range min-addr to max-addr β€” defines the range of addresses allocated for the pool, i.e. from min-addr to max-addr.

🧚 Keyinfo statement 🧚

This statement defines a secret key shared with a client to authenticate DHCPv6 messages. The format and the description of this statement is provided in dhcp6c.conf(5). One important difference in the server configuration though: the keyname is referred from a host statement, as described above. don't forget that part πŸ’€


⭐ Examples ⭐

The followings are a sample configuration to provide a DNS server address for every client, as well as to delegate a permanent IPv6 prefix 2001:db8:1111::/48 to a client whose DUID is 00:01:00:01:aa:bb.

option domain-name-servers 2001:db8::35;

host kame {
    duid 00:01:00:01:aa:bb;
    prefix 2001:db8:1111::/48 infinity;
};

If a shared secret should be configured in both the server and the client for DHCPv6 authentication, it would be specified in the configuration file as follows:

keyinfo kame {
    realm "kame.net";
    keyid 1;
    secret "5pvW2g48OHPvkYMJSw0vZA==";
};

And the host statement would be modified as follows:

host kame {
    duid 00:01:00:01:aa:bb;
    prefix 2001:db8:1111::/48 infinity;
    delayedkey kame;
};

πŸ”₯ SEE ALSO πŸ”₯

dhcp6c.conf(5) dhcp6s(8)

go read those too, bestie, they're the whole friend group 🫢


🌸 HISTORY 🌸

The dhcp6s.conf configuration file first appeared in the WIDE/KAME IPv6 protocol stack kit. a true pioneer, an OG, main character energy from day one πŸ‘‘


and that's the page!! πŸ’– this manual is from KAME, dated July 29, 2004, and it's DHCP6S.CONF(5) β€” so yeah, we're stanning a legend that's been serving since 2004 and still ate. no cap, fr fr. go configure something cute. bye bestie!! πŸŽ€βœ¨πŸ¦‹