Custom Search

Ubuntu dhcp server setup

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.

Ubuntu search files using find command basic

Basic find command




There are several ways to search files in Ubuntu. Probably you may already come across my other post about searching file in Ubuntu using locate command. Here is another way of searching files in Ubuntu. This time we are using the GNU find command. The find command comes with many options. That makes find a very powerful command. However, new users may not be very comfortable with find. I mean most users prefer a simple command, a command with less options to remember.




Don't ever think like that if you want to be a true Linux user. You must take advantage of powerful Linux command otherwise you would never see Linux full potential.




The manual page is a great help. Always make yourself a habit to read manual page for every new command. You don't have to read it all the first time you open it. My tip is, read the synopsis so you know the command's syntax. Then scan through some options. Some manual do have examples. Here are some informations about find in manual page:





NAME
find - search for files in a directory hierarchy


SYNOPSIS
find [-H] [-L] [-P] [path...] [expression]


DESCRIPTION
This manual page documents the GNU version of find. GNU find searches
the directory tree rooted at each given file name by evaluating the
given expression from left to right, according to the rules of precedence
(see section OPERATORS), until the outcome is known (the left
hand side is false for and operations, true for or), at which point
find moves on to the next file name.


If you are using find in an environment where security is important
(for example if you are using it to search directories that are writable
by other users), you should read the "Security Considerations" chapter
of the findutils documentation, which is called Finding Files and comes
with findutils. That document also includes a lot more detail and
discussion than this manual page, so you may find it a more useful
source of information.


EXPRESSIONS
The expression is made up of options (which affect overall operation
rather than the processing of a specific file, and always return true),
tests (which return a true or false value), and actions (which have side
effects and return a true or false value), all separated by operators.
-and is assumed where the operator is omitted.
If the expression contains no actions other than -prune, -print
is performed on all files for which the expression is true.



The meaning of synopsis options:





  • -H means do not follow symbolic links, except while processing the command line arguments.

  • -L means follow symbolic links.

  • -P means never follow symbolic links.




Let's try some examples to search file in Ubuntu using find command.




Example 1:




luzar@ubuntu:~$ find -P /home -iname File.txt
/home/luzar/File.txt
luzar@ubuntu:~$



In the example above, I used find command to search in /home directory for a file named file.txt. See that I used -iname instead of -name because -iname is case insensitive.




This concludes the basic find command guide. We'll continue advanced find command in another post.

Ubuntu nsswitch.conf guide

Ubuntu nsswitch.conf is an important files regarding dns configuration. The nsswitch.conf is Name Service switch configuration file. Why does it important in dns configuration?




There are two important files in Ubuntu that directly deal with name server in mapping the host names and ip address. One is hosts file and the other is dns itself. This applied if you are not configuring NIS, of course. You can find these two files in nsswitch.conf configuration file. Open /etc/nsswitch.conf file using text editor or less command:




luzar@ubuntu:~$ sudo vi /etc/nsswitch.conf



Let's take a look at it more closely:





# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.


passwd: compat
group: compat
shadow: compat


hosts: files dns
networks: files


protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis~



Let's take a look at the line hosts which I already highlighted in blue. The hosts is pointing for files contain name server in the system when there is a request for it. As you can see, there are two files, files and dns. The files mention in hosts is a local file, which is the /etc/hosts file. The other file is dns, domain name server. The files will be check first and dns second. That means, /etc/hosts can override information in the dns configuration file.

Ubuntu dns server configuration

Ubuntu dns server configuration involves many files. I would like to remind you again, please make a backup for every files before you begin editing. Example below:




luzar@ubuntu:/etc/bind$ sudo cp named.conf.local named.conf.local.bak
luzar@ubuntu:/etc/bind$ sudo cp named.conf.options named.conf.options.bak



The first file we are going to edit is the named.conf.local file. Use your favorite editor to open named.conf.local file.




luzar@ubuntu:/etc/bind$ sudo vim /etc/bind/named.conf.local



Type the code below. Replace example.com. with your domain name.





zone "example.com" in {
allow-transfer { any; };
file "/etc/bind/db.example.com.";
type master;
};


// Set up reversed name resolution
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
};



Example of /etc/bind/db.example.com configuration.





;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ubuntu.example.com. root.example.com. (
2008112202 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;

example.com IN MX mail.example.com.
@ IN NS ubuntu.example.com.
@ IN A 192.168.1.3
ubuntu IN A 192.168.1.3
web IN CNAME ubuntu.example.com.



Example of /etc/bind/db.192 configuration.





;
; Reverse lookup DNS Zone file
;
$TTL 604800
@ IN SOA ubuntu.example.com. root.example.com. (
2008112302 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
@ IN NS ubuntu.
3 IN CNAME ubuntu.example.com.



You have to set the ISP dns server ip address. Put it in /etc/bind/named.conf.options forwarders:





// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.


forwarders {
123.123.0.123;
123.123.1.1;
};



Example of /etc/resolv.conf configuration:

search example.comnameserver 192.168.1.3

Example of /etc/hosts configuration:





127.0.0.1 localhost
192.168.1.3 ubuntu.example.com ubuntu

# The following lines are desirable for IPv6 capable hosts

::1 ip6-localhost ip6-loopbackfe00
::0 ip6-localnetff00
::0 ip6-mcastprefixff02
::1 ip6-allnodesff02
::2 ip6-allroutersff02
::3 ip6-allhosts



Restart bind9 service with the command below:




luzar@ubuntu:~$ sudo /etc/init.d/bind9 restart
* Stopping domain name service... bind [ OK ]
* Starting domain name service... bind [ OK ]

luzar@ubuntu:~$ tail /var/log/messages



Testing dns with dig domain name command:




luzar@ubuntu:/etc/bind$ dig example.com

; <<>> DiG 9.4.2-P2 <<>> example.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34700
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1,
ADDITIONAL: 1

;; QUESTION SECTION:;example.com. IN A


;; ANSWER SECTION:
example.com. 604800 IN A 192.168.1.3


;; AUTHORITY SECTION:
example.com. 604800 IN NS ubuntu.example.com.


;; ADDITIONAL SECTION:
ubuntu.example.com. 604800 IN A 192.168.1.3


;; Query time: 0 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Sun Nov 23 04:23:18 2008
;; MSG SIZE rcvd: 82


luzar@ubuntu:/etc/bind$



Testing with dig ip address:




luzar@ubuntu:/etc/bind$ dig -x 192.168.1.3


; <<>> DiG 9.4.2-P2 <<>> -x 192.168.1.3
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35746
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1,
ADDITIONAL: 0


;; QUESTION SECTION:
;3.1.168.192.in-addr.arpa. IN PTR


;; ANSWER SECTION:
3.1.168.192.in-addr.arpa. 604800 IN CNAME ubuntu.example.com.


;; AUTHORITY SECTION:
example.com. 86400 IN SOA ubuntu.example.com.
root.example.com. 2008112202 604800 86400 2419200 86400


;; Query time: 0 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Sun Nov 23 04:32:09 2008
;; MSG SIZE rcvd: 115
luzar@ubuntu:/etc/bind$



If you have an error during configuration, please check error logs in:





  • /var/log/daemon.log.

  • /var/log/messages.




Here is an example of /var/log/daemon.log:




luzar@ubuntu:/etc/bind$ tail /var/log/daemon.log

Nov 24 10:23:05 ubuntu named[4554]: zone 28.172.in-addr.arpa/IN:
loaded serial 1
Nov 24 10:23:05 ubuntu named[4554]: zone 29.172.in-addr.arpa/IN:
loaded serial 1
Nov 24 10:23:05 ubuntu named[4554]: zone 30.172.in-addr.arpa/IN:
loaded serial 1
Nov 24 10:23:05 ubuntu named[4554]: zone 31.172.in-addr.arpa/IN:
loaded serial 1
Nov 24 10:23:05 ubuntu named[4554]: zone 168.192.in-addr.arpa/IN:
loaded serial 1
Nov 24 10:23:05 ubuntu named[4554]: zone 1.168.192.in-addr.arpa/IN:
loaded serial 2008112302
Nov 24 10:23:05 ubuntu named[4554]: zone 255.in-addr.arpa/IN:
loaded serial 1
Nov 24 10:23:05 ubuntu named[4554]: zone example.com/IN:
loaded serial 2008112202
Nov 24 10:23:05 ubuntu named[4554]: zone localhost/IN:
loaded serial 2
Nov 24 10:23:05 ubuntu named[4554]: running

Ubuntu named.conf

Ubuntu named.conf file is the master configuration file for DNS server. Its pronounced name-dee for name daemon, which is the dns service. It's location is in /etc/bind/named.conf. You can find named.conf file only after you install the bind9 software package.




Here is an example of a default Ubuntu /etc/bind/named.conf configuration file:





// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in
// include "/etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
// prime the server with knowledge of the root servers

zone "." {
type hint;
file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";



The named.conf is a very important file. Normally, you don't have to edit this file during dns configuration in Ubuntu. However, maybe you are going to open and view this file a few times to study it's configuration. It's a good idea to copy and make a backup of this file.




luzar@ubuntu:/etc/bind$ sudo cp named.conf named.conf.bak
[sudo] password for luzar:
luzar@ubuntu:/etc/bind$



As you can see, there are specific files in each zone in the named.conf configuration file above. Those are the database files for localhost and default dns configuration. We don't need to edit those files. You only need to edit two files mention at the top of named.conf which is /etc/bind/named.conf.local and /etc/bind/named.conf.options.