DHCP-4.4.1

#### Beyond Linux® From Scratch - Version 2019-02-27

### Chapter 14. Connecting to a Network

- Prev

  dhcpcd-7.1.1

- Next

  Networking Programs

- Up
- Home

# DHCP-4.4.1

## Introduction to ISC DHCP

The ISC DHCP package contains both the client and server programs for DHCP. dhclient (the client) is used for connecting to a network which uses DHCP to assign network addresses. dhcpd (the server) is used for assigning network addresses on private networks.

This package is known to build and work properly using an LFS-8.4 platform.

### Package Information

- Download (FTP): ftp://ftp.isc.org/isc/dhcp/4.4.1/dhcp-4.4.1.tar.gz

- Download MD5 sum: 18c7f4dcbb0a63df25098216d47b1ede

- Download size: 10 MB

- Estimated disk space required: 171 MB

- Estimated build time: 0.8 SBU

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dhcp

## Kernel Configuration

You must have Packet Socket support:

    [*] Networking support --->          [CONFIG_NET]
          Networking options --->
            <*> Packet socket            [CONFIG_PACKET]

If you do not have IPv6 support:

    [*] Networking support --->          [CONFIG_NET]
          Networking Options --->
            <*> The IPv6 Protocol --->   [CONFIG_IPV6]

compiled in, then you must use the “missing_ipv6” patch.

## Installation of ISC DHCP

### Note

This package does not support parallel build.

### Note

Be careful with the instructions below. The single and double quotes are important because the defined variables are used verbatim in the code.

Install ISC DHCP by running the following commands:

    ( export CFLAGS="$CFLAGS -Wall -fno-strict-aliasing                 \
            -D_PATH_DHCLIENT_SCRIPT='\"/sbin/dhclient-script\"'         \
            -D_PATH_DHCPD_CONF='\"/etc/dhcp/dhcpd.conf\"'               \
            -D_PATH_DHCLIENT_CONF='\"/etc/dhcp/dhclient.conf\"'"        &&

    ./configure --prefix=/usr                                           \
                --sysconfdir=/etc/dhcp                                  \
                --localstatedir=/var                                    \
                --with-srv-lease-file=/var/lib/dhcpd/dhcpd.leases       \
                --with-srv6-lease-file=/var/lib/dhcpd/dhcpd6.leases     \
                --with-cli-lease-file=/var/lib/dhclient/dhclient.leases \
                --with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases
    ) &&
    make -j1

This package does not come with a test suite.

If you only want to install the ISC DHCP client, issue the following commands as the `root` user:

    make -C client install         &&
    mv -v /usr/sbin/dhclient /sbin &&
    install -v -m755 client/scripts/linux /sbin/dhclient-script

Skip to the section called “Client Configuration” in order to configure the client

If you only want to install the ISC DHCP server, issue the following command as the `root` user:

    make -C server install

Skip to the section called “Server Configuration” in order to configure the server.

Alternatively, you can install whole package which includes the client, server, relay, static libraries and development headers by running the following commands as the `root` user:

    make install                   &&
    mv -v /usr/sbin/dhclient /sbin &&
    install -v -m755 client/scripts/linux /sbin/dhclient-script

## Configuring ISC DHCP

### Config Files

`/etc/dhcp/dhclient.conf` and `/etc/dhcp/dhcpd.conf`

### Client Configuration

Create a basic `/etc/dhcp/dhclient.conf` by running the following command as the `root` user:

    install -vdm755 /etc/dhcp &&
    cat > /etc/dhcp/dhclient.conf << "EOF"
    # Begin /etc/dhcp/dhclient.conf
    #
    # Basic dhclient.conf(5)

    #prepend domain-name-servers 127.0.0.1;
    request subnet-mask, broadcast-address, time-offset, routers,
            domain-name, domain-name-servers, domain-search, host-name,
            netbios-name-servers, netbios-scope, interface-mtu,
            ntp-servers;
    require subnet-mask, domain-name-servers;
    #timeout 60;
    #retry 60;
    #reboot 10;
    #select-timeout 5;
    #initial-interval 2;

    # End /etc/dhcp/dhclient.conf
    EOF

See man 5 dhclient.conf for additional options.

Now create the `/var/lib/dhclient` directory which will contain DHCP Client leases by running the following command as the `root` user:

    install -v -dm 755 /var/lib/dhclient

At this point you can test if dhclient is behaving as expected by running the following command as the `root` user:

    dhclient <eth0>

Replace `<eth0>` with your desired interface. If you want more verbose output, add the -v parameter to the command above.

If you want to configure network interfaces at boot using dhclient, you need to install the `/lib/services/dhclient` script included in blfs-bootscripts-20180105 package:

    make install-service-dhclient

Next, create the `/etc/sysconfig/ifconfig.eth0` configuration file with the following commands as the `root` user:

    cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
    ONBOOT="yes"
    IFACE="eth0"
    SERVICE="dhclient"
    DHCP_START=""
    DHCP_STOP=""

    # Set PRINTIP="yes" to have the script print
    # the DHCP assigned IP address
    PRINTIP="no"

    # Set PRINTALL="yes" to print the DHCP assigned values for
    # IP, SM, DG, and 1st NS. This requires PRINTIP="yes".
    PRINTALL="no"
    EOF

Adjust the file to suit your needs.

For more information on the appropriate `DHCP_START` and `DHCP_STOP` values see man 8 dhclient.

### Server Configuration

Note that you only need the DHCP server if you want to issue LAN addresses over your network. The DHCP client doesn't need the server in order to function properly.

Start with creating `/etc/dhcp/dhcpd.conf` by running the following command as the `root` user:

    cat > /etc/dhcp/dhcpd.conf << "EOF"
    # Begin /etc/dhcp/dhcpd.conf
    #
    # Example dhcpd.conf(5)

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

    # option definitions common to all supported networks...
    option domain-name "example.org";
    option domain-name-servers ns1.example.org, ns2.example.org;

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

    # 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;
    }

    # End /etc/dhcp/dhcpd.conf
    EOF

Adjust the file to suit your needs. See man 5 dhcpd.conf for additional options.

Now create the `/var/lib/dhcpd` directory which will contain DHCP Server leases by running the following command as the `root` user:

    install -v -dm 755 /var/lib/dhcpd

If you want to start the DHCP Server at boot, install the `/etc/rc.d/init.d/dhcpd` inti script included in the blfs-bootscripts-20180105 package:

    make install-dhcpd

You will need to edit the `/etc/sysconfig/dhcpd` in order to set the interface on which dhcpd will serve the DHCP requests.

## Contents

Installed Programs: dhclient, dhclient-script, dhcpd, dhcrelay and omshell
Installed Libraries: libdhcpctl.a and libomapi.a
Installed Directories: /etc/dhcp, /usr/include/dhcpctl, /usr/include/isc-dhcp, /usr/include/omapip, /var/lib/dhclient and /var/lib/dhcpd

### Short Descriptions

dhclient | is the implementation of the DHCP client.
dhclient-script | is used by dhclient to (re)configure interfaces. It can make extra changes by invoking custom dhclient-{entry,exit}-hooks.
dhcpd | implements Dynamic Host Configuration Protocol (DHCP) and Internet Bootstrap Protocol (BOOTP) requests for network addresses.
dhcrelay | provides a means to accept DHCP and BOOTP requests on a subnet without a DHCP server and relay them to a DHCP server on another subnet.
omshell | provides an interactive way to connect to, query and possibly change the ISC DHCP Server's state via OMAPI, the Object Management API.

Last updated on 2019-02-18 12:44:04 -0600

- Prev

  dhcpcd-7.1.1

- Next

  Networking Programs

- Up
- Home