Dibbler - A Portable Dhcpv6 User'S Guide: Tomek Mrugalski
Dibbler - A Portable Dhcpv6 User'S Guide: Tomek Mrugalski
Dibbler - A Portable Dhcpv6 User'S Guide: Tomek Mrugalski
User’s guide
Tomek Mrugalski
thomson(at)klub.com.pl
2015-08-09
1.0.1
Dibbler 1.0.1 User’s Guide 2
Contents
1 Intro 6
1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Supported parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Not supported features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Operating System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5 Supported platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Compilation 13
3.1 Linux/Mac OS X/FreeBSD/NetBSD/OpenBSD/Solaris Compilation . . . . . . . . . . . . 13
3.2 Modern Windows (XP...Win7) compilation . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Legacy Windows (NT/2000) compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4 IPv6 support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4.1 Setting up IPv6 in Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4.2 Setting up IPv6 in Windows Vista and Win7 . . . . . . . . . . . . . . . . . . . . . 14
3.4.3 Setting up IPv6 in Windows XP and 2003 . . . . . . . . . . . . . . . . . . . . . . . 14
3.4.4 Setting up IPv6 in Windows 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4.5 Setting up IPv6 in Windows NT4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Features HOWTO 17
4.1 Prefix delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Relays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Address and prefix assignment policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4 Routing configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.5 Custom options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.6 DNS Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.6.1 Example BIND configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.6.2 Secure DDNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.6.3 Dynamic DNS Testing and tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.6.4 Accepting Unknown FQDNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.7 Introduction to client classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.7.1 Client class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7.2 Access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7.3 Assigning clients to defined classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.7.4 Examples of Client-Class Classifying . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.8 External script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.9 Reconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.10 Following M, O bits from Router Advertisements . . . . . . . . . . . . . . . . . . . . . . . 34
4.11 CONFIRM message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.12 Mobility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.13 Leasequery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.14 Stateless vs stateful and IA, TA options . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.15 Server address caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Dibbler 1.0.1 User’s Guide 3
5 Server configuration 52
5.1 Scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.1 Global scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.2 Interface declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.3 Address class scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.4 Prefix class scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.5 Temporary address class scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.6 Routing scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.7 Client scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.1.8 Key scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2 Server options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.1 Client class quantifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3 Server configuration examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3.1 Example 1: Simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3.2 Example 2: Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3.3 Example 3: Limiting amount of addresses . . . . . . . . . . . . . . . . . . . . . . . 62
5.3.4 Example 4: Unicast communication . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.5 Example 5: Rapid-commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.6 Example 6: Access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.7 Example 7: Multiple classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.8 Example 8: Relay support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.9 Example 9: Cascade 2 relays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.10 Example 10: Dynamic DNS (FQDN) . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.11 Example 11: Vendor-specific Information option . . . . . . . . . . . . . . . . . . . 69
5.3.12 Example 12: Per client configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3.13 Example 13: Prefix delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Dibbler 1.0.1 User’s Guide 4
6 Client configuration 76
6.1 Data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2 Scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.1 Interface declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.2 IA declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2.3 TA declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2.4 PD declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2.5 Address declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2.6 Prefix declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.3 Stateless configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.4 Relay support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.6 File location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.7 Client Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.8 Client Configuration Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.8.1 Example 1: Default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.8.2 Example 2: DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.8.3 Example 3: Timeouts and specific address . . . . . . . . . . . . . . . . . . . . . . . 86
6.8.4 Example 4: More than one address . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.8.5 Example 5: Quick configuration using Rapid-commit . . . . . . . . . . . . . . . . . 88
6.8.6 Example 6: Stateless mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.8.7 Example 7: Dynamic DNS (FQDN) . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.8.8 Example 8: Interface indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.8.9 Example 9: Vendor-specific options . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.8.10 Example 10: Unicast communication . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.8.11 Example 11: Prefix delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.8.12 Example 12: Insist mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.8.13 Example 13: Inactive mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.8.14 Example 14: Dibbler Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.8.15 Example 15: Skip Confirm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.8.16 Example 15: User-defined IAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.8.17 Example 16: DS-Lite tunnel (AFTR) . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.8.18 Example 17: Custom options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.8.19 Example 18: Remote Autoconfiguration . . . . . . . . . . . . . . . . . . . . . . . . 95
7 Relay configuration 96
7.1 Global scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2 Interface declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.3 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.4 Relay configuration examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Dibbler 1.0.1 User’s Guide 5
11 Acknowledgements 111
Bibliography 113
Dibbler 1.0.1 User’s Guide 6
1 Intro
First of all, as an author I would like to thank you for your interest in this DHCPv6 implementation. If
this documentation doesn’t answer your questions or you have any suggestions, feel free to contact me as
explained in Contact section. Also be sure to check out Dibbler website: http://klub.com.pl/dhcpv6/.
Tomek Mrugalski
1.1 Overview
Dynamic Host Configuration Protocol for IPv6, often abbreviated as DHCPv6, is a protocol, which is
used to automatically configure IPv6 capable computers and other equipment located in a local network.
This protocol defines clients (i.e. nodes, which want to be configured), servers (i.e. nodes, which provide
configuration to clients) and relays (i.e. nodes, which are connected to more than one network and are
able to forward traffic between local clients and remote servers). Also, special type of DHCPv6 entity
called requestor has been defined. It is used by network administrator to query servers about their status
and assigned parameters.
Dibbler is a portable DHCPv6 solution, which features server, client and relay. Currently there are
ports available for many Windows platforms ranging from NT4 to Windows 8, Linux 2.4 or later systems
and Mac OS (experimental). See Section 1.4 for details. It supports both stateful (i.e. IPv6 address
granting) and stateless (i.e. options granting) autoconfiguration. Besides basic functionality (specified in
basic DHCPv6 spec, RFC3315 [5]), it also offers serveral enhancements, e.g. DNS servers and domain
names configuration.
Dibbler is an open source software, distributed under GNU GPL v2 licence. It means that it is freely
available, free of charge and can be used by anyone (including commercial users). Source code is also
provided, so anyone skilled enough can fix bugs, add new features and distribute his/her own version.
Requestor support has been added in version 0.7.0RC1. Requestor is a separate entity, which sends
queries to the server regarding leases to specific clients. It is possible to ask a server, who has specific
address or what addresses are assigned to a specific client. This feature is part of the lease query mechanism
defined in [21] and is considered advanced topic. If you don’t know what lease query is, you definetely
don’t need it.
Dibbler 1.0.0RC1 supports all features specified in RFC3315. In particular the following features are
supported:
• Basic server discovery and address assignment (SOLICIT, ADVERTISE, REQUEST and REPLY
messages) – This is a most common case: client discovers servers available in the local network,
then asks for an address (and possibly additional options like DNS configuration), which is granted
by a server.
Dibbler 1.0.1 User’s Guide 7
• Server redundancy/Best server discovery – when client detects more than one server available (by
receiving more than one ADVERTISE message), it chooses the best one and remembers remaining
ones as a backup.
• Multiple servers support – Client is capable of discovering and maintaning communication with
several servers. For example, client would like to have 5 addresses configured. Prefered server can
only lease 3, so client send request for remaining 2 addresses to one of the remaining servers.
• Relay support – In a larger network, which contains several Ethernet segments and/or wireless
areas, sometimes centrally located DHCPv6 server might not be directly reachable. In such cace,
additional proxies, so called relays, might be deployed to relay communication between clients and
a remote server. Dibbler server supports indirect communication with clients via relays. Stand-
alone, lightweight relay implementation is also available. Clients are capable of talking to the server
directly or via relays.
• Address renewal – After receiving address from a server, client might be instructed to renew its
address at regular intervals. Client periodically sends RENEW messege to a server, which granted
its address. In case of communication failure, client is also able to attempt emergency address
renewal (i.e. it sends REBIND message to any server).
• Unicast communication – if specific conditions are met, client could send messages directly to a
server’s unicast address, so additional servers does not need to process those messages. It also
improves effciency, as all nodes present in LAN segment receive multicast packets.1
• Duplicate address detection – Client is able to detect and properly handle faulty situation, when
server grants an address which is illegaly used by some other host. It will inform server of such
circumstances (using DECLINE message), and request another address. Server will mark this
address as used by unknown host, and will assign another address to a client.
1
Nodes, which do not belong to specific multicast group, drop those packets silently. However, determining if host belongs
or not to a group must be performed on each node. Also using multicast communication increases the network load.
Dibbler 1.0.1 User’s Guide 8
• Power failure/crash support – After client recovers from a crash or a power failure, it still can have
valid addresses assigned. In such circumstances, client uses CONFIRM message, to config if those
addresses are still valid.
• Link change detection – Client can be instructed to monitor its link state. Once it detects
• Normal and temporary addresses – Depending on its purpose, client can be configured to ask for
normal (IA NA option) or temporary (IA TA option). Although use of temporary addresses is
rather uncommon, both dibbler server and client support it.
• Hint system – Client can be configured to send various parameters and addresses in the REQUEST
message. It will be treated as a hint by the server. If such hint is valid, it will be granted for this
client.
• Server caching – Server can cache granted addresses, so the same client will receive the same address
each time it asks. Size of this cache can be configured.
• Stateless mode – Client can be configured to not ask for any addresses, but the configuration
options only. In such case, when no addresses are granted, such configuration is called stateless
(INFORMATION-REQUEST message is used instead of normal REQUEST ).
• Rapid Commit – Sometimes it is desirable to quicken configuration process. If both client and server
are configured to use rapid commit, address assignment procedure can be shortened to 2 messages,
instead of usual 4. Major advantage is lesser network usage and quicker client startup time.
• M,O bits from Router Advertisement – the client can be told to observe M(managed) and O(OtherConf)
bits from RA and act according to them
• Reconfigure – server can inform clients that the configuration has changed and clients can initiate
Reconfigure
Dibbler 1.0.1 User’s Guide 9
• Authentication: Reconfigure-key – the server can generate HMAC-MD5 reconfigure keys on the
fly to later authenticate reconfigure messages. Clients are able to receive, store and later validate
against that received key.
• Authentication: Delayed authorization – server and client can protect their communication against
tampering by using preprovisioned keys.
• DNS Servers – During normal operation, almost all hosts require constant use of the DNS servers.
It is necessary for event basic operations, like web surfing. DHCPv6 client can ask for information
about DNS servers and DHCPv6 server will provide necessary information. [9]
• Domain Name – Client might be interested in obtaining information about its domain. Properly
configured domain allow reference to a different hosts in the same domain using hostname only, not
the full domain name, e.g. alice.example.com with properly configured domain can refer to another
host in the same domain by using ’bob’ only, instead of full name bob.example.com. [9]
• NTP Servers – To prevent clock misconfiguration and drift, NTP protocol [1] can be used to syn-
chronize clocks. However, to successful use it, location of near NTP servers must be known. Dibbler
is able to configure this information. [14]
• Time Zone – To avoid time-related ambiguation, each host should have timezone set properly.
Dibbler is able to pass this parameter to all clients, who request it. [32]
• SIP Servers – Session Initiation Protocol (SIP) [4] is commonly used in VoIP solutions. One of the
necessary information is SIP server addresses. This information can be passed to the clients. [6]
• SIP Domain Name – SIP domain name is another important parameter of the VoIP capable nodes.
This parameter can be passed to all clients, who ask for it. [6]
• NIS, NIS+ Server – Network Information Service is a protocol for sharing authentication parameters
between multiple Unix or Linux nodes. Both NIS and NIS+ server addresses can be passed to the
clients. [11]
• NIS, NIS+ Domain Name – NIS or NIS+ domain name is another necessary parameter for NIS or
NIS+. It can be obtained from the DHCPv6 server to all clients, who require it. [11]
• Option Renewal Mechanism (Lifetime option)– All of the options mentioned on this list can be
refreshed periodically. This might be handy if one of those parameters change. [13]
• Dynamic DNS Updates – Server can assign a fully qualified domain name for a client. To make such
name useful, DNS servers must be informed that such name is bound to a specific IPv6 address.
This procedure is called DNS Update. There are two kinds of the DNS Updates: forward and
reverse. First is used to translate domain name to an address. The second one is used to obtain full
domain name of a known address. See section 4.6 for details. [16]
• Prefix Delegation – Server can be configured to manage a prefix pool, i.e. clients will be assigned
whole pools instead on single addresses. This is very useful, when clients are not simple end users
(e.g. desktop computers or laptops), but rather are routers (e.g. cable modems). This functionality
is often used for remote configuration of IPv6 routers. [8]
Dibbler 1.0.1 User’s Guide 10
• DNS Updates are done over IPv6 only. Adding IPv4 support is not planned. Do not bother to
develop patches – Dibbler is a IPv6-focused software and IPv4-related patches will be rejected.
Debian GNU/Linux, Ubuntu and derived – use standard tools (apt-get, aptitude and similar) to
install dibbler-client, dibbler-server, dibbler-relay or dibbler-doc packages.
PLD GNU/Linux – use standard PLD’s poldek tool to install dibbler package.
OpenWRT – there are package definitions for OpenWRT. At time of this writing, they were very
outdated (using 0.5.0 version).
If you are using other Linux distribution, check out if it already provides Dibbler packages. You may
use them or compile the sources on your own. See Section 3 for details regarding compilation process.
Dibbler used to provide native DEB and RPM packages, but due to limited resources, author is not
continuing this activity. If you are a Dibbler package maintainer and want your package to be put on
dibbler website, please send such request on mailing list (see Section 10.3).
To install Dibbler on Debian or other system that provides apt-get package management system,
run apt-get install package command. For example, to install server and client, issue the following
command:
apt-get install dibbler-server dibbler-client
start parameter requires little explanation. It instructs Dibbler to run in daemon mode – detach
from console and run in the background. During configuration files fine-tuning, it is ofter better to watch
Dibbler’s bahavior instantly. In this case, use run instead of start parameter. Dibbler will present its
messages on your console instead of log files. To finish it, press ctrl-c.
To stop server, client or relay running in daemon mode, type:
dibbler-server stop
dibbler-client stop
dibbler-relay stop
3 Compilation
Dibbler is distributed in 2 versions: binary and source code. If there is binary version provided for
your system, it is usually better choice. Compilation usually is performed by more experienced users.
In average case it does not offer significant advantages over binary version. You probably want to just
install and use Dibbler. If that is your case, read section named 2. However, if you are skilled enough,
you might want to tune several Dibbler aspects during compilation. See Dibbler Developer’s Guide for
information about various compilation parameters.
Configure script accepts many parameters, so if like to tweak something, here is your chance. You may
run ./configure --help to see list of available parameters. For example, to set up sources to compile
in debug mode (useful if you want to debug them or provide better bugreport), you can do this:
./configure --enable-debug
Configure script was added in 0.8.1RC1. Earlier versions do not not need that step.
Dibbler was compiled using gcc 2.95, 3.0, 3.2, 3.3, 3.4, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6 and 4.7 versions.
Note that many older compilers are now considered obsolete and were not tested for some time. Lexer
files (grammar defined config file) were generated using flex 2.5.35. Parser file were created using bison++
1.21.9. Flex and bison++ tools are not required to compile Dibbler. Generated files are placed in GIT
and in tar.gz archives. Dibbler requires also make. Autoconf and automake tools (autotools) were used
for regeneration of the Makefiles and configure script, but those generated files are shipped with the code,
so autotools should not be required.
Dibbler 1.0.1 User’s Guide 14
2. From the local folder (C:\IPv6TP), run Tpipv6-001205.exe and extract the files to the same loca-
tion.
3. From the local folder (C:\IPv6TP), run Setup.exe -x and extract the files to a subfolder of the
current folder (for example, C:\IPv6TP\files).
4. From the folder containing the extracted files (C:\IPv6TP\files), open the file Hotfix.inf in a
text editor.
5. In the [Version] section of the Hotfix.inf file, change the line NTServicePackVersion=256 to NTSer-
vicePackVersion=1024, and then save changes. 3
6. From the folder containing the extracted files (C:\IPv6TP\files), run Hotfix.exe.
8. After the computer is restarted, from the Windows 2000 desktop, click Start, point to Settings, and
then click Network and Dial-up Connections. As an alternative, you can right-click My Network
Places, and then click Properties.
9. Right-click the Ethernet-based network interface to which you want to add the IPv6 protocol, and
then click Properties. Typically, this network interface is named Local Area Connection.
11. In the Select Network Component Type dialog box, click Protocol, and then click Add.
12. In the Select Network Protocol dialog box, click Microsoft IPv6 Protocol and then click OK.
13. Click Close to close the Local Area Connection Properties dialog box.
2. From the local folder (C:\IPv6Kit), run msripv6-bin-1-4.exe and extract the files to the same
location.
3. Start the Control Panel’s ”Network” applet (an alternative way to do this is to right-click on
”Network Neighborhood” and select ”Properties”) and select the ”Protocols” tab.
3
This defines Service Pack requirement. NTServicePackVersion is a ServicePack version multiplied by 256. If there would
be SP5 available, this value should have been changed to the 1280.
Dibbler 1.0.1 User’s Guide 16
4. Click the ”Add...” button and then ”Have Disk...”. When it asks you for a disk, give it the full
pathname to where you downloaded the binary distribution kit (C:\IPv6Kit).
4 Features HOWTO
This section contains information about setting up various Dibbler features. Since this section was
added recently, it is not yet comprehensive. That is expected to change.
As a general rule, server will provide random prefix to a client, unless client provided a hint. The full
prefix assignment algorithm is as follows:
1. client didn’t provide any hints: one prefix from each pool will be granted
2. client has provided hint and that is valid (supported and unused): requested prefix will be granted
3. client has provided hint, which belongs to supported pool, but this prefix is used: other prefix from
that pool will be asigned
4. client has provided hint, but it is invalid (not beloninging to a supported pool, multicast or link-
local): see point 1
Dibbler implementation supports prefix delegation, as specified in [8]. Up to and including 0.7.3
version, client was also capable to do non-standard tricks with delegated prefix if it was a host, rather than
router. This mode of operation was removed in 0.8.0RC1. Now client behaves the same way, regardless
if it is a host or a router. When client receives prefix on one interface (e.g. prefix 2000:1234:7c34::/48
received on eth0) it will generate subprefixes for all other interfaces, which are up, running, non-loopback
and multicast capable. In the example depicted on Fig. 4.1, received prefix was split into 3 prefixes:
2000:1234:7c34:1000::/56 for eth1, 2000:1234:7c34:2000::/56 for eth2 and 2000:1234:7c34:3000::/56 for
eth3. Client support for prefix delectation was improved in 0.8.2. Client is now able to handle prefixes of
arbitrary lengths (do not have to be divisible by 8 anymore). The only restriction is that prefix must be
shorter or equal 120 bits.
It is also possible to explicitly specify which interfaces are downlink (i.e. sub-prefixes should be
assigned to). downlink-prefix-ifaces command may be used to disable interface autoselection and just list
downlink interfaces.
It is also possible to define multiple prefix pools. See section 5.3.13 for simple prefix delegation
configuration for server or section 5.3.14 for multiple prefixes configuration. Also section 6.8.11 provides
information related to client configuration.
Dibbler 1.0.1 User’s Guide 18
4.2 Relays
In small networks, all nodes (server, hosts and routers) are connected to the same network segment
– usually Ethernet segment or a single access point or hotspot. This is very convenient as all clients can
reach server directly. However, larger networks usually are connected via routers, so direct communication
is not always possible. On the other hand it is useful to have one server, which supports multiple links –
some connected directly and some remotely.
Very nice feature of the relays is that they appear as actual servers from the client’s point of view.
Therefore no special arrangement or configuration on the client side is required. On the other hand, from
the administrator point of view, it is much easier to manage one DHCPv6 server and deploy several relays
than manage several servers on remote links.
It is important to understand that relays not simply forward DHCPv6 messages. Each message
forwarded from client to the server is encapsulated. Also each message forwarded from server to a client
is decapsulated. Therefore additional server configuration is required to deal with encapsulated (i.e.
relayed) traffic.
There are 2 ways in which server can select apropriate set of addresses, prefixes and other configuration
options. The first one is based on addresses. Relay that forwards packets from client-facing interface (e.g.
eth0) must set link-addr field in RELAY-FORW message to an address that identifies that link. Please
note that this is NOT a link-local address, it is typically a global address that identifies a link. Server
can select appropriate set of parameters if the “subnet” clause is defined. This recent addition was added
after 0.8.3 release and will be included in 0.8.4.
The second way to refer to a specific link (i.e. eth0 on the relay may be different link than eth0 on
the server), each link is referred to using its unique interface-id. It is essential to use the same indentifier
in the relay configuration as well as in the server, so both will refer to the same link using the same
number. See section 5.3.8 for example how to configure server and section 7.4.1 for corresponding relay
configuration.
It is essential to understand that the “iface relayX” in the configuration represents a link accessible
via a relay, not the relay itself. These are not the same. One obvious example is a relay thay has 2
customer facing interfaces and one for relaying data to the server. This requires two separate “iface
relayX” defintions in the server.conf file.
In larger networks it is sometimes useful to connect multiple relays. Assuming there are 2 relays
connecting server and client. Such scenario is depicted on figure 6. Requests from client are received
Dibbler 1.0.1 User’s Guide 19
by relay2, which encapsulates and sends them to relay1. Relay1 further encapsulates those messages
and sends them to the server. Since server receives double encapsulated messages, it must be properly
configured to support such traffic. See section 5.3.9 for details about server configuration and section
7.4.4 for example relays configuration.
8. Otherwise, if all of above steps fails, server assigns a random address or prefix from supported pools.
This algorithm is supported for non-temporary addresses and prefixes. It is not supported for tempo-
rary addresses.
1. RA sent by router affects all hosts in a network. There is no way to differentiate this information
on a per host basis. There is no way to define additional routing information for specified class of
hosts (e.g. one department in a corporate network).
2. RA and DHCPv6 configuration has to be consistent. That is very doable, but somewhat problematic,
because network configuration has to be specified in several places. Moreover, it does not scale too
well. There are routers located in every segment of a network, while there may be just a single
DHCPv6 server deployed that serves many links.
3. Administrators experienced with IPv4 that are migrating their networks to IPv6 ask this question
very frequently: “How do I configure routing?”. Until recently the proper answer to that question
was “you don’t”.
Dibbler 1.0.1 User’s Guide 21
4. In mobile environment, mobile nodes had to wait for RA and then start DHCPv6 exchange. Al-
though hosts can request RA by sending Router Solicitation (RS), that may sometimes not work,
as routers have upper limits of how many RA they are allowed to sent.
To solve aforementioned problems, a DHCPv6-based solution was proposed [30]. It allows provi-
sioning of IPv6 routing information. In particular, it allows configuration of a default route, any rea-
sonable number of specific routes and routes available on link. This feature was introduced in Dibbler
0.8.1RC1. Both server and client support it. Dibbler sources come with examples config files. See
doc/example/server-route.conf and doc/example/client-route.conf for details.
Note: This specification is not approved yet. It will change in the future. In particular, IANA
have not assigned specific option values yet. Dibbler currently uses 242 for NEXT HOP and 243 for
RTPREFIX options. Those values will change.
Note: Current implementation is a prototype. It does support only one route per router, only one
router and only a single route on-link. Although server is able to parse config that defines more than one,
it will provision only the first route or router information to a client. That is implementation limitation
that will be removed in future releases. That is not a spec limitation.
To configure routing on a server side, following config may be used
# Example server configuration file: server-route.conf
iface "eth0" {
# assign addresses from this pool
class {
pool 2000::/64
}
# Uncomment following line to skip confirm sending (after crash or power outage)
skip-confirm
iface "eth0" {
ia
option dns-server
option domain
routing 1
}
Two features should be enabled to reasonably use this feature. routing 1 instructs client that is
should request routing information (NEXT HOP and RTPREFIX options). Once such information is
sent by the server, client will execute a notify script. Client will run defined script and pass necessary
information to it. In particular, it will set OPTION NEXT HOP, OPTION NEXT HOP RTPREFIX and
OPTION RTPREFIX variables with contents of received option. Please see scripts/notify-scripts/client-
notify.sh for example on how to use that information to configure routing. User is also recommended to
read Section 4.8 about details of running a script and passed variables.
class {
pool 2001:db8:1::/64
}
Similar list can be configured for client. However, client can ask for such custom options for testing
purposes only, as mechanism for handling those options once received is not yet implemented, as of
0.8.0RC1. Consider it experimental for the time being. Client can request for an option using ORO
option or even send the option in its messages.
Note that in 0.8.2 formatting of DUID-style options has changed. “hex” keyword is now required.
#client.conf
iface "eth0" {
ia
A word of warning: There are no safety checks regarding option codes, so it is possible to transmit
already defined options using this feature. Use with caution!
1. Configure DNS server. DNS server supporting IPv6 and dynamic updates must be configured. One
example of such server is an excellent ISC BIND software. Version used during writing of this
documentation was BIND 9.7.2. It is necessary to allow listening on the IPv6 sockets and define
that specific domain can be updated. See example below.
2. Configure Dibbler server to provide DNS server informations for clients. DNS Updates will be sent
to the first DNS server on the list of available servers.
Dibbler 1.0.1 User’s Guide 24
3. Configure Dibbler server to work in stateful mode, i.e. that it can provide addresses for the clients.
This is a default mode, so unless configuration was altered, this step is already done. Make sure
that there is no ,,stateless” keyword in the server.conf file.
4. Define list of the available names in the server configuration file. Make sure to use fully qualified
domain names (e.g. malcolm.example.com), not the hostnames only.
5. Configure dibbler client to request for DNS Update. Use ,,option fqdn” to achieve this.
Note that only server is allowed to perform PTR updates. After configuration, client and/or server
should log following line, which informs that Dynamic DNS Update was completed successfully.
As of 0.8.0, both Dibbler server and client are using TCP connection for DNS Updates. Connections
are established over IPv6. There is no support for IPv4 connections. Server uses first DNS server address
specified in dns-server option. It is possible to use differentiate between DNS addresses provided to
clients and the one used for DDNS. To override DNS updates to be performed to different address, use
the following command:
fqdn-ddns-address 2001:db8:1::1
zone "example.com" {
type master;
file "example.com";
allow-update { any; };
allow-transfer { any; };
allow-query { any; };
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.ip6.arpa" {
type master;
file "rev-2000";
allow-update { any; };
allow-transfer { any; };
allow-query { any; };
Below are examples of two files: forward and reverse zone. First example presents how to configure
normal domain. As an example there is entry provided for zoe.example.com host, which has 2000::123
address. Note that you do not have to manually configure such entries – dibbler will do this automatically.
It was merely provided as an example, what kind of mapping will be done in this zone.
;
$ORIGIN .
$TTL 86400 ; 1 day
example.com IN SOA v13.klub.com.pl. root.v13.klub.com.pl. (
129 ; serial
7200 ; refresh (2 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS v13.klub.com.pl.
A 1.2.3.4
TXT "Fake domain used for Dibbler tests."
$ORIGIN example.com.
$TTL 7200 ; 2 hours
zoe AAAA 2000::123
Second example presents zone file for reverse mapping. It contains entries for a special zone called
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.ip6.arpa. This zone represents 2000::/64 address space. As an example there
is a static entry, which maps address 2000::999 to a canonical name kaylee.example.com. Note that you do
not have to manually configure such entries – dibbler will do this automatically. It was merely provided
as an example, what kind of mapping will be done in this zone.
; rev-2000 example file
$ORIGIN .
$TTL 259200 ; 3 days
Note: Due to page width limitation, if the example above, two lines were split.
For ease of configuration, dibbler uses the same key syntax in its config file as ISC BIND9 does. In
particular, all statements are finished with a semicolon. For example, the minimal set of commands to
configure a key look like the following:
key "DDNS\_UPDATER" {
secret "9SYMLnjK2ohb1N/56GZ5Jg==";
algorithm hmac-md5;
};
Please keep in mind that TSIG signatures are time sensitive and they are valid only for specified amount
of time. Therefore it is essential that your Dibbler server and your DNS server have well synchronized
clocks. It is recommented to use NTP for that purpose. By default, the signature is valid for 300 seconds.
This parameter is called a fudge. It can be modified to a different value, if needed. Shorter value is
better from the security perspective as it shortens the window of potential replay attack. Longer values
are better from the convenience perspective, as they are more “forgiving” to clock skew. The maximum
allowed value here is 65535 seconds. Please note that such a large value is not reasonable.
An example with the fudge value set to 250 is presented below:
key "DDNS\_UPDATER" {
secret "9SYMLnjK2ohb1N/56GZ5Jg==";
algorithm hmac-md5;
fudge 250;
};
Any DNS server that supports DNS Updates ([2]) and TSIG ([3]) must support HMAC-MD5 signa-
tures. Following paragraph explains how to configure HMAC-MD5 key for ISC BIND9. There are at
least three steps that has to be done to achieve forward (AAAA) and reverse (PTR) updates to function
properly.
First step is to add a key. Use the same key definition that was included in your Dibbler server.conf.
Add it to BIND9 config file. Its location varies between systems, but it often /etc/bind/named.conf or
similar. You should also modify your zone and reverse zone to accept updates from this new key. Make
sure that you do not define fudge parameter, as it is not supported by BIND9. Part of the named.conf
that contains related changes looks as follows:
key "DDNS\_UPDATER" {
Dibbler 1.0.1 User’s Guide 28
secret "9SYMLnjK2ohb1N/56GZ5Jg==";
algorithm hmac-md5;
};
zone "example.org" {
type master;
file "/path/to/your/zonefile";
allow-update { key DDNS\_UPDATER; };
allow-query { any; };
};
zone "0.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa" {
type master;
file "/path/to/your/zonefile";
allow-update { key DDNS\_UPDATER; };
allow-query { any; };
}
In case of any problems, please refer to BIND 9 Administrator Reference Manual, available on Internet
Systems Consortium website.
• See example server and client configuration files described in a sections 6.8.7 and 5.3.10. Also note
that Dibbler distribution should be accompanied with several example configuration files. Some of
them include FQDN usage examples.
• Make sure that unix user, which runs BIND, is able to create and write file example.com.jnl. When
BIND is unable to create this journal file, it will fail to accept updates from dibbler and will report
failure. Check BIND log files, which are usually stored in the /var/log/ directory.
• Make sure that you have routing configured properly on a host, which will attempt to perform DNS
Update. Use ping6 command to verify that DNS server is reachable from this host.
• Make sure that your DNS server is configured properly. To do so, you might want to use nsupdate
tool. It is part of the BIND distribution, but it is sometimes distributed separated as part of
the dnsutils package. After executing nsupdate tool, specify address of the DNS server (server
command), specify update parameters (update command) and then type send. If nsupdate return
a command prompt, then the update was successful. Otherwise nsupdate will print DNS server’s
response, e.g. NOTAUTH of SRVFAIL. See below for examples of successful forward (AAAA record)
and reverse (PTR record) updates.
• After DNS Update is performed, DNS records can be verified using dig command line tool (a part of
the dnsutils package). Command syntax is: dig @(dns-server-address) name record-type. In
Dibbler 1.0.1 User’s Guide 29
the following example, this query checks for name jayne.example.com at a server located at 2000::1
address. Record type AAAA (standard record for resolving name into IPv6 address) is requested.
dig tool provides server’s response in the ANSWER SECTION:. See example log below.
• In example BIND configuration above, zone transfers, queries and updates are allowed from any-
where. To make this configuration more secure, it might be a good idea to allow updates only from
a certain range of addresses or even one (DHCPv6 server’s) address only.
Note: Everything between ”update” and ”picard.example.com” must be typed in one line.
And here is an example dig session:
v13:/var# dig @2000::1 jayne.example.com AAAA
; <<>> DiG 9.3.2 <<>> @2000::1 jayne.example.com AAAA
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33416
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; QUESTION SECTION:
;jayne.example.com. IN AAAA
;; ANSWER SECTION:
jayne.example.com. 7200 IN AAAA 2001::e4
;; AUTHORITY SECTION:
example.com. 86400 IN NS v13.klub.com.pl.
sometimes allow client’s own domain names. Server does not know anything about such names, thus its
nickname ”Unknown FQDN”.
There are several actions that server can do, when unknown FQDN is received. To configure such
support for unknown FQDNs, accept-unknonwn-fqdn option can be defined on an interface. Depending
on its, value, it may bave domain name as a parameter. For example:
iface "eth0" {
option fqdn 1 64
zebuline.example.com - 2000::1,
kael.example.com - 2000::2,
wash.example.com - 0x0001000043ce25b40013d4024bf5,
zoe.example.com,
malcolm.example.com,
kaylee.example.com,
jayne.example.com,
inara.example.com
# specify what to do with client’s names that are not on the list
# 0 - reject
# 1 - send other name from allowed list
# 2 - accept any name client sends
# 3 - accept any name client sends, but append specified domain suffix
# 4 - ignore client’s hint, generate name based on his address, append domain name
accept-unknown-fqdn 4 foo.bar.pl
classes have equal probability of being chosen. However there are cases where an Administrator wants
to restrict access to a given pool or to have distinct ”client classes” associated to different address pools.
For example, Computer and IP-Telephone terminals can coexist in the same LAN ; but the Computer
must belong to given class pool meanwhile the IP-Telephone must belong to another pool.
In order to implement the Client Class Classification, you must first create the client class and then in
the class declaration, indicate which class to be allowed or denied. This point will be discussed in detail
in next sections.
Where TelephoneClass denotes the name of the client class and the (client.vendor-spec.en == 1234567)
denotes the condition an incoming message shall match to belong to the Client-Class. The supported
operator and data will be discussed in next section.
Another example. This class accepts only client belonging to the client class ”TelephoneClass”.
class {
2000::/64
allow TelephoneClass
}
The rule can also be applied to TA/PD declaration. Several ”allow” directives can be associated to a
given pool.
ta-class {
pool 2000::/64
deny TelephoneClass
}
pd-class {
pd-pool 2000::/80
pd-length 96
deny TelephoneClass
}
Dibbler 1.0.1 User’s Guide 32
And Operator
Syntax : ( Condition1 and Condition2 )
Scope : global
Purpose : returns "true" if both Condition1 and Condition2 are "true"
Or operator
Syntax : ( Condition1 or Condition2 )
Scope : global
Purpose : returns "true" if either Condition1 or Condition2 is "true"
Contain Operator
Syntax : ( String1 contain String2 )
Scope : global
Purpose : returns "true" if String2 is a substring of String1
Substring Operator
Syntax substring ( Expr1, index, length )
Scope : global
Purpose : returns the substring of the result of that evaluation
that starts index characters from the beginning, continuing for
length characters.
Dibbler accepts different data expressions – or variables – which reflect value of options found in the
packet to which the server is responding.
Client belongs to CPEClass if its request message contains the Vendor Specific option with the data field
including the substring ”CPE”.
Example 2 : Combination with AND operator
Client-class TelephoneClass {
match-if (( client.vendor-spec.en == 1234) and ( client.vendor-spec.data contain CPE ) )
}
4
Please send your feedback to mailing list if you need it also on client-side.
Dibbler 1.0.1 User’s Guide 34
iface eth0 {
ia
}
4.9 Reconfiguration
Once DHCPv6 clients receive their configuration, they are not communicating with the server until
T1 timer expires. If the network configuration changes before that time, it may be useful in some cases
to inform that the clients should start reconfiguration process now, rather than wait till T1. To address
this problem, DHCPv6 offers reconfigure mechanism.
First, clients are informing the server that they are supporting reconfiguration process by sending
RECONFIGURE-ACCEPT in their SOLICIT messages. Configuration then proceeds as usual, but the
server includes AUTH option in the REPLY message with a randomly generated reconfigure-key. The
client then knows that if it receives any RECONFIGURE message, it will be signed using HMAC-MD5
generate with that particular key. That is a protection against rogue DHCPv6 servers, as the only server
that is allows to trigger reconfiguration is the one who originally provided the configuration.
The aforementioned example assumes that the default reconfigure-key authentication is used. It is
also possible to sign RECONFIGURE using delayed auth or Dibbler authentication protocol.
During start-up, the server will load its lease database and will check whether loaded database matches
existing configuration. In particular, it will check if the addresses clients have still belong to the configured
subnets. If the server detects and outdated configuration, it will send RECONFIGURE informing the
client that it must start reconfiguration process.
Clients by default have reconfigure support disabled. To enable it, use reconfigure-accept directive.
When enabling reconfigure support, it is strongly recommended to enable one of authentication methods,
e.g. reconfigure-key. See section 4.17 for detailed discussion about authentication. A short example that
has reconfigure enabled looks like this:
# client.conf - with reconfigure and reconfigure-key enabled
reconfigure-accept 1
auth-protocol reconfigure-key
auth-replay monotonic
auth-methods digest-hmac-md5
iface eth0 {
ia
}
obey-ra-bits
iface eth0 {
ia
option dns-server
}
Without obey-ra-bits enabled, it would simply send SOLICIT with one IA NA option (i.e. requesting
non-temporary address) and ORO requesting DNS-SERVER configuration. If there is RA received with
M=0, O=0, then Dibbler will not send anything and will simply wait till RA with at least one of M or
O bits is received. If RA is received with M=0, O=1, then Dibbler will request “other” configuration
options, i.e. all those that are not stateful or in other words any type of IA will not be sent. Dibbler will
send INFORMATION-REQUEST with ORO requesting DNS-SERVERS. With M=1, O=0 Dibbler will
send a SOLCIT only request an address, but will not ask for DNS-SERVERS. Finally, with M=1, O=1
Dibbler will send SOLICIT asking for both an address and DNS-SERVERS.
It should be noted that Dibbler will assess M,O bits only during start-up or while enabling an inter-
face. It will not monitor any possible future changes in those bits (e.g. as a result of receiving Router
Advertisement with updated flags).
of them is not within the pools, do not respond (because the server does not have enough knowledge to
authoritatively say that they are not valid).
4.12 Mobility
Client can also be compiled with support for link change detection. The intended use for this feature is
mobility. Client is able to detect when it moves to new link and react accordingly. Client sends CONFIRM
message to verify that its currently held address is still usable on this new link.
4.13 Leasequery
Servers provide addresses, prefixes and other configuration options to the clients. Sometime adminis-
trators may want to obtain information regarding certain leases, e.g. who has been given a specific address
or what addresses have been assigned to a specific client. This mechanism is called Leasequery [21]. New
DHCPv6 participant called requestor has been defined. Its sole purpose is to send queries and receive
responses. Dibbler provides example implementation. To define a query, command line parameters are
used.
There are two types of queries: by address (”who leases this address?”) and by client identifier (”what
addresses has this client?”). To specify one of such types, -addr or duid command-line switches can be
used. It is also mandatory to specify (using -i IFACE), which interface should be used to transmit the
query.
Here is a complete list of all command-line switches:
Example query 2: Which addresses are assigned to client with specific client identifier?
dibbler-requestor -i eth0 -duid 00:01:00:01:0e:8d:a2:d7:00:08:54:04:a3:24
stateless – when only parameters are configured (without assigning addresses to a client). During
execution of this type of configuration, only two messages are exchanged: INF-REQUEST and
REPLY.
During normal operation, client works in a stateful mode. If not instructed otherwise, it will request
one or more normal (i.e. non-temporary) address. It will use IA option (Identity Association for Non-
temporary Addresses, see [5] for details) to request and retrieve addresses. Since this is a default behavior,
it does not have to be mentioned in the client configuration file. Nevertheless, it can be provided:
# client.conf
iface eth0 {
ia
option dns-server
}
In a specific circustances, client might be interested in obtaining only temporary addresses. Although
this is still a stateful mode, its configuration is sligtly different. There is a special option called TA
(Identity Association for Temporary Addresses, see [5] for details). This option will be used to request
and receive temporary addresses from the client. To force client to request temporary addresses instead
of permanent ones, ta keyword must be used in client.conf file. If this option is defined, only temporary
address will be requested. Keep in mind that temporary addresses are not renewed.
# client.conf
iface eth0 {
ta
option dns-server
}
It is also possible to instruct client to work in a stateless mode. It will not ask for any type of addresses,
but will ask for specific non-address related configuration parameters, e.g. DNS Servers information. This
can be achieved by using stateless keyword. Since this is a global parameter, it is not defined on any
interface, but as a global option.
# client.conf
stateless
iface eth0
{
option dns-server
}
Some of the cases mentioned above can be used together. However, several combinations are illegal.
Here is a complete list:
none – When no option is specified, client will assume one IA with one address should be requested.
Client will send ia option (stateful autoconfiguration).
ia,ta – When both options are specified, client will request for both - Non-temporary as well as Temporary
addresses (stateful autoconfiguration).
stateless – Client will request additional configration parameters only and will not ask for addresses
(stateless autoconfiguration).
• if the client provided hint, it is valid (i.e. is part of the supported address pool) and not used, then
assign requested address.
• if the client provided hint, it is valid (i.e. is part of the supported address pool) but used, then
assign free address from the same pool.
• if the client provided hint, but it is not valid (i.e. is not part of the supported address pool, is
link-local or a multicast address), then ignore the hint completety.
• if the did not provide valid hint (or provided invalid one), try to assign address previously assigned
to this client (address caching)
• if this is the first time the client is seen, assign any address available.
• server-CfgMgr.xml – Represents information read from a configuration file, e.g. available address
pool or DNS server configuration.
• server-IfaceMgr.xml – Represens detected interfaces in the operating system, as well as bound sockets
and similar information.
• server-AddrMgr.xml – This is database, which contains identity associations with associated ad-
dresses.
• server-cache.xml – Since caching is implemented by the server only, this file is only created by the
server. It contains information about previously assigned addresses.
1. Replay detection – Dibbler is able to detect whether the messages are being new or replayed. It
implements the Replay Detection mechanism described in Section 21.3 of [5].
Dibbler 1.0.1 User’s Guide 39
2. Reconfigure Key Authentication protocol – Dibbler supports reconfiguration mechanism since 1.0.0.
Reconfiguration requires that the server generates a random key when configuring clients. That
key is later used by server and client to verify if the reconfigure request really comes from the ligit
server, not a rogue one. This mechanism uses HMAC-MD5 digests. This mechanism is described
in Section 21.5 of [5].
3. Delayed Authentication protocol – It is possible to pre-provision clients with keys and configure the
server to use them to sign its messages. Client informs the server that it is capable of using this
method by sending empty AUTH option in its SOLICIT message. The server then selects a key
and sends its key id to the client and signs its response. Then the client checks if it has a key with
matching key-id and then uses it to verify incoming packets and sign its own transmissions. This
mechanism uses HMAC-MD5 digests. That follows the mechanism specified in Section 21.4 of [5]
4. Dibbler protocol – Dibbler also supports its own, custom authentication extension. It is somewhat
similar to the delayed authentication, but has a number of advantages over it. First, it secures
the whole transmission, including initial SOLICIT message. Second, it offers much stronger di-
gests: HMAC-MD5, HMAC-SHA1, HMAC-SHA224, HMAC-SHA256, HMAC-SHA384 and HMAC-
SHA512. As this is Dibbler specific extension, it is not expected to inter-operate with any other
implementations. Third, it does not require to maintain strict client DUID-key-id bindings on the
server side, as clients send ID of the key they used to protect their transmissions.
iface eth0 {
class {
pool 2001:db8:1::/64
}
Dibbler 1.0.1 User’s Guide 40
auth-methods digest-hmac-md5
iface eth0 {
ia
}
iface eth0 {
ia
}
iface eth0 {
Dibbler 1.0.1 User’s Guide 41
class {
pool 2001:db8:1::/64
}
}
For a more fully featured example, see doc/examples/client-auth-reconf-key.conf for client and
doc/examples/server-auth-reconf-key.conf for server.
iface eth0 {
ia
}
iface eth0 {
class {
pool 2001:db8:1::/64
}
There is one additional step required. Server must be told which keys are to be used when communi-
cating with specific clients. That is specified using a separate file keys-mapping, which should be placed
in /var/lib/dibbler/AAA directory. The format of the file is simple. It is a text file. Each line consists
of a DUID followed by a coma, followed by key-id in hex notation. For example:
Dibbler 1.0.1 User’s Guide 42
00:01:02:03:04:06:07:08:09, 0x010203ff
00:04:ff:ab:cd:ef:09:87:65:a1:bc, 0xabcdef00
iface eth0 {
ia
}
iface eth0 {
class {
pool 2001:db8:1::/64
}
}
1. Administrator generates AAA-key-AAASPI file. AAASPI is an arbitrary chosen 32-bit number (as
described above). The file contains any AAA-key and can be administrator’s favorite poem or can
be simply generated using dd and /dev/urandom:
$ dd if=/dev/urandom of=AAA-key-b9a6452c bs=1 count=32
2. Administrator creates file AAA-SPI which contains previously chosen AAASPI. This file will be used
by the client only.
3. Administrator transfers AAA-SPI and AAA-key-AAASPI to the client, using some secure method (e.g.
mail+PGP, scp, https) to avoid sniffing the key by a potential attacker.
When configuration files are prepared and stored in client’s and server’s AAA directory you are ready
to use authentication. For detailed description of possible options see 6.7.
Dibbler 1.0.1 User’s Guide 44
When client asks for a vendor-specific info, server will send vendor-specific info option with enterprise
number set to 4491 and option-data will contain one sub-option with code 1027. The value of that option
will be 0x0013.
Although uncommon, it is also possible to specify multiple vendor options. Another server.conf
example:
option vendor-spec 4491-1027-0x0013,1234-5678-0x0002aaaa
Server algorithm for choosing, which vendor option should be sent, works as follows:
• When client requests for a speficic vendor (i.e. sends vendor-spec info option with vendor field set),
it will receive option for that specific vendor (i.e. requested 4491, got 4491).
• When client requests any vendor (i.e. sends only option request option with vendor-spec mentioned),
it will receive first vendor-spec info option from the list (i.e. 4491/1027/0x0013).
• When client requests for not supported vendor (i.e. 11111), it will receive first vendor-spec option
from the list (i.e. 5678/0002aaaa).
It is possible to configure Dibbler client to ask for vendor-specific info. Granted value will not be
used, so from the client’s point of view this feature may be used as testing tool for the server. Client can
request vendor-specific information option in one of the following ways:
option vendor-spec – Only option request option will be sent with vendor-spec info option mentioned.
option vendor-spec 1234 – option request option will be sent with vendor-spec info option mentioned,
but also vendor-spec info option with enterprise number set to 1234 will be sent.
option vendor-spec 1234 - 5678 – option request option will be sent with vendor-spec info option
mentioned, but also vendor-spec info option with enterprise number set to 1234 and sub-option
with code 5678 will be sent.
Dibbler 1.0.1 User’s Guide 45
Although that is almost never needed, it is possible to configure client to request multiple vendor-
specific options at the same time. That is also supported by the server. See 6.8.9 for examples.
However, if client sends requests for multiple vendor-specific options, which are not supported by the
server, for each sent option, server will assign one default vendor-spec option.
See 6.8.9 for client example and 5.3.11 for server examples.
• client will print information related to not ready interface, and will periodically (once in 3 seconds)
check interface state.
• dibbler-client will detect this and will initiate normal configuration process.
In the 0.6.1 version, similar feature has been introduced on the server side. See sections 6.8.13 and
5.3.15 for configuration examples.
• type 2 (enterprise number) – this DUID is based on the Private Enterprise Number assigned to
larger companies. Each vendor should maintain its own space of unique identifiers.
According to spec [5], it is recommended to use link-layer + time, if possible. That DUID type
provides most uniqueness. It has one major drawback – it is impossible to know DUID before it is actually
generated. That poses significant disadvantage to sysadmins, who want to specify different configuration
for each client. In such cases, it is recommended to switch to link-layer only (type 3) DUIDs.
During first executing dibbler-client will generate its DUID and store it in client-duid file on disk.
During next startup DUID will be read from the file, not generated.
It is possible to specify, what DUID format should be used. It is worth noting that such definition is
taken into consideration during DUID generation only, i.e. during first client execution. To specify DUID
type, put only one of the following lines in the client.conf file:
iface eth0 {
ia
option dns-server
}
When using link-layer+time or link-layer DUID types, dibbler will autodetect addresses. To generate
enterprise number-based DUID, specific data must be provided: enterprise-number (a 32-bit integer,
1234 in the example above) and a enterprise-specific indentifier of arbitrary length (56:78:9a:bc:de in the
example above).
it should not be used. In general, this configuration parameter is only useful when dealing with buggy
relays, which can’t handle all option orders properly. Consider this parameter a debugging feature.
Similar parameter is defined for the server. Server uses it during RELAY-REPL generation.
See description of the interface-id-order parameters in Server configuation (section 5) and Relay
configuration (section 7).
Be default, client will use those addresses in SOLICIT message only. When transmitting REQUEST
message, it will copy proposals from ADVERTISE message, received from a server. To force client to use
those specified addresses and/or prefixes also in REQUEST, please use insist-mode directive.
iface eth0 {
class {
pool 2001:db8::/64
}
}
If you are not satisfied with Dibbler performance, please submit patches or better yet, consider the
alternative: Kea (BIND10 DHCP) http://bind10.isc.org/wiki/Kea. It offer tremendous performance,
is open source and is being actively developed by a professional team. Its lead developer happen to be
Dibbler author as well :)
log-level 8
iface "eth0" {
ia {
addr-params
}
}
experimental
log-mode short
iface eth0 {
t1 60
t2 96
prefered-lifetime 120
valid-lifetime 180
class {
addr-params 80
pool 2001:458:ff01:ff03::/80
}
}
Following series of server.conf files demonstrate, how 3 servers can be configured to incorm client about
their 2 neighbors.
#server.conf for server1.
log-level 8
log-mode short
preference 2
experimental
iface "eth0" {
t1 1800
class {
pool 2001:db8:1111::/64
}
rapid-commit 1
unicast 2001:db8:1111::f
experimental
iface "eth1" {
unicast 2001:db8:2222::f
rapid-commit 1
class {
pool 2001:db8:2222::/64
}
log-level 8
preference 0
experimental
iface "eth1" {
unicast 2001:db8:3333::f
rapid-commit 1
Dibbler 1.0.1 User’s Guide 51
class {
pool 2001:db8:3333::/64
}
Client also needs to have enabled number of features. Following config file may serve as an example:
log-mode short
log-level 8
experimental
remote-autoconf
iface "eth0" {
ia
unicast 1
}
5 Server configuration
Server configuration is stored in server.conf file in the /etc/dibbler (Linux systems) or in current
(Windows systems) directory.
5.1 Scopes
Configuration file can be logically split into separate “sections” that are called scopes, for example
interface scope contains parameters related to configuration served over a given interface. Some scopes
can contain other scopes. Some commands are specific to a given a given scope.
or
iface number
{
interface-options
class-options
}
where interface-name denotes name of the interface and interface-number denotes its number.
Name no longer needs to be enclosed in single or double quotes (except Windows systems, when interface
name contains spaces). Note that virtual interfaces, used to setup relay support are also declared in this
way.
class
{
class-options
address-pool
}
Address pool defines range of the addresses, which can be assigned to the clients. It can be defined in
one of the following formats:
pool minaddress-maxaddress
pool address/prefix
OptionName option-value
work-dir – (scope: global). Takes one parameter of string type. Defines working directory.
log-level – (scope: global). Takes one integer parameter. Defines verbose level of the log messages. The
valid range is from 1 (very quiet) to 8 (very verbose). Those values are modelled after levels used
in syslog. These are: 1(Emergency), 2(Alert), 3(Critical), 4(Error), 5 (Warning), 6(Notice), 7(Info)
and 8(Debug). Currently Dibbler is using levels 3 to 8, as 1 and 2 are reserved for system wide
emergency events.
log-name – (scope: global). Takes one string parameter. Defines than name, which will be used during
logging.
log-mode – (scope: global). Takes one parameter that can be short, full, precise or syslog. Defines
logging mode. In the default, full mode, name, date and time in the h:m:s format will be printed. In
short mode, only minutes and seconds will be printed (this mode is useful on terminals with limited
width). Precise mode logs information with seconds and microsecond precision. It is a useful as
a performance diagnostic tool for finding bottlenecks in the DHCPv6 autoconfiguration process.
Syslog works under POSIX systems (Linux, Mac OS X, BSD family) and allows default POSIX
logging functions.
log-colors – (scope: global). Takes one boolean parameter. Defines if logs printed to console should use
colors. That feature is used to enhance logs readability. As it makes the log files messy on systems
that do not support colors, it is disabled by default. The default is off.
cache-size – (scope: global). Takes one parameter that specifies cache size in bytes. The default value
is 1048576 (1MB). It defines a size of the memory (specified in bytes) which can se used to store
cached entries.
stateless – (scope: global). It may be present or missing. The default is missing. Defines that server
should run in stateless mode. In this mode only configuration parameters are defined, not addresses
or prefixes. It is mutually exclusive with class, ta-class and pd-class. See Section 4.14.
interface-id-order – (scope: global). Take one parameter that can be one of before, after or omit.
The default is before. This parameter defines placement of the interface-id option. During message
relaying options can be placed in the RELAY-REPL message is arbitrary order. This option has
been specified to control that order. interface-id option can be placed before or after relay-message
option. There is also possibility to instruct server to omit the interface-id option altogether, but since
this violates [5], it should not be used. In general, this configuration parameter is only useful when
dealing with buggy relays, which can’t handle all option orders properly. Consider this parameter
a debugging feature. Note: similar parameter is available in the dibbler-relay.
experimental – (scope: global). Allows enabling experimental features. There are some highly-experimental
features present in Dibbler. To make a clear statement about their experimental nature, user is re-
quired to acknowledge that fact by putting this statement in its config file. This statement may be
present or absent. The default is absent.
inactive-mode – (scope: global, type: present or missing, default: missing). This enables so called
inactive mode. When server begins operation and it detects that required interfaces are not ready,
error message is printed and server exits. However, if inactive mode is enabled, server sleeps instead
and wait for required interfaces to become operational. That is a useful feature, when using wireless
interfaces, which take some time to initialize as associate.
Dibbler 1.0.1 User’s Guide 56
accept-leasequery – (scope: interface). Takes one boolean parameter that specifies if server should
support leasequery [21] protocol on a given interface. The default value is 0 (leasequery is not
supported by default). See Section 4.13.
guess-mode – (scope: global, type: present or missing, default: missing). Server tries to match incoming
relayed messages based on interface-id first. If that fails, it tries to match based on linkaddr field in
the RELAY-FORW message (see subnet keyword definition). Normally, when both of those match
attempts fail, the server will drop the packet. When guess-mode option is enabled, server will will
use first relay defined. It may save the day, if you have only one relay in your network, but it will
almost certainly do a wrong thing if you have more than one. This is as its name states: just a
guess. Use with caution!
script – (scope: global). Takes one string parameter that specifies name of a script that will be called
every time something important happens in a system, e.g. when address or prefix is assigned,
updated or released. See Section 4.8.
fqdn-ddns-address – (scope: global). Takes one parameter that specifies address of DNS server that
will be used for DNS Updates. See Section 4.6.
ddns-protocol – (scope: global). Takes one string parameter. Defines protocol that should be used
during DNS Update mechanism. Allowed values are tcp, udp and any. Any means that UDP will
be tried first and if it fails, update will be retried over TCP. See Section 4.6.
ddns-timeout – (scope: global). Takes one integer parameter that specifies timeout in milliseconds.
Defines how long client should wait for DNS server response during DNS Update before declaring
update a failure. See Section 4.6.
subnet – (scope: interface). This definition must be followed by a IPv6 address followed by slash followed
prefix length (e.g. 2001:db8::/32). It defines all IPv6 addresses that are valid on a given interface.
It is used mainly for matching relayed traffic and responding to confirm messages. Server will not
use that whole range to assign addresses. That is specified with class, ta-class or pd-class.
class – (scope: interface). This definition must be followed by curly braces and creates a new address
class scope. See Section 5.1.3.
pd-class – (scope: interface). This definition must be followed by curly braces and creates a new prefix-
delegation class scope. See Section 5.1.4.
ta-class – (scope: interface). This definition must be followed by curly braces and creates a new tempo-
rary address class scope. See Section 5.1.5.
next-hop – (scope: interface). This definition takes one parameter that defines IPv6 address of a router.
Without any further parameters, it conveys an information about default route for bandwidth
limited networks. That mode is discouraged, unless there are significant bandwith limitations. It is
usually followed by curly braces that create a new route scope. See Section 5.1.6.
preference – (scope: interface, type: 0-255, default: none). Eech server can be configured to a spe-
cific preference level. When client receives several ADVERTISE messages, it should choose that
server, which has the highest preference level. It is also worth noting that client, upon reception
of the ADVERTISE message with preference set to 255 should skip wait phase for possible other
ADVERTISE messages.
unicast – (scope: interface, type: address, default:none). Normally clients sends data to a well known
multicast address. This is easy to achieve, but it wastes network resources as all nodes in the network
Dibbler 1.0.1 User’s Guide 57
must process such messages and also network load is increased. To prevent this, server might be
configured to inform clients about its unicast address, so clients, which accept it, will switch to a
unicast communication.
rapid-commit – (scope: interface, type: boolean, default: 0). This option allows rapid commit proce-
dure to be performed. Note that enabling rapid commit on the server side is not enough. Client
must be configured to allow rapid commit, too.
iface-max-lease – (scope: interface, type: integer, default: 232 − 1). This parameter defines, how many
normal addresses can be granted on this interface.
client-max-lease – (scope: interface, type: interger, default:232 − 1). This parameter defines, how many
addresses one client can get. Main purpose of this parameter is to limit number of used addresses
by misbehaving (malicious or restarting) clients.
relay – (scope: interface). Takes one string or integer parameter that designated interface name or
interface index. It is used in relay definition. It specifies name of the physical (or name of another
relay, if cascade relaying is used) interface, which is used to receive and transmit relayed data. See
4.2 for details of relay deployment and sections 5.3.8 and 5.3.9 for configuration examples.
interface-id – (scope: interface, type: integer, default: not defined). Used in relay definition. Each relay
interface should have defined its unique identified. It will be sent in the interface-id option. Note
that this value must be the same as configured in the dibbler-relay. It may be possible to specify
this parameter by using a number (option will be 4 bytes long), a string or a hex of arbitrary length
(please use the same format as for DUID). See 4.2, 5.3.8 and 7.4 for details.
vendor-spec – (scope: interface, type: integer-hexstring, regular string or an IPv6 address, default:
not defined). This parameter can be used to configure some vendor-specific information option.
Since there are no dibbler-specific options, this implementation is flexible. User can specify in the
configuration file, how should this option look like. See 5.3.11 section for details. It is uncommon, but
possible to define several vendor specific options for different vendors. In such case, administrator
must specify coma separated list. Each list entry is a vendor (enterprise number), ,,–” sign and a
hex dump (similar to DUID).
pool – (scope: class). Takes coma separated IPv6 address ranges. Each range is defined as first-address,
a dash and a second address. Defines a range of available addresses that will be assigned in specific
class. An example pool definition looks like this:
pool 2001:db8:abcd:: - 2001:db8:abcd::ffff
pd-pool – (scope: pd-class). Takes coma separated IPv6 address ranges. Each range is defined as fist-
address, a dash and a second address. Defines a range of available prefixes (only prefixes themselves,
not their lengths) that will be assigned in specific class. An example pd-pool definition looks like
this:
pd-pool 2001:db8:abcd:: - 2001:db8:abcd::ffff
share – (scope: class). Defines percentage of clients that a class should handle. This parameter is only
useful if there are more then one class defined. See Section 5.3.7.
Dibbler 1.0.1 User’s Guide 58
T1 – (scope: class, type: integer or integer range: default: 232 − 1). This value defines after what time
client should start renew process. Exact value or accepted range can be specified. When exact value
is defined, client’s hints are ignored completely.
T2 – (scope: class, type: integer or integer range, default:232 − 1). This value defines after what time
client will start emergency rebind procedure if renew process fails. Exact value or accepted range
can be specified. When exact value is defined, client’s hints are ignored completely.
valid-lifetime (scope: class, type: integer or integer range, default:232 −1). This parameter defines valid
lifetime of the granted addresses. If range is specified, client’s hints from that range are accepted.
preferred-lifetime (scope: class, type: integer or integer range, default:232 − 1). This parameter defines
prefered lifetime of the granted addresses. If range is specified, client’s hits from that range will be
accepted.
class-max-lease – (scope: interface, type: interger, default:232 − 1). This parameter defines, how many
addresses can be assigned from that class.
reject-clients – (scope: class, type: address or DUID list, default: none). This parameter is sometimes
called black-list. It is a list of a clients, which should not be supported. Clients can be identified by
theirs link-local addresses or DUIDs.
accept-only – (scope: class, type: address or DUID list, default: none). This parameter is sometimes
called white-list. It is a list of supported clients. When this list is not defined, by default all clients
(except mentioned in reject-clients) are supported. When accept-only list is defined, only client
from that list will be supported.
drop-unicast – (scope: global). In general, clients are supposed to send their messages to multicast,
unless the server explicitly allows unicast. [5] says that packets sent to unicast should be dropped
and server must respond with status code set to UseMulticast. That’s a bit harsh in author’s
opinion, so this behavior is not set by default. However, if you want strict RFC compliance, you
can enable this by adding drop-unicast in your global scope.
addr-params – (scope: class). Experimental feature that takes one boolean parameter. It defines prefix
length that is configured in addr-params option. See Section 4.24.2 for details and warnings.
performance-mode – (scope: global). Experimental feature that boosts server performance. It takes
one integer parameter with 0 or 1 control whether performance mode is to be enabled or disabled.
The default is 0 (disabled). Use with caution. See Section 4.24.1 for details and warnings.
reconfigure-enabled – (scope: global). This directive controls whether server will attempt to send
RECONFIGURE message at start or not. It takes one integer parameter with allowed values being
0 or 1. The default is 0 (disabled).
allow – (scope: class). Specifies that clients that belong to a specific client class are allowed to use that
address class. Takes one string parameter that defines client class name. See Section 4.7.
deny – (scope: class). Specifies that clients that belong to a specific client class are denied use of that
address class. Takes one string parameter that defines client class name. See Section 4.7.
option dns-server – (scope: interface, type: address list, default: none). This option conveys informa-
tion about DNS servers available. After retriving this information, clients will be able to resolve
domain names into IP (both IPv4 and IPv6) addresses. Defined in [7].
Dibbler 1.0.1 User’s Guide 59
option domain – (scope: interface, type: domain list, default: none). This option is used for configuring
one or more domain names, which clients are connected in. For example, if client’s hostname is
alice.mylab.example.com and it wants to contact bob.mylab.example.com, it can simply refer
to it as bob. Without domain name configured, it would have to use full domain name. Defined in
[7].
option ntp-server – (scope: interface, type: address list, default: none). This option defines informa-
tion about available NTP servers. Network Time Protocol [1] is a protocol used for time synchro-
nisation, so all hosts in the network has the same proper time set. Defined in [14].
option time-zone – (scope: interface, type: timezone, default: none). It is possible to configure time-
zone, which is provided by the server. Note that this option is considered obsolete as it is mentioned
in draft version only [32]. Work on this draft seems to be abandoned as similar functionality is
provided by now standard [14].
option sip-server – (scope: interface, type: address list, default: none). Session Initiation Protocol [4] is
an control protocol for creating, modifying, and terminating sessions with one or more participants.
These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences.
Its most common usage is VoIP. Format of this option is defined in [6].
option sip-domain – (scope: interface, type: domain list, default: none). It is possible to define domain
names for Session Initiation Protocol [4]. Configuration of this parameter will ease usage of domain
names in the SIP protocol. Format of this option is defined in [6].
option nis-server – (scope: interface, type: address list, default: none). Network Information Service
(NIS) is a Unix-based system designed to use common login and user information on multiple
systems, e.g. universities, where students can log on to ther accounts from any host. Its format is
defined in [11].
option nis-domain – (scope: interface, type: domain list, default: none). Network Information Service
(NIS) can albo specify domain names. It can be configured with this option. It is defined in [11].
option nis+-server – (scope: interface, type: address list, default: none). Network Information Service
Plus (NIS+) is an improved version of the NIS protocol. This option is defined in [11].
option nis+-domain – (scope: interface, type: domain list, default: none). Similar to nis-domain, it
defines domains for NIS+. This option is defined in [11].
option lifetime – (scope: interface, type: boolean, default: no). Base spec of the DHCPv6 protocol
does offers way of refreshing addresses only, but not the options. Lifetime defines, how often client
should renew all its options. When defined, lifetime option will be appended to all replies, which
server sends to a client. If client does not support it, it should ignore this option. Format of this
option is defined in [13].
option fqdn – (scope: interface). Takes 0, 1 or 2 integer parameters that are followed by FQDN list.
Additional integer parameters designate fqdn-mode and reverse zone length in DNS Update. FQDN-
mode can have 3 values: 2 (both AAAA and PTR record will be updated by server), 1 (server will
update PTR only) or 0 (server will not update anything). Reverse zone length is an integer between
0 and 128 and designates reverse zone length. FQDN list is a coma separated list of fully qualified
domain names, with possible reservations for DUIDs or addresses. FQDN mechanism is defined in
[16]. See Section 4.6.
accept-unknown-fqdn – (scope: Interface). Takes one integer parameter, possibly followed by second
string parameter that designated domain name. It specifies how server should react to incoming
Dibbler 1.0.1 User’s Guide 60
FQDN options that contain names that are unknown to the server. Allowed values are 0 (reject),
1 (send other name from allowed list), 2 (accept any name client sends), 3(accept any name client
sends, but append specified domain suffix) and 4 (ignore client’s hint, generate name based on his
address, append domain name). Choices 3 and 4 require additional string parameter that defines
domain suffix. See Sections 4.6 and .
option – (scope: interface). Takes one integer number followed by several possible parameter combina-
tions. It defines custom option that server may send out to clients. Supported formats are:
option number - DUID
option number address-keyword address
option number address-list
option number string-keyword string
Where number is an integer that defined option type, DUID is a hex-formatted string that defines
option content, address-keyword is a word “address”, address is an IPv6 address, address-list is
coma separated list of addresses, string-keyword is a word “string” and string is any string enclosed
in single or double quotes. See Section 4.5 and 5.3.20.
option aftr – (scope: interface, type: FQDN). In Dual-Stack Lite networks, client may want to configure
DS-Lite tunnel. Client may want to obtain information about AFTR (a remote tunnel endpoint).
This option conveys a fully qualified domain name of the remote tunnel. This option is defined in
[24].
option neighbors – (scope: interface). Experimental feature for Remote Autoconfiguration. Do not
use it unless you know exactly what you are doing. Takes coma separated list of addresses. This
option requires experimental mode to be enabled. See Section 4.24.3.
auth-protocol – (scope: global, type: string, default: none). This is a crucial parameter that spec-
ifies which authorization/authentication protocol is used. Allowed values are: none, delayed,
reconfigure-key and dibbler. See section 4.17 for details.
auth-methods – (scope: global, type: string, default: empty). This a coma separated list of one or
more methods. The first one on the list will specify the default method, while the others list
accepted methods when receiving data from clients. Set it to one or more of the following values
to enable authentication on ther server side, using selected method of generating authentication
information: none, digest-plain, digest-hmac-md5, digest-hmac-sha1, digest-hmac-sha224,
digest-hmac-sha256, digest-hmac-sha384, and digest-hmac-sha512.
auth-replay – (scope: global, type: string, default: none). Specifies which replay detection methods are
supported. Currently two values are implemented: none and monotonic.
auth-required – (scope: global, type: boolean, default: 0). This parameter specifies if the client is
required to authenticate itself. When set to 0, any client authentication failures (invalid signature
or lack of AUTH option) will result in a warning only. When set to 1, such messages will be dropped.
client-class – (scope: global). Takes one string parameter that defines name of a client class. Client
class name is followed by curly brackets that create client-class scope. Clients can be grouped into
classes depending on rules defined in client-class. This can be used together with allow and deny
to assign segregate clients into different groups. See Section 4.7 for overview and Section 5.2.1 for
list of supported expressions.
address – (scope: client). Takes one parameter that specifies address. It instructs server to reserve this
particular address for defined client. See Sections 4.18 and 5.3.12 for details.
Dibbler 1.0.1 User’s Guide 61
prefix – (scope: client). Takes one parameter that specifies prefix using prefix/length notation. It
instructs server to reserve specified prefix for defined client. See Sections 4.18 and 5.3.12 for details.
key – (scope: global). Take one string parameter that specifies key name. This keyword instructs server
to create a key with a specified name. This key will be used for TSIG in DNS Updates. It is followed
by curly braces that open up a new key scope. Closing curly brace is followed by a semicolon.
secret – (scope: key). Takes one string parameter and is followed by a semicolon. That parameter is a
base64-encode secret value of the key. It is mandatory if key scope is defined.
algorithm – (scope: key). Takes one enum argument that is followed by a semicolon. This parameter
is mandatory if the key scope is present. It specifies agorithm for the key. Currently the supported
value is hmac-md5.
fudge – (scope: key). Takes one integer parameter that is followed by a semicolon. Each TSIG signature
is valid for a specified amount of time only. This optional parameter specifies period in which TSIG
is valid, expressed in seconds. If missing, the default value of 300 is used. The allowed values are
between 0 and 65535.
== – (scope: client-class).
or – (scope: client-class).
# server.conf
iface eth0
{
class
{
pool 2000::100-2000::10f
}
}
}
}
reject-clients ‘‘00001231200adeaaa’’
2000::2f-2000::20 // it’s in reverse order, but it works.
// just a trick.
}
}
iface eth1
{
class
{
accept-only fe80::200:39ff:fe4b:1abc
pool 2000::fe00-2000::feff
}
}
iface eth0 {
T1 1000
T2 2000
class {
share 100
pool 4000::1/80
}
class {
share 200
pool 2000::1-2000::ff
}
class {
share 300
pool 3000::1234:5678/112
}
}
Dibbler 1.0.1 User’s Guide 65
class {
pool 2001:db8:1111::1-2001:db8:1111::ff
}
option dns-server 2001:db8::100,2001:db8::101
}
iface relay2 {
relay eth1
Dibbler 1.0.1 User’s Guide 66
class {
pool 2001:db8:2222::1-2001:db8:2222::ff
}
option dns-server 2001:db8::100,2001:db8::101
}
iface relay2
{
relay relay1
interface-id 6021
T1 1000
T2 2000
class {
pool 6020::20-6020::ff
}
}
Dibbler 1.0.1 User’s Guide 67
log-level 8
iface "eth0" {
# specify what to do with client’s names that are not on the list
# 0 - reject
# 1 - send other name from allowed list
# 2 - accept any name client sends
# 3 - accept any name client sends, but append specified domain suffix
# 4 - ignore client’s hint, generate name based on his address, append domain name
accept-unknown-fqdn 4 example.org
Dibbler 1.0.1 User’s Guide 69
In some rare cases, several different options for different vendors may be specifed. In the folloging
example 2 different values are defined, depending on which vendor client will specify in SOLICIT or
REQUEST message. If client will only mention that it is interested in any vendor specific into (i.e. did
not sent vendor-spec info option, but only mentioned in in option request option, it will receive first vendor
option defined (in the following example, that would be a 1234 and 0002fedc).
# server.conf
log-level 8
log-mode precise
iface "eth1" {
class {
pool 2000::1-2000::ff
}
iface "eth0" {
class {
pool 2001:db8:1::/64
}
pd-class {
pd-pool 2001:db8:2::/48
pd-length 64
}
The following example shows out of pool reservation. Regular clients will get addresses from the
2001:db8:123::/64 pool. However, the client with DUID 00:01:00:0a:0b:0c:0d:0e:0f will get an 2002::babe
address that does not belong to any configured pool. That particular client with get parameters from the
interface on which this exception was defined. In this discussed example, what will be t1=1000, t2=2000,
preferred-lifetime=3000 and valid-lifetime=4000.
iface eth0 {
t1 1000
t2 2000
preferred-lifetime 3000
valid-lifetime 4000
class { pool 2001:db8:123::/64 }
client duid 00:01:00:0a:0b:0c:0d:0e:0f {
address 2002::babe
}
Dibbler 1.0.1 User’s Guide 72
iface "eth0" {
iface "eth0" {
T1 1800
T2 2700
prefered-lifetime 3600
valid-lifetime 7200
pd-class {
pd-pool 2222:2222:2222:2222:2222::/80
pd-pool 1111:1111:1111:1111:1111::/80
pd-length 96
T1 11111
T2 22222
}
log-level 8
inactive-mode
iface "eth0" {
class {
pool 2000::/64
}
}
log-level 8
iface "eth0" {
accept-leasequery
class {
pool 2000::/64
}
}
# server.conf
auth-protocol dibbler
auth-replay monotonic
auth-methods digest-hmac-sha512
auth-required 1
iface eth0 {
class {
pool 2000::100-2000::10f
}
}
iface relay1 {
relay eth1
interface-id 5020
class {
pool 2000::1-2000::ff
}
option dns-server 2000::100,2000::101
}
class {
6 Client configuration
This section describes Dibbler server, relay and client configuration. Square brackets denotes optional
values: mandatory [optional]. Alternative is marked as |. A | B means A or B. Parsers are case-insensitive,
so Iface, IfAcE, iface and IFACE mean the same. This does not apply to interface names. eth0 and ETH0
are dwo diffrent interfaces.
string – string of arbitrary characters enclosed in single or double quotes, e.g. ’this is a string’. If string
contains only a-z, A-Z and 0-9 characters, quotes can be omited, e.g. beeblebrox
DUID identifier – hex number starting with 0x, e.g. 0x12abcd. In Dibbler version 0.8.0RC1, another
format was introduced: 2 hex digits separated by colon, e.g. 12:aa:bb:cc:d5. As this format may
in some cases be confused with IPv6 address, the old format (starting with 0x) remains to be
supported.
IPv6 address list – IPv6 addresses separated with commas, e.g. 2001:db8:1::face:b00c, fe80::abcd:1234,::1
boolean – YES, NO, TRUE, FALSE, 0 or 1. Each of them can be used, when user is expected to enable
or disable specific option.
6.2 Scopes
There are four scopes, in which options can be specified: global, inteface, IA and address. Every
option is specific for one scope. Each option is only applied to a scope and all subscopes in which it is
defined. For example, T1 is defined for IA scope. If there are several interfaces and each has several
address classes, repeating the same T1 value many time may be a bit awkward. Therefore parameters
can be also used in more common scopes. In this case – in interface or global. Defining T1 in interface
scope means: ,,for this interface the default T1 value is ...”. The same applies to global scope. Options
can be used multiple times. In that case value defined later is used.
Global scope is the largest. It covers the whole config file and applies to all intefaces, IAs, and
addresses, unless some lower scope options override it. Next scope is inteface. Options defined there are
inteface-specific and apply to a given interface, all IAs in this interface and addresses in those IAs. Next
is IA scope. Options defined there are IA-specific and apply to this IA and to addresses it contains. The
narrowest scope is address or prefix.
iface interface-name
{
interface-options
IA-options
address-options
}
or
iface interface-number
{
interface-options
IA-options
address-options
}
In the latter case, interface-number denotes interface index (or ifindex). It can be obtained from ip~l
(Linux), ipv6~if (Windows) or sometime ifconfig on other systems. interface-name is an interface
name. Name of the interface does not have to be enclosed in single or double quotes. It is necessary only
in Windows systems, where interface names sometimes contain spaces, e.g. ”local network connection”.
Interface scoped options can be used here. IA-scoped as well as address scoped options can also be used.
They will be treated as a default values for future definitions of the IA and address instantations.
6.2.2 IA declaration
IA is an acronym for Identity Association. It is a logical entity representing address or addresses used
to perform some functions. It is not suitable for prefixes (see Section 6.2.4). IA-options can be defined,
e.g. T1. IPv6 addresses can be defined here. All those values will be used as hints for a server. Almost
always, each DHCPv6 client will have exactly one IA on each interface. IA is declared using following
syntax:
ia [iaid]
{
IA-options
address-options
address-declaration
}
IAID is an optional number, which describes identifier of given IA. If not specified, it will be automat-
ically assigned integer numbers starting with 1. There may be more than one IA defined on an interface.
IA and PD (see Section 6.2.4) may be used together.
6.2.3 TA declaration
TA (Temporary Address) is a mechanism very similar to IA that allows configuration of temporary
addresses. See Section 6.2.2.
6.2.4 PD declaration
PD (Prefix Delegation) is a mechanism that allows leasing prefixes in similar way as addresses. For
details, see [8]. PD in client config file causes client to send IA PD option. This option informs server
that client is requesting prefix delegation.
Dibbler 1.0.1 User’s Guide 78
pd [iaid]
{
pd-options
prefix-declaration
}
IAID is an optional number, which identifies this particular PD. If not specified, it will be automatically
assigned integer numbers starting with 1. There may be more than one PD defined on an interface. IA
(see Section 6.2.2) may be used together.
where number is optional and denotes how many addresses with those values should be requested. If it
is diffrent than 1, then IPv6 address options are not allowed. Only address scoped options can be used
here. Address can be defined only within IA scope.
6.5 Comments
Comments are allowed in configuration files. All common comment styles are supported:
iface – (scope: global). Takes one parameter that can be either string (interface name) or integer
(interface index). Defines that client should perform some actions on specified interface. Exact
operations are defined within interface scope. Can optionally take second string parameter with the
only allowed value of “no-config”. If it is present, it instructs client to not perform any operation
on said interface. See Section 6.2.1.
ia – (scope: interface). Defines IA NA (Identity Association for Non-temporary Addresses), often abbre-
viated as IA. That is a container for “regular” (non-temporary in DHCPv6 nomenclature) addresses.
Simply saying, this is a client’s request for a single normal address. There may be more than one
ia defined on one interface. In such case, client will request several addresses. It may have one
optional integer parameter that defines unique indentifier (IAID). If followed by curly brackets, it
will create new IA scope. See Section 6.2.2.
ta – (scope: interface). Defines IA TA (Indentity Association for Temporary Addresses), often abbrevi-
ated as TA. This is a container for temporary addresses. Simply saying, this is a client’s request for
a temporary address. If followed by curly brackets, it will create new IA scope, similar to IA. See
Section 6.2.2. Note that TA scope accepts only limited set of parameters (e.g. iaid).
pd – (scope: interface). Defines IA PD (Identity Association for Prefix Delegation), often abbreviated
as PD. This is a container for prefixes. Simply saying, this is client’s request for prefix delegation.
Dibbler 1.0.1 User’s Guide 80
It may have one optional integer parameter that defines unique indentifier (IAID). If followed by
curly brackets, it will create new PD scope. See Sections 6.2.4 and 4.1.
address – (scope: ia or ta). Defines an IPv6 address. It is usually defined in IA or TA to specify that
an address should be sent. It takes one optional parameter that defines multiplier. For example, to
define 3 addresses, following syntax may be used:
address 3 { }
If followed by curly brackets, creates new address scope. See Section 6.2.5.
prefix – (scope: pd). Defined an IPv6 prefix. It is defined in PD to specify that a prefix should be
sent. May be empty (prefix) or accompanied with prefix definition that consists of IPv6 address
followed by slash and prefix length (e.g. prefix 2001:db8:1::/56. If followed by curly brackets,
creates new prefix scope. See Section 6.2.6.
work-dir – (scope: global). Takes one string parameter. Defines working directory.
downlink-prefix-ifaces – (scope: global). Takes coma separated list of network interfaces. When client
receives prefix from upstream router, it attempts to split it into remaining interfaces. It works in
most cases, but if there are strange interfaces or specific requirements, this auto-selection mechanism
can be disabled and list of downlink interfaces can be explicitly specified. This command is used
for that purpose. See 4.1 and 6.8.11.
log-level – (scope: global). Takes one integer parameter. Defines verbose level of the log messages. The
valid range is from 1 (very quiet) to 8 (very verbose). Those values are modelled after levels used
in syslog. These are: 1(Emergency), 2(Alert), 3(Critical), 4(Error), 5 (Warning), 6(Notice), 7(Info)
and 8(Debug). Currently Dibbler is using levels 3 to 8, as 1 and 2 are reserved for system wide
emergency events.
log-name – (scope: global). Takes one string parameter. Defines than name, which will be used during
logging.
log-mode – (scope: global). Takes one parameter that can be short, full, precise or syslog. Defines
logging mode. In the default, full mode, name, date and time in the h:m:s format will be printed. In
short mode, only minutes and seconds will be printed (this mode is useful on terminals with limited
width). Precise mode logs information with seconds and microsecond precision. It is a useful as
a performance diagnostic tool for finding bottlenecks in the DHCPv6 autoconfiguration process.
Syslog works under POSIX systems (Linux, Mac OS X, BSD family) and allows default POSIX
logging functions.
log-colors – (scope: global). Takes one boolean parameter. Defines if logs printed to console should use
colors. That feature is used to enhance logs readability. As it makes the log files messy on systems
that do not support colors, it is disabled by default. The default is off.
strict-rfc-no-routing – (scope: global) Takes one boolean parameter. The default value is 0. During
normal operation, DHCPv6 client should add IPv6 address only (i.e. configure it with /128 prefix),
without configuring routing. Routing is expected to be configured with Router Advertisements
[17]. Please see discussion in bug 222 for detailed discussion about that behavior. Note that
Dibbler versions between 0.5.0RC1 and 1.0.0RC1 used to configure addressed with arbitrarily chosen
(guessed) prefix length of /64. Although it was convenient for users, as in most cases the guess
was correct and clients connected to the same link could ping each other immediately, its correct
operation was based on the assumption that the guess is correct. If it isn’t, tricky to debug problems
will appear. Hosts will incorrectly assume that some off-the link hosts are on link (or vice versa)
Dibbler 1.0.1 User’s Guide 81
and will attempt to reach them directly. If you really understand the repercussions and still willing
to use that old behavior, you can use strict-rfc-no-routing 0. Author recommends against that,
though.
obey-ra-bits – (scope: global). Rounter Advertisements contain two bits that inform what kind of
DHCPv6 services are available on link. M (Managed) that tells that addresses and prefixes can
¯
be obtained using stateful DHCPv6. O (OtherConf) tells that other configuration options may be
¯
configured. Both bits are defined in [17], section 4.2. It should be noted that those bits are informa-
tional only. In the default mode (when obey-ra-bits is absent), the client will ask for configuration
options that it has specified in the configuration file. With obey-ra-bits, the client will wait till it
receives the RA message and will act according to the received bits. The default is off (obey-ra-bits
missing). Enabling obey-ra-bits implies inactive-mode.
experimental – (scope: global). Allows enabling experimental features. There are some highly-experimental
features present in Dibbler. To make a clear statement about their experimental nature, user is re-
quired to acknowledge that fact by putting this statement in its config file. This statement may be
present or absent. The default is absent.
bind-to-address – If specified, it describes the address the server will bind to. This is almost never
needed, unless you have more than one link-local address and one to bind to one specific.
ddns-protocol – (scope: global). Takes one string parameter. Defines protocol that should be used
during DNS Update mechanism. Allowed values are tcp, udp and any. Any means that UDP will
be tried first and if it fails, update will be retried over TCP. See Section 4.6.
ddns-timeout – (scope: global). Takes one integer parameter that specifies timeout in milliseconds.
Defines how long client should wait for DNS server response during DNS Update before declaring
update a failure. See Section 4.6.
script – (scope: global). Takes one string parameter that specifies script name. When dibbler client
receives some options it normally sets them up in the system on its own. However, besides of
setting up all parameters directly, dibbler client can execute external script. See Section 4.8 for
details.
stateless – (scope: global). It may be present or missing. The default is missing. Defines that client
should run in stateless mode. In this mode only configuration parameters are defined, not addresses
or prefixes. It is mutually exclusive with ia, ta and pd. See Section 4.14. No-ia, an alias to that
command used to be supported, but due to misleading name its support was dropped in 0.8.1RC1.
anonymous-inf-request – (scope: global). When running in a stateless mode, client does not ask
for addresses or prefixes, but rather requests some general options. By default, it sends its client
identifier (DUID) to the server. However, it is possible to omit this identifier, so the INF-REQUEST
messages will be anonymous. This global option causes client to act in such anonymous way.
Dibbler 1.0.1 User’s Guide 82
inactive-mode – (scope: global). This parameter may be present or absent. The default is absent.
Normally (with inactive-mode disabled) client tries to bind all interfaces defined in configuration
file. If such attempt fails, client reports an error and gives up. In some cases it is possible that
interface is not ready yet, e.g. WLAN interface did not complete association. It is possible to modify
client behavior, so it will accept downed and not running interfaces. To do so, inactive-mode must
be enabled. In this mode, client will accept inactive interfaces, will add them to inactive list and
will periodically monitor its state. When the interface finally becomes available, client will try to
configure it. See section 4.20 for details.
insist-mode – (scope: global). Client can be instructed to obtain several configuration options, like
DNS server configuration or domain name. It is possible that server will not provide all requested
options. Older versions of the dibbler client had been very aggressive in such case. It tried very
hard to obtain options that user specified in config file. To do so, it did send INF-REQUEST to
obtain such option. This behavior has changed. Right now when client does not receive all requested
options, it will complain, but will take no action. To enable old behavior, so called insist-mode has
been added. Insist-mode will also affect the way addresses are requested. If address was specified
in config file, client will request it in REQUEST message, rather than sending address offered by
server in ADVERTISE as it is typically done. See Section 4.21 for details.
skip-confirm – (scope: global). Support for CONFIRM messages was added in 0.8.0RC1. With it,
client may send CONFIRM when link state change is detected (e.g. switching to possibly new WiFi
access-point or replugging Ethernet cable). Client also sends CONFIRM after restart if there are
still valid leases found in locally stored databased. skip-confirm will disable any actions that would
result in CONFIRM transmissions. In particular, link state will not be detected and client will
ignore its previous address during startup.
duid-type – (scope: global). Takes one parameter. Allowed values are DUID-LLT, DUID-LL or DUID-
EN. The default is DUID-LLT. This parameter defines, what type of DUID should be generated if
there is no DUID already present. If there is a file containing DUID, this directive has no effect.
DUID-LLT means that DUID will be based on link layer address as well as time. DUID-LL means
that only link layer address will be used. The last value – DUID-EN – Enterprise Number-based
generation has a slightly different syntax:
duid-type duid-en enterprise-number enterprise-id.
For example: duid-type duid-en 1234 0x6789abcd means that enterprise number is set to 1234
and unique number from that company’s pool is 67:89:ab:cd (hexadecimal value of arbitrary length).
See section 4.22 for details.
option fqdn-s – (scope: global). Takes one boolean parameter and has the default value of 1. The S
bit is used in FQDN option. It is used to negotiate, which side (server or client) wants to perform
DNS Update procedure. See [16] for details. In general, if you don’t know that this option does,
you don’t want to modify this.
option fqdn – (scope: interface). Takes optional domain name as parameter. This option instructs
client to send FQDN option. This option has 2 purposes. The first one is to negotiated or request
Fully Qualified Domain Name for this client. The second one is to negotiate, who (client or server)
should perform DNS Update. If optional parameter is specified, it will be sent in the FQDN option.
Otherwise FQDN will be sent with empty name. This option is defined in [16]. See Section 4.6 for
details.
rapid-commit – (scope: interface). Takes one boolean parameter. The default is 0. This option allows
rapid commit procedure to be performed. Note that enabling rapid-commit on the client side is not
enough. server must be configured to allow rapid commit, too.
Dibbler 1.0.1 User’s Guide 83
unicast – (scope: interface). Takes one boolean parameter. The default value is 0. This option specifies
if client should request unicast communication from the server. If server is configured to allow it,
it will add unicast option to its replies. It will allow client to communicate with server via unicast
addresses instead of usual multicast.
preferred-servers – (scope: interface). Takes list of addresses or list of DUIDs. The default value is
empty. This list defines, which servers are preferred. When client sends SOLICIT message, all
servers available in the local network will respond. When client receives multiple ADVERTISE
messages, it will choose those sent by servers mentioned on the preferred-server list. Otherwise the
best server will be chosen. Note that this parameter used to be spelled differently (single R). Old
spelling is still supported, but is deprecated and will be removed soon.
reject-servers – (scope: interface). Takes list of addresses or list of DUIDs. The default value is empty.
This list defines which server must be ignored. It has opposite meaning to the prefered-servers list.
Servers mentioned here will never be chosen.
vendor-spec – (scope: interface). This option allow requesting for a vendor specific configuration option
or options. Although there are no vendor-specific (i.e. specific for Dibbler) parameters, it can be
used to test some other DHCPv6 server implementations. It takes coma separated list following
tokens: type (integer), type(integer) – enterprise(number). It allows definition of just vendor-specific
option and/or vendor-specific option with specific enterprise. See feature description in Section 4.19.
T1 – (scope: IA or PD) Takes one parameter that specifies T1 hint sent to a server. The default value
is 232 − 1 and is expressed in seconds. T1 value assigned by server defines after what time client
should start renew process. This is only a hint for the server. Actual value will be provided by the
server.
T2 – (scope: IA or PD). Takes one parameter that specifies T2 hint sent to a server. The default value
is default:232 − 1 and is expressed in seconds. This value defines hint for T2. T2 assigned by server
defined after what time client will start emergency rebind procedure if renew process fails. This is
only a hint for the server. Actual value will be provided by the server.
valid-lifetime – (scope:address or prefix). Takes one integer parameter that defined requested valid
lifetime for address or prefix. The default value is 232 − 1. This parameter is expressed in seconds.
This parameter defines valid lifetime of an address. It will be used as a hint for a server, when the
client sends REQUEST messages.
option dns-server – (scope: interface). Takes optional address list as parameter. This option conveys
information about DNS servers available. After retriving this information, client will be able to
resolve domain names into IP (both IPv4 and IPv6) addresses. If address list is not specified, client
will just request dns-server option from a server. If it is specified, listed addresses will be sent to
server as hints. Defined in [7].
option domain – (scope: interface). Takes optional domain list as parameter. This option is used
for retriving domain or domains names, which the client is connected in. For example, if client’s
hostname is alice.mylab.example.com and it wants to contact bob.mylab.example.com it can
simply refer to it as bob. Without domain name configured, it would have to use full domain name.
If optional domain list if defined, it will be sent to server as a hint. Defined in [7].
Dibbler 1.0.1 User’s Guide 84
option ntp-server – (scope: interface). Takes optional address list as parameter. This option defines
information about available NTP servers. Network Time Protocol [1] is a protocol used for time
synchronisation, so all hosts in the network has the same proper time set. If address list is specified,
it will be sent to server as a hint. Defined in [14].
option time-zone – (scope: interface). Optionally takes one string parameter that specifies requested
timezone. It is possible to retrieve timezone from the server. If client is interested in this information,
it should ask for this option. Note that this option is considered obsolete as it is mentioned in draft
version only [32]. Work on this draft seems to be abandoned as similar functionality is provided in
now standard [14]. Unfortunately, it is not supported in Dibbler yet.
option sip-server – (scope: interface). Takes optional address list as parameter. Session Initiation
Protocol (SIP) [4] is a control protocol for creating, modifying, and terminating sessions with one
or more participants. These sessions include Internet telephone calls, multimedia distribution, and
multimedia conferences, including VoIP phones. If address list is specified, it will be sent as a hint
for a server. Format of this option is defined in [6].
option sip-domain – (scope: interface). Takes optional list of domains. It is possible to define domain
names for Session Initiation Protocol [4]. Configuration of this parameter will ease usage of domain
names in the SIP protocol. If domain list is specified, it will be sent as a hint for a server. Format
of this option is defined in [6].
option nis-server – (scope: interface). Takes optional address list as parameter. Network Information
Service (NIS) is a Unix-based system designed to use common login and user information on multiple
systems, e.g. universities, where students can log on to ther accounts from any host. To use this
functionality, a host needs information about NIS server’s address. This can be retrieved with this
option. If address list is specified, it will be sent as a hint for a server. Its format is defined in [11].
option nis-domain – (scope: interface). Takes optional list of domains. Network Information Service
(NIS) can albo specify domain names. It can be configured with this option. If domain list is
specified, it will be sent as a hint for a server. It is defined in [11].
option nis+-server – (scope: interface). Takes optional address list as parameter. Network Information
Service Plus (NIS+) is an improved version of the NIS protocol. If address list is specified, it will
be sent as a hint for a server. This option is defined in [11].
option nis+-domain – (scope: interface). Takes optional list of domains. Similar to nis-domain, it
defines domains for NIS+. If domain list is specified, it will be sent as a hint for a server. This
option is defined in [11].
option lifetime – (scope: interface). This statement can be present or missing. The default is missing.
Base spec of the DHCPv6 protocol does offers way of refreshing addresses only, but not the options.
Lifetime defines, how often client would like to renew all its options. By default client will not send
such option, but it will accept it and act accordingly if the server sends it on its own. Format of
this option is defined in [13].
option aftr – (scope: interface). In networks that deploy Dual-Stack Lite architecture [23], client (B4)
needs to configure DS-Lite tunnel. Client may obtain information about AFTR (a remote tunnel
endpoint). This option conveys fully qualified domain name. This statement instructs client to
request such option. It is defined in defined in [24].
option – (scope: interface). There are number of options supported by Dibbler. There may be cases,
however, when user wants to specify its own options. Several syntaxes are supported:
Dibbler 1.0.1 User’s Guide 85
where number designates option number, address-keyword is word “address”, address is an IPv6
address, address-list is coma separated list of IPv6 addresses, string-keyword is a word “string” and
request-keyword is a word “request”. See Section 4.5.
auth-protocol – (scope: global, type: string, default: none). This is a crucial parameter that spec-
ifies which authorization/authentication protocol is used. Allowed values are: none, delayed,
reconfigure-key and dibbler. See section 4.17 for details.
auth-methods – (scope: global). Takes coma separated list of accepted authentication methods meth-
ods that client will accept from server. If this list is empty, any method will be accepted. The first
method on the list is the default one. Possible values are: none, digest-plain, digest-hmac-md5,
digest-hmac-sha1, digest-hmac-sha224, digest-hmac-sha256, digest-hmac-sha384, and digest-hmac-sha
auth-replay – (scope: global, type: string, default: none). Specifies which replay detection methods are
supported. Currently two values are implemented: none and monotonic.
auth-required – (scope: global, type: boolean, default: 0). This parameter specifies if the client is
required to authenticate itself. When set to 0, any client authentication failures (invalid signature
or lack of AUTH option) will result in a warning only. When set to 1, such messages will be dropped.
route – (scope: interface). Takes one boolean parameter that defines if routing information should
requested or not. The default value is false. See Section 4.4.
After receiving options values from a server, client stores values of those options in separate files in
the working directory (/var/lib/dibbler in POSIX systems (Linux, Mac OS X and BSD) and current
directory in Windows). File names start with the option word, e.g. option-dns-server. Dibbler client
can also call user defined script after parameters are assigned or removed. Dibbler client also sets DNS
servers and domain names on its own on most systems.
• have link-layer address less than 6 bytes long (this requirement should skip all tunnels and virtual
interfaces)
If you must use DHCPv6 on one of such interfaces (which is not recommended and such attempt
probably will fail), you must explicitly specify this interface in the configuration file.
There are multiple ways in which addresses can be requested in ia. This syntax was implemented
more for completeness, rather than having practical utility. It is mentioned here for reference.
# client.conf
iface eth0 {
T1 1800
Dibbler 1.0.1 User’s Guide 87
T2 2700
Another way it to send one IA, but include two address hints in it. Server may take them into
consideration (dibbler server does), but some other DHCPv6 implementations may ignore those hints.
# client.conf
log-mode short
log-level 5
iface wifi0 {
ia {
address
address
}
}
iface eth0 {
# ask for one address
ia
# ask for fully qualified domain name (any name will do)
option fqdn
# you can also provide hint for the server regarding preferred name
# option fqdn dexter.example.org
In this case, client will mention that it is interested in FQDN by using Option Request and empty
FQDN option, as specified in [16]. Server upon receiving such request (if it is configured to support it),
will provide FQDN option containing domain name. Depending on the server’s configuration, all DNS
Updates will be performed by the server, forward will be performed by client and reverse by the server,
or only forward will be done by a client.
It is also possible for client to provide its name as a hint for server. Server might take it into
consideration when it will choose a name for this client. To send specific hostname, additional parameter
(a string with a fully qualified domain name) should be specified.
Two additional parameters were introduced in Dibbler 0.8.1. ddns-protocol specifies protocol that
should be used for communication with DNS server. Allowed values are udp, tcp or any. “Any” will
try to use UDP and if that fails, it will revert to TCP. Second parameter is ddns-timeout that specifies
maximum time allowed for DNS server to respond before assuming communication failure. It is specified
in milliseconds.
Note that to successfully perform DNS Update, address must be assigned and dns server address must
be known. Therefoe “ia” and “option dns-server” are required for “option fqdn” to work properly. Also if
DHCPv6 server provides more than one DNS server address, update will be attempted only for the first
address on the list.
Dibbler 1.0.1 User’s Guide 90
It is also possible to force S bit in the FQDN option to 0 or 1. See [16] for details regarding its
meaning.
Although that is almost never needed, it is possible to configure client to request multiple vendor-
specific options at the same time. That feature is mainly used as a test tool for the server. To use it,
uncomment last line in the example above.
also would like to accept Unicast communication if server supports it. User wants all information to be
logged via Linux syslog daemon. Take note that you won’t be able see to what Dibbler is doing with such
low log-level. (Usually log-level should be set to 7, which is also a default value).
# client.conf
log-mode syslog
log-level 5
iface "Local Area Connection" {
unicast yes
ia
ia
}
Client (requesting router in PD nomenclature) receives prefix from upstream router and tries to auto-
select downstream interfaces. It tries to use interfaces that are up, running, multicast-capable, with MAC
address at least 6 bytes long and were not used to obtain prefix. If this algorithm does not work in your
case (e.g. because you want to use prefixes on other interfaces or you want some interfaces to be skipped),
it is possible to explicitly enumerate downstream interfaces using downlink-prefix-ifaces:
# client.conf
If you do not want Dibbler to split the prefixes automatically, it is possible to do so by specifying
”none” as the interface name. Note that this will render PD mechanism useless, unless you also use a
script and do the delegated prefix processing on your own.
# client.conf
Prefix hints can be specified in the similar way as addresses (see 6.8.3, except that multiple prefixes
syntax is not supported.
# client.conf
log-level 8
iface eth0 {
T1 1800
T2 2700
log-mode short
log-level 7
auth-protocol dibbler
auth-replay monotonic
auth-required 1
auth-methods digest-hmac-sha512, digest-hmac-md5, digest-hmac-sha256
iface eth0 {
}
# client.conf
log-mode short
log-level 7
skip-confirm
iface eth0 {
ia
}
iface "eth0" {
ia 123
option dns-server
option domain
}
iface "eth0" {
ia
unicast 1
option dns-server
option domain
option nis-server
option nis-domain
option nis+-server
option nis+-domain
option time-zone
option lifetime
}
Dibbler 1.0.1 User’s Guide 96
7 Relay configuration
Relay configuration is stored in relay.conf file in the /etc/dibbler/ directory (Linux systems) or
in current directory (Windows systems).
or
iface number
{
interface options
}
where name of the interface denotes name of the interface and number denotes it’s number. It does
not need to be enclosed in single or double quotes (except windows cases, when interface name contains
spaces).
7.3 Options
Every option has a scope it can be used in, default value and sometimes allowed range.
log-level – (scope: global, type: integer, default: 7) Defines verbose level of the log messages. The valid
range if from 1 (Emergency) to 8 (Debug). The higher the logging level is set, the more messages
dibbler will print.
log-name – (scope: global, type: string, default: Client). Defines name, which should be used during
logging.
log-mode – (scope: global, type: short, full or precise, default value: full) Defines logging mode. In the
default, full mode, name, date and time in the h:m:s format will be printed. In short mode, only
minutes and seconds will be printed (this mode is useful on terminals with limited width). Recently
added precise mode logs information with seconds and microsecond precision. It is a useful for
finding bottlenecks in the DHCPv6 autoconfiguration process.
interface-id-order – (scope: global, type: before, after or omit, default: before) Defines placement of
the interface-id option. Options can be placed in the RELAY-FORW message is arbitrary order.
This option has been specified to control that order. interface-id option can be placed before or
after relay-message option. There is also possibility to instruct server to omit the interface-id option
altogether, but since this violates [5], it should not be used. In general, this configuration parameter
is only useful when dealing with buggy relays, which can’t handle all option orders properly. Consider
this parameter a debugging feature. Note: similar parameter is available in the dibbler-server.
Dibbler 1.0.1 User’s Guide 97
client multicast – (scope: interface, type: boolean, default: false) This command instructs dibbler-relay
to listen on this particular interface for client messages sent to multicast (ff02::1:2) address.
client unicast – (scope: interface, type: address, default: not defined) This command instructs dibbler-
relay to listen to messages sent to a specific unicast address. This feature is usually used to connect
multiple relays together.
server multicast – (scope: interface, type: boolean, default: false) This command instructs dibbler-
relay to send messages (received on any interface) to the server multicast (ff05::1:3) address. Note
that this is not the same multicast address as the server usually listens to (ff02::1:2). Server must
be specifically configured to be able to receive relayed messages.
server unicast – (scope: interface, type: address, default: none) This command instructs dibbler-relay
to send message (received on any interface) to speficied unicast address. Server must be properly
configured to to be able to receive unicast traffic. See unicast command in the 5.3.4 section.
interface-id – (scope: interface, type: integer, default: none) This specifies identifier of a particular
interface. It is used to generate interface-id option, when relaying message to the server. This option
is then used by the server to detect, which interface the message originates from. It is essential to
have consistent interface-id defined on the relay side and server side. It is worth mentioning that
interface-id should be specified on the interface, which is used to receive messages from the clients,
not the one used to forward packets to server.
guess-mode – (scope: global, type: boolean, default: no) Switches relay into so called guess-mode.
Under normal operation, client sends messages, which are encapsulated and sent to the server.
During this encapsulation relay appends interface-id option and expects that server will use the
same interface-id option in its replies. Relay then uses those interface-id values to detect, which
the original request came from and sends reply to the same interface. Unfortunately, some servers
does not sent interface-id option. Normally in such case, dibbler-relay drops such server messages
as there is no easy way to determine where such messages should be relayed to. However, when
guess-mode is enabled, dibbler-relay tries to guess the destination interface. Luckily, it is often
trivial to guess as there are usually 2 interfaces: one connected to server and second connected to
the clients.
option remote-id – (scope: global, type: option, default: none) Tells the relay agent to insert remote-id
option. It is followed by a number (enterprise-id), a dash (“-”) and a hex string that specifies the
actual content of the remote-id option being inserted. Remote-id is specified in [15].
option relay-id – (scope: global, type: option, default: none) Tells the relay agent to insert relay-id
option. It takes one parameter, which specifies the actual content of the relay-id. The parameter
must be specified as a hex string.
option link-layer – (scope: global, type: option, default: none) Tells the relay agent to insert client
link-layer address option, as specified in [25]. It should be noted that the source MAC address
is extracted from incoming link-local (fe80:...) address or from client-id. Both methods are not
reliable and susceptible for spoofing. This was implemented mostly as a testing feature for the
server implementation.
It is vital to inform server, where this relayed message was received. DHCPv6 does this using interface-
id option. This identifier must be unique. Otherwise relays will get confused when they will receive reply
from server. Note that this id does not need to be alligned with system interface id (ifindex). Think
about it as ”ethernet segment identifier” if you are using Ethernet network or as ”bss identifier” if you
are using 802.11 network.
If you are interested in additional examples, download source version and look at *.conf files.
# relay.conf
iface eth0 {
server multicast yes
}
iface eth2 {
server unicast 2000::456
}
iface eth1 {
client multicast yes
interface-id 1000
}
iface eth3 {
client multicast yes
interface-id 1001
}
iface eth1 {
# client multicast yes // bind ff02::1:2
client unicast 6011::1 // bind this address
interface-id 6011
}
# relay.conf - relay 2
iface eth0 {
# server multicast yes // relay messages on this interface to ff05::1:3
server unicast 6011::1 // relay messages on this interface to this global address
}
iface eth0 {
server multicast yes
}
iface eth1 {
client multicast yes
interface-id 5020
}
iface eth0 {
server unicast ff02::1:2
}
iface eth1 {
client multicast yes
interface-id 5020
}
Dibbler 1.0.1 User’s Guide 101
remote-id – Remote-id option may identify the remote client. Dibbler implementation is very simple,
as it allows setting only one specific value, not unique value, one for each client. That makes this
feature useful for testing purposes, but its deployment in a production network is unlikely. Remote-
id takes two parameters. The first one is enterprise-id, a 32bit unique identifier that characterises a
vendor. The second parameter is arbitrary length hex string. Remote-id is specified in [15].
echo-request – In some cases, relay inserts options and would like the server to send them back in
its responses. Typically, those options are then processed by the relay to correctly send back to
the client. Dibbler relay does not need such options to operate, but is able to simulate them. It
is possible to specify one or more options that the relay requests the server to echo back. This
option takes a list of coma separated values that designate option codes. Dibbler relay will insert
options with specified option codes, but they will not carry any useful value. Echo Request Option
is specified in [20].
relay-id – Relay agent may be configured to insert interface-id option. However, that option identifies
an interface within each relay, but not necessarily the relay itself. In some cases it is useful for the
relay agent to insert an option that identifies itself. That is implemented as relay-id option. This is
particularly useful for bulk leasequery. This option is defined in [22].
link-layer – The initial DHCPv6 spec lacked information about client MAC addresses. In principle,
the server is able to discover client’s MAC address when receiving direct traffic. Unfortunately,
it can’t do that if the packet traverses a relay agent. That deficiency was addressed in [25]. It
defines an option that relays can insert when receiving incoming traffic from a client. Note that
this implementation is not perfect. Instead of getting that information from layer 2 directly (there
is no API to do that as of late 2014), it tries to get the information from client-id (DUID-LLT
or DUID-LL) or from message source address (if it is link-local and uses EUI-64). This is not a
bullet-proof solution, but it should work in most cases.
log-level 8
log-mode short
# Uncomment the following line to force relay to send Echo Request Option
# asking the server to echo back options 100, 101 and 102
option echo-request 100,101,102
option link-layer
# The relay should listen on eth1 interface for incoming client’s traffic.
# Clients by default send their traffic to multicast.
iface eth1 {
client multicast yes
8 Requestor configuration
Requestor (entity used for leasequery) does not use configuration files. All parameters are specified
by command-line switches. See section 4.13 for details.
Dibbler 1.0.1 User’s Guide 104
Q: Why client does not configure routing after assigning addresses, so I cannot e.g. ping other hosts?
A: It’s a common misunderstanding. DHCPv4 provides many configuration parameters to host, with
default router address being one of them. Things are done differently in IPv6. Routing configuration is
supposed to be conveyed using Router Advertisements (RA) messages, announced periodically by routers.
Hosts are supposed to listen to those messages and configure their routing appropriately. Note that this
mechanism is completely separate from DHCPv6. It may sound a bit strange, but that’s the way it was
meant to work.
Properly implemented clients are supposed to configure leased address with /128 prefix and learn the
actual prefix from RA. As this is incovenient, many clients (with dibbler included) bend the rules and
configure received addresses with /64 prefix. Please note that this value is arbitrary chosen and may be
improper in many scenarios.
Note: This behaviour has changed in the 0.5.0 release. Previous releases configured received address
with /128 prefix. To restore old, more RFC conformant behavior, see strict-rfc-no-routing directive in
the Section 6.6.
Note: The original pre-0.5.0 behaviour is correct. This was reverted in 1.0.0RC2 release. The strict-
rfc-no-routing now takes one boolean parameter. Setting it to 1 (which is the default value) makes
dibbler to configure addresses with /128 prefix, as expected. Please see discussion in bug 222 for more
details. Setting it to 0 reverts to the behavior that Dibbler was offering between 0.5.0 and 1.0.0RC1, i.e.
configuring an address with /64 prefix. Please note that it was chosen (guessed) arbitrarily and in some
cases may be completely wrong. Use with caution!
There was a proposed solution in a form of [30] draft. See section 4.4. Unfortunately, MIF working
group in IETF decided to abandon this work.
Q: I would like to have the ability to reserve specific addresses for clients with given MAC address.
That’s a basic and very common feature in DHCPv4 server. Why it is not supported in Dibbler? Are
there plans to implement such feature?
A: No. It is not and will not be supported. For couple of reason. The first and most important is
that DHCPv6 identifies clients based on DUIDs, rathar than MAC addresses. That is a protocol design
choice. Of course that does not prevent many users from saying “I don’t care, I want MAC classification
anyway!”. So here are more technical reasons why MAC classification is a bad idea. The first technical
reason is that Dibbler couldn’t be extended, because MAC address is often not available. There are 3
possible ways a server could possibly learn client’s MAC address:
1. from Ethernet frame. That won’t work if traffic goes through relay
2. from DUID-LL or DUID-LLT. RFC3315 forbids looking into the DUID. Besides of being a wrong
thing to do, that also won’t work, because client with a given MAC address can use different DUID
type, e.g. DUID-EN or DUID-UUID (or others, I saw on the wire some device with DUID type 14.
Strange, uncommon, but valid).
3. using source address and extracting MAC from link-local address thaty is based on EUI-64 that
contains MAC address. That should be available for direct traffic (simply src address of the UDP
Dibbler 1.0.1 User’s Guide 105
packet) or relayed (peer addr field in RELAY-FORW message). This would usually work, but there
are cases when it won’t. First, if client uses privacy extensions (RFC4941). The other one if client
and server support unicast, some traffic will be sent from client global address, not using link-local
address at all.
So instead of doing MAC based reservations, Dibbler supports link-layer address based reservations.
In most cases it will be equivalent to MAC reservations. The only case where it won’t work will be with
unicast, but that can be solved easily (don’t use link-layer reservations and unicast together). Despite this
shortcoming, link-layer was implemented after Dibbler 0.8.2 was released. See 4.18 and 5.3.12 sections.
Q: Dibbler server receives SOLICIT message, prints information about ADVERTISE/REPLY trans-
mission, but nothing is actually transmitted. Is this a bug?
A: Are you sure that your client is behaving properly and responds to Neighbor Discovery (ND)
requests? Before any IPv6 packet (that includes DHCPv6 message) is transmitted, recipient reachabity is
checked (using Neighbor Discovery protocol [17]). Server sends Neighbor Solicititation message and waits
for client’s Neighbor Advertisement. If that is not transmitted, even after 3 retries, server gives up and
doesn’t transmit IPv6 packet (DHCPv6 reply, that is) at all. Being not able to respond to the Neighbor
Discovery packets may indicate invalid client behavior.
Q: Dibbler sends some options which have values not recognized by the Ethereal/Wireshark or by
other implementations. What’s wrong?
A: DHCPv6 is a relatively new protocol and additional options are in a specification phase. It
means that until standarisation process is over, they do not have any officially assigned numbers. Once
standarization process is over (and RFC document is released), this option gets an official number.
There’s pretty good chance that different implementors may choose diffrent values for those not-yet
officialy accepted options. To change those values in Dibbler, you have to modify file misc/DHCPConst.h
and recompile server or client. See Developer’s Guide, section Option Values for details.
Q: I can’t get (insert your trouble causing feature here) to work. What’s wrong?
A: Go to the project homepage and browse list archives. If your problem was not reported before,
please don’t hesitate to write to the mailing list. Author prefers to not be contacted directly, but rather
over mailing list. The only exception are security reports and confidential disucssions. In such case, please
contact author directly.
you need one. ISC also does custom development contracts, should you need it. ISC is a nice non-profit
company, so your money will be used for a good cause.
Q: I can’t run client and server on the same host. What’s wrong?
A: First of all, running client and server on the same host is just plain meaningless, except testing
purposes only. There is a problem with sockets binding. To work around this problem, consult Developer’s
Guide, Tip section how to compile Dibbler with certain options.
Q: After enabling unicast communication, my client fails to send REQUEST messages. What’s wrong?
A: This is a problem with certain kernels. My limited test capabilites allowed me to conclude that
there’s problem with 2.4.20 kernel. Everything works fine with 2.6.0 with USAGI patches. Patched
kernels with enhanced IPv6 support can be downloaded from http://www.linux-ipv6.org/. Please let
me know if your kernel works or not.
Q: After installing Advanced Networking Pack or Windows XP ServicePack2 my DHCPv6 (or other
IPv6 application) stopped working. Is Dibbler compatible with Windows XP SP2?
A: Both products (Advanced Networking Pack as well as Service Pack 2 for Windows XP) provide
IPv6 firewall. It is configured by default to reject all incoming IPv6 traffic. You have to disable this
firewall. To disable firewall on the “Local Area Connection” interface, issue following command in a
console:
netsh firewall set adapter "Local Area Connection" filter=disable
A: Unfortunately, Windows 8 is not supported yet. I do not have time to run tests on Windows8, but
if it provides the same API as previous versions do, there’s pretty good chance that Dibbler will work on
Windows 8.
Dibbler 1.0.1 User’s Guide 108
10 Miscellaneous topics
10.1 History
Dibbler project was started as master thesis by Tomasz Mrugalski and Marek Senderski on Computer
Science faculty on Gdansk University of Technology. Both authors graduated in september 2003 and soon
after started their jobs.
During master thesis writing, it came to my attention that there are other DHCPv6 implementations
available, but none of them has been named properly. Refering to them was a bit silly: ,,DHCPv6
published on sourceforge.net has better support than DHCPv6 developed in KAME project, but our
DHCPv6 implementation...”. So I have decided that this implementation should have a name. Soon it
was named Dibbler after famous CMOT Dibbler from Discworld series by Terry Pratchett.
Sadly, Marek does not have enough free time to develop Dibbler, so his involvement is non-existent at
this time. However, that does not mean, that this project is abandoned. It is being actively developed by
me (Tomek). Keep in mind that I work at full time and do Ph.D. studies, so my free time is also greatly
limited.
http://klub.com.pl/cgi-bin/mailman/listinfo/dibbler
dibbler-devel – That list is intended as a way of communication between people, who are technically
involved in the dibbler development. If you are going to improve dibbler in any way, make sure
that you announce it here. You may get help. Also if you are trying to fix a bug on your own (hey,
that’s great!), this list is a good place to talk about it. Web-interface link: http://klub.com.pl/cgi-
bin/mailman/listinfo/dibbler-devel
Both lists have archives available on-line. You can join or leave one or both lists at any time using
convenient web-interface or using traditional mail-based approach.
Marek Senderski – He’s author of almost half of the Dibbler code. Without his efforts, Dibbler would
be simple, long forgotten by now master thesis.
Jozef Wozniak – My master thesis’ supervisor. He allowed me to see DHCP in a larger scope as part
of network provisioning process.
Jacek Swiatowiak – He’s my master thesis consultant. He guided Marek and me to take first steps
with DHCPv6 implementation.
Ania Szulc – Discworld fan and a great girl, too. She’s the one who helped me to decide how to name
this yet-untitled DHCPv6 implementation.
Christian Strauf – Without his queries and questions, Dibbler would be abandoned in late 2003.
Bartek Gajda – His interest convinced me that Dibbler is worth the effort to develop it further.
Artur Binczewski and Maciej Patelczyk – They both ensured that Dibbler is (and always will be)
GNU GPL software. Open source community is grateful.
Josep Sole – His mails (directly and indirectly) resulted in various fixes and speeded up of 0.2.0 release.
Sob – He has ported 0.4.0 back to Win2000 and NT. As a direct result, 0.4.1 was released for those
platforms, too.
Guy ”GMSoft” Martin – He has provided me with access to HPPA machine, so I was able to squish
some little/big endian bugs. He also uploaded ebuild to the Gentoo portage.
Bartosz ”fEnio” Fenski – He taught me how much work needs to be done, before deb packages are
considered ok. It took me some time to understand that more pain for the package developer means
less problems for the end user. Thanks to him, Dibbler is now part of the Debian GNU/Linux
distribution.
Adrien Clerc and his team – Their contribution of the DNS Updates code is most welcome.
Krzysztof Wnuk – He has fixed, improved and extended DNS Updates support as well as provided
initial support for prefix delegation.
Alain Durand – Thanks for the invitation to interop test session and for allowing me to see DHCPv6
issues in a much broader scope.
Dibbler 1.0.1 User’s Guide 110
Petr Pisar – He has reported lots of bugs, and also often provides fixes. Thanks.
Paul Schauer – Thanks to his effors, Dibbler now works on Mac OS X. He did majority of the porting
work and then did numerous rounds of testing and debugging.
Dibbler 1.0.1 User’s Guide 111
11 Acknowledgements
Author would like to acknowledge following projects and programmes that supported or continue to
support research and development of the Dibbler software and related activities.
This work has been partially supported by the Polish Ministry of Science and Higher Education un-
der the European Regional Development Fund, Grant No. POIG.01.01.02-00-045/09-00 Future Internet
Engineering.
The Dibbler project was created as master thesis at Department of Computer Communications, at Faculty
of Electronics, Telecommunications and Informations, at Gdansk University of Technology.
Dibbler 1.0.1 User’s Guide 112
References
[1] Mills, D., “Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI”, RFC2030,
IETF, October 1996.
[2] P.Vixie, S.Thomson, Y.Rekhter, J.Bound, “Dynamic Updates in the Domain Name System (DNS
UPDATE)”, RFC2136, IETF, April 1997.
[3] P.Vixie, O.Gudmundsson, D.Eastlake and B.Wellington, “Secret Key Transaction Authentication for
DNS (TSIG)”, RFC2845, IETF, May 2000.
[4] J.Rosenberg and H. Schulzrinne, “Session Initiation Protocol (SIP): Locating SIP Servers”, RFC3263,
IETF, June 2002.
[5] R. Droms, Ed. “Dynamic Host Configuration Protocol for IPv6 (DHCPv6)”, RFC3315, IETF, July
2003.
[6] H. Schulzrinne, and B. Volz “Dynamic Host Configuration Protocol (DHCPv6) Options for Session
Initiation Protocol (SIP) Servers”, RFC3319, IETF, July 2003.
[7] S. Thomson, C. Huitema, V. Ksinant and M. Souissi “DNS Extensions to Support IP Version 6”,
RFC3596, IETF, October 2003.
[8] O. Troan, and R. Droms “IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP)
version 6”, RFC3633, IETF, December 2003.
[9] R. Droms, Ed. “DNS Configuration options for Dynamic Host Configuration Protocol for IPv6
(DHCPv6)”, RFC3646, IETF, December 2003.
[10] R. Droms, “Stateless Dynamic Host Configuration Protocol (DHCP) Service for IPv6”, RFC3736,
IETF, April 2004.
[11] V. Kalusivalingam “Network Information Service (NIS) Configuration Options for Dynamic Host
Configuration Protocol for IPv6 (DHCPv6)”, RFC3898, IETF, October 2004.
[12] R. Arends, R. Austein, M. Larson, D. Massey and S. Rose “DNS Security Introduction and Require-
ments”, RFC4033, IETF, March 2005
[13] S. Venaas, T. Chown, and B. Volz “Information Refresh Time Option for DHCPv6”, RFC4242,
IETF, Nov. 2005.
[14] V. Kalusivalingam “Simple Network Time Protocol (SNTP) Configuration Option for DHCPv6”,
RFC4075, IETF, May 2005.
[15] B. Volz “DHCPv6 Relay Agent Remote-ID Option”, RFC4649, IETF, August 2006
[16] M. Stapp and B.Volz “The Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Client Fully
Qualified Domain Name (FQDN) Option”, RFC4704, IETF, October 2006
[17] T.Narten, E.Nordmark, W.Simpson and H.Soliman, “Neighbor Discovery for IP version 6 (IPv6)”,
RFC4861, IETF, September 2007
[18] S.Thomson, T.Narten, T.Jinmei, “IPv6 Stateless Address Autoconfiguration”, RFC4862, IETF,
September 2007
[19] T. Narten, R. Draves, S. Krishnan, “Privacy Extensions for Stateless Address Autoconfiguration in
IPv6”, RFC4941, IETF, September 2007
Dibbler 1.0.1 User’s Guide 113
[20] S. Zeng, B. Volz, K. Kinnear, J. Brzozowski, “DHCPv6 Relay Agent Echo Request Option”,
RFC4994, IETF, September 2007
[21] J. Brzozowski, K. Kinnear, B. Volz and S. Zeng “DHCPv6 Leasequery”, RFC5007, IETF, September
2007
[23] A.Durand, R.Droms, J.Woodyatt, Y.Lee, “Dual-Stack Lite Broadband Deployments Following IPv4
Exhaustion”, RFC6333, IETF, Aug. 2011
[24] D.Hankins, T.Mrugalski, “Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Options for
Dual-Stack Lite”, RFC6334, IETF, Aug. 2011
[25] G.Halwasia, S.Bhandari, W.Dec, “Client Link-Layer Address Option in DHCPv6”, RFC6939, IETF,
May 2013
[26] Vishnu Ram, Saumya Upadhyaya, Nitin Jain “Authentication, Authorization and key management
for DHCPv6”, work in progress (expired), draft-ram-dhc-dhcpv6-aakey-01, IETF, August 2006
[27] T. Mrugalski, “Optimization of the autoconfiguration mechanisms of the mobile stations supporting
IPv6 protocol in the IEEE 802.16 environmentdfdf”, Ph.D dissertation, Gdańsk, Oct. 2009
[28] T. Mrugalski, J.Wozniak, K.Nowicki, “Remote DHCPv6 Autoconfiguration for Mobile IPv6 nodes”,
IEEE 14th International Telecommunications Network Strategy and Planning Symposium, Warsaw,
Poland, Sept. 2010
[29] T.Mrugalski, J.Wozniak, K.Nowicki, “Remote Stateful Autoconfiguration for Mobile IPv6 Nodes
with Server Side Duplicate Address Detection”, IEEE, Australasin Telecommunication Networks and
Applications Conference, Auckland, New Zealand, Nov. 2010
[30] W.Dec, T.Mrugalski, T.Sun, B. Sarikaya, “DHCPv6 Route Options”, MIF WG, work in progress,
draft-ietf-mif-dhcpv6-route-option-03, IETF, Sep. 2011 .
[31] T.Mrugalski, “Remote DHCPv6 Autoconfiguration”, work-in-progress (expired), IETF, July 2010
[32] A.K. Vijayabhaskar “Time Configuration Options for DHCPv6”, work in progress (expired), draft-
ietf-dhc-dhcpv6-opt-timeconfig-03, IETF, October 2003