Home Linux Linux como Servidor DHCP (Ubuntu 16.04 LTS)

Linux como Servidor DHCP (Ubuntu 16.04 LTS)

by José Luis Sánchez Borque

El protocolo de configuración dinámica de host (DHCP, Dynamic Host Configuration Protocol) es un estándar TCP/IP diseñado para simplificar la administración de la configuración IP de los equipos de nuestra red.

Si disponemos de un servidor DHCP, la configuración IP de los PCs puede hacerse de forma automática, evitando así la necesidad de tener que realizar manualmente uno por uno la configuración TCP/IP de cada equipo.

Un servidor DHCP es un servidor que recibe peticiones de clientes solicitando una configuración de red IP. El servidor responderá a dichas peticiones proporcionando los parámetros que permitan a los clientes autoconfigurarse. Para que un PC solicite la configuración a un servidor, en la configuración de red de los PCs hay que seleccionar la opción ‘Obtener dirección IP automáticamente’.

El servidor proporcionará al cliente al menos los siguientes parámetros:

  • Dirección IP
  • Máscara de subred

Opcionalmente, el servidor DHCP podrá proporcionar otros parámetros de configuración tales como:

  • Puerta de enlace
  • Servidores DNS
  • Muchos otros parámetros más

El servidor DHCP proporciona una configuración de red TCP/IP segura y evita conflictos de direcciones repetidas. Utiliza un modelo cliente-servidor en el que el servidor DHCP mantiene una administración centralizada de las direcciones IP utilizadas en la red. Los clientes podrán solicitar al servidor una dirección IP y así poder integrarse en la red.

Funcionamiento de una petición DHCP

El servidor solo asigna direcciones dentro de un rango prefijado. Si por error hemos configurado manualmente una IP estática perteneciente al rango gestionado por nuestro servidor DHCP, podría ocurrir que dicha dirección sea asignada dinámicamente a otro PC, provocándose un conflicto de IP. En ese caso el cliente solicitará y comprobará, otra dirección IP, hasta que obtenga una dirección IP que no esté asignada actualmente a ningún otro equipo de nuestra red.

La primera vez que seleccionamos en un PC que su configuración IP se determine por DHCP, éste pasará a convertirse en un cliente DHCP e intentará localizar un servidor DHCP para obtener una configuración desde el mismo. Si no encuentra ningún servidor DHCP, el cliente no podrá disponer de dirección IP y por lo tanto no podrá comunicarse con la red. Si el cliente encuentra un servidor DHCP, éste le proporcionará, para un periodo predeterminado, una configuración IP que le permitirá comunicarse con la red. Cuando haya transcurrido el 50% del periodo, el cliente solicitará una renovación del mismo.

Cuando arrancamos de nuevo un PC cuya configuración IP se determina por DHCP, pueden darse dos situaciones:

  • Si la concesión de alquiler de licencia ha caducado, el cliente solicitará una nueva licencia al servidor DHCP (la asignación del servidor podría o no, coincidir con la anterior).
  • Si la concesión de alquiler no ha caducado en el momento del inicio, el cliente intentará renovar su concesión en el servidor DHCP, es decir, que le sea asignada la misma dirección IP.

Vemos en las imágenes adjuntas los protocolos, y secuencias de tramas del protocolo DHCP.

Cómo Funciona el Servicio DHCP (Incluye Capturas de Red)

Antes de comenzar con los procesos de instalación y configuración de nuestro servidor DHCP, vamos a definir algunos términos que utilizaremos a lo largo de dicho proceso.

Ámbito servidor DHCP: Un ámbito es un agrupamiento administrativo de equipos o clientes de una subred que utilizan el servicio DHCP.

Rango servidor DHCP: Un rango de DHCP está definido por un grupo de direcciones IP en una subred determinada, como por ejemplo de 192.168.0.1 a 192.168.0.254, que el servidor DHCP puede conceder a los clientes.

Concesión o alquiler de direcciones:
es un período de tiempo que los servidores DHCP especifican, durante el cual un equipo cliente puede utilizar una dirección IP asignada.

Reserva de direcciones IP:
Consiste en reservar algunas direcciones IP para asignárselas siempre a los mismos PCs clientes de forma que cada uno siempre reciba la misma dirección IP. Se suele utilizar para asignar a servidores o PCs concretos la misma dirección siempre. Es similar a configurar una dirección IP estática pero de forma automática desde el servidor DHCP. En el servidor se asocian direcciones MAC a direcciones IP. Es una opción muy interesante para asignar a ciertos PCs (servidores, impresoras de red, PCs especiales…) siempre la misma IP.

Vamos con al parte práctica. Configurando el servicio

Antes veamos la configuración IP de nuestro Servidor Linux Ubuntu 16.04 LTS.

root@ubuntu:~# cat /etc/network/interfaces

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

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens33
iface ens33 inet dhcp

auto ens34
iface ens34 inet static
 address 192.168.50.254
 netmask 255.255.255.0
 broadcast 192.168.50.255
root@ubuntu:~# ifconfig

ens33 Link encap:Ethernet HWaddr 00:0c:29:8b:ec:81
      inet addr:192.168.1.208 Bcast:192.168.1.255 Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:2233 errors:0 dropped:0 overruns:0 frame:0
      TX packets:678 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:2827978 (2.8 MB) TX bytes:53222 (53.2 KB)

ens34 Link encap:Ethernet HWaddr 00:0c:29:8b:ec:8b
     inet addr:192.168.50.254 Bcast:192.168.50.255 Mask:255.255.255.0
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000
     RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

El objetivo es que nuestro servidor asigne direcciones a la red 192.168.50.0/24 sólamente.  En nuestro plan de direccionamiento establecemos los siguientes parámetros:

Ámbito: 192.168.50.50 a la 192.168.50.100
Máscara: 255.255.2555.0
DNS servers: 8.8.8.8 y 192.168.1.1
Dominio local: profe.local
Gateway: 192.168.50.254

En primer lugar vamos a instalar el servicio DHCP en nuestro servidor. Para ello ejecutamos la siguiente instrucción:

sudo apt-get install isc-dhcp-server

Y verificamos que está arrancado con «service isc-dhcp-server status»

root@ubuntu:~# service isc-dhcp-server status

● isc-dhcp-server.service - ISC DHCP IPv4 server
 Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor
 Active: active (running) since mar 2017-11-21 11:15:25 CET; 15min ago
 Docs: man:dhcpd(8)
 Main PID: 1410 (dhcpd)
 Tasks: 1
 Memory: 10.7M
 CPU: 31ms
 CGroup: /system.slice/isc-dhcp-server.service
 └─1410 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcp

Podemos ver que los puertos 67 y 68 están abierto como servidor y como cliente de dos formas (el interface ens33 está configurado por dhcp), usando el comando lsof y netstat

root@ubuntu:~# lsof -i -P -n | grep -i :67
dhcpd 1410 dhcpd 7u IPv4 16283 0t0 UDP *:67

root@ubuntu:~# lsof -i -P -n | grep -i :68
dhclient 1340 root 6u IPv4 14860 0t0 UDP *:68

Con netstat suena mal… pero funciona 🙂

root@ubuntu:~# netstat -putona | grep :67
udp 0 0 0.0.0.0:67 0.0.0.0:* 1410/dhcpd off (0.00/0/0)

root@ubuntu:~# netstat -putona | grep :68
udp 0 0 0.0.0.0:68 0.0.0.0:* 1340/dhclient off (0.00/0/0)

Ahora solo queda configurar el fichero /etc/dhcp/dhcpd.conf, añadiendo la siguiente sección:

subnet 192.168.50.0 netmask 255.255.255.0 {
 range 192.168.50.51 192.168.50.100;
 option domain-name-servers 8.8.8.8, 192.168.1.1;
 option domain-name "profe.local";
 option subnet-mask 255.255.255.0;
 option routers 192.168.50.254;
 option broadcast-address 192.168.50.255;
 default-lease-time 600;
 max-lease-time 7200;
}

Los parámetros dentro de una sección subnet, tales como max-lease-time, domain-name etc,  prevalecen sobre cualquier otro definido como global ( fuera de cualquier sección) en el fichero /etc/dhcp/dhcpd.conf

Solo quedaría reiniciar el servicio mediante la orden:

root@ubuntu:~# service isc-dhcp-server restart

Reservas

Las reservas implican tal como hemos visto anteriormente asignar siempre la misma IP a un determinado host de red. La asignación es mediante la dirección MAC de dicha ordenador. Hay que tener en cuenta que la IP debe estar fuera del rango asignado.

#host pcCTO {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}

Veamos como quedaría el fichero de configuración. Como vemos podemos redifinir las directivas que nos interesen:

subnet 192.168.50.0 netmask 255.255.255.0 {
 range 192.168.50.51 192.168.50.100;
 option domain-name-servers 8.8.8.8, 192.168.1.1;
 option domain-name "profe.local";
 option subnet-mask 255.255.255.0;
 option routers 192.168.50.254;
 option broadcast-address 192.168.50.255;
 default-lease-time 600;
 max-lease-time 7200;

host pcCTO {
  hardware ethernet 08:22:33:44:55:66;
  fixed-address 192.168.50.151
  default-lease-time 7200; 
  max-lease-time 12960;
}
  
}

Trabajando la redudancia

El servicio DHCP es uno de los más críticos de la empresa.  Si falla, todas las estaciones clientes dejarán de tener conexión a nuestra red.  En definitiva tenemos que trabajar la redundancia. Hay dos formas:

  1. Utilizar la capacidad DHCP Failover que proporciona el propio servicio ( ver man dhcpd.conf )
  2. Utilizar un ámbito diferente, con IP distintas, en el segundo servidor.

Vamos a utilizar el segundo método por su simplicidad. Basta con instalar el servicio DHCP en otro servidor linux, y cambiar el rango

Configuración del Servidor DHCP 2

subnet 192.168.50.0 netmask 255.255.255.0 {
 range 192.168.50.101 192.168.50.150;
 option domain-name-servers 8.8.8.8, 192.168.1.1;
 option domain-name "profe.local";
 option subnet-mask 255.255.255.0;
 option routers 192.168.50.254;
 option broadcast-address 192.168.50.255;
 default-lease-time 600;
 max-lease-time 7200;

host pcCTO {
  hardware ethernet 08:22:33:44:55:66;
  fixed-address 192.168.50.151
  default-lease-time 7200; 
  max-lease-time 12960;
}
  
}

Vemos que los dos rangos son diferentes, y las reservas las mismas:

  • Servidor DHCP 1:  range 192.168.50.51 192.168.50.100;
  • SErvidor DHCP 2:  range 192.168.50.101 192.168.50.150;ç

Recordar otra vez que el servicio DHCP funciona por Broadcast, así que necesitamos un servidor DHCP por subred, o un dhcp relay agent.

Cualquier duda podéis comentar el post y os responderé así me sea posible.

Saludos.

You may also like

4 comments

Sheila Ventura febrero 8, 2020 - 1:08 am

Saludos por casualidad tienes un tutorial con esta configuración

Reply
José Luis Sánchez Borque febrero 21, 2020 - 8:53 pm

Hola,

con qué configuración?

Slds

Reply
Alejandro noviembre 4, 2019 - 5:07 pm

Hola colega que tal, primero buen post. Yo vengo bastente tiempo trabajando con este tipo de servicio. Si me pudiera ayudar con lo siguiente. Quiero de alguna forma evitar que mis usuario cambien su IP de forma manual, es decir, que si lo hacen simplemente dejen de navegar. Por tanto me preguntaba si esxite alguna regla que se pueda definir en mi propio servicio dhcp o tengo que vincularlo con algún otro software. Eso si amigo, la directiva para esto que quisiera lograr la debo aplicar del lado del servidor exclusivamente. Saludos

Reply
José Luis Sánchez Borque diciembre 9, 2019 - 6:11 pm

Hola Alejandro,

puedes darme un poco más de info, es decir, el servidor DHCP entiendo que es linux, y los clientes?? Linux, Windows, ambos??

Ya te avanzo que para evitar que puedan cambiar las IP’s tendrás que jugar con directivas en caso de windows que impidan el acceso a ese cambio, o con permisos en caso de Linux. Dame algo más de información.

Saludos

Reply

Leave a Comment