499 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			499 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .TH DHCP.CONF 5
 | |
| .SH NAME
 | |
| dhcp.conf \- dynamic host configuration protocol configuration
 | |
| .SH SYNOPSIS
 | |
| .B /etc/dhcp.conf
 | |
| .SH DESCRIPTION
 | |
| .de SP
 | |
| .if t .sp 0.4
 | |
| .if n .sp
 | |
| ..
 | |
| The file
 | |
| .B /etc/dhcp.conf
 | |
| contains the configuration for the DHCP client/server program
 | |
| .BR dhcpd .
 | |
| This text is a long summation of all the elements that can be found in this
 | |
| configuration file.  For a more "just tell me what to do" approach see
 | |
| .BR boot (8).
 | |
| .PP
 | |
| The syntax used is that of the common configuration file described in
 | |
| .BR configfile (5).
 | |
| .PP
 | |
| To find information for a client we first need its IP address.  Occasionally
 | |
| this IP address is already known (the special "INFORM" query), but normally
 | |
| we have to make a first pass through the configuration file for a
 | |
| .B client
 | |
| entry.  If that fails then we use an IP address from the pool file.  If we
 | |
| now have an IP address then the real information gathering can begin.
 | |
| .PP
 | |
| The DHCP daemon reads the configuration file from beginning to end and
 | |
| gathers all information that matches, and information from all macros that
 | |
| are mentioned within the elements that match.  If we end up with DHCP
 | |
| information that includes at least a netmask definition, and is good for the
 | |
| network the request came in from, then it is returned to the client.  If a
 | |
| DHCP tag is specified twice then the last one wins.
 | |
| .PP
 | |
| In the description below we use [ and ] to denote optional things, and | to
 | |
| show a choice between two things.
 | |
| .PP
 | |
| Client IDs can be either ordinary Ethernet addresses, that are treated as a
 | |
| seven octet string (01 followed by the Ethernet address), or any random
 | |
| octet string in hexadecimal.
 | |
| .PP
 | |
| IP addresses can be simply that, or host names.  These host names are
 | |
| searched in
 | |
| .B /etc/hosts
 | |
| by
 | |
| .B dhcpd
 | |
| itself using a domain based prefix match, i.e. you can use "flotsam" for
 | |
| "flotsam.example.com", but not "alpha" for "alphabeta".  Once the program
 | |
| decides to be a server it will also look up names normally in the DNS.
 | |
| If a host has more than one IP address then the address on the network the
 | |
| query was seen on is used.
 | |
| .PP
 | |
| Case isn't important in the configuration file, "client", "CLIENT" and
 | |
| "ClIeNt" are all treated the same.
 | |
| .PP
 | |
| Some elements may optionally name a macro or a curly braces enclosed
 | |
| parameter list of more elements.  If the element matches then the data
 | |
| in the macro body or parameter list is gathered.
 | |
| .PP
 | |
| The following elements can be used:
 | |
| .PP
 | |
| .B client
 | |
| .I client-ID
 | |
| .RB [ ip #]
 | |
| .I host
 | |
| .RI [ macro |{ params }];
 | |
| .PP
 | |
| .RS
 | |
| Defines a client with a given client ID that is to have the IP address
 | |
| denoted by
 | |
| .I host .
 | |
| On the first pass only the client ID is matched looking for an IP address
 | |
| that lies on the network the request came in on.  On the
 | |
| information gathering pass both client ID and IP address must match.  If
 | |
| a machine has the same Ethernet address on two or more interfaces then the
 | |
| IP address given out is the one on the same network as the request came in
 | |
| on.  The optional interface name
 | |
| .RB ( ip #)
 | |
| must be used if the DHCP daemon is gathering data for itself at boot time
 | |
| to differentiate interfaces with the same ethernet addresses.  This is
 | |
| only necessary under Minix-vmd when ethernets on different VLANs share
 | |
| the same physical ethernet.  The interface name is only used for a machine's
 | |
| own networks, it ignored on entries for other hosts.
 | |
| .RE
 | |
| .PP
 | |
| .B class
 | |
| .IR class-name " ..."
 | |
| .IR macro |{ params };
 | |
| .PP
 | |
| .RS
 | |
| Includes the macro or parameters if one of the class names is matched.  A
 | |
| host normally includes a class ID in its request.  MINIX 3 and Minix-vmd
 | |
| use "Minix" as the class name.  For Windows the class ID starts with
 | |
| "MSFT", and Solaris' starts with "SUNW".
 | |
| (Use
 | |
| .B dhcpd \-d3
 | |
| to find out what the full IDs are exactly.)  The class names are matched if a
 | |
| .I class-name
 | |
| is a prefix of the class ID sent by the client.
 | |
| .RE
 | |
| .PP
 | |
| .B host
 | |
| .I host-spec
 | |
| .IR macro |{ params };
 | |
| .PP
 | |
| .RS
 | |
| Includes the macro or parameters if the IP address of the client matches the
 | |
| host specification.  This can either be an ordinary hostname, or a netblock
 | |
| in CIDR notation, e.g. 172.35.0.0/16.  The example includes all IP addresses
 | |
| whose top 16 bits are the same as the top 16 bits of 172.35.0.0.  Such a
 | |
| netblock automatically defines a netmask (255.255.0.0 in the example) if no
 | |
| netmask has been specified yet.
 | |
| .RE
 | |
| .PP
 | |
| .B interface
 | |
| .BR ip #
 | |
| .I host
 | |
| .RI [ macro |{ params }];
 | |
| .PP
 | |
| .RS
 | |
| Makes
 | |
| .B dhcpd
 | |
| set the IP address of interface
 | |
| .BR ip #
 | |
| (where # is a number) to the IP address denoted by
 | |
| .IR host .
 | |
| This element should only be used for interfaces that are not true Ethernets,
 | |
| and so do not have a unique Ethernet address that can be used for a client
 | |
| element.  If the machine has at least one true Ethernet then all interface
 | |
| elements should be added to the parameter list of a host or client element
 | |
| for that Ethernet interface.  This binds them to that machine and allows a
 | |
| single configuration file to be shared among machines.  Especially a server
 | |
| should never have "free" interface elements.  The macro or parameters are
 | |
| only evaluated if data is gathered for the given interface.  (Note that they
 | |
| will be hidden by a client element for another interface.)
 | |
| .RE
 | |
| .PP
 | |
| .B macro
 | |
| .IR macro-name ;
 | |
| .PP
 | |
| .RS
 | |
| Include the parameter list of the macro named
 | |
| .I macro-name
 | |
| defined elsewhere.  (This means that "host flotsam stuff" is just short
 | |
| for "host flotsam { macro stuff; }".)
 | |
| .RE
 | |
| .PP
 | |
| .B macro
 | |
| .I macro-name
 | |
| .RI { params };
 | |
| .PP
 | |
| .RS
 | |
| Defines a macro with the given parameter list.  Whenever the macro is used
 | |
| the parameter list is substituted instead.  A macro can not be defined
 | |
| within another parameter list.
 | |
| .RE
 | |
| .PP
 | |
| .B option
 | |
| .RB [ ip #]
 | |
| .B server
 | |
| .RB [ inform ];
 | |
| .br
 | |
| .B option
 | |
| .RB [ ip #]
 | |
| .B relay
 | |
| .IR host ;
 | |
| .br
 | |
| .B option
 | |
| .RB [ ip #]
 | |
| .BR possessive ;
 | |
| .br
 | |
| .B option
 | |
| .RB [ ip #]
 | |
| .B hostname
 | |
| .IR name ;
 | |
| .PP
 | |
| .RS
 | |
| Makes
 | |
| .B dhcpd
 | |
| set special options for the interface that it is gathering data for, or the
 | |
| interface denoted by the optional
 | |
| .BR ip #
 | |
| argument.  The options are:
 | |
| .SP
 | |
| .B server
 | |
| .RB [ inform ]
 | |
| .RS
 | |
| Be a DHCP server on the network connected to the interface.  Add the word
 | |
| .B inform
 | |
| if DHCPINFORM requests must be answered for hosts we don't have an address
 | |
| for.
 | |
| .RE
 | |
| .SP
 | |
| .B relay
 | |
| .I host
 | |
| .RS
 | |
| Be a DHCP relay to the indicated host.
 | |
| .RE
 | |
| .SP
 | |
| .B possessive
 | |
| .RS
 | |
| Do not disable the interface if the DHCP lease expires.  Useful if the
 | |
| DHCP server of the provider is unreliable, crashing a lot and causing the
 | |
| lease to expire.  (Think twice before turning this option on.  You have to
 | |
| be absolutely sure that it's the DHCP server that's the culprit and not
 | |
| a flaky network.  You don't want an IP address conflict to be your fault.)
 | |
| .RE
 | |
| .SP
 | |
| .B hostname
 | |
| .I name
 | |
| .RS
 | |
| Use the given name as our hostname in the DHCP queries.  Some sites key on
 | |
| that bit of information instead of a client ID.
 | |
| .RE
 | |
| .RE
 | |
| .PP
 | |
| .B tag
 | |
| .I number name type granularity
 | |
| .IR max ;
 | |
| .PP
 | |
| .RS
 | |
| Defines a DHCP tag for the given tag number and gives it a name.  The name can
 | |
| be used in the configuration file to set tag values when gathering data.
 | |
| The
 | |
| .I type
 | |
| field can be one of
 | |
| .BR ascii ,
 | |
| .BR boolean ,
 | |
| .BR ip ,
 | |
| .BR number
 | |
| or
 | |
| .BR octet
 | |
| to specify the type of the tag as a simple string, a boolean, an IP address,
 | |
| a number, or a string of octet values.
 | |
| The
 | |
| .I granularity
 | |
| field specifies that that number of items must be given or a multiple
 | |
| thereof, unless the type is a number, then it is the size of the number (1,
 | |
| 2 or 4).
 | |
| The
 | |
| .I max
 | |
| field tells the maximum number of items that may be used with the tag, with
 | |
| 0 meaning "unlimited".
 | |
| .SP
 | |
| Three tags, the ones that MINIX 3 really cares about, have been predefined,
 | |
| and there are also a few pseudotags predefined for the static fields in a
 | |
| DHCP packet that one may want to set:
 | |
| .SP
 | |
| .RS
 | |
| .nf
 | |
| tag ? siaddr ip 1 1;
 | |
| tag ? sname ascii 1 64;
 | |
| tag ? file ascii 1 128;
 | |
| tag 1 netmask ip 1 1;
 | |
| tag 3 gateway ip 1 0;
 | |
| tag 6 DNSserver ip 1 0;
 | |
| .fi
 | |
| .RE
 | |
| .SP
 | |
| The file
 | |
| .B /usr/etc/dhcptags.conf
 | |
| contains tag definitions for all standard DHCP tags.  It is wise to include
 | |
| this file at the top of any DHCP configuration file.
 | |
| .RE
 | |
| .PP
 | |
| .B no
 | |
| .IR tag-name ;
 | |
| .PP
 | |
| .RS
 | |
| Removes a tag with the given name from the data gathered at this point.
 | |
| Useful if one host is different from all others, for instance if it doesn't
 | |
| need a gateway definition, because it happens to be the gateway.
 | |
| .RE
 | |
| .PP
 | |
| .IR "ascii-tag string" ;
 | |
| .PP
 | |
| .RS
 | |
| Adds an ASCII tag to the gathered data.  The string can be a simple word, or
 | |
| a quoted string.
 | |
| .RE
 | |
| .PP
 | |
| .I boolean-tag
 | |
| .BR false | true ;
 | |
| .PP
 | |
| .RS
 | |
| Set a boolean tag to be false or true.  (Encoded as a octet of value 0 or 1.
 | |
| Note that if you prefer to use 0 or 1 instead of false or true then you can
 | |
| define a boolean tag as a size 1 number instead.)
 | |
| .RE
 | |
| .PP
 | |
| .IR "ip-tag host" " ...;"
 | |
| .PP
 | |
| .RS
 | |
| Sets a tag that needs one or more IP addresses.  The host names are
 | |
| translated as usual.  To make it easier to specify netmasks one can use a
 | |
| slash followed by a number, e.g.
 | |
| .BR "netmask /27" ,
 | |
| which is a handy alternative for
 | |
| .BR "netmask 255.255.255.224" .
 | |
| .RE
 | |
| .PP
 | |
| .IR "number-tag number" " ...;"
 | |
| .PP
 | |
| .RS
 | |
| Set a number tag.
 | |
| .RE
 | |
| .PP
 | |
| .IR "octet-tag hexdigits" ;
 | |
| .PP
 | |
| .RS
 | |
| Set an octet string tag.
 | |
| .I Hexdigits
 | |
| is a series of hexadecimal digits that are two by two used to set the
 | |
| octets.
 | |
| .RE
 | |
| .PP
 | |
| .SH EXAMPLE
 | |
| As an example the DHCP configuration used by the author of this document is
 | |
| included.  His network at home consists of a number of PCs, an ISDN router
 | |
| named rhone and a PC named saone serving as router/tunnel to/via a cable
 | |
| ISP.  Both the rhone and the saone connect the home net to the network of
 | |
| the Vrije Universiteit, but the rhone is only active if the cable doesn't
 | |
| work.
 | |
| .PP
 | |
| The saone is a DHCP server, and one of the ordinary PCs is a backup DHCP
 | |
| server.  Both use the same configuration file, which is added below, with
 | |
| extra commentary introduced by
 | |
| .B ##
 | |
| at a deeper indent level:
 | |
| .RS
 | |
| .de xS	\" Example start
 | |
| .sp
 | |
| .nf
 | |
| .ft C
 | |
| ..
 | |
| .de xE	\" Example end
 | |
| .fi
 | |
| .ft R
 | |
| ..
 | |
| .de cS	\" Commentary start
 | |
| .sp
 | |
| .in +12m
 | |
| .ti -\w'## 'u
 | |
| ##\ \c
 | |
| ..
 | |
| .de cE	\" Commentary end
 | |
| .in -12m
 | |
| ..
 | |
| .xS
 | |
| .ta +8m +16m
 | |
| include /usr/etc/dhcptags.conf;
 | |
| .xE
 | |
| .cS
 | |
| With the help of the tag definitions we can use tags like "DHCPlease".
 | |
| .cE
 | |
| .xS
 | |
| host 130.37.102.64/27 {
 | |
| 	DNSserver saone darask;
 | |
| 	host 130.37.102.88/29 { DHCPlease 259200; }
 | |
| };
 | |
| .xE
 | |
| .cS
 | |
| This defines the network 130.37.102.64/27, with netmask 255.255.255.224
 | |
| (implicit from the network definition).  The DNS servers for this net are
 | |
| saone and darask.  A smaller subrange of addresses is used as an address
 | |
| pool on the saone, so a lease of 259200 seconds (3 days) is defined.  The
 | |
| netmask is still /27, as set by the outer network definition.
 | |
| .cE
 | |
| .xS
 | |
| host 130.37.102.248/30 {};
 | |
| .xE
 | |
| .cS
 | |
| A network of two addresses for routing tests.
 | |
| .cE
 | |
| .xS
 | |
| host saone {
 | |
| 	option server;
 | |
| 	option ip1 possessive;
 | |
| 	interface ip2 saone-net2;
 | |
| 	DNSserver 130.37.24.3 130.37.24.6;
 | |
| };
 | |
| .xE
 | |
| .cS
 | |
| With the network definitions done we turn our attention to the hosts.  Saone
 | |
| is a DHCP server on its main interface.  The second interface
 | |
| .RB ( ip1 )
 | |
| is connected to the cable modem.  It gets its address from the cableco's
 | |
| DHCP server, and if that server decides to go deaf then the saone keeps
 | |
| the interface up ("possessive") even if the lease expires.  The pseudo IP
 | |
| interface
 | |
| .B ip2
 | |
| is set to the IP address of
 | |
| .BR saone-net2 ,
 | |
| one side of the encrypted tunnel over the cable to a Minix-vmd box at the VU.
 | |
| The DNS servers specified override the default setting for the network, naming
 | |
| two external servers at the VU that know the world.
 | |
| .cE
 | |
| .xS
 | |
| host darask {
 | |
| 	option server;
 | |
| 	DNSserver saone;
 | |
| 	class MINIX 3 { DNSserver saone 130.37.24.3 130.37.24.6; };
 | |
| };
 | |
| .xE
 | |
| .cS
 | |
| The darask is also a server, the backup for saone on the odd chance that it
 | |
| is unavailable.  It uses saone and the external name servers, but only
 | |
| when it is running MINIX 3.  When running Windows it only uses saone.
 | |
| .cE
 | |
| .xS
 | |
| .ta +32m +16m
 | |
| client 0:1:1b:a:68:ce	darask;	# NE2000
 | |
| client 0:1:1b:a:77:23	burask;	# NE2000
 | |
| #lient 0:0:c0:b0:da:64	burask;	# WD8013EWC
 | |
| client 8:0:5a:38:b2:f	finiah;	# PCMCIA NE2000
 | |
| client 0:0:c0:3a:12:10	bardelask;	# WD8003
 | |
| #lient 2:60:8c:ab:8a:6d	bardelask;	# 3C503
 | |
| client 0:a0:c5:20:9:6d	rhone;
 | |
| client 0:1:1b:a:4c:3b	saone;	# NE2000
 | |
| #lient 0:0:c0:fb:2:6a	saone-net1;	# WD8013EWC
 | |
| .xE
 | |
| .cS
 | |
| Lastly the ethernet addresses of all the hosts are listed, so that they can
 | |
| be translated to IP addresses.  The lines that are commented out are for
 | |
| extra network cards that are currently unused.  The last is used to connect
 | |
| to the cable modem, so it's only here because it's nice to have the ethernet
 | |
| address written down somewhere.
 | |
| .cE
 | |
| .RE
 | |
| .PP
 | |
| The host names shown above are translated by DHCP using this
 | |
| .BR /etc/hosts :
 | |
| .RS
 | |
| .xS
 | |
| .ta +\w'130.37.102.249mm'u
 | |
| 604800	%ttl
 | |
| 2419200	%stale
 | |
| 
 | |
| 130.37.102.65	darask.kjb.upwind.org
 | |
| 130.37.102.66	burask.kjb.upwind.org
 | |
| 130.37.102.67	finiah.kjb.upwind.org
 | |
| 130.37.102.68	bardelask.kjb.upwind.org
 | |
| 130.37.102.69	roniah.kjb.upwind.org
 | |
| 
 | |
| 130.37.102.70	saone.kjb.upwind.org
 | |
| 130.37.102.2	saone-net2.kjb.upwind.org
 | |
| 
 | |
| 130.37.102.88	rhone.kjb.upwind.org
 | |
| 130.37.102.89	dyn89.kjb.upwind.org
 | |
| 130.37.102.90	dyn90.kjb.upwind.org
 | |
| 130.37.102.91	dyn91.kjb.upwind.org
 | |
| 130.37.102.92	dyn92.kjb.upwind.org
 | |
| 130.37.102.93	dyn93.kjb.upwind.org
 | |
| 130.37.102.94	dyn94.kjb.upwind.org
 | |
| 
 | |
| 130.37.102.249	tst1.kjb.upwind.org
 | |
| 130.37.102.250	tst2.kjb.upwind.org
 | |
| .xE
 | |
| .RE
 | |
| .SH FILES
 | |
| .TP
 | |
| .B /usr/etc/dhcptags.conf
 | |
| A supplied list of standard tag definitions as per RFC-1533.  (Well, the
 | |
| tag numbers and their meaning are standard, the names are made up.)
 | |
| .SH "SEE ALSO"
 | |
| .BR RFC-2131 ,
 | |
| .BR RFC-1533 ,
 | |
| .BR configfile (5),
 | |
| .BR hosts (5),
 | |
| .BR boot (8),
 | |
| .BR dhcpd (8).
 | |
| .SH NOTES
 | |
| The amount of memory
 | |
| .B dhcpd
 | |
| needs increases with the size of configuration file.  MINIX 3 can
 | |
| handle
 | |
| .B dhcptags.conf
 | |
| and a modest sized
 | |
| .BR dhcp.conf .
 | |
| You have to increase the stack size to accommodate more.  (No problem under
 | |
| Minix-vmd, of course.)
 | |
| .SH NOTES
 | |
| Items that are only necessary for a certain host should only be specified
 | |
| for that host.  Items for a whole network are best added to a netblock
 | |
| specification.  Use class elements for a certain type of host, and macros
 | |
| for exceptions.  Try to limit information as much as possibly to those hosts
 | |
| that need it.  (Don't go overboard.  A MINIX 3 machine won't be bothered by a
 | |
| few NetBIOS tags.)
 | |
| .PP
 | |
| DHCPINFORM requests should always be answered when being a server, but
 | |
| J. Random Sysadmin trying to diagnose problems doesn't like it when little
 | |
| MINIX 3 machines show up in a packet trace unexpectedly.  It's best to be
 | |
| inconspicuous on a network you don't own.
 | |
| .SH BUGS
 | |
| There are a few too many subtle mistakes one can make.
 | |
| .SH AUTHOR
 | |
| Kees J. Bot <kjb@cs.vu.nl>
 | 
