dhcpd
dhcpd is the Internet Systems Consortium DHCP Server. It is useful for instance on a machine acting as a router on a LAN.
Installation
Usage
dhcpd includes two unit files dhcpd4.service
and dhcpd6.service
, which can be used to control the daemon. They start the daemon on all network interfaces for IPv4 and IPv6 respectively. See #Listening on only one interface for an alternative.
Configuration
Assign a static IPv4 address to the interface you want to use (in our examples we will use eth0
). The first 3 bytes of this address cannot be exactly the same as those of another interface.
# ip link set up dev eth0 # ip addr add 139.96.30.100/24 dev eth0 # arbitrary address
-
192.168/16
(subnet192.168.0.0
, netmask255.255.0.0
) -
172.16/12
(subnet172.16.0.0
, netmask255.240.0.0
) -
10/8
(for large networks; subnet10.0.0.0
, netmask255.0.0.0
)
To have your static ip assigned at boot, see Network configuration#Static IP address.
The default dhcpd.conf
contains many uncommented examples, so relocate it:
# cp /etc/dhcpd.conf /etc/dhcpd.conf.example
The minimal configuration file may look like:
/etc/dhcpd.conf
option domain-name-servers 8.8.8.8, 8.8.4.4; option subnet-mask 255.255.255.0; option routers 139.96.30.100; subnet 139.96.30.0 netmask 255.255.255.0 { range 139.96.30.150 139.96.30.250; }
If you need to provide a fixed IP address for a single specific device, you can define host blocks:
/etc/dhcpd.conf
option domain-name-servers 8.8.8.8, 8.8.4.4; option subnet-mask 255.255.255.0; option routers 139.96.30.100; subnet 139.96.30.0 netmask 255.255.255.0 { range 139.96.30.150 139.96.30.250; } host macbookpro{ hardware ethernet 70:56:81:22:33:44; fixed-address 139.96.30.199; }
domain-name-servers
option contains addresses of DNS servers which are supplied to clients. In our example we are using Google's public DNS servers. If you know a local DNS server (for example, provided by your ISP), you should consider using it. If you have configured your own DNS on a local machine, then use its address in your subnet (e. g. 139.96.30.100
in our example).
subnet-mask
and routers
defines a subnet mask and a list of available routers on the subnet. In most cases for small networks you can use 255.255.255.0
as a mask and specify an IP address of the machine on which you are configuring DHCP server as a router.
subnet
blocks defines options for separate subnets, which are mapped to the network interfaces on which dhcpd is running. In our example this is one subnet 139.96.30.0/24
for single interface eth0
, for which we defined the range of available IP addresses. Addresses from this range will be assigned to the connecting clients.
Listening on only one interface
If your computer is already part of one or several networks, it could be a problem if your computer starts giving ip addresses to machines from the other networks. It can be done by either configuring dhcpd or starting it as a daemon with systemctl.
Configuring dhcpd
In order to exclude an interface, you must create an empty declaration for the subnet that will be configured on that interface.
This is done by editing the configuration file (for example):
/etc/dhcpd.conf
# No DHCP service in DMZ network (192.168.2.0/24) subnet 192.168.2.0 netmask 255.255.255.0 { }
Service file
There is no service files provided by default to use dhcpd only on one interface so you need to create one. Start by copying the existing service:
# cp /usr/lib/systemd/system/dhcpd4.service /etc/systemd/system/[email protected]
Then edit the ExecStart line to include the interface:
/etc/systemd/system/[email protected]
... [Service] ... ExecStart=/usr/bin/dhcpd -4 -q -cf /etc/dhcpd.conf -pf /run/dhcpd4/dhcpd.pid %I ...
This is a template unit, which binds it to a particular interface, for example dhcpd4@eth0.service
where eth0 is an interface shown with ip link
.
Use for PXE
PXE Configuration is done with the following two options:
/etc/dhcpd.conf
next-server 192.168.0.2; filename "/pxelinux.0";
This section can either be in an entire subnet
or just in a host
definition. next-server
is the IP of the TFTP Server, and filename
is the filename of the image to boot. For more information see PXE.