In computer networking, there are two types of ip address configurations, dynamic ip address and static ip address. A dynamic ip address means, a host in a network doesn't have a specific ip address. A dhcp client host will ask it's ip address from a dhcp server, which provides ip address for all hosts in it's network.
DHCP is dynamic host configuration protocol. In Ubuntu, dhcp server package is called dhcp3-server. To setup dhcp server, you need to install the dhcp3-server software package and configure dhcpd.conf file, which is the dhcp server configuration file. In this post, I'll show you how I setup my Ubuntu dhcp server.
Install Ubuntu dhcp3-server with apt-get
There are many ways to install software packages in Ubuntu. Most people use apt-get, a command line package management. So, I'll show you how to install dhcp3-server using apt-get too.
Here is an example of installing Ubuntu dhcp3-server using apt-get:
luzar@ubuntu:~$ sudo apt-get install dhcp3-server
[sudo] password for luzar:Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer
required: libdns32 libisc32
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed: dhcp3-server
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 318kB of archives.
After this operation, 774kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com hardy/main dhcp3-server
3.0.6.dfsg-1ubuntu9 [318kB]
Fetched 318kB in 3s (106kB/s)
Preconfiguring packages ...
Selecting previously deselected package dhcp3-server.
(Reading database ... 28920 files and directories currently installed.)
Unpacking dhcp3-server
(from .../dhcp3-server_3.0.6.dfsg-1ubuntu9_i386.deb) ...
Setting up dhcp3-server (3.0.6.dfsg-1ubuntu9) ...
Generating /etc/default/dhcp3-server...
* Starting DHCP server dhcpd3 [fail]
invoke-rc.d: initscript dhcp3-server, action "start" failed.
luzar@ubuntu:~$
The dhcp3-server installation is complete but fail to start the daemon. Don't worry, the dhcp3-server failed to start because we do not configure it yet. To configure the dhcp3-server, open /etc/dhcp3/dhcpd.conf file and read through a few times and you'll have a basic idea of how the configurations work.
We are going to edit the file, so make a copy of it first, as backup. Use cp command to copy the file:
luzar@ubuntu:~$ sudo cp /etc/dhcp3/dhcpd.conf
/etc/dhcp3/dhcpd.conf.bak
luzar@ubuntu:~$
Now you can edit /etc/dhcp3/dhcpd.conf to suit your network. Use any text editor you are comfortable with. Here is a tip before we begin editing. Do not remove unrelated configuration, just comment it. Maybe you'll need it later such as fixed ip host configuration. We'll use an existing configuration, change ip address regarding our network.
Here's an example of a simple dhcp configuration for a local network (in blue color):
luzar@ubuntu:~$ sudo less /etc/dhcp3/dhcpd.conf
#
# Sample configuration file for ISC dhcpd for Debian
#
# Attention: If /etc/ltsp/dhcpd.conf exists, that will be used as
# configuration file instead of this file.
#
# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
#
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
# option definitions common to all supported networks...
# Change example.org to your domain name
# Change ns1 and ns2 to your host name
option domain-name "example.org";
option domain-name-servers ubuntu.example.org;
# Set default and max lease time. Time is in second.
default-lease-time 600;
max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
#log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
#subnet 10.152.187.0 netmask 255.255.255.0 {
#}
# This is a very basic subnet declaration.
#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;
#}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.#subnet 10.254.239.32 netmask 255.255.255.224 {
# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 10.254.239.31;# option routers rtr-239-32-1.example.org;
#}
# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
# range 10.5.5.26 10.5.5.30;
# option domain-name-servers ns1.internal.example.org;
# option domain-name "internal.example.org";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
# default-lease-time 600;
# max-lease-time 7200;
#}
# Here is my dhcp configuration for local network example
# I am not editing the example above instead I copy it here
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.20 192.168.1.30;
option domain-name-servers 192.168.44.128;
option domain-name "ubuntu.example.org";
option routers 192.168.44.128;
option broadcast-address 192.168.44.254;
default-lease-time 600;
max-lease-time 7200;
}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.fugue.com";
#}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}
#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.example.org;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.example.org;
# }
# pool {
# allow members of "foo";
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of "foo";
# range 10.0.29.10 10.0.29.230;
# }
#}
Now we can restart the dhcp3-server again. You'll fail to start dhcp3-server if there's error in dhcp.conf file. You'll be prompt of what the error is. For example, here is an error I got when restarting my dhcp3-server:
luzar@ubuntu:~$ sudo /etc/init.d/dhcp3-server restart
dhcpd self-test failed. Please fix the config file.
The error was:
/etc/dhcp3/dhcpd.conf line 57: 2431504310 exceeds max (255) for precision.
range 199999999926
/etc/dhcp3/dhcpd.conf line 57: too few numbers.
range 199999999926 192.
Configuration file errors encountered -- exiting
So, I re-open dhcp.conf file and go to line 57 and fixed the error. You can also view /var/log/messages and /var/log/daemon.log to view error message. That's all that I need to do to configure dhcp in my local network.