29.6.Â Dynamic Host Configuration Protocol
(DHCP)

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.

Note:

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.

29.6.1.Â Configuring a DHCP Client

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Â 11.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).

29.6.2.Â Installing and Configuring a DHCP
Server

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-dhcp43-server package or
port.

The installation of
net/isc-dhcp43-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:

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
max-lease-time.

The default of none disables dynamic
DNS updates. Changing this to interim
configures the DHCP server to update a
DNS server whenever it hands out a
lease so that the DNS server knows
which IP addresses are associated with
which computers in the network. Do not change the default
setting unless the DNS server has been
configured to support dynamic
DNS.

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
{ bracket.

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-dhcp43-relay
package or port. The installation includes dhcrelay(8)
which provides more detail.