Servicio DHCP en Linux
Table of Contents
ToggleIntroducción
El servicio DHCP en Linux (Protocolo de Configuración de Host Dinámico), como en cualquier sistema operativo, cumple la función de asignar dinámicamente direcciones IP a los hosts de la red. Parte de la información que asigna este servicio incluye el nombre de host, el nombre de dominio, la dirección IP de la puerta de enlace predeterminada (dirección Gateway) y el servidor DNS, etc. Podríamos decir que ayuda a los profresionales a asignar manualmente direcciones IP e información relacionada a cada uno de los sistemas cliente. Ya que generalmente, en la configuración del hogar o de una pequeña empresa, los enrutadores como los modem o router, cumplen la función de un servidor DHCP. Sin embargo, en un área grande (como una empresa), necesitamos configurar un servidor dedicado para proveer de direcciones a todos los hosts de la red.
En este apartado veremos cómo podemos configurar fácilmente el servicio DHCP en Linux y asignar direcciones IP a los clientes.
Función del Servicio DHCP
El servidor DHCP realiza una serie de procesos a medida que realiza sus tareas. Este proceso se denomina proceso DORA (Reconocimiento de solicitud de oferta de descubrimiento).
Veamos un poco más detallado este funcionamiento:
Cuando un host es encendido necesita de una dirección IP. Por lo tanto, le pide al servidor DCHP (mediante broadcast), con el mensaje DHCP-Dicover
El servidor identifica el mensaje del host, y le responde (mediante unicast) con un mensaje de oferta de dirección DCHP-Offert
El cliente, luego de recibir dicho mensaje, le envía un mensaje de solicitud para obtener dicha dirección DHCP- Request
Finalmente, el servidor confirma la solicitud para conceder la dirección IP a través del mensaje DHCP-ACK
Asignación de direcciones IP
Un servidor DHCP tiene distintas formas de asignar direcciones IP a un host. Las cuales veremos a continuación.
FORMA | FUNCIÓN | DESCRIPCIÓN |
Automática | El servidor asigna una dirección permanente a un cliente. | Evita la configuración manual y permite administrar una dirección IP de forma centralizada. |
Dinámica | El servidor presta una dirección durante un tiempo determinado. | El servidor puede reutilizar las direcciones que ya no se usan. |
Manual | La dirección IP es asignada por el administrador de la red. | Sirve para eliminar errores por configuración de red en el propio cliente. |
Configuración DHCP
Para haber obtenido el servicio DCHP en Linux, tuvimos que instalar el contenido del paquete ish-dhcp-server.
La configuración de este servidor la podemos en encontrar en el archivo /etc/dhcpd.conf cuya función está divida en parámetros y declaraciones. Los parámetros contienen las opciones de configuración de red que se enviarán al cliente. Es decir, establece el tipo de tarea y cómo debe llevarse a cabo. Algunos de estos empiezan con la palabra “option” que indica que son parámetros opcionales.
Las declaraciones describen la topología de la red y proporcionan direcciones para los hosts. Como también, aplican un grupo de parámetros o un grupo de declaraciones a estos.
Parámetros de configuración
PARÁMETROS | DESCRIPCIÓN |
option domain-name-servers | Esta opción especifica la lista de servidores de DNS (saperados por comas) que deben utilizar los clientes. Pueden ser nombres como direcciones IP. Ejemplo: option domain-name.servers 8.8.8.8 8.8.4.4 |
option subnet-mask: | Indica la máscara de subred que se le asigna al cliente. Ejemplo: option subnet-mask 255.255.255.0 |
option broadcast-address | Indica la dirección de difusión que se le asigna al cliente. Ejemplo: option broadcast-address 192.168.1.255 |
option ddns-update-style | Esta opción especifica si el servidor de DHCP debe intentar actualizar el servidor de DNS cuando se acepta o se libera un préstamo. En la implementación proporcionada por el ISC esta opción es obligatoria. Ejemplo: option ddns-update-style none |
option routers | Asigna una o varias puertas de enlace (Gateway) a los clientes separados por espacios. Ejemplo: routers 192.168.10.1; |
range | Las direcciones IP pertenecientes a este rango, incluyendo los extremos, se pueden entregar a los clientes. |
hardware-ethernet | Especifica la dirección MAC de una máquina, de tal forma que el servidor de DHCP pueda identificar a la máquina cuando realice una petición. Ejemplo: hardware-ethernet 11:22:33:44:55 fixed-address |
authoritative | Indica que el servidor está autorizado para asignar direcciones IP. Es decir, no tiene argumentos. Ejemplo: autoritative |
lease-file-name | Indica el nombre del fichero donde se almacenan los registros de concesiones. Por defecto este fichero es el /var/lib/dhcp/dhcpd.leases. Ejemplo: lease-file-name /var/lib/dhcp/concesiones-dhcpd |
Ejemplos sobre declaraciones
subnet: Indica una subred, contiene la subred junto a la máscara de subred. Ejemplo:
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.120;
range 192.168.2.200 192.168.2.220; }
host: Permite asignar parámetros a una máquina específica. Ejemplo:
host operador {
hardware-ethernet 90:6F:18:12:34:56;
hardware-ethernet 90::6F:18:AA:BB:CC;
fixed-address 192.168.60.133;
}
host usuario1 {
hardware-ethernet 90:6F:18:22:34:56;
fixed-address 192.168.60.166;
}
(El host operador recibirá la misma dirección, lo cual no es inconveniente si ambas interfaces están en redes ethernet distintas (por ejemplo una está en una red cableada y la otra en una red inalámbrica).)
group: Permite agrupar máquinas, subredes e incluso grupos. Ejemplo:
group {
option routers 192.168.1.1;
host usuario1 { hardware-ethernet 90:6F:18:22:34:56;
fixed-address 192.168.60.166;
}
host usuario2 { hardware-ethernet 90:6F:18:44:34:56;;
fixed-address 192.168.60.188;
}
}
Configuraciones secundarias
Las siguientes representan configuraciones secundarias, pero no menos importantes dentro del servicio dhcp en Linux.
Agente de Reenvío DHCP
Un DHCP Relay Agent (Agente de Reenvío DHCP) sirve para suministrar DHCP a subredes sin servidor DHCP. Por ejemplo, para derivar las peticiones que vienen por la interfaz enp0s8 al servidor dhcp 192.168.90.1, debería ejecutarse de la siguiente manera:
# /usr/sbin/dhcrelay 192.168.90.1 -i enp0s8
Registro de préstamos de IP
Cada préstamo se almacena en una base de datos ubicada en el archivo /var/lib/dhcp/dhcpd.leases. Cada registro tiene declaración lease, y la información que muestra es:
Fecha y hora de inicio y finalización del préstamo.
La dirección IP y física (mac address).
La útima fecha y hora de transacción del cliente.
Este archivo tiene que existir para que funcione correctamente el servicio. En el caso de que sea necesario reiniciarlo es conveniente cambiarle el nombre a «dhcpd.leases~» . La zona horaria del archivo utilizada es UTC.
DHCPv6
La implementación de DHCP de ISC también soporta direcciones IP versión 6 (IPv6). Este protocolo proporciona SLAAC (Stateless Address Autoconfiguration), haciendo la configuración mucho más fácil de administrar. En este caso el servidor proporciona la dirección IPv6 y otras opciones con la importante excepción de la puerta de enlace predeterminada. Los clientes DHCP envían mensajes RS (Router Solicitation) buscando algún servidor que responda con mensajes RA (Router Advertisement), el cual le proporcionará la puerta de enlace predeterminada. Este servicio lo ofrece otro software aparte en Linux llamado radvd .
Para activar su uso:
# /usr/sbin/dhcrelay -6 -l enp0s3 -u enp0s8
La opción -l indica la interfaz inferior (necesaria para recibir peticiones DHCPv6). La superior necesaria para enviar peticiones DHCPv6 a servidores DHCP está indicada por -u.
Errores Frecuentes
Cuando instalamos el servicio DHCP en Linux, o cualquier otro sistema, suele haber un error principal que es la inactividad del servicio (Active: failed), como vemos a continuación:
# systemctl status ish-dhcp-server.service
Incluso podemos verificar este error a través de los logs del sistema:
# tail /var/log/syslog
Esto se debe a que cuando es instalado el servicio, este quiere funcionar automáticamente. Sin embargo, es necesario configurar ciertos parámetros y ajustes para lograr que funcione. Miremos a continuación el archivo /etc/default/ish-dhcp-server donde están instaladas las configuraciones por defecto del servicio.
Como podemos ver, la penúltima línea INTERFACESv4=”” se encuentra sin ningún valor. Aquí hace falta poner nuestra interfaz de red, la cual vamos a saber tecleando el comando “ifconfig” o «ip a«. Y no solo encontraremos nuestra interfaz de red, sino también nuestra dirección ip y netmask que usaremos más adelante.
Una vez encontrada nuestra interfaz, procedemos a agregar dicha línea usando un editor de texto como VIM, NANO, etc..
A continuación, nos dirigimos al archivo /etc/dhcpd.conf a configurar las líneas 6 y 35 con la información que corresponde. Primero comentamos los dns a utilizar, tanto el nombre como los números que se muestran en la línea 6. Aquí puede ser cualquier número de servidor que corresponda. Como ejemplo hemos puesto el dns de google.
Luego comentamos la configuración de la línea 35 del mismo archivo con respecto a la información de nuestra dirección de red, netmask (máscara de red) y el rango de direcciones ( el cual elegimos personalmente que sea desde la 50 hasta la 60) y por último nuestra dirección de gateway o puerta de enlace (el cual lo sabremos tecleando route –n)
Finalmente reiniciamos el sistema tecleando # systemctl restart ish-dhcp-server.service para que pueda ponerse en funcionamiento (también se recomienda reiniciar el equipo). A continuación, procedemos a ver el estado de dicho servicio tecleando # systemctl status ish-dhcp-server.service para ver si hemos tenido éxito en nuestras configuraciones.
Como podemos ver, se encuentra en correcto funcionamiento nuestro servicio de DHCP.