Annotation of embedaddon/dhcp/server/dhcpd.conf.5, revision 1.1
1.1 ! misho 1: .\" dhcpd.conf.5
! 2: .\"
! 3: .\" Copyright (c) 2004-2011 by Internet Systems Consortium, Inc. ("ISC")
! 4: .\" Copyright (c) 1996-2003 by Internet Software Consortium
! 5: .\"
! 6: .\" Permission to use, copy, modify, and distribute this software for any
! 7: .\" purpose with or without fee is hereby granted, provided that the above
! 8: .\" copyright notice and this permission notice appear in all copies.
! 9: .\"
! 10: .\" THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
! 11: .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 12: .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
! 13: .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 14: .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 15: .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
! 16: .\" OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 17: .\"
! 18: .\" Internet Systems Consortium, Inc.
! 19: .\" 950 Charter Street
! 20: .\" Redwood City, CA 94063
! 21: .\" <info@isc.org>
! 22: .\" https://www.isc.org/
! 23: .\"
! 24: .\" This software has been written for Internet Systems Consortium
! 25: .\" by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
! 26: .\"
! 27: .\" Support and other services are available for ISC products - see
! 28: .\" https://www.isc.org for more information or to learn more about ISC.
! 29: .\"
! 30: .\" $Id: dhcpd.conf.5,v 1.99.10.4.6.2 2011-06-01 23:38:06 sar Exp $
! 31: .\"
! 32: .TH dhcpd.conf 5
! 33: .SH NAME
! 34: dhcpd.conf - dhcpd configuration file
! 35: .SH DESCRIPTION
! 36: The dhcpd.conf file contains configuration information for
! 37: .IR dhcpd,
! 38: the Internet Systems Consortium DHCP Server.
! 39: .PP
! 40: The dhcpd.conf file is a free-form ASCII text file. It is parsed by
! 41: the recursive-descent parser built into dhcpd. The file may contain
! 42: extra tabs and newlines for formatting purposes. Keywords in the file
! 43: are case-insensitive. Comments may be placed anywhere within the
! 44: file (except within quotes). Comments begin with the # character and
! 45: end at the end of the line.
! 46: .PP
! 47: The file essentially consists of a list of statements. Statements
! 48: fall into two broad categories - parameters and declarations.
! 49: .PP
! 50: Parameter statements either say how to do something (e.g., how long a
! 51: lease to offer), whether to do something (e.g., should dhcpd provide
! 52: addresses to unknown clients), or what parameters to provide to the
! 53: client (e.g., use gateway 220.177.244.7).
! 54: .PP
! 55: Declarations are used to describe the topology of the
! 56: network, to describe clients on the network, to provide addresses that
! 57: can be assigned to clients, or to apply a group of parameters to a
! 58: group of declarations. In any group of parameters and declarations,
! 59: all parameters must be specified before any declarations which depend
! 60: on those parameters may be specified.
! 61: .PP
! 62: Declarations about network topology include the \fIshared-network\fR
! 63: and the \fIsubnet\fR declarations. If clients on a subnet are to be
! 64: assigned addresses
! 65: dynamically, a \fIrange\fR declaration must appear within the
! 66: \fIsubnet\fR declaration. For clients with statically assigned
! 67: addresses, or for installations where only known clients will be
! 68: served, each such client must have a \fIhost\fR declaration. If
! 69: parameters are to be applied to a group of declarations which are not
! 70: related strictly on a per-subnet basis, the \fIgroup\fR declaration
! 71: can be used.
! 72: .PP
! 73: For every subnet which will be served, and for every subnet
! 74: to which the dhcp server is connected, there must be one \fIsubnet\fR
! 75: declaration, which tells dhcpd how to recognize that an address is on
! 76: that subnet. A \fIsubnet\fR declaration is required for each subnet
! 77: even if no addresses will be dynamically allocated on that subnet.
! 78: .PP
! 79: Some installations have physical networks on which more than one IP
! 80: subnet operates. For example, if there is a site-wide requirement
! 81: that 8-bit subnet masks be used, but a department with a single
! 82: physical ethernet network expands to the point where it has more than
! 83: 254 nodes, it may be necessary to run two 8-bit subnets on the same
! 84: ethernet until such time as a new physical network can be added. In
! 85: this case, the \fIsubnet\fR declarations for these two networks must be
! 86: enclosed in a \fIshared-network\fR declaration.
! 87: .PP
! 88: Note that even when the \fIshared-network\fR declaration is absent, an
! 89: empty one is created by the server to contain the \fIsubnet\fR (and any scoped
! 90: parameters included in the \fIsubnet\fR). For practical purposes, this means
! 91: that "stateless" DHCP clients, which are not tied to addresses (and therefore
! 92: subnets) will receive the same configuration as stateful ones.
! 93: .PP
! 94: Some sites may have departments which have clients on more than one
! 95: subnet, but it may be desirable to offer those clients a uniform set
! 96: of parameters which are different than what would be offered to
! 97: clients from other departments on the same subnet. For clients which
! 98: will be declared explicitly with \fIhost\fR declarations, these
! 99: declarations can be enclosed in a \fIgroup\fR declaration along with
! 100: the parameters which are common to that department. For clients
! 101: whose addresses will be dynamically assigned, class declarations and
! 102: conditional declarations may be used to group parameter assignments
! 103: based on information the client sends.
! 104: .PP
! 105: When a client is to be booted, its boot parameters are determined by
! 106: consulting that client's \fIhost\fR declaration (if any), and then
! 107: consulting any \fIclass\fR declarations matching the client,
! 108: followed by the \fIpool\fR, \fIsubnet\fR and \fIshared-network\fR
! 109: declarations for the IP address assigned to the client. Each of
! 110: these declarations itself appears within a lexical scope, and all
! 111: declarations at less specific lexical scopes are also consulted for
! 112: client option declarations. Scopes are never considered
! 113: twice, and if parameters are declared in more than one scope, the
! 114: parameter declared in the most specific scope is the one that is
! 115: used.
! 116: .PP
! 117: When dhcpd tries to find a \fIhost\fR declaration for a client, it
! 118: first looks for a \fIhost\fR declaration which has a
! 119: \fIfixed-address\fR declaration that lists an IP address that is valid
! 120: for the subnet or shared network on which the client is booting. If
! 121: it doesn't find any such entry, it tries to find an entry which has
! 122: no \fIfixed-address\fR declaration.
! 123: .SH EXAMPLES
! 124: .PP
! 125: A typical dhcpd.conf file will look something like this:
! 126: .nf
! 127:
! 128: .I global parameters...
! 129:
! 130: subnet 204.254.239.0 netmask 255.255.255.224 {
! 131: \fIsubnet-specific parameters...\fR
! 132: range 204.254.239.10 204.254.239.30;
! 133: }
! 134:
! 135: subnet 204.254.239.32 netmask 255.255.255.224 {
! 136: \fIsubnet-specific parameters...\fR
! 137: range 204.254.239.42 204.254.239.62;
! 138: }
! 139:
! 140: subnet 204.254.239.64 netmask 255.255.255.224 {
! 141: \fIsubnet-specific parameters...\fR
! 142: range 204.254.239.74 204.254.239.94;
! 143: }
! 144:
! 145: group {
! 146: \fIgroup-specific parameters...\fR
! 147: host zappo.test.isc.org {
! 148: \fIhost-specific parameters...\fR
! 149: }
! 150: host beppo.test.isc.org {
! 151: \fIhost-specific parameters...\fR
! 152: }
! 153: host harpo.test.isc.org {
! 154: \fIhost-specific parameters...\fR
! 155: }
! 156: }
! 157:
! 158: .ce 1
! 159: Figure 1
! 160:
! 161: .fi
! 162: .PP
! 163: Notice that at the beginning of the file, there's a place
! 164: for global parameters. These might be things like the organization's
! 165: domain name, the addresses of the name servers (if they are common to
! 166: the entire organization), and so on. So, for example:
! 167: .nf
! 168:
! 169: option domain-name "isc.org";
! 170: option domain-name-servers ns1.isc.org, ns2.isc.org;
! 171:
! 172: .ce 1
! 173: Figure 2
! 174: .fi
! 175: .PP
! 176: As you can see in Figure 2, you can specify host addresses in
! 177: parameters using their domain names rather than their numeric IP
! 178: addresses. If a given hostname resolves to more than one IP address
! 179: (for example, if that host has two ethernet interfaces), then where
! 180: possible, both addresses are supplied to the client.
! 181: .PP
! 182: The most obvious reason for having subnet-specific parameters as
! 183: shown in Figure 1 is that each subnet, of necessity, has its own
! 184: router. So for the first subnet, for example, there should be
! 185: something like:
! 186: .nf
! 187:
! 188: option routers 204.254.239.1;
! 189: .fi
! 190: .PP
! 191: Note that the address here is specified numerically. This is not
! 192: required - if you have a different domain name for each interface on
! 193: your router, it's perfectly legitimate to use the domain name for that
! 194: interface instead of the numeric address. However, in many cases
! 195: there may be only one domain name for all of a router's IP addresses, and
! 196: it would not be appropriate to use that name here.
! 197: .PP
! 198: In Figure 1 there is also a \fIgroup\fR statement, which provides
! 199: common parameters for a set of three hosts - zappo, beppo and harpo.
! 200: As you can see, these hosts are all in the test.isc.org domain, so it
! 201: might make sense for a group-specific parameter to override the domain
! 202: name supplied to these hosts:
! 203: .nf
! 204:
! 205: option domain-name "test.isc.org";
! 206: .fi
! 207: .PP
! 208: Also, given the domain they're in, these are probably test machines.
! 209: If we wanted to test the DHCP leasing mechanism, we might set the
! 210: lease timeout somewhat shorter than the default:
! 211:
! 212: .nf
! 213: max-lease-time 120;
! 214: default-lease-time 120;
! 215: .fi
! 216: .PP
! 217: You may have noticed that while some parameters start with the
! 218: \fIoption\fR keyword, some do not. Parameters starting with the
! 219: \fIoption\fR keyword correspond to actual DHCP options, while
! 220: parameters that do not start with the option keyword either control
! 221: the behavior of the DHCP server (e.g., how long a lease dhcpd will
! 222: give out), or specify client parameters that are not optional in the
! 223: DHCP protocol (for example, server-name and filename).
! 224: .PP
! 225: In Figure 1, each host had \fIhost-specific parameters\fR. These
! 226: could include such things as the \fIhostname\fR option, the name of a
! 227: file to upload (the \fIfilename\fR parameter) and the address of the
! 228: server from which to upload the file (the \fInext-server\fR
! 229: parameter). In general, any parameter can appear anywhere that
! 230: parameters are allowed, and will be applied according to the scope in
! 231: which the parameter appears.
! 232: .PP
! 233: Imagine that you have a site with a lot of NCD X-Terminals. These
! 234: terminals come in a variety of models, and you want to specify the
! 235: boot files for each model. One way to do this would be to have host
! 236: declarations for each server and group them by model:
! 237: .nf
! 238:
! 239: group {
! 240: filename "Xncd19r";
! 241: next-server ncd-booter;
! 242:
! 243: host ncd1 { hardware ethernet 0:c0:c3:49:2b:57; }
! 244: host ncd4 { hardware ethernet 0:c0:c3:80:fc:32; }
! 245: host ncd8 { hardware ethernet 0:c0:c3:22:46:81; }
! 246: }
! 247:
! 248: group {
! 249: filename "Xncd19c";
! 250: next-server ncd-booter;
! 251:
! 252: host ncd2 { hardware ethernet 0:c0:c3:88:2d:81; }
! 253: host ncd3 { hardware ethernet 0:c0:c3:00:14:11; }
! 254: }
! 255:
! 256: group {
! 257: filename "XncdHMX";
! 258: next-server ncd-booter;
! 259:
! 260: host ncd1 { hardware ethernet 0:c0:c3:11:90:23; }
! 261: host ncd4 { hardware ethernet 0:c0:c3:91:a7:8; }
! 262: host ncd8 { hardware ethernet 0:c0:c3:cc:a:8f; }
! 263: }
! 264: .fi
! 265: .SH ADDRESS POOLS
! 266: .PP
! 267: The
! 268: .B pool
! 269: declaration can be used to specify a pool of addresses that will be
! 270: treated differently than another pool of addresses, even on the same
! 271: network segment or subnet. For example, you may want to provide a
! 272: large set of addresses that can be assigned to DHCP clients that are
! 273: registered to your DHCP server, while providing a smaller set of
! 274: addresses, possibly with short lease times, that are available for
! 275: unknown clients. If you have a firewall, you may be able to arrange
! 276: for addresses from one pool to be allowed access to the Internet,
! 277: while addresses in another pool are not, thus encouraging users to
! 278: register their DHCP clients. To do this, you would set up a pair of
! 279: pool declarations:
! 280: .PP
! 281: .nf
! 282: subnet 10.0.0.0 netmask 255.255.255.0 {
! 283: option routers 10.0.0.254;
! 284:
! 285: # Unknown clients get this pool.
! 286: pool {
! 287: option domain-name-servers bogus.example.com;
! 288: max-lease-time 300;
! 289: range 10.0.0.200 10.0.0.253;
! 290: allow unknown-clients;
! 291: }
! 292:
! 293: # Known clients get this pool.
! 294: pool {
! 295: option domain-name-servers ns1.example.com, ns2.example.com;
! 296: max-lease-time 28800;
! 297: range 10.0.0.5 10.0.0.199;
! 298: deny unknown-clients;
! 299: }
! 300: }
! 301: .fi
! 302: .PP
! 303: It is also possible to set up entirely different subnets for known and
! 304: unknown clients - address pools exist at the level of shared networks,
! 305: so address ranges within pool declarations can be on different
! 306: subnets.
! 307: .PP
! 308: As you can see in the preceding example, pools can have permit lists
! 309: that control which clients are allowed access to the pool and which
! 310: aren't. Each entry in a pool's permit list is introduced with the
! 311: .I allow
! 312: or \fIdeny\fR keyword. If a pool has a permit list, then only those
! 313: clients that match specific entries on the permit list will be
! 314: eligible to be assigned addresses from the pool. If a pool has a
! 315: deny list, then only those clients that do not match any entries on
! 316: the deny list will be eligible. If both permit and deny lists exist
! 317: for a pool, then only clients that match the permit list and do not
! 318: match the deny list will be allowed access.
! 319: .SH DYNAMIC ADDRESS ALLOCATION
! 320: Address allocation is actually only done when a client is in the INIT
! 321: state and has sent a DHCPDISCOVER message. If the client thinks it
! 322: has a valid lease and sends a DHCPREQUEST to initiate or renew that
! 323: lease, the server has only three choices - it can ignore the
! 324: DHCPREQUEST, send a DHCPNAK to tell the client it should stop using
! 325: the address, or send a DHCPACK, telling the client to go ahead and use
! 326: the address for a while.
! 327: .PP
! 328: If the server finds the address the client is requesting, and that
! 329: address is available to the client, the server will send a DHCPACK.
! 330: If the address is no longer available, or the client isn't permitted
! 331: to have it, the server will send a DHCPNAK. If the server knows
! 332: nothing about the address, it will remain silent, unless the address
! 333: is incorrect for the network segment to which the client has been
! 334: attached and the server is authoritative for that network segment, in
! 335: which case the server will send a DHCPNAK even though it doesn't know
! 336: about the address.
! 337: .PP
! 338: There may be a host declaration matching the client's identification.
! 339: If that host declaration contains a fixed-address declaration that
! 340: lists an IP address that is valid for the network segment to which the
! 341: client is connected. In this case, the DHCP server will never do
! 342: dynamic address allocation. In this case, the client is \fIrequired\fR
! 343: to take the address specified in the host declaration. If the
! 344: client sends a DHCPREQUEST for some other address, the server will respond
! 345: with a DHCPNAK.
! 346: .PP
! 347: When the DHCP server allocates a new address for a client (remember,
! 348: this only happens if the client has sent a DHCPDISCOVER), it first
! 349: looks to see if the client already has a valid lease on an IP address,
! 350: or if there is an old IP address the client had before that hasn't yet
! 351: been reassigned. In that case, the server will take that address and
! 352: check it to see if the client is still permitted to use it. If the
! 353: client is no longer permitted to use it, the lease is freed if the
! 354: server thought it was still in use - the fact that the client has sent
! 355: a DHCPDISCOVER proves to the server that the client is no longer using
! 356: the lease.
! 357: .PP
! 358: If no existing lease is found, or if the client is forbidden to
! 359: receive the existing lease, then the server will look in the list of
! 360: address pools for the network segment to which the client is attached
! 361: for a lease that is not in use and that the client is permitted to
! 362: have. It looks through each pool declaration in sequence (all
! 363: .I range
! 364: declarations that appear outside of pool declarations are grouped into
! 365: a single pool with no permit list). If the permit list for the pool
! 366: allows the client to be allocated an address from that pool, the pool
! 367: is examined to see if there is an address available. If so, then the
! 368: client is tentatively assigned that address. Otherwise, the next
! 369: pool is tested. If no addresses are found that can be assigned to
! 370: the client, no response is sent to the client.
! 371: .PP
! 372: If an address is found that the client is permitted to have, and that
! 373: has never been assigned to any client before, the address is
! 374: immediately allocated to the client. If the address is available for
! 375: allocation but has been previously assigned to a different client, the
! 376: server will keep looking in hopes of finding an address that has never
! 377: before been assigned to a client.
! 378: .PP
! 379: The DHCP server generates the list of available IP addresses from a
! 380: hash table. This means that the addresses are not sorted in any
! 381: particular order, and so it is not possible to predict the order in
! 382: which the DHCP server will allocate IP addresses. Users of previous
! 383: versions of the ISC DHCP server may have become accustomed to the DHCP
! 384: server allocating IP addresses in ascending order, but this is no
! 385: longer possible, and there is no way to configure this behavior with
! 386: version 3 of the ISC DHCP server.
! 387: .SH IP ADDRESS CONFLICT PREVENTION
! 388: The DHCP server checks IP addresses to see if they are in use before
! 389: allocating them to clients. It does this by sending an ICMP Echo
! 390: request message to the IP address being allocated. If no ICMP Echo
! 391: reply is received within a second, the address is assumed to be free.
! 392: This is only done for leases that have been specified in range
! 393: statements, and only when the lease is thought by the DHCP server to
! 394: be free - i.e., the DHCP server or its failover peer has not listed
! 395: the lease as in use.
! 396: .PP
! 397: If a response is received to an ICMP Echo request, the DHCP server
! 398: assumes that there is a configuration error - the IP address is in use
! 399: by some host on the network that is not a DHCP client. It marks the
! 400: address as abandoned, and will not assign it to clients.
! 401: .PP
! 402: If a DHCP client tries to get an IP address, but none are available,
! 403: but there are abandoned IP addresses, then the DHCP server will
! 404: attempt to reclaim an abandoned IP address. It marks one IP address
! 405: as free, and then does the same ICMP Echo request check described
! 406: previously. If there is no answer to the ICMP Echo request, the
! 407: address is assigned to the client.
! 408: .PP
! 409: The DHCP server does not cycle through abandoned IP addresses if the
! 410: first IP address it tries to reclaim is free. Rather, when the next
! 411: DHCPDISCOVER comes in from the client, it will attempt a new
! 412: allocation using the same method described here, and will typically
! 413: try a new IP address.
! 414: .SH DHCP FAILOVER
! 415: This version of the ISC DHCP server supports the DHCP failover
! 416: protocol as documented in draft-ietf-dhc-failover-12.txt. This is
! 417: not a final protocol document, and we have not done interoperability
! 418: testing with other vendors' implementations of this protocol, so you
! 419: must not assume that this implementation conforms to the standard.
! 420: If you wish to use the failover protocol, make sure that both failover
! 421: peers are running the same version of the ISC DHCP server.
! 422: .PP
! 423: The failover protocol allows two DHCP servers (and no more than two)
! 424: to share a common address pool. Each server will have about half of
! 425: the available IP addresses in the pool at any given time for
! 426: allocation. If one server fails, the other server will continue to
! 427: renew leases out of the pool, and will allocate new addresses out of
! 428: the roughly half of available addresses that it had when
! 429: communications with the other server were lost.
! 430: .PP
! 431: It is possible during a prolonged failure to tell the remaining server
! 432: that the other server is down, in which case the remaining server will
! 433: (over time) reclaim all the addresses the other server had available
! 434: for allocation, and begin to reuse them. This is called putting the
! 435: server into the PARTNER-DOWN state.
! 436: .PP
! 437: You can put the server into the PARTNER-DOWN state either by using the
! 438: .B omshell (1)
! 439: command or by stopping the server, editing the last failover state
! 440: declaration in the lease file, and restarting the server. If you use
! 441: this last method, change the "my state" line to:
! 442: .PP
! 443: .nf
! 444: .B failover peer "\fIname\fB" state {
! 445: .B my state partner-down;
! 446: .B peer state \fIstate\fB at \fIdate\fB;
! 447: .B }
! 448: .fi
! 449: .PP
! 450: It is only required to change "my state" as shown above.
! 451: .PP
! 452: When the other server comes back online, it should automatically
! 453: detect that it has been offline and request a complete update from the
! 454: server that was running in the PARTNER-DOWN state, and then both
! 455: servers will resume processing together.
! 456: .PP
! 457: It is possible to get into a dangerous situation: if you put one
! 458: server into the PARTNER-DOWN state, and then *that* server goes down,
! 459: and the other server comes back up, the other server will not know
! 460: that the first server was in the PARTNER-DOWN state, and may issue
! 461: addresses previously issued by the other server to different clients,
! 462: resulting in IP address conflicts. Before putting a server into
! 463: PARTNER-DOWN state, therefore, make
! 464: .I sure
! 465: that the other server will not restart automatically.
! 466: .PP
! 467: The failover protocol defines a primary server role and a secondary
! 468: server role. There are some differences in how primaries and
! 469: secondaries act, but most of the differences simply have to do with
! 470: providing a way for each peer to behave in the opposite way from the
! 471: other. So one server must be configured as primary, and the other
! 472: must be configured as secondary, and it doesn't matter too much which
! 473: one is which.
! 474: .SH FAILOVER STARTUP
! 475: When a server starts that has not previously communicated with its
! 476: failover peer, it must establish communications with its failover peer
! 477: and synchronize with it before it can serve clients. This can happen
! 478: either because you have just configured your DHCP servers to perform
! 479: failover for the first time, or because one of your failover servers
! 480: has failed catastrophically and lost its database.
! 481: .PP
! 482: The initial recovery process is designed to ensure that when one
! 483: failover peer loses its database and then resynchronizes, any leases
! 484: that the failed server gave out before it failed will be honored.
! 485: When the failed server starts up, it notices that it has no saved
! 486: failover state, and attempts to contact its peer.
! 487: .PP
! 488: When it has established contact, it asks the peer for a complete copy
! 489: its peer's lease database. The peer then sends its complete database,
! 490: and sends a message indicating that it is done. The failed server
! 491: then waits until MCLT has passed, and once MCLT has passed both
! 492: servers make the transition back into normal operation. This waiting
! 493: period ensures that any leases the failed server may have given out
! 494: while out of contact with its partner will have expired.
! 495: .PP
! 496: While the failed server is recovering, its partner remains in the
! 497: partner-down state, which means that it is serving all clients. The
! 498: failed server provides no service at all to DHCP clients until it has
! 499: made the transition into normal operation.
! 500: .PP
! 501: In the case where both servers detect that they have never before
! 502: communicated with their partner, they both come up in this recovery
! 503: state and follow the procedure we have just described. In this case,
! 504: no service will be provided to DHCP clients until MCLT has expired.
! 505: .SH CONFIGURING FAILOVER
! 506: In order to configure failover, you need to write a peer declaration
! 507: that configures the failover protocol, and you need to write peer
! 508: references in each pool declaration for which you want to do
! 509: failover. You do not have to do failover for all pools on a given
! 510: network segment. You must not tell one server it's doing failover
! 511: on a particular address pool and tell the other it is not. You must
! 512: not have any common address pools on which you are not doing
! 513: failover. A pool declaration that utilizes failover would look like this:
! 514: .PP
! 515: .nf
! 516: pool {
! 517: failover peer "foo";
! 518: \fIpool specific parameters\fR
! 519: };
! 520: .fi
! 521: .PP
! 522: The server currently does very little sanity checking, so if you
! 523: configure it wrong, it will just fail in odd ways. I would recommend
! 524: therefore that you either do failover or don't do failover, but don't
! 525: do any mixed pools. Also, use the same master configuration file for
! 526: both servers, and have a separate file that contains the peer
! 527: declaration and includes the master file. This will help you to avoid
! 528: configuration mismatches. As our implementation evolves, this will
! 529: become less of a problem. A basic sample dhcpd.conf file for a
! 530: primary server might look like this:
! 531: .PP
! 532: .nf
! 533: failover peer "foo" {
! 534: primary;
! 535: address anthrax.rc.vix.com;
! 536: port 519;
! 537: peer address trantor.rc.vix.com;
! 538: peer port 520;
! 539: max-response-delay 60;
! 540: max-unacked-updates 10;
! 541: mclt 3600;
! 542: split 128;
! 543: load balance max seconds 3;
! 544: }
! 545:
! 546: include "/etc/dhcpd.master";
! 547: .fi
! 548: .PP
! 549: The statements in the peer declaration are as follows:
! 550: .PP
! 551: The
! 552: .I primary
! 553: and
! 554: .I secondary
! 555: statements
! 556: .RS 0.25i
! 557: .PP
! 558: [ \fBprimary\fR | \fBsecondary\fR ]\fB;\fR
! 559: .PP
! 560: This determines whether the server is primary or secondary, as
! 561: described earlier under DHCP FAILOVER.
! 562: .RE
! 563: .PP
! 564: The
! 565: .I address
! 566: statement
! 567: .RS 0.25i
! 568: .PP
! 569: .B address \fIaddress\fR\fB;\fR
! 570: .PP
! 571: The \fBaddress\fR statement declares the IP address or DNS name on which the
! 572: server should listen for connections from its failover peer, and also the
! 573: value to use for the DHCP Failover Protocol server identifier. Because this
! 574: value is used as an identifier, it may not be omitted.
! 575: .RE
! 576: .PP
! 577: The
! 578: .I peer address
! 579: statement
! 580: .RS 0.25i
! 581: .PP
! 582: .B peer address \fIaddress\fR\fB;\fR
! 583: .PP
! 584: The \fBpeer address\fR statement declares the IP address or DNS name to
! 585: which the server should connect to reach its failover peer for failover
! 586: messages.
! 587: .RE
! 588: .PP
! 589: The
! 590: .I port
! 591: statement
! 592: .RS 0.25i
! 593: .PP
! 594: .B port \fIport-number\fR\fB;\fR
! 595: .PP
! 596: The \fBport\fR statement declares the TCP port on which the server
! 597: should listen for connections from its failover peer. This statement
! 598: may not currently be omitted, because the failover protocol does not
! 599: yet have a reserved TCP port number.
! 600: .RE
! 601: .PP
! 602: The
! 603: .I peer port
! 604: statement
! 605: .RS 0.25i
! 606: .PP
! 607: .B peer port \fIport-number\fR\fB;\fR
! 608: .PP
! 609: The \fBpeer port\fR statement declares the TCP port to which the
! 610: server should connect to reach its failover peer for failover
! 611: messages. This statement may not be omitted because the failover
! 612: protocol does not yet have a reserved TCP port number. The port
! 613: number declared in the \fBpeer port\fR statement may be the same as
! 614: the port number declared in the \fBport\fR statement.
! 615: .RE
! 616: .PP
! 617: The
! 618: .I max-response-delay
! 619: statement
! 620: .RS 0.25i
! 621: .PP
! 622: .B max-response-delay \fIseconds\fR\fB;\fR
! 623: .PP
! 624: The \fBmax-response-delay\fR statement tells the DHCP server how
! 625: many seconds may pass without receiving a message from its failover
! 626: peer before it assumes that connection has failed. This number
! 627: should be small enough that a transient network failure that breaks
! 628: the connection will not result in the servers being out of
! 629: communication for a long time, but large enough that the server isn't
! 630: constantly making and breaking connections. This parameter must be
! 631: specified.
! 632: .RE
! 633: .PP
! 634: The
! 635: .I max-unacked-updates
! 636: statement
! 637: .RS 0.25i
! 638: .PP
! 639: .B max-unacked-updates \fIcount\fR\fB;\fR
! 640: .PP
! 641: The \fBmax-unacked-updates\fR statement tells the remote DHCP server how
! 642: many BNDUPD messages it can send before it receives a BNDACK
! 643: from the local system. We don't have enough operational experience
! 644: to say what a good value for this is, but 10 seems to work. This
! 645: parameter must be specified.
! 646: .RE
! 647: .PP
! 648: The
! 649: .I mclt
! 650: statement
! 651: .RS 0.25i
! 652: .PP
! 653: .B mclt \fIseconds\fR\fB;\fR
! 654: .PP
! 655: The \fBmclt\fR statement defines the Maximum Client Lead Time. It
! 656: must be specified on the primary, and may not be specified on the
! 657: secondary. This is the length of time for which a lease may be
! 658: renewed by either failover peer without contacting the other. The
! 659: longer you set this, the longer it will take for the running server to
! 660: recover IP addresses after moving into PARTNER-DOWN state. The
! 661: shorter you set it, the more load your servers will experience when
! 662: they are not communicating. A value of something like 3600 is
! 663: probably reasonable, but again bear in mind that we have no real
! 664: operational experience with this.
! 665: .RE
! 666: .PP
! 667: The
! 668: .I split
! 669: statement
! 670: .RS 0.25i
! 671: .PP
! 672: .B split \fIindex\fR\fB;\fR
! 673: .PP
! 674: The split statement specifies the split between the primary and
! 675: secondary for the purposes of load balancing. Whenever a client
! 676: makes a DHCP request, the DHCP server runs a hash on the client
! 677: identification, resulting in value from 0 to 255. This is used as
! 678: an index into a 256 bit field. If the bit at that index is set,
! 679: the primary is responsible. If the bit at that index is not set,
! 680: the secondary is responsible. The \fBsplit\fR value determines
! 681: how many of the leading bits are set to one. So, in practice, higher
! 682: split values will cause the primary to serve more clients than the
! 683: secondary. Lower split values, the converse. Legal values are between
! 684: 0 and 255, of which the most reasonable is 128.
! 685: .RE
! 686: .PP
! 687: The
! 688: .I hba
! 689: statement
! 690: .RS 0.25i
! 691: .PP
! 692: .B hba \fIcolon-separated-hex-list\fB;\fR
! 693: .PP
! 694: The hba statement specifies the split between the primary and
! 695: secondary as a bitmap rather than a cutoff, which theoretically allows
! 696: for finer-grained control. In practice, there is probably no need
! 697: for such fine-grained control, however. An example hba statement:
! 698: .PP
! 699: .nf
! 700: hba ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
! 701: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00;
! 702: .fi
! 703: .PP
! 704: This is equivalent to a \fBsplit 128;\fR statement, and identical. The
! 705: following two examples are also equivalent to a \fBsplit\fR of 128, but
! 706: are not identical:
! 707: .PP
! 708: .nf
! 709: hba aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:
! 710: aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa;
! 711:
! 712: hba 55:55:55:55:55:55:55:55:55:55:55:55:55:55:55:55:
! 713: 55:55:55:55:55:55:55:55:55:55:55:55:55:55:55:55;
! 714: .fi
! 715: .PP
! 716: They are equivalent, because half the bits are set to 0, half are set to
! 717: 1 (0xa and 0x5 are 1010 and 0101 binary respectively) and consequently this
! 718: would roughly divide the clients equally between the servers. They are not
! 719: identical, because the actual peers this would load balance to each server
! 720: are different for each example.
! 721: .PP
! 722: You must only have \fBsplit\fR or \fBhba\fR defined, never both. For most
! 723: cases, the fine-grained control that \fBhba\fR offers isn't necessary, and
! 724: \fBsplit\fR should be used.
! 725: .RE
! 726: .PP
! 727: The
! 728: .I load balance max seconds
! 729: statement
! 730: .RS 0.25i
! 731: .PP
! 732: .B load balance max seconds \fIseconds\fR\fB;\fR
! 733: .PP
! 734: This statement allows you to configure a cutoff after which load
! 735: balancing is disabled. The cutoff is based on the number of seconds
! 736: since the client sent its first DHCPDISCOVER or DHCPREQUEST message,
! 737: and only works with clients that correctly implement the \fIsecs\fR
! 738: field - fortunately most clients do. We recommend setting this to
! 739: something like 3 or 5. The effect of this is that if one of the
! 740: failover peers gets into a state where it is responding to failover
! 741: messages but not responding to some client requests, the other
! 742: failover peer will take over its client load automatically as the
! 743: clients retry.
! 744: .RE
! 745: .PP
! 746: The Failover pool balance statements.
! 747: .RS 0.25i
! 748: .PP
! 749: \fBmax-lease-misbalance \fIpercentage\fR\fB;\fR
! 750: \fBmax-lease-ownership \fIpercentage\fR\fB;\fR
! 751: \fBmin-balance \fIseconds\fR\fB;\fR
! 752: \fBmax-balance \fIseconds\fR\fB;\fR
! 753: .PP
! 754: This version of the DHCP Server evaluates pool balance on a schedule,
! 755: rather than on demand as leases are allocated. The latter approach
! 756: proved to be slightly klunky when pool misbalanced reach total
! 757: saturation...when any server ran out of leases to assign, it also lost
! 758: its ability to notice it had run dry.
! 759: .PP
! 760: In order to understand pool balance, some elements of its operation
! 761: first need to be defined. First, there are \'free\' and \'backup\' leases.
! 762: Both of these are referred to as \'free state leases\'. \'free\' and
! 763: \'backup\'
! 764: are \'the free states\' for the purpose of this document. The difference
! 765: is that only the primary may allocate from \'free\' leases unless under
! 766: special circumstances, and only the secondary may allocate \'backup\' leases.
! 767: .PP
! 768: When pool balance is performed, the only plausible expectation is to
! 769: provide a 50/50 split of the free state leases between the two servers.
! 770: This is because no one can predict which server will fail, regardless
! 771: of the relative load placed upon the two servers, so giving each server
! 772: half the leases gives both servers the same amount of \'failure endurance\'.
! 773: Therefore, there is no way to configure any different behaviour, outside of
! 774: some very small windows we will describe shortly.
! 775: .PP
! 776: The first thing calculated on any pool balance run is a value referred to
! 777: as \'lts\', or "Leases To Send". This, simply, is the difference in the
! 778: count of free and backup leases, divided by two. For the secondary,
! 779: it is the difference in the backup and free leases, divided by two.
! 780: The resulting value is signed: if it is positive, the local server is
! 781: expected to hand out leases to retain a 50/50 balance. If it is negative,
! 782: the remote server would need to send leases to balance the pool. Once
! 783: the lts value reaches zero, the pool is perfectly balanced (give or take
! 784: one lease in the case of an odd number of total free state leases).
! 785: .PP
! 786: The current approach is still something of a hybrid of the old approach,
! 787: marked by the presence of the \fBmax-lease-misbalance\fR statement. This
! 788: parameter configures what used to be a 10% fixed value in previous versions:
! 789: if lts is less than free+backup * \fBmax-lease-misbalance\fR percent, then
! 790: the server will skip balancing a given pool (it won't bother moving any
! 791: leases, even if some leases "should" be moved). The meaning of this value
! 792: is also somewhat overloaded, however, in that it also governs the estimation
! 793: of when to attempt to balance the pool (which may then also be skipped over).
! 794: The oldest leases in the free and backup states are examined. The time
! 795: they have resided in their respective queues is used as an estimate to
! 796: indicate how much time it is probable it would take before the leases at
! 797: the top of the list would be consumed (and thus, how long it would take
! 798: to use all leases in that state). This percentage is directly multiplied
! 799: by this time, and fit into the schedule if it falls within
! 800: the \fBmin-balance\fR and \fBmax-balance\fR configured values. The
! 801: scheduled pool check time is only moved in a downwards direction, it is
! 802: never increased. Lastly, if the lts is more than double this number in
! 803: the negative direction, the local server will \'panic\' and transmit a
! 804: Failover protocol POOLREQ message, in the hopes that the remote system
! 805: will be woken up into action.
! 806: .PP
! 807: Once the lts value exceeds the \fBmax-lease-misbalance\fR percentage of
! 808: total free state leases as described above, leases are moved to the remote
! 809: server. This is done in two passes.
! 810: .PP
! 811: In the first pass, only leases whose most recent bound client would have
! 812: been served by the remote server - according to the Load Balance Algorithm
! 813: (see above \fBsplit\fR and \fBhba\fR configuration statements) - are given
! 814: away to the peer. This first pass will happily continue to give away leases,
! 815: decrementing the lts value by one for each, until the lts value has reached
! 816: the negative of the total number of leases multiplied by
! 817: the \fBmax-lease-ownership\fR percentage. So it is through this value that
! 818: you can permit a small misbalance of the lease pools - for the purpose of
! 819: giving the peer more than a 50/50 share of leases in the hopes that their
! 820: clients might some day return and be allocated by the peer (operating
! 821: normally). This process is referred to as \'MAC Address Affinity\', but this
! 822: is somewhat misnamed: it applies equally to DHCP Client Identifier options.
! 823: Note also that affinity is applied to leases when they enter the state
! 824: \'free\' from \'expired\' or \'released\'. In this case also, leases will not
! 825: be moved from free to backup if the secondary already has more than its
! 826: share.
! 827: .PP
! 828: The second pass is only entered into if the first pass fails to reduce
! 829: the lts underneath the total number of free state leases multiplied by
! 830: the \fBmax-lease-ownership\fR percentage. In this pass, the oldest
! 831: leases are given over to the peer without second thought about the Load
! 832: Balance Algorithm, and this continues until the lts falls under this
! 833: value. In this way, the local server will also happily keep a small
! 834: percentage of the leases that would normally load balance to itself.
! 835: .PP
! 836: So, the \fBmax-lease-misbalance\fR value acts as a behavioural gate.
! 837: Smaller values will cause more leases to transition states to balance
! 838: the pools over time, higher values will decrease the amount of change
! 839: (but may lead to pool starvation if there's a run on leases).
! 840: .PP
! 841: The \fBmax-lease-ownership\fR value permits a small (percentage) skew
! 842: in the lease balance of a percentage of the total number of free state
! 843: leases.
! 844: .PP
! 845: Finally, the \fBmin-balance\fR and \fBmax-balance\fR make certain that a
! 846: scheduled rebalance event happens within a reasonable timeframe (not
! 847: to be thrown off by, for example, a 7 year old free lease).
! 848: .PP
! 849: Plausible values for the percentages lie between 0 and 100, inclusive, but
! 850: values over 50 are indistinguishable from one another (once lts exceeds
! 851: 50% of the free state leases, one server must therefore have 100% of the
! 852: leases in its respective free state). It is recommended to select
! 853: a \fBmax-lease-ownership\fR value that is lower than the value selected
! 854: for the \fBmax-lease-misbalance\fR value. \fBmax-lease-ownership\fR
! 855: defaults to 10, and \fBmax-lease-misbalance\fR defaults to 15.
! 856: .PP
! 857: Plausible values for the \fBmin-balance\fR and \fBmax-balance\fR times also
! 858: range from 0 to (2^32)-1 (or the limit of your local time_t value), but
! 859: default to values 60 and 3600 respectively (to place balance events between
! 860: 1 minute and 1 hour).
! 861: .RE
! 862: .SH CLIENT CLASSING
! 863: Clients can be separated into classes, and treated differently
! 864: depending on what class they are in. This separation can be done
! 865: either with a conditional statement, or with a match statement within
! 866: the class declaration. It is possible to specify a limit on the
! 867: total number of clients within a particular class or subclass that may
! 868: hold leases at one time, and it is possible to specify automatic
! 869: subclassing based on the contents of the client packet.
! 870: .PP
! 871: To add clients to classes based on conditional evaluation, you can
! 872: specify a matching expression in the class statement:
! 873: .PP
! 874: .nf
! 875: class "ras-clients" {
! 876: match if substring (option dhcp-client-identifier, 1, 3) = "RAS";
! 877: }
! 878: .fi
! 879: .PP
! 880: Note that whether you use matching expressions or add statements (or
! 881: both) to classify clients, you must always write a class declaration
! 882: for any class that you use. If there will be no match statement and
! 883: no in-scope statements for a class, the declaration should look like
! 884: this:
! 885: .PP
! 886: .nf
! 887: class "ras-clients" {
! 888: }
! 889: .fi
! 890: .SH SUBCLASSES
! 891: .PP
! 892: In addition to classes, it is possible to declare subclasses. A
! 893: subclass is a class with the same name as a regular class, but with a
! 894: specific submatch expression which is hashed for quick matching.
! 895: This is essentially a speed hack - the main difference between five
! 896: classes with match expressions and one class with five subclasses is
! 897: that it will be quicker to find the subclasses. Subclasses work as
! 898: follows:
! 899: .PP
! 900: .nf
! 901: class "allocation-class-1" {
! 902: match pick-first-value (option dhcp-client-identifier, hardware);
! 903: }
! 904:
! 905: class "allocation-class-2" {
! 906: match pick-first-value (option dhcp-client-identifier, hardware);
! 907: }
! 908:
! 909: subclass "allocation-class-1" 1:8:0:2b:4c:39:ad;
! 910: subclass "allocation-class-2" 1:8:0:2b:a9:cc:e3;
! 911: subclass "allocation-class-1" 1:0:0:c4:aa:29:44;
! 912:
! 913: subnet 10.0.0.0 netmask 255.255.255.0 {
! 914: pool {
! 915: allow members of "allocation-class-1";
! 916: range 10.0.0.11 10.0.0.50;
! 917: }
! 918: pool {
! 919: allow members of "allocation-class-2";
! 920: range 10.0.0.51 10.0.0.100;
! 921: }
! 922: }
! 923: .fi
! 924: .PP
! 925: The data following the class name in the subclass declaration is a
! 926: constant value to use in matching the match expression for the class.
! 927: When class matching is done, the server will evaluate the match
! 928: expression and then look the result up in the hash table. If it
! 929: finds a match, the client is considered a member of both the class and
! 930: the subclass.
! 931: .PP
! 932: Subclasses can be declared with or without scope. In the above
! 933: example, the sole purpose of the subclass is to allow some clients
! 934: access to one address pool, while other clients are given access to
! 935: the other pool, so these subclasses are declared without scopes. If
! 936: part of the purpose of the subclass were to define different parameter
! 937: values for some clients, you might want to declare some subclasses
! 938: with scopes.
! 939: .PP
! 940: In the above example, if you had a single client that needed some
! 941: configuration parameters, while most didn't, you might write the
! 942: following subclass declaration for that client:
! 943: .PP
! 944: .nf
! 945: subclass "allocation-class-2" 1:08:00:2b:a1:11:31 {
! 946: option root-path "samsara:/var/diskless/alphapc";
! 947: filename "/tftpboot/netbsd.alphapc-diskless";
! 948: }
! 949: .fi
! 950: .PP
! 951: In this example, we've used subclassing as a way to control address
! 952: allocation on a per-client basis. However, it's also possible to use
! 953: subclassing in ways that are not specific to clients - for example, to
! 954: use the value of the vendor-class-identifier option to determine what
! 955: values to send in the vendor-encapsulated-options option. An example
! 956: of this is shown under the VENDOR ENCAPSULATED OPTIONS head in the
! 957: .B dhcp-options(5)
! 958: manual page.
! 959: .SH PER-CLASS LIMITS ON DYNAMIC ADDRESS ALLOCATION
! 960: .PP
! 961: You may specify a limit to the number of clients in a class that can
! 962: be assigned leases. The effect of this will be to make it difficult
! 963: for a new client in a class to get an address. Once a class with
! 964: such a limit has reached its limit, the only way a new client in that
! 965: class can get a lease is for an existing client to relinquish its
! 966: lease, either by letting it expire, or by sending a DHCPRELEASE
! 967: packet. Classes with lease limits are specified as follows:
! 968: .PP
! 969: .nf
! 970: class "limited-1" {
! 971: lease limit 4;
! 972: }
! 973: .fi
! 974: .PP
! 975: This will produce a class in which a maximum of four members may hold
! 976: a lease at one time.
! 977: .SH SPAWNING CLASSES
! 978: .PP
! 979: It is possible to declare a
! 980: .I spawning class\fR.
! 981: A spawning class is a class that automatically produces subclasses
! 982: based on what the client sends. The reason that spawning classes
! 983: were created was to make it possible to create lease-limited classes
! 984: on the fly. The envisioned application is a cable-modem environment
! 985: where the ISP wishes to provide clients at a particular site with more
! 986: than one IP address, but does not wish to provide such clients with
! 987: their own subnet, nor give them an unlimited number of IP addresses
! 988: from the network segment to which they are connected.
! 989: .PP
! 990: Many cable modem head-end systems can be configured to add a Relay
! 991: Agent Information option to DHCP packets when relaying them to the
! 992: DHCP server. These systems typically add a circuit ID or remote ID
! 993: option that uniquely identifies the customer site. To take advantage
! 994: of this, you can write a class declaration as follows:
! 995: .PP
! 996: .nf
! 997: class "customer" {
! 998: spawn with option agent.circuit-id;
! 999: lease limit 4;
! 1000: }
! 1001: .fi
! 1002: .PP
! 1003: Now whenever a request comes in from a customer site, the circuit ID
! 1004: option will be checked against the class's hash table. If a subclass
! 1005: is found that matches the circuit ID, the client will be classified in
! 1006: that subclass and treated accordingly. If no subclass is found
! 1007: matching the circuit ID, a new one will be created and logged in the
! 1008: .B dhcpd.leases
! 1009: file, and the client will be classified in this new class. Once the
! 1010: client has been classified, it will be treated according to the rules
! 1011: of the class, including, in this case, being subject to the per-site
! 1012: limit of four leases.
! 1013: .PP
! 1014: The use of the subclass spawning mechanism is not restricted to relay
! 1015: agent options - this particular example is given only because it is a
! 1016: fairly straightforward one.
! 1017: .SH COMBINING MATCH, MATCH IF AND SPAWN WITH
! 1018: .PP
! 1019: In some cases, it may be useful to use one expression to assign a
! 1020: client to a particular class, and a second expression to put it into a
! 1021: subclass of that class. This can be done by combining the \fBmatch
! 1022: if\fR and \fBspawn with\fR statements, or the \fBmatch if\fR and
! 1023: \fBmatch\fR statements. For example:
! 1024: .PP
! 1025: .nf
! 1026: class "jr-cable-modems" {
! 1027: match if option dhcp-vendor-identifier = "jrcm";
! 1028: spawn with option agent.circuit-id;
! 1029: lease limit 4;
! 1030: }
! 1031:
! 1032: class "dv-dsl-modems" {
! 1033: match if option dhcp-vendor-identifier = "dvdsl";
! 1034: spawn with option agent.circuit-id;
! 1035: lease limit 16;
! 1036: }
! 1037: .fi
! 1038: .PP
! 1039: This allows you to have two classes that both have the same \fBspawn
! 1040: with\fR expression without getting the clients in the two classes
! 1041: confused with each other.
! 1042: .SH DYNAMIC DNS UPDATES
! 1043: .PP
! 1044: The DHCP server has the ability to dynamically update the Domain Name
! 1045: System. Within the configuration files, you can define how you want
! 1046: the Domain Name System to be updated. These updates are RFC 2136
! 1047: compliant so any DNS server supporting RFC 2136 should be able to
! 1048: accept updates from the DHCP server.
! 1049: .PP
! 1050: Two DNS update schemes are currently implemented, and another is
! 1051: planned. The two that are currently implemented are the ad-hoc DNS
! 1052: update mode and the interim DHCP-DNS interaction draft update mode.
! 1053: In the future we plan to add a third mode which will be the standard
! 1054: DNS update method based on the RFCS for DHCP-DNS interaction and DHCID
! 1055: The DHCP server must be configured to use one of the two
! 1056: currently-supported methods, or not to do dns updates.
! 1057: This can be done with the
! 1058: .I ddns-update-style
! 1059: configuration parameter.
! 1060: .SH THE AD-HOC DNS UPDATE SCHEME
! 1061: The ad-hoc Dynamic DNS update scheme is
! 1062: .B now deprecated
! 1063: and
! 1064: .B
! 1065: does not work.
! 1066: In future releases of the ISC DHCP server, this scheme will not likely be
! 1067: available. The interim scheme works, allows for failover, and should now be
! 1068: used. The following description is left here for informational purposes
! 1069: only.
! 1070: .PP
! 1071: The ad-hoc Dynamic DNS update scheme implemented in this version of
! 1072: the ISC DHCP server is a prototype design, which does not
! 1073: have much to do with the standard update method that is being
! 1074: standardized in the IETF DHC working group, but rather implements some
! 1075: very basic, yet useful, update capabilities. This mode
! 1076: .B does not work
! 1077: with the
! 1078: .I failover protocol
! 1079: because it does not account for the possibility of two different DHCP
! 1080: servers updating the same set of DNS records.
! 1081: .PP
! 1082: For the ad-hoc DNS update method, the client's FQDN is derived in two
! 1083: parts. First, the hostname is determined. Then, the domain name is
! 1084: determined, and appended to the hostname.
! 1085: .PP
! 1086: The DHCP server determines the client's hostname by first looking for
! 1087: a \fIddns-hostname\fR configuration option, and using that if it is
! 1088: present. If no such option is present, the server looks for a
! 1089: valid hostname in the FQDN option sent by the client. If one is
! 1090: found, it is used; otherwise, if the client sent a host-name option,
! 1091: that is used. Otherwise, if there is a host declaration that applies
! 1092: to the client, the name from that declaration will be used. If none
! 1093: of these applies, the server will not have a hostname for the client,
! 1094: and will not be able to do a DNS update.
! 1095: .PP
! 1096: The domain name is determined from the
! 1097: .I ddns-domainname
! 1098: configuration option. The default configuration for this option is:
! 1099: .nf
! 1100: .sp 1
! 1101: option server.ddns-domainname = config-option domain-name;
! 1102:
! 1103: .fi
! 1104: So if this configuration option is not configured to a different
! 1105: value (over-riding the above default), or if a domain-name option
! 1106: has not been configured for the client's scope, then the server will
! 1107: not attempt to perform a DNS update.
! 1108: .PP
! 1109: The client's fully-qualified domain name, derived as we have
! 1110: described, is used as the name on which an "A" record will be stored.
! 1111: The A record will contain the IP address that the client was assigned
! 1112: in its lease. If there is already an A record with the same name in
! 1113: the DNS server, no update of either the A or PTR records will occur -
! 1114: this prevents a client from claiming that its hostname is the name of
! 1115: some network server. For example, if you have a fileserver called
! 1116: "fs.sneedville.edu", and the client claims its hostname is "fs", no
! 1117: DNS update will be done for that client, and an error message will be
! 1118: logged.
! 1119: .PP
! 1120: If the A record update succeeds, a PTR record update for the assigned
! 1121: IP address will be done, pointing to the A record. This update is
! 1122: unconditional - it will be done even if another PTR record of the same
! 1123: name exists. Since the IP address has been assigned to the DHCP
! 1124: server, this should be safe.
! 1125: .PP
! 1126: Please note that the current implementation assumes clients only have
! 1127: a single network interface. A client with two network interfaces
! 1128: will see unpredictable behavior. This is considered a bug, and will
! 1129: be fixed in a later release. It may be helpful to enable the
! 1130: .I one-lease-per-client
! 1131: parameter so that roaming clients do not trigger this same behavior.
! 1132: .PP
! 1133: The DHCP protocol normally involves a four-packet exchange - first the
! 1134: client sends a DHCPDISCOVER message, then the server sends a
! 1135: DHCPOFFER, then the client sends a DHCPREQUEST, then the server sends
! 1136: a DHCPACK. In the current version of the server, the server will do
! 1137: a DNS update after it has received the DHCPREQUEST, and before it has
! 1138: sent the DHCPACK. It only sends the DNS update if it has not sent
! 1139: one for the client's address before, in order to minimize the impact
! 1140: on the DHCP server.
! 1141: .PP
! 1142: When the client's lease expires, the DHCP server (if it is operating
! 1143: at the time, or when next it operates) will remove the client's A and
! 1144: PTR records from the DNS database. If the client releases its lease
! 1145: by sending a DHCPRELEASE message, the server will likewise remove the
! 1146: A and PTR records.
! 1147: .SH THE INTERIM DNS UPDATE SCHEME
! 1148: The interim DNS update scheme operates mostly according to several
! 1149: drafts considered by the IETF. While the drafts have since become
! 1150: RFCs the code was written before they were finalized and there are
! 1151: some differences between our code and the final RFCs. We plan to
! 1152: update our code, probably adding a standard DNS update option, at
! 1153: some time. The basic framework is similar with the main material
! 1154: difference being that a DHCID RR was assigned in the RFCs whereas
! 1155: our code continues to use an experimental TXT record. The format
! 1156: of the TXT record bears a resemblance to the DHCID RR but it is not
! 1157: equivalent (MD5 vs SHA1, field length differences etc).
! 1158: The standard RFCs are:
! 1159: .PP
! 1160: .nf
! 1161: .ce 3
! 1162: RFC 4701 (updated by RF5494)
! 1163: RFC 4702
! 1164: RFC 4703
! 1165: .fi
! 1166: .PP
! 1167: And the corresponding drafts were:
! 1168: .PP
! 1169: .nf
! 1170: .ce 3
! 1171: draft-ietf-dnsext-dhcid-rr-??.txt
! 1172: draft-ietf-dhc-fqdn-option-??.txt
! 1173: draft-ietf-dhc-ddns-resolution-??.txt
! 1174: .fi
! 1175: .PP
! 1176: Because our implementation is slightly different than the standard, we
! 1177: will briefly document the operation of this update style here.
! 1178: .PP
! 1179: The first point to understand about this style of DNS update is that
! 1180: unlike the ad-hoc style, the DHCP server does not necessarily
! 1181: always update both the A and the PTR records. The FQDN option
! 1182: includes a flag which, when sent by the client, indicates that the
! 1183: client wishes to update its own A record. In that case, the server
! 1184: can be configured either to honor the client's intentions or ignore
! 1185: them. This is done with the statement \fIallow client-updates;\fR or
! 1186: the statement \fIignore client-updates;\fR. By default, client
! 1187: updates are allowed.
! 1188: .PP
! 1189: If the server is configured to allow client updates, then if the
! 1190: client sends a fully-qualified domain name in the FQDN option, the
! 1191: server will use that name the client sent in the FQDN option to update
! 1192: the PTR record. For example, let us say that the client is a visitor
! 1193: from the "radish.org" domain, whose hostname is "jschmoe". The
! 1194: server is for the "example.org" domain. The DHCP client indicates in
! 1195: the FQDN option that its FQDN is "jschmoe.radish.org.". It also
! 1196: indicates that it wants to update its own A record. The DHCP server
! 1197: therefore does not attempt to set up an A record for the client, but
! 1198: does set up a PTR record for the IP address that it assigns the
! 1199: client, pointing at jschmoe.radish.org. Once the DHCP client has an
! 1200: IP address, it can update its own A record, assuming that the
! 1201: "radish.org" DNS server will allow it to do so.
! 1202: .PP
! 1203: If the server is configured not to allow client updates, or if the
! 1204: client doesn't want to do its own update, the server will simply
! 1205: choose a name for the client from either the fqdn option (if present)
! 1206: or the hostname option (if present). It will use its own
! 1207: domain name for the client, just as in the ad-hoc update scheme.
! 1208: It will then update both the A and PTR record, using the name that it
! 1209: chose for the client. If the client sends a fully-qualified domain
! 1210: name in the fqdn option, the server uses only the leftmost part of the
! 1211: domain name - in the example above, "jschmoe" instead of
! 1212: "jschmoe.radish.org".
! 1213: .PP
! 1214: Further, if the \fIignore client-updates;\fR directive is used, then
! 1215: the server will in addition send a response in the DHCP packet, using
! 1216: the FQDN Option, that implies to the client that it should perform its
! 1217: own updates if it chooses to do so. With \fIdeny client-updates;\fR, a
! 1218: response is sent which indicates the client may not perform updates.
! 1219: .PP
! 1220: Also, if the
! 1221: .I use-host-decl-names
! 1222: configuration option is enabled, then the host declaration's
! 1223: .I hostname
! 1224: will be used in place of the
! 1225: .I hostname
! 1226: option, and the same rules will apply as described above.
! 1227: .PP
! 1228: The other difference between the ad-hoc scheme and the interim
! 1229: scheme is that with the interim scheme, a method is used that
! 1230: allows more than one DHCP server to update the DNS database without
! 1231: accidentally deleting A records that shouldn't be deleted nor failing
! 1232: to add A records that should be added. The scheme works as follows:
! 1233: .PP
! 1234: When the DHCP server issues a client a new lease, it creates a text
! 1235: string that is an MD5 hash over the DHCP client's identification (see
! 1236: draft-ietf-dnsext-dhcid-rr-??.txt for details). The update adds an A
! 1237: record with the name the server chose and a TXT record containing the
! 1238: hashed identifier string (hashid). If this update succeeds, the
! 1239: server is done.
! 1240: .PP
! 1241: If the update fails because the A record already exists, then the DHCP
! 1242: server attempts to add the A record with the prerequisite that there
! 1243: must be a TXT record in the same name as the new A record, and that
! 1244: TXT record's contents must be equal to hashid. If this update
! 1245: succeeds, then the client has its A record and PTR record. If it
! 1246: fails, then the name the client has been assigned (or requested) is in
! 1247: use, and can't be used by the client. At this point the DHCP server
! 1248: gives up trying to do a DNS update for the client until the client
! 1249: chooses a new name.
! 1250: .PP
! 1251: The interim DNS update scheme is called interim for two reasons.
! 1252: First, it does not quite follow the RFCs. The RFCs call for a
! 1253: new DHCID RRtype while he interim DNS update scheme uses a TXT record.
! 1254: The ddns-resolution draft called for the DHCP server to put a DHCID RR
! 1255: on the PTR record, but the \fIinterim\fR update method does not do this.
! 1256: In the final RFC this requirement was relaxed such that a server may
! 1257: add a DHCID RR to the PTR record.
! 1258: .PP
! 1259: In addition to these differences, the server also does not update very
! 1260: aggressively. Because each DNS update involves a round trip to the
! 1261: DNS server, there is a cost associated with doing updates even if they
! 1262: do not actually modify the DNS database. So the DHCP server tracks
! 1263: whether or not it has updated the record in the past (this information
! 1264: is stored on the lease) and does not attempt to update records that it
! 1265: thinks it has already updated.
! 1266: .PP
! 1267: This can lead to cases where the DHCP server adds a record, and then
! 1268: the record is deleted through some other mechanism, but the server
! 1269: never again updates the DNS because it thinks the data is already
! 1270: there. In this case the data can be removed from the lease through
! 1271: operator intervention, and once this has been done, the DNS will be
! 1272: updated the next time the client renews.
! 1273: .SH DYNAMIC DNS UPDATE SECURITY
! 1274: .PP
! 1275: When you set your DNS server up to allow updates from the DHCP server,
! 1276: you may be exposing it to unauthorized updates. To avoid this, you
! 1277: should use TSIG signatures - a method of cryptographically signing
! 1278: updates using a shared secret key. As long as you protect the
! 1279: secrecy of this key, your updates should also be secure. Note,
! 1280: however, that the DHCP protocol itself provides no security, and that
! 1281: clients can therefore provide information to the DHCP server which the
! 1282: DHCP server will then use in its updates, with the constraints
! 1283: described previously.
! 1284: .PP
! 1285: The DNS server must be configured to allow updates for any zone that
! 1286: the DHCP server will be updating. For example, let us say that
! 1287: clients in the sneedville.edu domain will be assigned addresses on the
! 1288: 10.10.17.0/24 subnet. In that case, you will need a key declaration
! 1289: for the TSIG key you will be using, and also two zone declarations -
! 1290: one for the zone containing A records that will be updates and one for
! 1291: the zone containing PTR records - for ISC BIND, something like this:
! 1292: .PP
! 1293: .nf
! 1294: key DHCP_UPDATER {
! 1295: algorithm HMAC-MD5.SIG-ALG.REG.INT;
! 1296: secret pRP5FapFoJ95JEL06sv4PQ==;
! 1297: };
! 1298:
! 1299: zone "example.org" {
! 1300: type master;
! 1301: file "example.org.db";
! 1302: allow-update { key DHCP_UPDATER; };
! 1303: };
! 1304:
! 1305: zone "17.10.10.in-addr.arpa" {
! 1306: type master;
! 1307: file "10.10.17.db";
! 1308: allow-update { key DHCP_UPDATER; };
! 1309: };
! 1310: .fi
! 1311: .PP
! 1312: You will also have to configure your DHCP server to do updates to
! 1313: these zones. To do so, you need to add something like this to your
! 1314: dhcpd.conf file:
! 1315: .PP
! 1316: .nf
! 1317: key DHCP_UPDATER {
! 1318: algorithm HMAC-MD5.SIG-ALG.REG.INT;
! 1319: secret pRP5FapFoJ95JEL06sv4PQ==;
! 1320: };
! 1321:
! 1322: zone EXAMPLE.ORG. {
! 1323: primary 127.0.0.1;
! 1324: key DHCP_UPDATER;
! 1325: }
! 1326:
! 1327: zone 17.127.10.in-addr.arpa. {
! 1328: primary 127.0.0.1;
! 1329: key DHCP_UPDATER;
! 1330: }
! 1331: .fi
! 1332: .PP
! 1333: The \fIprimary\fR statement specifies the IP address of the name
! 1334: server whose zone information is to be updated.
! 1335: .PP
! 1336: Note that the zone declarations have to correspond to authority
! 1337: records in your name server - in the above example, there must be an
! 1338: SOA record for "example.org." and for "17.10.10.in-addr.arpa.". For
! 1339: example, if there were a subdomain "foo.example.org" with no separate
! 1340: SOA, you could not write a zone declaration for "foo.example.org."
! 1341: Also keep in mind that zone names in your DHCP configuration should end in a
! 1342: "."; this is the preferred syntax. If you do not end your zone name in a
! 1343: ".", the DHCP server will figure it out. Also note that in the DHCP
! 1344: configuration, zone names are not encapsulated in quotes where there are in
! 1345: the DNS configuration.
! 1346: .PP
! 1347: You should choose your own secret key, of course. The ISC BIND 8 and
! 1348: 9 distributions come with a program for generating secret keys called
! 1349: dnssec-keygen. The version that comes with BIND 9 is likely to produce a
! 1350: substantially more random key, so we recommend you use that one even
! 1351: if you are not using BIND 9 as your DNS server. If you are using BIND 9's
! 1352: dnssec-keygen, the above key would be created as follows:
! 1353: .PP
! 1354: .nf
! 1355: dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
! 1356: .fi
! 1357: .PP
! 1358: If you are using the BIND 8 dnskeygen program, the following command will
! 1359: generate a key as seen above:
! 1360: .PP
! 1361: .nf
! 1362: dnskeygen -H 128 -u -c -n DHCP_UPDATER
! 1363: .fi
! 1364: .PP
! 1365: You may wish to enable logging of DNS updates on your DNS server.
! 1366: To do so, you might write a logging statement like the following:
! 1367: .PP
! 1368: .nf
! 1369: logging {
! 1370: channel update_debug {
! 1371: file "/var/log/update-debug.log";
! 1372: severity debug 3;
! 1373: print-category yes;
! 1374: print-severity yes;
! 1375: print-time yes;
! 1376: };
! 1377: channel security_info {
! 1378: file "/var/log/named-auth.info";
! 1379: severity info;
! 1380: print-category yes;
! 1381: print-severity yes;
! 1382: print-time yes;
! 1383: };
! 1384:
! 1385: category update { update_debug; };
! 1386: category security { security_info; };
! 1387: };
! 1388: .fi
! 1389: .PP
! 1390: You must create the /var/log/named-auth.info and
! 1391: /var/log/update-debug.log files before starting the name server. For
! 1392: more information on configuring ISC BIND, consult the documentation
! 1393: that accompanies it.
! 1394: .SH REFERENCE: EVENTS
! 1395: .PP
! 1396: There are three kinds of events that can happen regarding a lease, and
! 1397: it is possible to declare statements that occur when any of these
! 1398: events happen. These events are the commit event, when the server
! 1399: has made a commitment of a certain lease to a client, the release
! 1400: event, when the client has released the server from its commitment,
! 1401: and the expiry event, when the commitment expires.
! 1402: .PP
! 1403: To declare a set of statements to execute when an event happens, you
! 1404: must use the \fBon\fR statement, followed by the name of the event,
! 1405: followed by a series of statements to execute when the event happens,
! 1406: enclosed in braces. Events are used to implement DNS
! 1407: updates, so you should not define your own event handlers if you are
! 1408: using the built-in DNS update mechanism.
! 1409: .PP
! 1410: The built-in version of the DNS update mechanism is in a text
! 1411: string towards the top of server/dhcpd.c. If you want to use events
! 1412: for things other than DNS updates, and you also want DNS updates, you
! 1413: will have to start out by copying this code into your dhcpd.conf file
! 1414: and modifying it.
! 1415: .SH REFERENCE: DECLARATIONS
! 1416: .PP
! 1417: .B The
! 1418: .I include
! 1419: .B statement
! 1420: .PP
! 1421: .nf
! 1422: \fBinclude\fR \fI"filename"\fR\fB;\fR
! 1423: .fi
! 1424: .PP
! 1425: The \fIinclude\fR statement is used to read in a named file, and process
! 1426: the contents of that file as though it were entered in place of the
! 1427: include statement.
! 1428: .PP
! 1429: .B The
! 1430: .I shared-network
! 1431: .B statement
! 1432: .PP
! 1433: .nf
! 1434: \fBshared-network\fR \fIname\fR \fB{\fR
! 1435: [ \fIparameters\fR ]
! 1436: [ \fIdeclarations\fR ]
! 1437: \fB}\fR
! 1438: .fi
! 1439: .PP
! 1440: The \fIshared-network\fR statement is used to inform the DHCP server
! 1441: that some IP subnets actually share the same physical network. Any
! 1442: subnets in a shared network should be declared within a
! 1443: \fIshared-network\fR statement. Parameters specified in the
! 1444: \fIshared-network\fR statement will be used when booting clients on
! 1445: those subnets unless parameters provided at the subnet or host level
! 1446: override them. If any subnet in a shared network has addresses
! 1447: available for dynamic allocation, those addresses are collected into a
! 1448: common pool for that shared network and assigned to clients as needed.
! 1449: There is no way to distinguish on which subnet of a shared network a
! 1450: client should boot.
! 1451: .PP
! 1452: .I Name
! 1453: should be the name of the shared network. This name is used when
! 1454: printing debugging messages, so it should be descriptive for the
! 1455: shared network. The name may have the syntax of a valid domain name
! 1456: (although it will never be used as such), or it may be any arbitrary
! 1457: name, enclosed in quotes.
! 1458: .PP
! 1459: .B The
! 1460: .I subnet
! 1461: .B statement
! 1462: .PP
! 1463: .nf
! 1464: \fBsubnet\fR \fIsubnet-number\fR \fBnetmask\fR \fInetmask\fR \fB{\fR
! 1465: [ \fIparameters\fR ]
! 1466: [ \fIdeclarations\fR ]
! 1467: \fB}\fR
! 1468: .fi
! 1469: .PP
! 1470: The \fIsubnet\fR statement is used to provide dhcpd with enough
! 1471: information to tell whether or not an IP address is on that subnet.
! 1472: It may also be used to provide subnet-specific parameters and to
! 1473: specify what addresses may be dynamically allocated to clients booting
! 1474: on that subnet. Such addresses are specified using the \fIrange\fR
! 1475: declaration.
! 1476: .PP
! 1477: The
! 1478: .I subnet-number
! 1479: should be an IP address or domain name which resolves to the subnet
! 1480: number of the subnet being described. The
! 1481: .I netmask
! 1482: should be an IP address or domain name which resolves to the subnet mask
! 1483: of the subnet being described. The subnet number, together with the
! 1484: netmask, are sufficient to determine whether any given IP address is
! 1485: on the specified subnet.
! 1486: .PP
! 1487: Although a netmask must be given with every subnet declaration, it is
! 1488: recommended that if there is any variance in subnet masks at a site, a
! 1489: subnet-mask option statement be used in each subnet declaration to set
! 1490: the desired subnet mask, since any subnet-mask option statement will
! 1491: override the subnet mask declared in the subnet statement.
! 1492: .PP
! 1493: .B The
! 1494: .I subnet6
! 1495: .B statement
! 1496: .PP
! 1497: .nf
! 1498: \fBsubnet6\fR \fIsubnet6-number\fR \fB{\fR
! 1499: [ \fIparameters\fR ]
! 1500: [ \fIdeclarations\fR ]
! 1501: \fB}\fR
! 1502: .fi
! 1503: .PP
! 1504: The \fIsubnet6\fR statement is used to provide dhcpd with enough
! 1505: information to tell whether or not an IPv6 address is on that subnet6.
! 1506: It may also be used to provide subnet-specific parameters and to
! 1507: specify what addresses may be dynamically allocated to clients booting
! 1508: on that subnet.
! 1509: .PP
! 1510: The
! 1511: .I subnet6-number
! 1512: should be an IPv6 network identifier, specified as ip6-address/bits.
! 1513: .PP
! 1514: .B The
! 1515: .I range
! 1516: .B statement
! 1517: .PP
! 1518: .nf
! 1519: .B range\fR [ \fBdynamic-bootp\fR ] \fIlow-address\fR [ \fIhigh-address\fR]\fB;\fR
! 1520: .fi
! 1521: .PP
! 1522: For any subnet on which addresses will be assigned dynamically, there
! 1523: must be at least one \fIrange\fR statement. The range statement
! 1524: gives the lowest and highest IP addresses in a range. All IP
! 1525: addresses in the range should be in the subnet in which the
! 1526: \fIrange\fR statement is declared. The \fIdynamic-bootp\fR flag may
! 1527: be specified if addresses in the specified range may be dynamically
! 1528: assigned to BOOTP clients as well as DHCP clients. When specifying a
! 1529: single address, \fIhigh-address\fR can be omitted.
! 1530: .PP
! 1531: .B The
! 1532: .I range6
! 1533: .B statement
! 1534: .PP
! 1535: .nf
! 1536: .B range6\fR \fIlow-address\fR \fIhigh-address\fR\fB;\fR
! 1537: .B range6\fR \fIsubnet6-number\fR\fB;\fR
! 1538: .B range6\fR \fIsubnet6-number\fR \fBtemporary\fR\fB;\fR
! 1539: .B range6\fR \fIaddress\fR \fBtemporary\fR\fB;\fR
! 1540: .fi
! 1541: .PP
! 1542: For any IPv6 subnet6 on which addresses will be assigned dynamically, there
! 1543: must be at least one \fIrange6\fR statement. The \fIrange6\fR statement
! 1544: can either be the lowest and highest IPv6 addresses in a \fIrange6\fR, or
! 1545: use CIDR notation, specified as ip6-address/bits. All IP addresses
! 1546: in the \fIrange6\fR should be in the subnet6 in which the
! 1547: \fIrange6\fR statement is declared.
! 1548: .PP
! 1549: The \fItemporay\fR variant makes the prefix (by default on 64 bits) available
! 1550: for temporary (RFC 4941) addresses. A new address per prefix in the shared
! 1551: network is computed at each request with an IA_TA option. Release and Confirm
! 1552: ignores temporary addresses.
! 1553: .PP
! 1554: Any IPv6 addresses given to hosts with \fIfixed-address6\fR are excluded
! 1555: from the \fIrange6\fR, as are IPv6 addresses on the server itself.
! 1556: .PP
! 1557: .PP
! 1558: .B The
! 1559: .I prefix6
! 1560: .B statement
! 1561: .PP
! 1562: .nf
! 1563: .B prefix6\fR \fIlow-address\fR \fIhigh-address\fR \fB/\fR \fIbits\fR\fB;\fR
! 1564: .fi
! 1565: .PP
! 1566: The \fIprefix6\fR is the \fIrange6\fR equivalent for Prefix Delegation
! 1567: (RFC 3633). Prefixes of \fIbits\fR length are assigned between
! 1568: \fIlow-address\fR and \fIhigh-address\fR.
! 1569: .PP
! 1570: Any IPv6 prefixes given to static entries (hosts) with \fIfixed-prefix6\fR
! 1571: are excluded from the \fIprefix6\fR.
! 1572: .PP
! 1573: This statement is currently global but it should have a shared-network scope.
! 1574: .PP
! 1575: .B The
! 1576: .I host
! 1577: .B statement
! 1578: .PP
! 1579: .nf
! 1580: \fBhost\fR \fIhostname\fR {
! 1581: [ \fIparameters\fR ]
! 1582: [ \fIdeclarations\fR ]
! 1583: \fB}\fR
! 1584: .fi
! 1585: .PP
! 1586: The
! 1587: .B host
! 1588: declaration provides a scope in which to provide configuration information about
! 1589: a specific client, and also provides a way to assign a client a fixed address.
! 1590: The host declaration provides a way for the DHCP server to identify a DHCP or
! 1591: BOOTP client, and also a way to assign the client a static IP address.
! 1592: .PP
! 1593: If it is desirable to be able to boot a DHCP or BOOTP client on more than one
! 1594: subnet with fixed addresses, more than one address may be specified in the
! 1595: .I fixed-address
! 1596: declaration, or more than one
! 1597: .B host
! 1598: statement may be specified matching the same client.
! 1599: .PP
! 1600: If client-specific boot parameters must change based on the network
! 1601: to which the client is attached, then multiple
! 1602: .B host
! 1603: declarations should be used. The
! 1604: .B host
! 1605: declarations will only match a client if one of their
! 1606: .I fixed-address
! 1607: statements is viable on the subnet (or shared network) where the client is
! 1608: attached. Conversely, for a
! 1609: .B host
! 1610: declaration to match a client being allocated a dynamic address, it must not
! 1611: have any
! 1612: .I fixed-address
! 1613: statements. You may therefore need a mixture of
! 1614: .B host
! 1615: declarations for any given client...some having
! 1616: .I fixed-address
! 1617: statements, others without.
! 1618: .PP
! 1619: .I hostname
! 1620: should be a name identifying the host. If a \fIhostname\fR option is
! 1621: not specified for the host, \fIhostname\fR is used.
! 1622: .PP
! 1623: \fIHost\fR declarations are matched to actual DHCP or BOOTP clients
! 1624: by matching the \fRdhcp-client-identifier\fR option specified in the
! 1625: \fIhost\fR declaration to the one supplied by the client, or, if the
! 1626: \fIhost\fR declaration or the client does not provide a
! 1627: \fRdhcp-client-identifier\fR option, by matching the \fIhardware\fR
! 1628: parameter in the \fIhost\fR declaration to the network hardware
! 1629: address supplied by the client. BOOTP clients do not normally
! 1630: provide a \fIdhcp-client-identifier\fR, so the hardware address must
! 1631: be used for all clients that may boot using the BOOTP protocol.
! 1632: .PP
! 1633: DHCPv6 servers can use the \fIhost-identifier option\fR parameter in
! 1634: the \fIhost\fR declaration, and specify any option with a fixed value
! 1635: to identify hosts.
! 1636: .PP
! 1637: Please be aware that
! 1638: .B only
! 1639: the \fIdhcp-client-identifier\fR option and the hardware address can be
! 1640: used to match a host declaration, or the \fIhost-identifier option\fR
! 1641: parameter for DHCPv6 servers. For example, it is not possible to
! 1642: match a host declaration to a \fIhost-name\fR option. This is
! 1643: because the host-name option cannot be guaranteed to be unique for any
! 1644: given client, whereas both the hardware address and
! 1645: \fIdhcp-client-identifier\fR option are at least theoretically
! 1646: guaranteed to be unique to a given client.
! 1647: .PP
! 1648: .B The
! 1649: .I group
! 1650: .B statement
! 1651: .PP
! 1652: .nf
! 1653: \fBgroup\fR {
! 1654: [ \fIparameters\fR ]
! 1655: [ \fIdeclarations\fR ]
! 1656: \fB}\fR
! 1657: .fi
! 1658: .PP
! 1659: The group statement is used simply to apply one or more parameters to
! 1660: a group of declarations. It can be used to group hosts, shared
! 1661: networks, subnets, or even other groups.
! 1662: .SH REFERENCE: ALLOW AND DENY
! 1663: The
! 1664: .I allow
! 1665: and
! 1666: .I deny
! 1667: statements can be used to control the response of the DHCP server to
! 1668: various sorts of requests. The allow and deny keywords actually have
! 1669: different meanings depending on the context. In a pool context, these
! 1670: keywords can be used to set up access lists for address allocation
! 1671: pools. In other contexts, the keywords simply control general server
! 1672: behavior with respect to clients based on scope. In a non-pool
! 1673: context, the
! 1674: .I ignore
! 1675: keyword can be used in place of the
! 1676: .I deny
! 1677: keyword to prevent logging of denied requests.
! 1678: .PP
! 1679: .SH ALLOW DENY AND IGNORE IN SCOPE
! 1680: The following usages of allow and deny will work in any scope,
! 1681: although it is not recommended that they be used in pool
! 1682: declarations.
! 1683: .PP
! 1684: .B The
! 1685: .I unknown-clients
! 1686: .B keyword
! 1687: .PP
! 1688: \fBallow unknown-clients;\fR
! 1689: \fBdeny unknown-clients;\fR
! 1690: \fBignore unknown-clients;\fR
! 1691: .PP
! 1692: The \fBunknown-clients\fR flag is used to tell dhcpd whether
! 1693: or not to dynamically assign addresses to unknown clients. Dynamic
! 1694: address assignment to unknown clients is \fBallow\fRed by default.
! 1695: An unknown client is simply a client that has no host declaration.
! 1696: .PP
! 1697: The use of this option is now \fIdeprecated\fR. If you are trying to
! 1698: restrict access on your network to known clients, you should use \fBdeny
! 1699: unknown-clients;\fR inside of your address pool, as described under the
! 1700: heading ALLOW AND DENY WITHIN POOL DECLARATIONS.
! 1701: .PP
! 1702: .B The
! 1703: .I bootp
! 1704: .B keyword
! 1705: .PP
! 1706: \fBallow bootp;\fR
! 1707: \fBdeny bootp;\fR
! 1708: \fBignore bootp;\fR
! 1709: .PP
! 1710: The \fBbootp\fR flag is used to tell dhcpd whether
! 1711: or not to respond to bootp queries. Bootp queries are \fBallow\fRed
! 1712: by default.
! 1713: .PP
! 1714: This option does not satisfy the requirement of failover peers for denying
! 1715: dynamic bootp clients. The \fBdeny dynamic bootp clients;\fR option should
! 1716: be used instead. See the ALLOW AND DENY WITHIN POOL DECLARATIONS section
! 1717: of this man page for more details.
! 1718: .PP
! 1719: .B The
! 1720: .I booting
! 1721: .B keyword
! 1722: .PP
! 1723: \fBallow booting;\fR
! 1724: \fBdeny booting;\fR
! 1725: \fBignore booting;\fR
! 1726: .PP
! 1727: The \fBbooting\fR flag is used to tell dhcpd whether or not to respond
! 1728: to queries from a particular client. This keyword only has meaning
! 1729: when it appears in a host declaration. By default, booting is
! 1730: \fBallow\fRed, but if it is disabled for a particular client, then
! 1731: that client will not be able to get an address from the DHCP server.
! 1732: .PP
! 1733: .B The
! 1734: .I duplicates
! 1735: .B keyword
! 1736: .PP
! 1737: \fBallow duplicates;\fR
! 1738: \fBdeny duplicates;\fR
! 1739: .PP
! 1740: Host declarations can match client messages based on the DHCP Client
! 1741: Identifier option or based on the client's network hardware type and
! 1742: MAC address. If the MAC address is used, the host declaration will
! 1743: match any client with that MAC address - even clients with different
! 1744: client identifiers. This doesn't normally happen, but is possible
! 1745: when one computer has more than one operating system installed on it -
! 1746: for example, Microsoft Windows and NetBSD or Linux.
! 1747: .PP
! 1748: The \fBduplicates\fR flag tells the DHCP server that if a request is
! 1749: received from a client that matches the MAC address of a host
! 1750: declaration, any other leases matching that MAC address should be
! 1751: discarded by the server, even if the UID is not the same. This is a
! 1752: violation of the DHCP protocol, but can prevent clients whose client
! 1753: identifiers change regularly from holding many leases at the same time.
! 1754: By default, duplicates are \fBallow\fRed.
! 1755: .PP
! 1756: .B The
! 1757: .I declines
! 1758: .B keyword
! 1759: .PP
! 1760: \fBallow declines;\fR
! 1761: \fBdeny declines;\fR
! 1762: \fBignore declines;\fR
! 1763: .PP
! 1764: The DHCPDECLINE message is used by DHCP clients to indicate that the
! 1765: lease the server has offered is not valid. When the server receives
! 1766: a DHCPDECLINE for a particular address, it normally abandons that
! 1767: address, assuming that some unauthorized system is using it.
! 1768: Unfortunately, a malicious or buggy client can, using DHCPDECLINE
! 1769: messages, completely exhaust the DHCP server's allocation pool. The
! 1770: server will reclaim these leases, but while the client is running
! 1771: through the pool, it may cause serious thrashing in the DNS, and it
! 1772: will also cause the DHCP server to forget old DHCP client address
! 1773: allocations.
! 1774: .PP
! 1775: The \fBdeclines\fR flag tells the DHCP server whether or not to honor
! 1776: DHCPDECLINE messages. If it is set to \fBdeny\fR or \fBignore\fR in
! 1777: a particular scope, the DHCP server will not respond to DHCPDECLINE
! 1778: messages.
! 1779: .PP
! 1780: .B The
! 1781: .I client-updates
! 1782: .B keyword
! 1783: .PP
! 1784: \fBallow client-updates;\fR
! 1785: \fBdeny client-updates;\fR
! 1786: .PP
! 1787: The \fBclient-updates\fR flag tells the DHCP server whether or not to
! 1788: honor the client's intention to do its own update of its A record.
! 1789: This is only relevant when doing \fIinterim\fR DNS updates. See the
! 1790: documentation under the heading THE INTERIM DNS UPDATE SCHEME for
! 1791: details.
! 1792: .PP
! 1793: .B The
! 1794: .I leasequery
! 1795: .B keyword
! 1796: .PP
! 1797: \fBallow leasequery;\fR
! 1798: \fBdeny leasequery;\fR
! 1799: .PP
! 1800: The \fBleasequery\fR flag tells the DHCP server whether or not to
! 1801: answer DHCPLEASEQUERY packets. The answer to a DHCPLEASEQUERY packet
! 1802: includes information about a specific lease, such as when it was
! 1803: issued and when it will expire. By default, the server will not
! 1804: respond to these packets.
! 1805: .SH ALLOW AND DENY WITHIN POOL DECLARATIONS
! 1806: .PP
! 1807: The uses of the allow and deny keywords shown in the previous section
! 1808: work pretty much the same way whether the client is sending a
! 1809: DHCPDISCOVER or a DHCPREQUEST message - an address will be allocated
! 1810: to the client (either the old address it's requesting, or a new
! 1811: address) and then that address will be tested to see if it's okay to
! 1812: let the client have it. If the client requested it, and it's not
! 1813: okay, the server will send a DHCPNAK message. Otherwise, the server
! 1814: will simply not respond to the client. If it is okay to give the
! 1815: address to the client, the server will send a DHCPACK message.
! 1816: .PP
! 1817: The primary motivation behind pool declarations is to have address
! 1818: allocation pools whose allocation policies are different. A client
! 1819: may be denied access to one pool, but allowed access to another pool
! 1820: on the same network segment. In order for this to work, access
! 1821: control has to be done during address allocation, not after address
! 1822: allocation is done.
! 1823: .PP
! 1824: When a DHCPREQUEST message is processed, address allocation simply
! 1825: consists of looking up the address the client is requesting and seeing
! 1826: if it's still available for the client. If it is, then the DHCP
! 1827: server checks both the address pool permit lists and the relevant
! 1828: in-scope allow and deny statements to see if it's okay to give the
! 1829: lease to the client. In the case of a DHCPDISCOVER message, the
! 1830: allocation process is done as described previously in the ADDRESS
! 1831: ALLOCATION section.
! 1832: .PP
! 1833: When declaring permit lists for address allocation pools, the
! 1834: following syntaxes are recognized following the allow or deny keywords:
! 1835: .PP
! 1836: \fBknown-clients;\fR
! 1837: .PP
! 1838: If specified, this statement either allows or prevents allocation from
! 1839: this pool to any client that has a host declaration (i.e., is known).
! 1840: A client is known if it has a host declaration in \fIany\fR scope, not
! 1841: just the current scope.
! 1842: .PP
! 1843: \fBunknown-clients;\fR
! 1844: .PP
! 1845: If specified, this statement either allows or prevents allocation from
! 1846: this pool to any client that has no host declaration (i.e., is not
! 1847: known).
! 1848: .PP
! 1849: \fBmembers of "\fRclass\fB";\fR
! 1850: .PP
! 1851: If specified, this statement either allows or prevents allocation from
! 1852: this pool to any client that is a member of the named class.
! 1853: .PP
! 1854: \fBdynamic bootp clients;\fR
! 1855: .PP
! 1856: If specified, this statement either allows or prevents allocation from
! 1857: this pool to any bootp client.
! 1858: .PP
! 1859: \fBauthenticated clients;\fR
! 1860: .PP
! 1861: If specified, this statement either allows or prevents allocation from
! 1862: this pool to any client that has been authenticated using the DHCP
! 1863: authentication protocol. This is not yet supported.
! 1864: .PP
! 1865: \fBunauthenticated clients;\fR
! 1866: .PP
! 1867: If specified, this statement either allows or prevents allocation from
! 1868: this pool to any client that has not been authenticated using the DHCP
! 1869: authentication protocol. This is not yet supported.
! 1870: .PP
! 1871: \fBall clients;\fR
! 1872: .PP
! 1873: If specified, this statement either allows or prevents allocation from
! 1874: this pool to all clients. This can be used when you want to write a
! 1875: pool declaration for some reason, but hold it in reserve, or when you
! 1876: want to renumber your network quickly, and thus want the server to
! 1877: force all clients that have been allocated addresses from this pool to
! 1878: obtain new addresses immediately when they next renew.
! 1879: .PP
! 1880: \fBafter \fItime\fR\fB;\fR
! 1881: .PP
! 1882: If specified, this statement either allows or prevents allocation from
! 1883: this pool after a given date. This can be used when you want to move
! 1884: clients from one pool to another. The server adjusts the regular lease
! 1885: time so that the latest expiry time is at the given time+min-lease-time.
! 1886: A short min-lease-time enforces a step change, whereas a longer
! 1887: min-lease-time allows for a gradual change.
! 1888: \fItime\fR is either second since epoch, or a UTC time string e.g.
! 1889: 4 2007/08/24 09:14:32 or a string with time zone offset in seconds
! 1890: e.g. 4 2007/08/24 11:14:32 -7200
! 1891: .SH REFERENCE: PARAMETERS
! 1892: The
! 1893: .I adaptive-lease-time-threshold
! 1894: statement
! 1895: .RS 0.25i
! 1896: .PP
! 1897: .B adaptive-lease-time-threshold \fIpercentage\fR\fB;\fR
! 1898: .PP
! 1899: When the number of allocated leases within a pool rises above
! 1900: the \fIpercentage\fR given in this statement, the DHCP server decreases
! 1901: the lease length for new clients within this pool to \fImin-lease-time\fR
! 1902: seconds. Clients renewing an already valid (long) leases get at least the
! 1903: remaining time from the current lease. Since the leases expire faster,
! 1904: the server may either recover more quickly or avoid pool exhaustion
! 1905: entirely. Once the number of allocated leases drop below the threshold,
! 1906: the server reverts back to normal lease times. Valid percentages are
! 1907: between 1 and 99.
! 1908: .RE
! 1909: .PP
! 1910: The
! 1911: .I always-broadcast
! 1912: statement
! 1913: .RS 0.25i
! 1914: .PP
! 1915: .B always-broadcast \fIflag\fR\fB;\fR
! 1916: .PP
! 1917: The DHCP and BOOTP protocols both require DHCP and BOOTP clients to
! 1918: set the broadcast bit in the flags field of the BOOTP message header.
! 1919: Unfortunately, some DHCP and BOOTP clients do not do this, and
! 1920: therefore may not receive responses from the DHCP server. The DHCP
! 1921: server can be made to always broadcast its responses to clients by
! 1922: setting this flag to \'on\' for the relevant scope; relevant scopes would be
! 1923: inside a conditional statement, as a parameter for a class, or as a parameter
! 1924: for a host declaration. To avoid creating excess broadcast traffic on your
! 1925: network, we recommend that you restrict the use of this option to as few
! 1926: clients as possible. For example, the Microsoft DHCP client is known not
! 1927: to have this problem, as are the OpenTransport and ISC DHCP clients.
! 1928: .RE
! 1929: .PP
! 1930: The
! 1931: .I always-reply-rfc1048
! 1932: statement
! 1933: .RS 0.25i
! 1934: .PP
! 1935: .B always-reply-rfc1048 \fIflag\fR\fB;\fR
! 1936: .PP
! 1937: Some BOOTP clients expect RFC1048-style responses, but do not follow
! 1938: RFC1048 when sending their requests. You can tell that a client is
! 1939: having this problem if it is not getting the options you have
! 1940: configured for it and if you see in the server log the message
! 1941: "(non-rfc1048)" printed with each BOOTREQUEST that is logged.
! 1942: .PP
! 1943: If you want to send rfc1048 options to such a client, you can set the
! 1944: .B always-reply-rfc1048
! 1945: option in that client's host declaration, and the DHCP server will
! 1946: respond with an RFC-1048-style vendor options field. This flag can
! 1947: be set in any scope, and will affect all clients covered by that
! 1948: scope.
! 1949: .RE
! 1950: .PP
! 1951: The
! 1952: .I authoritative
! 1953: statement
! 1954: .RS 0.25i
! 1955: .PP
! 1956: .B authoritative;
! 1957: .PP
! 1958: .B not authoritative;
! 1959: .PP
! 1960: The DHCP server will normally assume that the configuration
! 1961: information about a given network segment is not known to be correct
! 1962: and is not authoritative. This is so that if a naive user installs a
! 1963: DHCP server not fully understanding how to configure it, it does not
! 1964: send spurious DHCPNAK messages to clients that have obtained addresses
! 1965: from a legitimate DHCP server on the network.
! 1966: .PP
! 1967: Network administrators setting up authoritative DHCP servers for their
! 1968: networks should always write \fBauthoritative;\fR at the top of their
! 1969: configuration file to indicate that the DHCP server \fIshould\fR send
! 1970: DHCPNAK messages to misconfigured clients. If this is not done,
! 1971: clients will be unable to get a correct IP address after changing
! 1972: subnets until their old lease has expired, which could take quite a
! 1973: long time.
! 1974: .PP
! 1975: Usually, writing \fBauthoritative;\fR at the top level of the file
! 1976: should be sufficient. However, if a DHCP server is to be set up so
! 1977: that it is aware of some networks for which it is authoritative and
! 1978: some networks for which it is not, it may be more appropriate to
! 1979: declare authority on a per-network-segment basis.
! 1980: .PP
! 1981: Note that the most specific scope for which the concept of authority
! 1982: makes any sense is the physical network segment - either a
! 1983: shared-network statement or a subnet statement that is not contained
! 1984: within a shared-network statement. It is not meaningful to specify
! 1985: that the server is authoritative for some subnets within a shared
! 1986: network, but not authoritative for others, nor is it meaningful to
! 1987: specify that the server is authoritative for some host declarations
! 1988: and not others.
! 1989: .RE
! 1990: .PP
! 1991: The \fIboot-unknown-clients\fR statement
! 1992: .RS 0.25i
! 1993: .PP
! 1994: .B boot-unknown-clients \fIflag\fB;\fR
! 1995: .PP
! 1996: If the \fIboot-unknown-clients\fR statement is present and has a value
! 1997: of \fIfalse\fR or \fIoff\fR, then clients for which there is no
! 1998: .I host
! 1999: declaration will not be allowed to obtain IP addresses. If this
! 2000: statement is not present or has a value of \fItrue\fR or \fIon\fR,
! 2001: then clients without host declarations will be allowed to obtain IP
! 2002: addresses, as long as those addresses are not restricted by
! 2003: .I allow
! 2004: and \fIdeny\fR statements within their \fIpool\fR declarations.
! 2005: .RE
! 2006: .PP
! 2007: The \fIdb-time-format\fR statement
! 2008: .RS 0.25i
! 2009: .PP
! 2010: .B db-time-format \fR[ \fIdefault\fR | \fIlocal\fR ] \fB;\fR
! 2011: .PP
! 2012: The DHCP server software outputs several timestamps when writing leases to
! 2013: persistent storage. This configuration parameter selects one of two output
! 2014: formats. The \fIdefault\fR format prints the day, date, and time in UTC,
! 2015: while the \fIlocal\fR format prints the system seconds-since-epoch, and
! 2016: helpfully provides the day and time in the system timezone in a comment.
! 2017: The time formats are described in detail in the dhcpd.leases(5) manpage.
! 2018: .RE
! 2019: .PP
! 2020: The \fIddns-hostname\fR statement
! 2021: .RS 0.25i
! 2022: .PP
! 2023: .B ddns-hostname \fIname\fB;\fR
! 2024: .PP
! 2025: The \fIname\fR parameter should be the hostname that will be used in
! 2026: setting up the client's A and PTR records. If no ddns-hostname is
! 2027: specified in scope, then the server will derive the hostname
! 2028: automatically, using an algorithm that varies for each of the
! 2029: different update methods.
! 2030: .RE
! 2031: .PP
! 2032: The \fIddns-domainname\fR statement
! 2033: .RS 0.25i
! 2034: .PP
! 2035: .B ddns-domainname \fIname\fB;\fR
! 2036: .PP
! 2037: The \fIname\fR parameter should be the domain name that will be
! 2038: appended to the client's hostname to form a fully-qualified
! 2039: domain-name (FQDN).
! 2040: .RE
! 2041: .PP
! 2042: The \fIddns-rev-domainname\fR statement
! 2043: .RS 0.25i
! 2044: .PP
! 2045: .B ddns-rev-domainname \fIname\fB;\fR
! 2046: The \fIname\fR parameter should be the domain name that will be
! 2047: appended to the client's reversed IP address to produce a name for use
! 2048: in the client's PTR record. By default, this is "in-addr.arpa.", but
! 2049: the default can be overridden here.
! 2050: .PP
! 2051: The reversed IP address to which this domain name is appended is
! 2052: always the IP address of the client, in dotted quad notation, reversed
! 2053: - for example, if the IP address assigned to the client is
! 2054: 10.17.92.74, then the reversed IP address is 74.92.17.10. So a
! 2055: client with that IP address would, by default, be given a PTR record
! 2056: of 10.17.92.74.in-addr.arpa.
! 2057: .RE
! 2058: .PP
! 2059: The \fIddns-update-style\fR parameter
! 2060: .RS 0.25i
! 2061: .PP
! 2062: .B ddns-update-style \fIstyle\fB;\fR
! 2063: .PP
! 2064: The
! 2065: .I style
! 2066: parameter must be one of \fBad-hoc\fR, \fBinterim\fR or \fBnone\fR.
! 2067: The \fIddns-update-style\fR statement is only meaningful in the outer
! 2068: scope - it is evaluated once after reading the dhcpd.conf file, rather
! 2069: than each time a client is assigned an IP address, so there is no way
! 2070: to use different DNS update styles for different clients. The default
! 2071: is \fBnone\fR.
! 2072: .RE
! 2073: .PP
! 2074: .B The
! 2075: .I ddns-updates
! 2076: .B statement
! 2077: .RS 0.25i
! 2078: .PP
! 2079: \fBddns-updates \fIflag\fR\fB;\fR
! 2080: .PP
! 2081: The \fIddns-updates\fR parameter controls whether or not the server will
! 2082: attempt to do a DNS update when a lease is confirmed. Set this to \fIoff\fR
! 2083: if the server should not attempt to do updates within a certain scope.
! 2084: The \fIddns-updates\fR parameter is on by default. To disable DNS
! 2085: updates in all scopes, it is preferable to use the
! 2086: \fIddns-update-style\fR statement, setting the style to \fInone\fR.
! 2087: .RE
! 2088: .PP
! 2089: The
! 2090: .I default-lease-time
! 2091: statement
! 2092: .RS 0.25i
! 2093: .PP
! 2094: .B default-lease-time \fItime\fR\fB;\fR
! 2095: .PP
! 2096: .I Time
! 2097: should be the length in seconds that will be assigned to a lease if
! 2098: the client requesting the lease does not ask for a specific expiration
! 2099: time. This is used for both DHCPv4 and DHCPv6 leases (it is also known
! 2100: as the "valid lifetime" in DHCPv6).
! 2101: The default is 43200 seconds.
! 2102: .RE
! 2103: .PP
! 2104: The
! 2105: .I delayed-ack
! 2106: and
! 2107: .I max-ack-delay
! 2108: statements
! 2109: .RS 0.25i
! 2110: .PP
! 2111: .B delayed-ack \fIcount\fR\fB;\fR
! 2112: .B max-ack-delay \fImicroseconds\fR\fB;\fR
! 2113: .PP
! 2114: .I Count
! 2115: should be an integer value from zero to 2^16-1, and defaults to 28. The
! 2116: count represents how many DHCPv4 replies maximum will be queued pending
! 2117: transmission until after a database commit event. If this number is
! 2118: reached, a database commit event (commonly resulting in fsync() and
! 2119: representing a performance penalty) will be made, and the reply packets
! 2120: will be transmitted in a batch afterwards. This preserves the RFC2131
! 2121: direction that "stable storage" be updated prior to replying to clients.
! 2122: Should the DHCPv4 sockets "go dry" (select() returns immediately with no
! 2123: read sockets), the commit is made and any queued packets are transmitted.
! 2124: .PP
! 2125: Similarly, \fImicroseconds\fR indicates how many microseconds are permitted
! 2126: to pass inbetween queuing a packet pending an fsync, and performing the
! 2127: fsync. Valid values range from 0 to 2^32-1, and defaults to 250,000 (1/4 of
! 2128: a second).
! 2129: .PP
! 2130: Please note that as delayed-ack is currently experimental, the delayed-ack
! 2131: feature is not compiled in by default, but must be enabled at compile time
! 2132: with \'./configure --enable-delayed-ack\'.
! 2133: .RE
! 2134: .PP
! 2135: The
! 2136: .I do-forward-updates
! 2137: statement
! 2138: .RS 0.25i
! 2139: .PP
! 2140: .B do-forward-updates \fIflag\fB;\fR
! 2141: .PP
! 2142: The \fIdo-forward-updates\fR statement instructs the DHCP server as
! 2143: to whether it should attempt to update a DHCP client's A record
! 2144: when the client acquires or renews a lease. This statement has no
! 2145: effect unless DNS updates are enabled and \fBddns-update-style\fR is
! 2146: set to \fBinterim\fR. Forward updates are enabled by default. If
! 2147: this statement is used to disable forward updates, the DHCP server
! 2148: will never attempt to update the client's A record, and will only ever
! 2149: attempt to update the client's PTR record if the client supplies an
! 2150: FQDN that should be placed in the PTR record using the fqdn option.
! 2151: If forward updates are enabled, the DHCP server will still honor the
! 2152: setting of the \fBclient-updates\fR flag.
! 2153: .RE
! 2154: .PP
! 2155: The
! 2156: .I dynamic-bootp-lease-cutoff
! 2157: statement
! 2158: .RS 0.25i
! 2159: .PP
! 2160: .B dynamic-bootp-lease-cutoff \fIdate\fB;\fR
! 2161: .PP
! 2162: The \fIdynamic-bootp-lease-cutoff\fR statement sets the ending time
! 2163: for all leases assigned dynamically to BOOTP clients. Because BOOTP
! 2164: clients do not have any way of renewing leases, and don't know that
! 2165: their leases could expire, by default dhcpd assigns infinite leases
! 2166: to all BOOTP clients. However, it may make sense in some situations
! 2167: to set a cutoff date for all BOOTP leases - for example, the end of a
! 2168: school term, or the time at night when a facility is closed and all
! 2169: machines are required to be powered off.
! 2170: .PP
! 2171: .I Date
! 2172: should be the date on which all assigned BOOTP leases will end. The
! 2173: date is specified in the form:
! 2174: .PP
! 2175: .ce 1
! 2176: W YYYY/MM/DD HH:MM:SS
! 2177: .PP
! 2178: W is the day of the week expressed as a number
! 2179: from zero (Sunday) to six (Saturday). YYYY is the year, including the
! 2180: century. MM is the month expressed as a number from 1 to 12. DD is
! 2181: the day of the month, counting from 1. HH is the hour, from zero to
! 2182: 23. MM is the minute and SS is the second. The time is always in
! 2183: Coordinated Universal Time (UTC), not local time.
! 2184: .RE
! 2185: .PP
! 2186: The
! 2187: .I dynamic-bootp-lease-length
! 2188: statement
! 2189: .RS 0.25i
! 2190: .PP
! 2191: .B dynamic-bootp-lease-length\fR \fIlength\fR\fB;\fR
! 2192: .PP
! 2193: The \fIdynamic-bootp-lease-length\fR statement is used to set the
! 2194: length of leases dynamically assigned to BOOTP clients. At some
! 2195: sites, it may be possible to assume that a lease is no longer in
! 2196: use if its holder has not used BOOTP or DHCP to get its address within
! 2197: a certain time period. The period is specified in \fIlength\fR as a
! 2198: number of seconds. If a client reboots using BOOTP during the
! 2199: timeout period, the lease duration is reset to \fIlength\fR, so a
! 2200: BOOTP client that boots frequently enough will never lose its lease.
! 2201: Needless to say, this parameter should be adjusted with extreme
! 2202: caution.
! 2203: .RE
! 2204: .PP
! 2205: The
! 2206: .I filename
! 2207: statement
! 2208: .RS 0.25i
! 2209: .PP
! 2210: .B filename\fR \fB"\fR\fIfilename\fR\fB";\fR
! 2211: .PP
! 2212: The \fIfilename\fR statement can be used to specify the name of the
! 2213: initial boot file which is to be loaded by a client. The
! 2214: .I filename
! 2215: should be a filename recognizable to whatever file transfer protocol
! 2216: the client can be expected to use to load the file.
! 2217: .RE
! 2218: .PP
! 2219: The
! 2220: .I fixed-address
! 2221: declaration
! 2222: .RS 0.25i
! 2223: .PP
! 2224: .B fixed-address address\fR [\fB,\fR \fIaddress\fR ... ]\fB;\fR
! 2225: .PP
! 2226: The \fIfixed-address\fR declaration is used to assign one or more fixed
! 2227: IP addresses to a client. It should only appear in a \fIhost\fR
! 2228: declaration. If more than one address is supplied, then when the
! 2229: client boots, it will be assigned the address that corresponds to the
! 2230: network on which it is booting. If none of the addresses in the
! 2231: \fIfixed-address\fR statement are valid for the network to which the client
! 2232: is connected, that client will not match the \fIhost\fR declaration
! 2233: containing that \fIfixed-address\fR declaration. Each \fIaddress\fR
! 2234: in the \fIfixed-address\fR declaration should be either an IP address or
! 2235: a domain name that resolves to one or more IP addresses.
! 2236: .RE
! 2237: .PP
! 2238: The
! 2239: .I fixed-address6
! 2240: declaration
! 2241: .RS 0.25i
! 2242: .PP
! 2243: .B fixed-address6 ip6-address\fR ;\fR
! 2244: .PP
! 2245: The \fIfixed-address6\fR declaration is used to assign a fixed
! 2246: IPv6 addresses to a client. It should only appear in a \fIhost\fR
! 2247: declaration.
! 2248: .RE
! 2249: .PP
! 2250: The
! 2251: .I get-lease-hostnames
! 2252: statement
! 2253: .RS 0.25i
! 2254: .PP
! 2255: .B get-lease-hostnames\fR \fIflag\fR\fB;\fR
! 2256: .PP
! 2257: The \fIget-lease-hostnames\fR statement is used to tell dhcpd whether
! 2258: or not to look up the domain name corresponding to the IP address of
! 2259: each address in the lease pool and use that address for the DHCP
! 2260: \fIhostname\fR option. If \fIflag\fR is true, then this lookup is
! 2261: done for all addresses in the current scope. By default, or if
! 2262: \fIflag\fR is false, no lookups are done.
! 2263: .RE
! 2264: .PP
! 2265: The
! 2266: .I hardware
! 2267: statement
! 2268: .RS 0.25i
! 2269: .PP
! 2270: .B hardware \fIhardware-type hardware-address\fB;\fR
! 2271: .PP
! 2272: In order for a BOOTP client to be recognized, its network hardware
! 2273: address must be declared using a \fIhardware\fR clause in the
! 2274: .I host
! 2275: statement.
! 2276: .I hardware-type
! 2277: must be the name of a physical hardware interface type. Currently,
! 2278: only the
! 2279: .B ethernet
! 2280: and
! 2281: .B token-ring
! 2282: types are recognized, although support for a
! 2283: .B fddi
! 2284: hardware type (and others) would also be desirable.
! 2285: The
! 2286: .I hardware-address
! 2287: should be a set of hexadecimal octets (numbers from 0 through ff)
! 2288: separated by colons. The \fIhardware\fR statement may also be used
! 2289: for DHCP clients.
! 2290: .RE
! 2291: .PP
! 2292: The
! 2293: .I host-identifier option
! 2294: statement
! 2295: .RS 0.25i
! 2296: .PP
! 2297: .B host-identifier option \fIoption-name option-data\fB;\fR
! 2298: .PP
! 2299: This identifies a DHCPv6 client in a
! 2300: .I host
! 2301: statement.
! 2302: .I option-name
! 2303: is any option, and
! 2304: .I option-data
! 2305: is the value for the option that the client will send. The
! 2306: .I option-data
! 2307: must be a constant value.
! 2308: .RE
! 2309: .PP
! 2310: The
! 2311: .I infinite-is-reserved
! 2312: statement
! 2313: .RS 0.25i
! 2314: .PP
! 2315: .B infinite-is-reserved \fIflag\fB;\fR
! 2316: .PP
! 2317: ISC DHCP now supports \'reserved\' leases. See the section on RESERVED LEASES
! 2318: below. If this \fIflag\fR is on, the server will automatically reserve leases
! 2319: allocated to clients which requested an infinite (0xffffffff) lease-time.
! 2320: .PP
! 2321: The default is off.
! 2322: .RE
! 2323: .PP
! 2324: The
! 2325: .I lease-file-name
! 2326: statement
! 2327: .RS 0.25i
! 2328: .PP
! 2329: .B lease-file-name \fIname\fB;\fR
! 2330: .PP
! 2331: .I Name
! 2332: should be the name of the DHCP server's lease file. By default, this
! 2333: is DBDIR/dhcpd.leases. This statement \fBmust\fR appear in the outer
! 2334: scope of the configuration file - if it appears in some other scope,
! 2335: it will have no effect. Furthermore, it has no effect if overridden
! 2336: by the
! 2337: .B -lf
! 2338: flag or the
! 2339: .B PATH_DHCPD_DB
! 2340: environment variable.
! 2341: .RE
! 2342: .PP
! 2343: The
! 2344: .I limit-addrs-per-ia
! 2345: statement
! 2346: .RS 0.25i
! 2347: .PP
! 2348: .B limit-addrs-per-ia \fInumber\fB;\fR
! 2349: .PP
! 2350: By default, the DHCPv6 server will limit clients to one IAADDR per IA
! 2351: option, meaning one address. If you wish to permit clients to hang onto
! 2352: multiple addresses at a time, configure a larger \fInumber\fR here.
! 2353: .PP
! 2354: Note that there is no present method to configure the server to forcibly
! 2355: configure the client with one IP address per each subnet on a shared network.
! 2356: This is left to future work.
! 2357: .RE
! 2358: .PP
! 2359: The
! 2360: .I dhcpv6-lease-file-name
! 2361: statement
! 2362: .RS 0.25i
! 2363: .PP
! 2364: .B dhcpv6-lease-file-name \fIname\fB;\fR
! 2365: .PP
! 2366: .I Name
! 2367: is the name of the lease file to use if and only if the server is running
! 2368: in DHCPv6 mode. By default, this is DBDIR/dhcpd6.leases. This statement,
! 2369: like
! 2370: .I lease-file-name,
! 2371: \fBmust\fR appear in the outer scope of the configuration file. It
! 2372: has no effect if overridden by the
! 2373: .B -lf
! 2374: flag or the
! 2375: .B PATH_DHCPD6_DB
! 2376: environment variable. If
! 2377: .I dhcpv6-lease-file-name
! 2378: is not specified, but
! 2379: .I lease-file-name
! 2380: is, the latter value will be used.
! 2381: .RE
! 2382: .PP
! 2383: The
! 2384: .I local-port
! 2385: statement
! 2386: .RS 0.25i
! 2387: .PP
! 2388: .B local-port \fIport\fB;\fR
! 2389: .PP
! 2390: This statement causes the DHCP server to listen for DHCP requests on
! 2391: the UDP port specified in \fIport\fR, rather than on port 67.
! 2392: .RE
! 2393: .PP
! 2394: The
! 2395: .I local-address
! 2396: statement
! 2397: .RS 0.25i
! 2398: .PP
! 2399: .B local-address \fIaddress\fB;\fR
! 2400: .PP
! 2401: This statement causes the DHCP server to listen for DHCP requests sent
! 2402: to the specified \fIaddress\fR, rather than requests sent to all addresses.
! 2403: Since serving directly attached DHCP clients implies that the server must
! 2404: respond to requests sent to the all-ones IP address, this option cannot be
! 2405: used if clients are on directly attached networks...it is only realistically
! 2406: useful for a server whose only clients are reached via unicasts, such as via
! 2407: DHCP relay agents.
! 2408: .PP
! 2409: Note: This statement is only effective if the server was compiled using
! 2410: the USE_SOCKETS #define statement, which is default on a small number of
! 2411: operating systems, and must be explicitly chosen at compile-time for all
! 2412: others. You can be sure if your server is compiled with USE_SOCKETS if
! 2413: you see lines of this format at startup:
! 2414: .PP
! 2415: Listening on Socket/eth0
! 2416: .PP
! 2417: Note also that since this bind()s all DHCP sockets to the specified
! 2418: address, that only one address may be supported in a daemon at a given
! 2419: time.
! 2420: .RE
! 2421: .PP
! 2422: The
! 2423: .I log-facility
! 2424: statement
! 2425: .RS 0.25i
! 2426: .PP
! 2427: .B log-facility \fIfacility\fB;\fR
! 2428: .PP
! 2429: This statement causes the DHCP server to do all of its logging on the
! 2430: specified log facility once the dhcpd.conf file has been read. By
! 2431: default the DHCP server logs to the daemon facility. Possible log
! 2432: facilities include auth, authpriv, cron, daemon, ftp, kern, lpr, mail,
! 2433: mark, news, ntp, security, syslog, user, uucp, and local0 through
! 2434: local7. Not all of these facilities are available on all systems,
! 2435: and there may be other facilities available on other systems.
! 2436: .PP
! 2437: In addition to setting this value, you may need to modify your
! 2438: .I syslog.conf
! 2439: file to configure logging of the DHCP server. For example, you might
! 2440: add a line like this:
! 2441: .PP
! 2442: .nf
! 2443: local7.debug /var/log/dhcpd.log
! 2444: .fi
! 2445: .PP
! 2446: The syntax of the \fIsyslog.conf\fR file may be different on some
! 2447: operating systems - consult the \fIsyslog.conf\fR manual page to be
! 2448: sure. To get syslog to start logging to the new file, you must first
! 2449: create the file with correct ownership and permissions (usually, the
! 2450: same owner and permissions of your /var/log/messages or
! 2451: /usr/adm/messages file should be fine) and send a SIGHUP to syslogd.
! 2452: Some systems support log rollover using a shell script or program
! 2453: called newsyslog or logrotate, and you may be able to configure this
! 2454: as well so that your log file doesn't grow uncontrollably.
! 2455: .PP
! 2456: Because the \fIlog-facility\fR setting is controlled by the dhcpd.conf
! 2457: file, log messages printed while parsing the dhcpd.conf file or before
! 2458: parsing it are logged to the default log facility. To prevent this,
! 2459: see the README file included with this distribution, which describes
! 2460: how to change the default log facility. When this parameter is used,
! 2461: the DHCP server prints its startup message a second time after parsing
! 2462: the configuration file, so that the log will be as complete as
! 2463: possible.
! 2464: .RE
! 2465: .PP
! 2466: The
! 2467: .I max-lease-time
! 2468: statement
! 2469: .RS 0.25i
! 2470: .PP
! 2471: .B max-lease-time \fItime\fR\fB;\fR
! 2472: .PP
! 2473: .I Time
! 2474: should be the maximum length in seconds that will be assigned to a
! 2475: lease.
! 2476: If not defined, the default maximum lease time is 86400.
! 2477: The only exception to this is that Dynamic BOOTP lease
! 2478: lengths, which are not specified by the client, are not limited by
! 2479: this maximum.
! 2480: .RE
! 2481: .PP
! 2482: The
! 2483: .I min-lease-time
! 2484: statement
! 2485: .RS 0.25i
! 2486: .PP
! 2487: .B min-lease-time \fItime\fR\fB;\fR
! 2488: .PP
! 2489: .I Time
! 2490: should be the minimum length in seconds that will be assigned to a
! 2491: lease.
! 2492: The default is the minimum of 300 seconds or
! 2493: \fBmax-lease-time\fR.
! 2494: .RE
! 2495: .PP
! 2496: The
! 2497: .I min-secs
! 2498: statement
! 2499: .RS 0.25i
! 2500: .PP
! 2501: .B min-secs \fIseconds\fR\fB;\fR
! 2502: .PP
! 2503: .I Seconds
! 2504: should be the minimum number of seconds since a client began trying to
! 2505: acquire a new lease before the DHCP server will respond to its request.
! 2506: The number of seconds is based on what the client reports, and the maximum
! 2507: value that the client can report is 255 seconds. Generally, setting this
! 2508: to one will result in the DHCP server not responding to the client's first
! 2509: request, but always responding to its second request.
! 2510: .PP
! 2511: This can be used
! 2512: to set up a secondary DHCP server which never offers an address to a client
! 2513: until the primary server has been given a chance to do so. If the primary
! 2514: server is down, the client will bind to the secondary server, but otherwise
! 2515: clients should always bind to the primary. Note that this does not, by
! 2516: itself, permit a primary server and a secondary server to share a pool of
! 2517: dynamically-allocatable addresses.
! 2518: .RE
! 2519: .PP
! 2520: The
! 2521: .I next-server
! 2522: statement
! 2523: .RS 0.25i
! 2524: .PP
! 2525: .B next-server\fR \fIserver-name\fR\fB;\fR
! 2526: .PP
! 2527: The \fInext-server\fR statement is used to specify the host address of
! 2528: the server from which the initial boot file (specified in the
! 2529: \fIfilename\fR statement) is to be loaded. \fIServer-name\fR should
! 2530: be a numeric IP address or a domain name.
! 2531: .RE
! 2532: .PP
! 2533: The
! 2534: .I omapi-port
! 2535: statement
! 2536: .RS 0.25i
! 2537: .PP
! 2538: .B omapi-port\fR \fIport\fR\fB;\fR
! 2539: .PP
! 2540: The \fIomapi-port\fR statement causes the DHCP server to listen for
! 2541: OMAPI connections on the specified port. This statement is required
! 2542: to enable the OMAPI protocol, which is used to examine and modify the
! 2543: state of the DHCP server as it is running.
! 2544: .RE
! 2545: .PP
! 2546: The
! 2547: .I one-lease-per-client
! 2548: statement
! 2549: .RS 0.25i
! 2550: .PP
! 2551: .B one-lease-per-client \fIflag\fR\fB;\fR
! 2552: .PP
! 2553: If this flag is enabled, whenever a client sends a DHCPREQUEST for a
! 2554: particular lease, the server will automatically free any other leases
! 2555: the client holds. This presumes that when the client sends a
! 2556: DHCPREQUEST, it has forgotten any lease not mentioned in the
! 2557: DHCPREQUEST - i.e., the client has only a single network interface
! 2558: .I and
! 2559: it does not remember leases it's holding on networks to which it is
! 2560: not currently attached. Neither of these assumptions are guaranteed
! 2561: or provable, so we urge caution in the use of this statement.
! 2562: .RE
! 2563: .PP
! 2564: The
! 2565: .I pid-file-name
! 2566: statement
! 2567: .RS 0.25i
! 2568: .PP
! 2569: .B pid-file-name
! 2570: .I name\fR\fB;\fR
! 2571: .PP
! 2572: .I Name
! 2573: should be the name of the DHCP server's process ID file. This is the
! 2574: file in which the DHCP server's process ID is stored when the server
! 2575: starts. By default, this is RUNDIR/dhcpd.pid. Like the
! 2576: .I lease-file-name
! 2577: statement, this statement must appear in the outer scope
! 2578: of the configuration file. It has no effect if overridden by the
! 2579: .B -pf
! 2580: flag or the
! 2581: .B PATH_DHCPD_PID
! 2582: environment variable.
! 2583: .PP
! 2584: The
! 2585: .I dhcpv6-pid-file-name
! 2586: statement
! 2587: .RS 0.25i
! 2588: .PP
! 2589: .B dhcpv6-pid-file-name \fIname\fB;\fR
! 2590: .PP
! 2591: .I Name
! 2592: is the name of the pid file to use if and only if the server is running
! 2593: in DHCPv6 mode. By default, this is DBDIR/dhcpd6.pid. This statement,
! 2594: like
! 2595: .I pid-file-name,
! 2596: \fBmust\fR appear in the outer scope of the configuration file. It
! 2597: has no effect if overridden by the
! 2598: .B -pf
! 2599: flag or the
! 2600: .B PATH_DHCPD6_PID
! 2601: environment variable. If
! 2602: .I dhcpv6-pid-file-name
! 2603: is not specified, but
! 2604: .I pid-file-name
! 2605: is, the latter value will be used.
! 2606: .RE
! 2607: .PP
! 2608: The
! 2609: .I ping-check
! 2610: statement
! 2611: .RS 0.25i
! 2612: .PP
! 2613: .B ping-check
! 2614: .I flag\fR\fB;\fR
! 2615: .PP
! 2616: When the DHCP server is considering dynamically allocating an IP
! 2617: address to a client, it first sends an ICMP Echo request (a \fIping\fR)
! 2618: to the address being assigned. It waits for a second, and if no
! 2619: ICMP Echo response has been heard, it assigns the address. If a
! 2620: response \fIis\fR heard, the lease is abandoned, and the server does
! 2621: not respond to the client.
! 2622: .PP
! 2623: This \fIping check\fR introduces a default one-second delay in responding
! 2624: to DHCPDISCOVER messages, which can be a problem for some clients. The
! 2625: default delay of one second may be configured using the ping-timeout
! 2626: parameter. The ping-check configuration parameter can be used to control
! 2627: checking - if its value is false, no ping check is done.
! 2628: .RE
! 2629: .PP
! 2630: The
! 2631: .I ping-timeout
! 2632: statement
! 2633: .RS 0.25i
! 2634: .PP
! 2635: .B ping-timeout
! 2636: .I seconds\fR\fB;\fR
! 2637: .PP
! 2638: If the DHCP server determined it should send an ICMP echo request (a
! 2639: \fIping\fR) because the ping-check statement is true, ping-timeout allows
! 2640: you to configure how many seconds the DHCP server should wait for an
! 2641: ICMP Echo response to be heard, if no ICMP Echo response has been received
! 2642: before the timeout expires, it assigns the address. If a response \fIis\fR
! 2643: heard, the lease is abandoned, and the server does not respond to the client.
! 2644: If no value is set, ping-timeout defaults to 1 second.
! 2645: .RE
! 2646: .PP
! 2647: The
! 2648: .I preferred-lifetime
! 2649: statement
! 2650: .RS 0.25i
! 2651: .PP
! 2652: .B preferred-lifetime
! 2653: .I seconds\fR\fB;\fR
! 2654: .PP
! 2655: IPv6 addresses have \'valid\' and \'preferred\' lifetimes. The valid lifetime
! 2656: determines at what point at lease might be said to have expired, and is no
! 2657: longer useable. A preferred lifetime is an advisory condition to help
! 2658: applications move off of the address and onto currently valid addresses
! 2659: (should there still be any open TCP sockets or similar).
! 2660: .PP
! 2661: The preferred lifetime defaults to the renew+rebind timers, or 3/4 the
! 2662: default lease time if none were specified.
! 2663: .RE
! 2664: .PP
! 2665: The
! 2666: .I remote-port
! 2667: statement
! 2668: .RS 0.25i
! 2669: .PP
! 2670: .B remote-port \fIport\fB;\fR
! 2671: .PP
! 2672: This statement causes the DHCP server to transmit DHCP responses to DHCP
! 2673: clients upon the UDP port specified in \fIport\fR, rather than on port 68.
! 2674: In the event that the UDP response is transmitted to a DHCP Relay, the
! 2675: server generally uses the \fBlocal-port\fR configuration value. Should the
! 2676: DHCP Relay happen to be addressed as 127.0.0.1, however, the DHCP Server
! 2677: transmits its response to the \fBremote-port\fR configuration value. This
! 2678: is generally only useful for testing purposes, and this configuration value
! 2679: should generally not be used.
! 2680: .RE
! 2681: .PP
! 2682: The
! 2683: .I server-identifier
! 2684: statement
! 2685: .RS 0.25i
! 2686: .PP
! 2687: .B server-identifier \fIhostname\fR\fB;\fR
! 2688: .PP
! 2689: The server-identifier statement can be used to define the value that
! 2690: is sent in the DHCP Server Identifier option for a given scope. The
! 2691: value specified \fBmust\fR be an IP address for the DHCP server, and
! 2692: must be reachable by all clients served by a particular scope.
! 2693: .PP
! 2694: The use of the server-identifier statement is not recommended - the only
! 2695: reason to use it is to force a value other than the default value to be
! 2696: sent on occasions where the default value would be incorrect. The default
! 2697: value is the first IP address associated with the physical network interface
! 2698: on which the request arrived.
! 2699: .PP
! 2700: The usual case where the
! 2701: \fIserver-identifier\fR statement needs to be sent is when a physical
! 2702: interface has more than one IP address, and the one being sent by default
! 2703: isn't appropriate for some or all clients served by that interface.
! 2704: Another common case is when an alias is defined for the purpose of
! 2705: having a consistent IP address for the DHCP server, and it is desired
! 2706: that the clients use this IP address when contacting the server.
! 2707: .PP
! 2708: Supplying a value for the dhcp-server-identifier option is equivalent
! 2709: to using the server-identifier statement.
! 2710: .RE
! 2711: .PP
! 2712: The
! 2713: .I server-duid
! 2714: statement
! 2715: .RS 0.25i
! 2716: .PP
! 2717: .B server-duid \fILLT\fR [ \fIhardware-type\fR \fItimestamp\fR \fIhardware-address\fR ] \fB;\fR
! 2718:
! 2719: .B server-duid \fIEN\fR \fIenterprise-number\fR \fIenterprise-identifier\fR \fB;\fR
! 2720:
! 2721: .B server-duid \fILL\fR [ \fIhardware-type\fR \fIhardware-address\fR ] \fB;\fR
! 2722: .PP
! 2723: The server-duid statement configures the server DUID. You may pick either
! 2724: LLT (link local address plus time), EN (enterprise), or LL (link local).
! 2725: .PP
! 2726: If you choose LLT or LL, you may specify the exact contents of the DUID.
! 2727: Otherwise the server will generate a DUID of the specified type.
! 2728: .PP
! 2729: If you choose EN, you must include the enterprise number and the
! 2730: enterprise-identifier.
! 2731: .PP
! 2732: The default server-duid type is LLT.
! 2733: .RE
! 2734: .PP
! 2735: The
! 2736: .I server-name
! 2737: statement
! 2738: .RS 0.25i
! 2739: .PP
! 2740: .B server-name "\fIname\fB";\fR
! 2741: .PP
! 2742: The \fIserver-name\fR statement can be used to inform the client of
! 2743: the name of the server from which it is booting. \fIName\fR should
! 2744: be the name that will be provided to the client.
! 2745: .RE
! 2746: .PP
! 2747: The
! 2748: .I site-option-space
! 2749: statement
! 2750: .RS 0.25i
! 2751: .PP
! 2752: .B site-option-space "\fIname\fB";\fR
! 2753: .PP
! 2754: The \fIsite-option-space\fR statement can be used to determine from
! 2755: what option space site-local options will be taken. This can be used
! 2756: in much the same way as the \fIvendor-option-space\fR statement.
! 2757: Site-local options in DHCP are those options whose numeric codes are
! 2758: greater than 224. These options are intended for site-specific
! 2759: uses, but are frequently used by vendors of embedded hardware that
! 2760: contains DHCP clients. Because site-specific options are allocated
! 2761: on an ad hoc basis, it is quite possible that one vendor's DHCP client
! 2762: might use the same option code that another vendor's client uses, for
! 2763: different purposes. The \fIsite-option-space\fR option can be used
! 2764: to assign a different set of site-specific options for each such
! 2765: vendor, using conditional evaluation (see \fBdhcp-eval (5)\fR for
! 2766: details).
! 2767: .RE
! 2768: .PP
! 2769: The
! 2770: .I stash-agent-options
! 2771: statement
! 2772: .RS 0.25i
! 2773: .PP
! 2774: .B stash-agent-options \fIflag\fB;\fR
! 2775: .PP
! 2776: If the \fIstash-agent-options\fR parameter is true for a given client,
! 2777: the server will record the relay agent information options sent during
! 2778: the client's initial DHCPREQUEST message when the client was in the
! 2779: SELECTING state and behave as if those options are included in all
! 2780: subsequent DHCPREQUEST messages sent in the RENEWING state. This
! 2781: works around a problem with relay agent information options, which is
! 2782: that they usually not appear in DHCPREQUEST messages sent by the
! 2783: client in the RENEWING state, because such messages are unicast
! 2784: directly to the server and not sent through a relay agent.
! 2785: .RE
! 2786: .PP
! 2787: The
! 2788: .I update-conflict-detection
! 2789: statement
! 2790: .RS 0.25i
! 2791: .PP
! 2792: .B update-conflict-detection \fIflag\fB;\fR
! 2793: .PP
! 2794: If the \fIupdate-conflict-detection\fR parameter is true, the server will
! 2795: perform standard DHCID multiple-client, one-name conflict detection. If
! 2796: the parameter has been set false, the server will skip this check and
! 2797: instead simply tear down any previous bindings to install the new
! 2798: binding without question. The default is true.
! 2799: .RE
! 2800: .PP
! 2801: The
! 2802: .I update-optimization
! 2803: statement
! 2804: .RS 0.25i
! 2805: .PP
! 2806: .B update-optimization \fIflag\fB;\fR
! 2807: .PP
! 2808: If the \fIupdate-optimization\fR parameter is false for a given client,
! 2809: the server will attempt a DNS update for that client each time the
! 2810: client renews its lease, rather than only attempting an update when it
! 2811: appears to be necessary. This will allow the DNS to heal from
! 2812: database inconsistencies more easily, but the cost is that the DHCP
! 2813: server must do many more DNS updates. We recommend leaving this option
! 2814: enabled, which is the default. This option only affects the behavior of
! 2815: the interim DNS update scheme, and has no effect on the ad-hoc DNS update
! 2816: scheme. If this parameter is not specified, or is true, the DHCP server
! 2817: will only update when the client information changes, the client gets a
! 2818: different lease, or the client's lease expires.
! 2819: .RE
! 2820: .PP
! 2821: The
! 2822: .I update-static-leases
! 2823: statement
! 2824: .RS 0.25i
! 2825: .PP
! 2826: .B update-static-leases \fIflag\fB;\fR
! 2827: .PP
! 2828: The \fIupdate-static-leases\fR flag, if enabled, causes the DHCP
! 2829: server to do DNS updates for clients even if those clients are being
! 2830: assigned their IP address using a \fIfixed-address\fR statement - that
! 2831: is, the client is being given a static assignment. This can only
! 2832: work with the \fIinterim\fR DNS update scheme. It is not
! 2833: recommended because the DHCP server has no way to tell that the update
! 2834: has been done, and therefore will not delete the record when it is not
! 2835: in use. Also, the server must attempt the update each time the
! 2836: client renews its lease, which could have a significant performance
! 2837: impact in environments that place heavy demands on the DHCP server.
! 2838: .RE
! 2839: .PP
! 2840: The
! 2841: .I use-host-decl-names
! 2842: statement
! 2843: .RS 0.25i
! 2844: .PP
! 2845: .B use-host-decl-names \fIflag\fB;\fR
! 2846: .PP
! 2847: If the \fIuse-host-decl-names\fR parameter is true in a given scope,
! 2848: then for every host declaration within that scope, the name provided
! 2849: for the host declaration will be supplied to the client as its
! 2850: hostname. So, for example,
! 2851: .PP
! 2852: .nf
! 2853: group {
! 2854: use-host-decl-names on;
! 2855:
! 2856: host joe {
! 2857: hardware ethernet 08:00:2b:4c:29:32;
! 2858: fixed-address joe.fugue.com;
! 2859: }
! 2860: }
! 2861:
! 2862: is equivalent to
! 2863:
! 2864: host joe {
! 2865: hardware ethernet 08:00:2b:4c:29:32;
! 2866: fixed-address joe.fugue.com;
! 2867: option host-name "joe";
! 2868: }
! 2869: .fi
! 2870: .PP
! 2871: An \fIoption host-name\fR statement within a host declaration will
! 2872: override the use of the name in the host declaration.
! 2873: .PP
! 2874: It should be noted here that most DHCP clients completely ignore the
! 2875: host-name option sent by the DHCP server, and there is no way to
! 2876: configure them not to do this. So you generally have a choice of
! 2877: either not having any hostname to client IP address mapping that the
! 2878: client will recognize, or doing DNS updates. It is beyond
! 2879: the scope of this document to describe how to make this
! 2880: determination.
! 2881: .RE
! 2882: .PP
! 2883: The
! 2884: .I use-lease-addr-for-default-route
! 2885: statement
! 2886: .RS 0.25i
! 2887: .PP
! 2888: .B use-lease-addr-for-default-route \fIflag\fR\fB;\fR
! 2889: .PP
! 2890: If the \fIuse-lease-addr-for-default-route\fR parameter is true in a
! 2891: given scope, then instead of sending the value specified in the
! 2892: routers option (or sending no value at all), the IP address of the
! 2893: lease being assigned is sent to the client. This supposedly causes
! 2894: Win95 machines to ARP for all IP addresses, which can be helpful if
! 2895: your router is configured for proxy ARP. The use of this feature is
! 2896: not recommended, because it won't work for many DHCP clients.
! 2897: .RE
! 2898: .PP
! 2899: The
! 2900: .I vendor-option-space
! 2901: statement
! 2902: .RS 0.25i
! 2903: .PP
! 2904: .B vendor-option-space \fIstring\fR\fB;\fR
! 2905: .PP
! 2906: The \fIvendor-option-space\fR parameter determines from what option
! 2907: space vendor options are taken. The use of this configuration
! 2908: parameter is illustrated in the \fBdhcp-options(5)\fR manual page, in
! 2909: the \fIVENDOR ENCAPSULATED OPTIONS\fR section.
! 2910: .RE
! 2911: .SH SETTING PARAMETER VALUES USING EXPRESSIONS
! 2912: Sometimes it's helpful to be able to set the value of a DHCP server
! 2913: parameter based on some value that the client has sent. To do this,
! 2914: you can use expression evaluation. The
! 2915: .B dhcp-eval(5)
! 2916: manual page describes how to write expressions. To assign the result
! 2917: of an evaluation to an option, define the option as follows:
! 2918: .nf
! 2919: .sp 1
! 2920: \fImy-parameter \fB= \fIexpression \fB;\fR
! 2921: .fi
! 2922: .PP
! 2923: For example:
! 2924: .nf
! 2925: .sp 1
! 2926: ddns-hostname = binary-to-ascii (16, 8, "-",
! 2927: substring (hardware, 1, 6));
! 2928: .fi
! 2929: .RE
! 2930: .SH RESERVED LEASES
! 2931: It's often useful to allocate a single address to a single client, in
! 2932: approximate perpetuity. Host statements with \fBfixed-address\fR clauses
! 2933: exist to a certain extent to serve this purpose, but because host statements
! 2934: are intended to approximate \'static configuration\', they suffer from not
! 2935: being referenced in a littany of other Server Services, such as dynamic DNS,
! 2936: failover, \'on events\' and so forth.
! 2937: .PP
! 2938: If a standard dynamic lease, as from any range statement, is marked
! 2939: \'reserved\', then the server will only allocate this lease to the client it
! 2940: is identified by (be that by client identifier or hardware address).
! 2941: .PP
! 2942: In practice, this means that the lease follows the normal state engine, enters
! 2943: ACTIVE state when the client is bound to it, expires, or is released, and any
! 2944: events or services that would normally be supplied during these events are
! 2945: processed normally, as with any other dynamic lease. The only difference
! 2946: is that failover servers treat reserved leases as special when they enter
! 2947: the FREE or BACKUP states - each server applies the lease into the state it
! 2948: may allocate from - and the leases are not placed on the queue for allocation
! 2949: to other clients. Instead they may only be \'found\' by client identity. The
! 2950: result is that the lease is only offered to the returning client.
! 2951: .PP
! 2952: Care should probably be taken to ensure that the client only has one lease
! 2953: within a given subnet that it is identified by.
! 2954: .PP
! 2955: Leases may be set \'reserved\' either through OMAPI, or through the
! 2956: \'infinite-is-reserved\' configuration option (if this is applicable to your
! 2957: environment and mixture of clients).
! 2958: .PP
! 2959: It should also be noted that leases marked \'reserved\' are effectively treated
! 2960: the same as leases marked \'bootp\'.
! 2961: .RE
! 2962: .SH REFERENCE: OPTION STATEMENTS
! 2963: DHCP option statements are documented in the
! 2964: .B dhcp-options(5)
! 2965: manual page.
! 2966: .SH REFERENCE: EXPRESSIONS
! 2967: Expressions used in DHCP option statements and elsewhere are
! 2968: documented in the
! 2969: .B dhcp-eval(5)
! 2970: manual page.
! 2971: .SH SEE ALSO
! 2972: dhcpd(8), dhcpd.leases(5), dhcp-options(5), dhcp-eval(5), RFC2132, RFC2131.
! 2973: .SH AUTHOR
! 2974: .B dhcpd.conf(5)
! 2975: was written by Ted Lemon
! 2976: under a contract with Vixie Labs. Funding
! 2977: for this project was provided by Internet Systems Consortium.
! 2978: Information about Internet Systems Consortium can be found at
! 2979: .B https://www.isc.org.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>