Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Full Options

This is an example config file including many available options. It might not represent the latest set of features because there where added more over the years:

# dhcpy6d example configuration
#
# The first section [dhcpy6d] contains general options.
# All sections whose name starts with "address_" are address
# definitions. These are used in the sections named something
# like "class_". These containwith definitions for classes of clients.
# The membership of clients of a class is defined in the client
# configuration from client config file or config database.
# Addresses contain various properties best seen on examples
# down below. Classes contain extra properties like nameservers
# for clients and filters.
# There is one predefined class: "default". If not set in a
# [class_default] section all clients which have no configuration
# or match no filter are automatically of this class. If
# [class_default] is not set the address "default" is used which
# also can be defined in an [address_default] section.

[dhcpy6d]

# GENERAL OPTIONS

# Server interface - multiple interfaces have to be separated by spaces.
interface = eth0

# Server DUID - if not set there will be one generated every
# time dhcpy6d starts. This might cause trouble for Windows
# clients because they go crazy about the changed server DUID.
#serverduid = 0001000100000000000000000000

# Server preference is 255 as default.
#server_preference = 255

# non-privileged user/group
user = dhcpy6d
group = dhcpy6d

# Nameserver for option 23 - there can be several specified
# separated by spaces.
nameserver = fd01:db8::53

# Domain to be used for option 39 - host FQDN
domain = local

# Domain search list for option 24 - domain search list. If omited the value
# of option "domain" above is taken as default
domain_search_list = foo.com bar.com # Do logging.
log = yes
# Log to console.
log_console = no
# Path to logfile.
log_file = dhcpy6d.log

# Configuration of clients can be stored in text file or in MySQL or
# SQLite database. See delivered config.sql and volatile.sql for
# database schemes.
# Use for small environment could be to get config from text file
# and store leases in SQLite database. Larger setups might have use
# for config and volatile data in MySQL database.
# Store config type is one of "file", "mysql", "sqlite" or "none".
# if "none" no client configuration is used.
store_config = file
# Dito for store volatile data like leases and MAC-LLIPs-mapping -
# one of "mysql" or "sqlite".
store_volatile = mysql

# Path to file used for configuration of clients.
store_file_config = clients.conf

# Data used for MySQL storage
# host
store_db_host = localhost
# database
store_db_db = dhcpy6d
# user
store_db_user = dhcpy6d
# password
store_db_password = dhcpy6d

# Paths to SQLite database files.
# config.sqlite and volatile.sqlite are included in source folder.
store_sqlite_config = config.sqlite
store_sqlite_volatile = volatile.sqlite

# Flag to let dhcpy6d really answer to client requests -
# might be of use for debugging and testing.
really_do_it = yes

# Declare which attributes of a requesting client should be checked
# to prove its identity. Default is "mac", but "duid" and "hostname"
# are allowed too. It is even possible to mix them, separated by
# spaces.
#identification = mac duid hostname
identification = mac

# Declare if all checked attributes have to match or is it enough if
# some do. Options are "match_all" and "match_some". The latter
# might be interesting if there are some dualboot clients whose MAC
# addresses match but their DUIDs don't.
identification_mode = match_all

# To speed up performance and without fear of cache poisoning enable caching MAC/LLIPs
cache_mac_llip = yes

# DYNAMIC DNS UPDATES

# This works at the moment only for ISC Bind nameservers.
# Do dynamic DNS updates. Default is "no".
dns_update = no

# RNDC key name for DNS Update.
dns_rndc_key = rndc-key

# RNDC secret - mostly some MD5-hash. Take it from
# nameservers' /etc/rndc.key.
dns_rndc_secret = 0000000000000000000

# Nameserver to talk to.
dns_update_nameserver = ::1

# Regarding RFC 4704 5. there are 3 kinds of client behaviour
# for N O S bits:
# - client wants to update DNS itself -> sends 0 0 0
# - client wants server to update DNS -> sends 0 0 1
# - client wants no server DNS update -> sends 1 0 0
# Ignore client ideas about DNS (if at all, what name to use,
# self-updating...) 
dns_ignore_client = yes

# Use client supplied hostname - yes or no. It is no problem to
# override client desires.
dns_use_client_hostname = no

# IA_NA/IA_TA OPTIONS

# These lifetimes are also used as default for addresses which
# have no extra defined lifetimes.
# Lifetimes can be defined in address definitions.
# RENEW (T1) and REBIND (T2) timers can be defined in
# class definitions.

# Default preferred lifetime in seconds
preferred_lifetime = 43200
# default valid lifetime in seconds
valid_lifetime = 64800
# T1
t1 = 21600
# T2
t2 = 32400

# information refresh time for option 32 
information_refresh_time = 3600

# DEFINITION OF AVAILABLE ADDRESSES

# Addresses are defined by patterns of static and variable parts.
#
# There are different categories: "random", "range", "id", "mac":
#
# $random64$ - calculate random 64 bit interface identifier address
# part. maybe future a version will allow shorter random
# $range$ - use range addresses - only in the last octet of address
# $id$ - if configuration of clients contain some kind of ID 
# it can be used for one octet
# $mac$ - puts MAC address into 3 octets - works only on local subnet
#
# Categories and variables used in pattern must match!
# The two options every address definition must have are category
# and pattern.

# 1st Example: definition of a normal locally and globally connected
# valid client

# a globally unique address
[address_global] 
# For privacy a global address might better be randomly created.
category = random
# This pattern results in an address like this:
# 2001:0db8:0000:0000:d3f6:834a:03d5:139c.
pattern = 2001:db8::$random64$
# IA type is mostly non-temporary as default so it is not necessary
# to declare here.
ia_type = na
# Lifetimes can be set in seconds for every defined address.
preferred_lifetime = 32400
valid_lifetime = 43200

# A unique local address
[address_local_valid]
# For easier internal management put MAC address into address.
category = mac
# Given MAC 01:02:03:04:05:06 this pattern results in an address
# like this: fd01:db8:0000:0000:babe:0102:0304:0506.
pattern = fd01:db8::babe:$mac$
# Update these addresses in Bind DNS - defaults to "no"
dns_update = yes
# Zone to update.
dns_zone = example.com
# Reverse zone to update
dns_rev_zone = 1.0.d.f.ip6.arpa

# Define a class for normal valid clients.
[class_valid_client]
# These clients get 2 Addresses, one internal ULA and one global.
# Different addresses should be separated by spaces.
# Note that "address_" from address definition section is omitted
# here!
addresses = global local_valid
# Some internal example nameserver.
nameserver = fd01:db8::53

# 2nd Example: definition of a class for invalid clients

[address_local_invalid]
# Invalid clients will get addresses of a range.
category = range
# Definition of range.
range = 1000-1fff
# Local address for invalid clients will get another prefix
# Resulting addresses look like
# fd01:0db8:0bad:0000:0000:0000:0000:1000
pattern = fd01:db8:bad::$range$
# Lifetimes of address are shorter for faster reaction to status
# changes.
preferred_lifetime = 2700
valid_lifetime = 3600

# Class for invalid clients
[class_invalid_client]
addresses = local_invalid
# Extra nameserver for invalid clients.
nameserver = fd01:db8:bad::53
# Short interval of address refresh attempts.
t1 = 600
t2 = 900

# 3rd Example: definition of filtered clients

[address_filtered]
# Filtered clients will get addresses of a range.
category = range
# Definition of range.
range = 1000-1fff
# Local address for filtered clients will get another prefix
# Resulting addresses look like
# fd01:0db8:0000:0000:babe:0000:0000:1000
pattern = fd01:db8::babe:0:0:$range$

[class_filtered_clients]
addresses = filtered
# Filters are regular expessions.
# See http://docs.python.org/howto/regex.html
# There are three types of filters allowed:
# filter_hostname
# filter_mac
# filter_duid
# With this setting all clients which transmit a hostname starting
# with "windows" will get an address of range
# fd01:db8::beef:0:0:1000 to fd01:db8::beef:0:01fff
filter_hostname = windows.*

# 4th Example: default addresses for all unknown clients

# It should be enough if address_default is defined, only if
# unknown clients should get
# extra nameservers etc. a class_default has to be set.

[address_default]
category = mac
# Given MAC 01:02:03:04:05:06 this pattern results in an
# address like this: fd01:db8:dead:0bad:beef:0102:0304:0506.
pattern = fd01:db8:dead:bad:beef:$mac$

©2022 Henri Wahl et al.