Home –  Tutorials – Setting up your Linux box to serve as a DHCP server or a DHCP client

Setting up your Linux box to serve as a DHCP server or a DHCP client

2. Server Setup

2.1. DHCP server for UNIX

There are several DHCP servers available for U*X-like OSes, both commercial and free. One of the more popular free DHCP servers is Paul Vixie/ISC DHCPd. Currently the latest version is 2.0 (suggested for most users) but 3.0 is in beta testing. You can get them from

ftp://ftp.isc.org/isc/dhcp/

Some of the distributions provide binary packages for dhcpd so skip the following section if you got it installed that way.

After you download unpack it. After you do cd into the distribution directory and type: ./configure

It will take some time to configure the settings. After it is done type: make and make install.

2.2. DHCP server configuration

When done with installation type ifconfig -a. You should see something like this:

tar -zxvf dhcpcd-1.3.18pl1.tar.gz

If it doesn’t say MULTICAST you should reconfigure your kernel and add multicast support. On most systems you will not need to do this.

Next step is to add route for 255.255.255.255. Quoted from DHCPd README:

In order for dhcpd to work correctly with picky DHCP clients (e.g., Windows 95), it must be able to send packets with an IP destination address of 255.255.255.255. Unfortunately, Linux insists on changing 255.255.255.255 into the local subnet broadcast address (here, that’s 192.5.5.223). This results in a DHCP protocol violation, and while many DHCP clients don’t notice the problem, some (e.g., all Microsoft DHCP clients) do. Clients that have this problem will appear not to see DHCPOFFER messages from the server.

Type:

cd dhcpcd-1.3.18pl1

If you get a message “255.255.255.255: Unknown host”, you should try adding the following entry to your /etc/hosts file:

make

Then, try:

make install

or

cd /etc/rc.d

eth0 is of course the name of the network device you are using. If it differs change appropriately.

2.3. Options for DHCPd

Now you need to configure DHCPd. In order to do this you will have to create or edit /etc/dhcpd.conf. There is a graphical interface for dhcpd configuration under KDE ( http://www.kde.org/ ) called kcmdhcpd that is very similar to the DHCP configurator on Windows NT. When KDE 2.0 comes out it should come with kcmdhcpd or you could get it directly from:

ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/

If you want to configure it by hand follow instructions below.

Most commonly what you want to do is assign IP addresses randomly. This can be done with settings as follows:

mv rc.inet1 rc.inet1.OLD

This will result in DHCP server giving a client an IP address from the range 192.168.1.10-192.168.1.100 or 192.168.1.150-192.168.1.200. It will lease an IP address for 600 seconds if the client doesn’t ask for specific time frame. Otherwise the maximum (allowed) lease will be 7200 seconds. The server will also “advise” the client that it should use 255.255.255.0 as its subnet mask, 192.168.1.255 as its broadcast address, 192.168.1.254 as the router/gateway and 192.168.1.1 and 192.168.1.2 as its DNS servers.

If you need to specify a WINS server for your Windows clients you will need to include the netbios-name-servers option e.g.

#!/bin/sh
#
# rc.inet1 This shell script boots up the base INET system.
 
HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I
#will leave it in anyways
 
# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
 
# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.
 
/usr/sbin/dhcpcd

You can also assign specific IP addresses based on clients ethernet address e.g.

pump -i eth0 -h hostname

This will assign IP address 192.168.1.222 to a client with ethernet address 08:00:2b:4c:59:23.

You can also mix and match e.g. you can have certain clients getting “static” IP addresses (e.g. servers) and others being alloted dynamic IPs (e.g. mobile users with laptops). There are a number of other options e.g. nis server addresses, time server addresses etc., if you need any of those options please read the dhcpd.conf man page.

2.4. Starting the server

There is only one thing to do before starting the server. In most cases DHCP installation doesn’t create a dhcpd.leases files. This file is used by DHCPd to store information about current leases. It is in the plain text form so you can view it during the operation of DHCPd. To create dhcpd.leases type:

...
if [ -n "$PUMP" ]; then
echo -n "Determining IP information for $DEVICE..."
if /sbin/pump -i $DEVICE -h hostname; then
echo " done."
else
echo " failed."
exit 1
fi
else ...

This will create an empty file (file size = 0). Some of the older version of dhcpd 2.0 placed the file in /etc/dhcpd.leases. You do not need to make any changes to the leases file it will be manipulated by the dhcpd. If you get a message saying that file exists simply ignore it and go to the next step.

You can now invoke the DHCP server. Simply type (or include in the bootup scripts)

DEVICE="eth0"
MACADDR="00:11:22:33:44:55"
DHCP_HOSTNAME="trigger_for_terayon"

This will invoke dhcpd on eth0 device. If you want to invoke it on another device simply supply it on the command line e.g.

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
PUMP=true
fi
 
if [ -n "$PUMP" ]; then

To verify that everything is working fine you should first turn on the debugging mode and put the server in foreground. You can do this by typing

if [ "$BOOTPROTO" = bootp ]; then
echo " done."
else
echo " failed."
exit 1
fi
elif [ "$BOOTPROTO" = dhcp ]; then
echo -n "Determining IP information for $DEVICE..."
if /sbin/dhcpcd -d $DEVICE ; then
if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then
/etc/dhcpc/dhcpcd-${DEVICE}.exe
fi

Then boot up one of your clients and check out the console of your server. You will see a number of debugging messages come up. If everything works out fine you are done :-). Quit dhcpd and start it without the -d -f and arguments. If you want dhcpd to start at boot-up include dhcpd in e.g.

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
....
fi

2.5. Other interesting documents

Linux Magazine has a pretty good article called Network Nirvana: How to make Network Configuration as easy as DHCP that discusses the set up for DHCP.

Leave a Reply

Your email address will not be published. Required fields are marked *