This howto will share an internet connection through a Ubuntu desktop or server via the DHCP3 Server package. This setup uses two ethernet cards which are routed through a Ubuntu box.

Dynamic Host Configuration Protocol (DHCP) is a protocol used by networked devices (clients) to obtain the parameters necessary for operation in an Internet Protocol network.

A DSL router is handling the DNS for the world wide web. The Ubuntu router gets the internet connection from eth0 and hands out DHCP assigned information to the connected PC's via eth1.

A Switch after the Ubuntu router is optional but recommened. If you require more than one PC to be connected to the internet you will need a switch. If you only want to connect one PC after the Ubuntu router you may use a crossover cable or if the NIC's are new a straight cable might work.


Note: This diagram was created with inkscape. If you want to edit it download the full file ConnectionSharingDHCP3.svg from: Attachments


Ubuntu installation

This howto has assumed that you have installed a ubuntu destop (any derivative) or server edition on a PC with the default network configuration.. The default installation automatically sets eth0 to receive the necessary parameters from a DHCP server.

Network Cards

Its assumed that your ubuntu box has 2 NIC's card installed correctly


Test Network cards are functioning, test this by typing:

cat /proc/net/dev

Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 16593 93 0 0 0 0 0 0 16593 93 0 0 0 0 0 0
eth0:119442353 80492 0 0 0 0 0 6 3346687 45001 0 0 0 0 0 0
eth1: 167944 2186 0 0 0 17 0 0 356626 2062 0 0 0 0 0 0

Errorlogs: Located at /var/log/syslog (if you get a fail on starting the DHCP server)


The ip command is also another command that is useful in fault finding

ip addr; ip route show table all; ip rule; ip neigh;

Server Configuration

Root User

In this howto all commands are done as a super user (aka su or root):

Login "user", then enter command

sudo passwd root

Enter new UNIX password:
Retype new UNIX password:

su root

Network Interface Cards

DHCP Server


First install the dhcp3-server package

apt-get install dhcp3-server

Manual Static Address

The first step is to make sure that your internal network functions. You should setup your second Ethernet wired or wireless card and set its IP address to something like "″ via the ip utility as follows:

ip addr add dev eth1

Automatic Static Address

This setup will be forgotten after a reboot, its better to add these lines to /etc/network/interfaces (replacing any previous declarations of eth1):

nano -w /etc/network/interfaces

    # The extended interfaces
    auto eth1
    iface eth1 inet static

Testing Static Configuratiom

Check if the previous command worked by typing the following:

ip addr

The result will look like this

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:6e:8a:bd:ed brd ff:ff:ff:ff:ff:ff
    inet scope global eth0
    inet6 fe80::20c:6eff:4e8a:bded/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:6e:8a:bd:ed brd ff:ff:ff:ff:ff:ff
    inet scope global eth1
    inet6 fe80::220:18ff:fe3a:4eae/64 scope link 
       valid_lft forever preferred_lft forever

Assign Dynamic IP Address

Next edit the following file to add the DHCP support on eth1:

nano -w /etc/dhcp3/dhcpd.conf

To save & close the file press Ctrl+X and then Y

Edit these values (add if missing)

    # 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 ad-hoc;

    # option definitions common to all supported networks…
    option subnet-mask;
    option broadcast-address;
    option routers;
    option domain-name SOMENAME;
    option domain-name-servers;

    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.

    subnet netmask {

Explanation: eth1 has the IP address and the dhcp server now uses it as its home ip address.

Assign Network Card

One more thing needs to be configured before we can run the DHCP server Open the file /etc/default/dhcp3-server

nano -w /etc/default/dhcp3-server

    # Defaults for dhcp initscript
    # sourced by /etc/init.d/dhcp
    # installed at /etc/default/dhcp3-server by the maintainer scripts
    # This is a POSIX shell fragment
    # On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
    # Separate multiple interfaces with spaces, e.g. "eth0 eth1″.

Explanation: Like the comment it the file says we are specifying the network card which must be used to handle dhcp requests

Finally the setup is done!

Start DHCP server

So lets run the DHCP server with:

/etc/init.d/dhcp3-server start

    * Starting DHCP server dhcpd3

If it report fails then look at the error log file ($ less /var/log/syslog and press END to view the last events)

Testing Clients

Ping Client

Now you can test the connection to the server from any client connected to the server by:


(to check if you can see the server)

Restart Client DHCP

Assuming your client is an linux OS you may need to reset the network card to obtain a new IP address

sudo dhclient eth0 

(where eth0 is the ethernet port used by the client)

The last command is to get DHCP information from the server to the client, which will be reported in the following manner:

sudo dhclient eth0

    Internet Systems Consortium DHCP Client V3.0.5
    Copyright 2004-2006 Internet Systems Consortium.
    All rights reserved.
    For info, please visit
    Listening on LPF/eth0/00:0c:6e:8a:bd:ed
    Sending on LPF/eth0/00:0c:6e:8a:bd:ed
    Sending on Socket/fallback
    DHCPDISCOVER on eth0 to port 67 interval 4
    DHCPOFFER from
    DHCPREQUEST on eth0 to port 67
    DHCPACK from
    bound to  renewal in 41658 seconds.

Now that we have a connection to the server we want to have internet on the client pc. The internet connection of the server needs to be shared with the clients. The actual sharing component in Linux is done via the firewall (iptables or ipchains depending on the Kernel version)

Firewall Configuration

Enable Forwarding

First enable forwarding of the ipv4 layer

nano -w /etc/sysctl.conf

Find and uncomment this line in sysctl.conf or if it is not there add it

# Uncomment the next line to enable packet forwarding for IPv4

To enable forwarding without reboot

echo 1 > /proc/sys/net/ipv4/ip_forward 

Enable NAT

Add a firewall rule to enable packet forwarding

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

(the forwarding)

This configuration will be lost on a reboot so we need to save it.

iptables-save > /etc/iptables.rules

Load Firewall Rule

To load our new firewall rule on a reboot.

nano -w /etc/network/interfaces

replacing any previous declarations of eth0

    # The extended interfaces
    auto eth0
    iface eth0 inet dhcp
         pre-up iptables-restore < /etc/iptables.rules
         post-down iptables-restore < /etc/iptables.rules

Interfaces Config File

The complete file /etc/network/interfaces should look like this after all the modifications we applied:

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).

    # The loopback network interface
    auto lo
    iface lo inet loopback

    # The primary network interface
    auto eth0
    iface eth0 inet dhcp
         pre-up iptables-restore < /etc/iptables.rules
         post-down iptables-save > /etc/iptables.rules

    # The extended interfaces
    auto eth1
    iface eth1 inet static

Special Note

Never do:

apt-get remove ipmasq

Its a stupid thing we learned during testing, this will result in a LOT of malfunctions, so make sure you don’t do stupid things like we did!

We tested all of this on a fresh install of Gutsy Server that is fully updated on Feb 20 2008.



CategoryHardware CategoryInternet CategoryNetworking

Internet/ConnectionSharingDHCP3 (last edited 2012-04-18 22:12:53 by dsmythies)