Servidor DHCP (siglas en inglés de Dynamic Host Configuration Protocol, en español «protocolo de configuración dinámica de host») es un servidor que usa protocolo de red de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van quedando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después.

Así los clientes de una red IP pueden conseguir sus parámetros de configuración automáticamente. Este protocolo se publicó en octubre de 1993, y su implementación actual está en la «RFC 2131». Para DHCPv6 se publica el «RFC 3315».

Esquema de una sesión típica DHCP.

Instalación servidor DHCP en debian Jessie

El paquete necesario para la instalación de un servidor DHCP es el siguiente apt-get install isc-dhcp-server

Configurar isc-dhcp-server en debian Jessie

Dentro del fichero /etc/default/isc-dhcp-server, vamos a especificar la interfaz por la cual va a asignar direcciones IP a nuestros clientes

INTERFACES=[Nombre de interfaz]

Configurar servidor

Y por ultimo debemos configurar el rango de IP que vamos a asignar para ello modificaremos el fichero /etc/dhcp/dhcpd.conf y ahi añadimos las siguientes lineas

subnet 192.168.100.0 netmask 255.255.255.0 {
#rango
range 192.168.100.10 192.168.100.253;
#puerta de enlace
option routers 192.168.100.1;
#dns
option domain-name-servers 8.8.8.8;
#broadcast
option broadcast-address 192.168.1.255;
}
Info! En nuestro caso las ip son 192.168.100.0/24 pero podeis especificar el rango que prefirais.

Y reiniciamos el servicio /etc/init.d/isc-dhcp-server restart

Asignar IP a un cliente

Para ello solo deberemos desde un cliente conectado a la misma red que el servidor el siguiente comando dhclient [Interfaz]

Una vez asignada la ip por DHCP realizamos un ip a para comprobar la dirección asignada

Añadir regla de IPTABLES y activar el bit de Forwarding para hacer NAT

Al realizar esta accion vamos a hacer que los clientes conectados al servidor tenga acceso a la red externa, es decir, tengan internet.

Eliminamos la regla de encaminamiento por defecto

Para eliminar la regla por defecto es tan facil como ejecutar un ip r del default

Agregar regla de IPTABLES

Una vez borrada en el servidor agregaremos una regla de iptables la cual haga nat para salir hacia fuera y poder tener acceso a internet desde los clientes:

root@servidor:/home/vagrant# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE

Donde la dirección (192.168.100.0/24) es la ip de la red desde la cual queremos conectarnos y «eth1» es la interfaz que esta conectada por bridge.

Añadimos regla de encaminamiento en el cliente

root@cliente1:/home/vagrant# ip r add default via 192.168.100.1 dev eth1

Activamos el bit de forwarding en el servidor

Debemos activar en la máquina servidor el bit de forwarding con echo 1 > /proc/sys/net/ipv4/ip_forward para activar el reenvío de paquetes.

Podemos observar la tabla de encaminamiento

Reservas de IP

Para configurar que un cliente especifico se le asigne una direccion debemos añadir lo siguiente en el fichero etc/dhcp/dhcp.conf:

host server1 {
hardware ethernet 08:00:27:ce:6f:58;
fixed-address 192.168.100.70;
}

Antes:

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:ce:6f:58 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.61/24 brd 192.168.100.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fece:6f58/64 scope link 
       valid_lft forever preferred_lft forever

Reiniciamos el servicio /etc/init.d/isc-dhcp-server restart, al tener un tiempo de concesión elevado forzamos que vuelva a rellenar la interfaz con la nueva configuración:

root@cliente1:/home/vagrant# dhclient -r
root@cliente1:/home/vagrant# dhclient eth1

Despues:

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:ce:6f:58 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.70/24 brd 192.168.100.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fece:6f58/64 scope link 
       valid_lft forever preferred_lft forever

Script en python que de información de las concesiones del servidor

  • infodhcp.py -l: Nos muestra todas las ips que están concedidas (las reservas también). Nos da información de los dos ámbitos.
  • infodhcp.py x.x.x.x : Nos dice si esa ip está concedida y a que MAC corresponde.

Lo podeis encontrar en mi Github