Step By Step Linux DHCP Server Configuration In Redhat/Centos/Fedora

In this article, we are going to discuss a very interesting and important topic i.e. Linux DHCP Server Configuration. Linux DHCP Server stands for Dynamic Host Configuration Protocol is used to provide IP Address to client Computers Dynamically OR Automatically. The Port Number of DHCP Server is 67 and The Port Number of DHCP Client is 68.

Step By Step Linux DHCP Server Configuration In Redhat/Centos/Fedora

Step By Step Linux DHCP Server Configuration In Redhat/Centos/Fedora

Where Should we use DHCP Server?

Suppose we have a small office with three computers with a router. Ip Address of the Router is 192.168.1.1 and We have a task to assign an IP Address to remain three computers. In that case, we can go and assign IP Addresses to each and every computer manually. But just Imagine You are working on a large setup with Thousands of Client Computers, Multiple Network Printers and so many other networking devices. In such kind of situating it’s just impossible to assign IP Addresses manually. In such a situation we need a Linux DHCP Server. DHCP Server will assign the IP Address to all systems and devices dynamically or automatically.

How DHCP Server Works? OR What is DORA Process?

  1. When a new system connected to Network, As a first step he searches for a DHCP Server in Network and when he unable to found the same as he is currently don’t have any IP Address, the system sends a DHCP Discover message to all devices which are connected to the network. This process is called Broadcasting.
  2. When the DHCP server receives the DHCP Discover message from the Client Computer, DHCP Server offers and broadcast’s an IP Address (Eg: 192.168.1.3) to all connected devices.
  3. Now when the Client Computer receives the IP Address he broadcasts a request on the network that he accepts the IP Address.
  4. Then DHCP Server Acknowledges the IP Address that Now the Client Computer can use the IP Address. This is how Linux DHCP Server Works. This whole process is called DORA (Discover Offer Request Acknowledgement).

Like other Services Like BIND DNS Server, NFS Server, DHCP is also a Server & client type of Server. So Here also need a Server and a Client to configure DHCP Server. DHCP Server & Client details are mentioned below :

DHCP Server Details :

Server Name: dhcpserver
IP Address : 192.168.0.100
MAC Address :

DHCP Client Details :

Hostname: Client1
MAC Address :

Important Parameters of Linux DHCP Server

  • option domain-name: Mention Domain Name eg : itsmarttricks.com
  • option domain-name-servers: Mention DNS Servers eg: 192.168.0.100, 192.168.0.101 (Note: You can also mention the FQDN)
  • default-lease-time: The Default time in Seconds till the time DHCP Server will assign an IP to Client’s Computer.
  • max-lease-time: The Maximum time in Seconds till the time DHCP Server will assign an IP to Client Computer.
  • subnet : Mention the Subnet IP Address eg : 192.168.0.0
  • netmask: Mention the Subnet Mask eg : 255.255.255.0
  • range: Mention the IP Range which will dynamically be assigned by Linux DHCP Server to Client Computers. eg : 192.168.0.2 to 192.168.0.240
  • option routers: Mention the Gateway IP Address eg : 192.168.0.1
  • option broadcast-address : Mention your Broadcast Address eg : 192.168.0.255
  • hardware ethernet: Mention your MAC Access OR Physical Address eg : 00:0C:29:F7:BE:27
  • option host-name: Your systems Hostname OR Computer Name eg : dhcpserver

Follow the Below Steps for Step By Step Linux DHCP Server Configuration In Redhat/Centos/Fedora:

Step: 1 Prepare your Server before DHCP Server Configuration

Before we start the configuration of the DHCP Server first we need to prepare our server for that.

First Assign a Static IP Address to your Server. Refer to the command below.

[root@dhcpserver ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0   # Set Static IP Address
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:41:6a:ae
IPV6INIT=yes
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID="2172489a-2137-49f3-8389-6e616d9d6ca1"
IPADDR=192.168.0.100
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.100
USERCTL=no
DNS2=192.168.0.101

Give a proper Hostname to your Server. Here my Server’s Hostname is dhcpserver.

[root@dhcpserver ~]# hostname   # Checking Hostname
dhcpserver.itsmarttricks.com

Step: 2 Install Required Packages

Install the required packages and dependencies for Linux DHCP Server.

[root@localhost ~]# yum -y install dhcp*  # Install Linux DHCP Server Package
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * extras: mirror.fibergrid.in
 * updates: mirrors.aluhost.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.1.1-53.P1.el6.centos will be installed
---> Package dhcp-common.x86_64 12:4.1.1-38.P1.el6.centos will be updated
--> Processing Dependency: dhcp-common = 12:4.1.1-38.P1.el6.centos for package: 12:dhclient-4.1.1-38.P1.el6.centos.x86_64
---> Package dhcp-common.x86_64 12:4.1.1-53.P1.el6.centos will be an update
---> Package dhcp-devel.x86_64 12:4.1.1-53.P1.el6.centos will be installed
--> Running transaction check
---> Package dhclient.x86_64 12:4.1.1-38.P1.el6.centos will be updated
---> Package dhclient.x86_64 12:4.1.1-53.P1.el6.centos will be an update
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================================================
 Package                              Arch                            Version                                             Repository                     Size
==============================================================================================================================================================
Installing:
 dhcp                                 x86_64                          12:4.1.1-53.P1.el6.centos                           base                          823 k
 dhcp-devel                           x86_64                          12:4.1.1-53.P1.el6.centos                           base                          158 k
Updating:
 dhcp-common                          x86_64                          12:4.1.1-53.P1.el6.centos                           base                          144 k
Updating for dependencies:
 dhclient                             x86_64                          12:4.1.1-53.P1.el6.centos                           base                          322 k

Transaction Summary
==============================================================================================================================================================
Install       2 Package(s)
Upgrade       2 Package(s)

Total download size: 1.4 M
Downloading Packages:
(1/4): dhclient-4.1.1-53.P1.el6.centos.x86_64.rpm                                                                                      | 322 kB     00:00     
(2/4): dhcp-4.1.1-53.P1.el6.centos.x86_64.rpm                                                                                          | 823 kB     00:00     
(3/4): dhcp-common-4.1.1-53.P1.el6.centos.x86_64.rpm                                                                                   | 144 kB     00:00     
(4/4): dhcp-devel-4.1.1-53.P1.el6.centos.x86_64.rpm                                                                                    | 158 kB     00:00     
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                         954 kB/s | 1.4 MB     00:01     
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating   : 12:dhcp-common-4.1.1-53.P1.el6.centos.x86_64                                                                                               1/6 
  Installing : 12:dhcp-4.1.1-53.P1.el6.centos.x86_64                                                                                                      2/6 
  Installing : 12:dhcp-devel-4.1.1-53.P1.el6.centos.x86_64                                                                                                3/6 
  Updating   : 12:dhclient-4.1.1-53.P1.el6.centos.x86_64                                                                                                  4/6 
  Cleanup    : 12:dhclient-4.1.1-38.P1.el6.centos.x86_64                                                                                                  5/6 
  Cleanup    : 12:dhcp-common-4.1.1-38.P1.el6.centos.x86_64                                                                                               6/6 
  Verifying  : 12:dhcp-common-4.1.1-53.P1.el6.centos.x86_64                                                                                               1/6 
  Verifying  : 12:dhcp-devel-4.1.1-53.P1.el6.centos.x86_64                                                                                                2/6 
  Verifying  : 12:dhcp-4.1.1-53.P1.el6.centos.x86_64                                                                                                      3/6 
  Verifying  : 12:dhclient-4.1.1-53.P1.el6.centos.x86_64                                                                                                  4/6 
  Verifying  : 12:dhcp-common-4.1.1-38.P1.el6.centos.x86_64                                                                                               5/6 
  Verifying  : 12:dhclient-4.1.1-38.P1.el6.centos.x86_64                                                                                                  6/6 

Installed:
  dhcp.x86_64 12:4.1.1-53.P1.el6.centos                                      dhcp-devel.x86_64 12:4.1.1-53.P1.el6.centos                                     

Updated:
  dhcp-common.x86_64 12:4.1.1-53.P1.el6.centos                                                                                                                

Dependency Updated:
  dhclient.x86_64 12:4.1.1-53.P1.el6.centos                                                                                                                   

Complete!

You can confirm if packages are properly installed or not by using the below command.

[root@localhost ~]# rpm -qa | grep dhcp   # Confirm the Installed DHCP Server Package
dhcp-4.1.1-53.P1.el6.centos.x86_64
dhcp-common-4.1.1-53.P1.el6.centos.x86_64
dhcp-devel-4.1.1-53.P1.el6.centos.x86_64

After installation let’s check what is the Installation directory of the Linux DHCP Server and the Path of all configuration files. We can do so using the below command.

[root@localhost ~]# rpm -ql dhcp   # Check the Path of Installation Directories and Configuration Files
/etc/dhcp   # Installation Directory
/etc/dhcp/dhcpd.conf   # Main Configuration file of DHCP Server
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/portreserve/dhcpd
/etc/rc.d/init.d/dhcpd
/etc/rc.d/init.d/dhcpd6
/etc/rc.d/init.d/dhcrelay
/etc/rc.d/init.d/dhcrelay6
/etc/sysconfig/dhcpd
/etc/sysconfig/dhcpd6
/etc/sysconfig/dhcrelay
/etc/sysconfig/dhcrelay6
/usr/bin/omshell
/usr/sbin/dhcpd   # Binary Files
/usr/sbin/dhcrelay
/usr/share/doc/dhcp-4.1.1
/usr/share/doc/dhcp-4.1.1/3.0b1-lease-convert
/usr/share/doc/dhcp-4.1.1/IANA-arp-parameters
/usr/share/doc/dhcp-4.1.1/README.ldap
/usr/share/doc/dhcp-4.1.1/api+protocol
/usr/share/doc/dhcp-4.1.1/dhclient-tz-exithook.sh
/usr/share/doc/dhcp-4.1.1/dhcpd-conf-to-ldap
/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
/usr/share/doc/dhcp-4.1.1/dhcpd6.conf.sample
/usr/share/doc/dhcp-4.1.1/draft-ietf-dhc-ldap-schema-01.txt
/usr/share/doc/dhcp-4.1.1/ms2isc
/usr/share/doc/dhcp-4.1.1/ms2isc/Registry.perlmodule
/usr/share/doc/dhcp-4.1.1/ms2isc/ms2isc.pl
/usr/share/doc/dhcp-4.1.1/ms2isc/readme.txt
/usr/share/doc/dhcp-4.1.1/sethostname.sh
/usr/share/doc/dhcp-4.1.1/solaris.init
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/var/lib/dhcpd
/var/lib/dhcpd/dhcpd.leases   # Linux DHCP Server Lease File
/var/lib/dhcpd/dhcpd6.leases

So the Installation directory of DHCP Server is /etc/dhcp and the main configuration file of Linux DHCP Server is dhcpd.conf. By default the dhcpd.conf file would look like as shown below. As you can see below there is a message for us that we can copy the sample dhcpd.conf file from /usr/share/doc/dhcp* directory.

[root@localhost ~]# cat /etc/dhcp/dhcpd.conf    
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#

Step : 3 Prepare the Configuration File

So let’s go ahead and copy the dhcpd.conf.sample file as dhcpd.conf. The system will ask for Overwrite as we already have dhcpd.conf file at /etc/dhcp path. So just enter yes and Press enter to continue the Copy.

[root@localhost ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf 
cp: overwrite `/etc/dhcp/dhcpd.conf'? yes

Step: 4 Configure the Linux DHCP Server

Now let’s go ahead and configure the Linux DHCP Server. Just edit the /etc/dhcp/dhcpd/conf file by using your preferred text editor.

Below shown configurations are global variables and will apply to all subnet’s we declare on dhcpd.conf file. So just edit the configuration file and make changes as per your scenario.

option domain-name "itsmarttricks.com";   
option domain-name-servers 192.168.0.100, 192.168.0.101;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

Then declare a Subnet as per your network Scenario. Here I am taking IP Address starting from 192.168.0 and Subnet as 255.255.255.0

Sample Output :

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.5 192.168.0.240;   # IP Address Range
  option domain-name-servers 192.168.0.100, 192.168.0.101;   # DNS Servers
  option domain-name "itsmarttricks.com";   # Domain Name
  option routers 192.168.0.1;   # Gateway Address
  option broadcast-address 192.168.0.255;
  default-lease-time 600;
  max-lease-time 7200;
}

Where :

The range is for allowed IP Address Range i.e. 192.168.0.5 to 192.168.0.240. DHCP Server will assign IP Address to client computers within this range. And Other settings are common like Domain Name, Router Address i.e. Gateway Address, DNS Servers and so on which I already explained above.

After all required changes in dhcpd.conf configuration file starts the Linux DHCP server service using the below command.

[root@dhcpserver ~]# /etc/init.d/dhcpd start   # Start the DHCP Server Service
Starting dhcpd:                                            [  OK  ]

Configure DHCP Service to start at system startup.

[root@dhcpserver ~]# chkconfig --level 35 dhcpd on   # Start DHCP Service at Startup

[root@dhcpserver ~]# chkconfig --list dhcpd   # Confirm the Startup Configuration
dhcpd           0:off   1:off   2:off   3:on      4:off   5:on      6:off

DHCP Client-Side Configuration

Configure the Ethernet connection from the client-side to get IP from DHCP Server. To do so just edit the ifcfg-ethX file and set BOOTPROTO=dhcp (Highlighted in Red color). Refer to the sample output below.

Note: Replace X with your Ethernet Connection Number

[root@client1 ~]# nano /etc/sysconfig/network-scripts/ifcfg-eth1  # Configure Ethernet Connection

HWADDR=00:0C:29:F7:BE:27
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="eth1"
UUID=51af58db-2b74-4b31-9016-2e8682cafcb4
ONBOOT=yes
LAST_CONNECT=1495972689

Then restart the Network service using the below command.

[root@dhcpserver ~]# /etc/init.d/network restart  # Restart the Network Service

Once you restart the Network Service system will get the IP Address from Linux DHCP Server. To confirm the same we can use ifconfig command to check the IP Address. Refer to the command below.

[root@client1 ~]# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:F7:BE:27  
          inet addr:192.168.0.5  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef7:be27/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:39 errors:0 dropped:0 overruns:0 frame:0
          TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5184 (5.0 KiB)  TX bytes:7917 (7.7 KiB)

Once the client gets IP Address from DHCP Server you can see all the client information like The assigned IP Address, MAC Address, Client Computer Name in /var/lib/dhcpd.leases Server.

Note : IP Address lease informations are stored in /var/lib/dhcpd.leases file. By default, it comes with DHCP Server Package Installation but if it is not there then you have to create it manually otherwise you will unable to start the DHCP Service.

[root@dhcpserver ~]# cat /var/lib/dhcpd/dhcpd.leases   # Checking the dhcpd.leases file
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1.1-P1

server-duid "\000\001\000\001 \275v\261\000\014)Aj\256";

lease 192.168.0.5 {
  starts 0 2017/05/28 12:02:32;
  ends 0 2017/05/28 12:12:32;
  cltt 0 2017/05/28 12:02:32;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:f7:be:27;
  client-hostname "client1";
}

Advance Features in Linux DHCP Server

One more useful feature you can configure in Linux DHCP Server is you can Reserve IP Address for some user using his MAC Address (Physical Address). Normally DHCP Server leases IP Address to the client for some particular time. When you restart the system it is possible that DHCP will assign you a different IP Address.

The benefit of IP Reservation is the IP Address will never change. Suppose you have a Network printer that is configured in so many client systems in that case if your IP Address change frequently then users will unable to use the printer. For avoid such situation you have to reserve an IP Address for that printer in Linux DHCP Server.

Here I reserved an IP Address for one of my client computer i.e. client1. Refer to the Sample Output below.

### host declaration ###

host client1 {
        option host-name "client1";   # Hostname of the Client Computer
        hardware ethernet 00:0c:29:f7:be:27;   # MAC Address of the Client Computer
        fixed-address 192.168.0.130;   # IP Address You want to assign to that Client
}

After required changes just restart the DHCP service to changes take effect.

[root@dhcpserver ~]# /etc/init.d/dhcpd restart   # Restart the DHCP Service
Shutting down dhcpd:                                       [  OK  ]
Starting dhcpd:                                            [  OK  ]

Then restart the Network Service from the DHCP client-side and you will get the Reserved IP Address. Refer to the Sample Output below.

[root@client1 ~]# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:F7:BE:27  
          inet addr:192.168.0.130  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef7:be27/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:56 errors:0 dropped:0 overruns:0 frame:0
          TX packets:174 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8534 (8.3 KiB)  TX bytes:11943 (11.6 KiB)

Here I mentioned my dhcpd.conf configured file for Your Reference.

# Configure Global Variables which are common for all Declared Subnets & will applied to all Subnets

option domain-name "itsmarttricks.com";
option domain-name-servers 192.168.0.100, 192.168.0.101;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;

# Declare a Subnet with IP Range

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.5 192.168.0.240;
  option domain-name-servers 192.168.0.100, 192.168.0.101;
  option domain-name "itsmarttricks.com";
  option routers 192.168.0.1;
  option broadcast-address 192.168.0.255;
  default-lease-time 600;
  max-lease-time 7200;
}

# Host Declaration for IP Address Reservation

host client1 {
        option host-name "client1"; 
        hardware ethernet 00:0c:29:f7:be:27;
        fixed-address 192.168.0.130;  
}

Also Read – How To Configure vsftpd Linux FTP Server In Redhat/Centos/Fedora

That’s all, In this article, we have explained Step By Step Linux DHCP Server Configuration In Redhat/Centos/Fedora. I hope you enjoy this article. If you like this article, then just share it. If you have any questions about this article, please comment.

Share this:

Mangesh Dhulap

This is Mangesh Dhulap the Founder and Editor of IT SMART TRICKS have 6+ years of Industrial Experience. We expect from our visitors to like, share, and comment on our posts.

You may also like...

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.