The Dynamic Host Configuration Protocol
(DHCP) allows a system to connect to a
network in order to be assigned the necessary addressing
information for communication on that network. FreeBSD includes
the OpenBSD version of dhclient
which is used
by the client to obtain the addressing information. FreeBSD does
not install a DHCP server, but several
servers are available in the FreeBSD Ports Collection. The
DHCP protocol is fully described in RFC
2131.
Informational resources are also available at isc.org/downloads/dhcp/.
This section describes how to use the built-in DHCP client. It then describes how to install and configure a DHCP server.
In FreeBSD, the bpf(4) device is needed by both the
DHCP server and DHCP
client. This device is included in the
GENERIC
kernel that is installed with
FreeBSD. Users who prefer to create a custom kernel need to keep
this device if DHCP is used.
It should be noted that bpf
also
allows privileged users to run network packet sniffers on
that system.
DHCP client support is included in the FreeBSD installer, making it easy to configure a newly installed system to automatically receive its networking addressing information from an existing DHCP server. Refer to Section 2.8, “Post-Installation” for examples of network configuration.
When dhclient
is executed on the client
machine, it begins broadcasting requests for configuration
information. By default, these requests use
UDP port 68. The server replies on
UDP port 67, giving the client an
IP address and other relevant network
information such as a subnet mask, default gateway, and
DNS server addresses. This information is
in the form of a DHCP
“lease” and is valid for a configurable time.
This allows stale IP addresses for clients
no longer connected to the network to automatically be reused.
DHCP clients can obtain a great deal of
information from the server. An exhaustive list may be found
in dhcp-options(5).
By default, when a FreeBSD system boots, its DHCP client runs in the background, or asynchronously. Other startup scripts continue to run while the DHCP process completes, which speeds up system startup.
Background DHCP works well when the DHCP server responds quickly to the client's requests. However, DHCP may take a long time to complete on some systems. If network services attempt to run before DHCP has assigned the network addressing information, they will fail. Using DHCP in synchronous mode prevents this problem as it pauses startup until the DHCP configuration has completed.
This line in /etc/rc.conf
is used to
configure background or asynchronous mode:
ifconfig_fxp0
="DHCP"
This line may already exist if the system was configured
to use DHCP during installation. Replace
the fxp0
shown in these examples
with the name of the interface to be dynamically configured,
as described in Section 12.5, “Setting Up Network Interface Cards”.
To instead configure the system to use synchronous mode,
and to pause during startup while DHCP
completes, use
“SYNCDHCP
”:
ifconfig_fxp0
="SYNCDHCP"
Additional client options are available. Search for
dhclient
in rc.conf(5) for
details.
The DHCP client uses the following files:
/etc/dhclient.conf
The configuration file used by
dhclient
. Typically, this file
contains only comments as the defaults are suitable for
most clients. This configuration file is described in
dhclient.conf(5).
/sbin/dhclient
More information about the command itself can be found in dhclient(8).
/sbin/dhclient-script
The FreeBSD-specific DHCP client configuration script. It is described in dhclient-script(8), but should not need any user modification to function properly.
/var/db/dhclient.leases.
interface
The DHCP client keeps a database of valid leases in this file, which is written as a log and is described in dhclient.leases(5).
This section demonstrates how to configure a FreeBSD system to act as a DHCP server using the Internet Systems Consortium (ISC) implementation of the DHCP server. This implementation and its documentation can be installed using the net/isc-dhcp42-server package or port.
The installation of
net/isc-dhcp42-server installs a sample
configuration file. Copy
/usr/local/etc/dhcpd.conf.example
to
/usr/local/etc/dhcpd.conf
and make any
edits to this new file.
The configuration file is comprised of declarations for subnets and hosts which define the information that is provided to DHCP clients. For example, these lines configure the following:
option domain-name "example.org"; option domain-name-servers ns1.example.org; option subnet-mask 255.255.255.0; default-lease-time 600; max-lease-time 72400; ddns-update-style none; subnet 10.254.239.0 netmask 255.255.255.224 { range 10.254.239.10 10.254.239.20; option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; } host fantasia { hardware ethernet 08:00:07:26:c0:a5; fixed-address fantasia.fugue.com; }
This option specifies the default search domain that will be provided to clients. Refer to resolv.conf(5) for more information. | |
This option specifies a comma separated list of DNS servers that the client should use. They can be listed by their Fully Qualified Domain Names (FQDN), as seen in the example, or by their IP addresses. | |
The subnet mask that will be provided to clients. | |
The default lease expiry time in seconds. A client can be configured to override this value. | |
The maximum allowed length of time, in seconds, for a
lease. Should a client request a longer lease, a lease
will still be issued, but it will only be valid for
| |
The default of | |
This line creates a pool of available IP addresses which are reserved for allocation to DHCP clients. The range of addresses must be valid for the network or subnet specified in the previous line. | |
Declares the default gateway that is valid for the
network or subnet specified before the opening
| |
Specifies the hardware MAC address of a client so that the DHCP server can recognize the client when it makes a request. | |
Specifies that this host should always be given the same IP address. Using the hostname is correct, since the DHCP server will resolve the hostname before returning the lease information. |
This configuration file supports many more options. Refer to dhcpd.conf(5), installed with the server, for details and examples.
Once the configuration of dhcpd.conf
is complete, enable the DHCP server in
/etc/rc.conf
:
dhcpd_enable="YES" dhcpd_ifaces="dc0"
Replace the dc0
with the interface (or
interfaces, separated by whitespace) that the
DHCP server should listen on for
DHCP client requests.
Start the server by issuing the following command:
#
service isc-dhcpd start
Any future changes to the configuration of the server will require the dhcpd service to be stopped and then started using service(8).
The DHCP server uses the following files. Note that the manual pages are installed with the server software.
/usr/local/sbin/dhcpd
More information about the dhcpd server can be found in dhcpd(8).
/usr/local/etc/dhcpd.conf
The server configuration file needs to contain all the information that should be provided to clients, along with information regarding the operation of the server. This configuration file is described in dhcpd.conf(5).
/var/db/dhcpd.leases
The DHCP server keeps a database of leases it has issued in this file, which is written as a log. Refer to dhcpd.leases(5), which gives a slightly longer description.
/usr/local/sbin/dhcrelay
This daemon is used in advanced environments where one DHCP server forwards a request from a client to another DHCP server on a separate network. If this functionality is required, install the net/isc-dhcp42-relay package or port. The installation includes dhcrelay(8) which provides more detail.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <[email protected]>.
Send questions about this document to <[email protected]>.