CÓMO INSTALAR Y CONFIGURAR UN SERVIDOR DHCP EN GNU/LINUX

dhcp¿Qué es un servidor DHCP?

Es una máquina que hace uso del protocolo de configuración dinámica de host (DHCP, Dynamic Host Configuration Protocol) que no es mas que un estándar TCP/IP diseñado para simplificar la administración de la configuración IP de los equipos cliente de nuestra red.

Si disponemos de un servidor DHCP, la configuración IP de los PC’s puede hacerse de forma automática sin necesidad de hacerlo manualmente en cada equipo de la red.

El servidor recibe peticiones de clientes solicitando una configuración de red IP y responderá a éstas proporcionando los parámetros que permitan a los clientes auto-configurarse. Para ello, en las opciones de red de los clientes tendremos que seleccionar ‘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, podrá proporcionar otros parámetros de configuración tales como:

  • Puerta de enlace.
  • Servidores DNS.

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 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.

El servidor solo asignará direcciones dentro de un rango especificado. 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 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 para obtener una configuración. Si no encuentra ningún servidor, el cliente no podrá disponer de dirección IP y por lo tanto no podrá comunicarse con la red.

NOTA: Debemos mencionar que si el cliente se encuentra bajo sistemas operativos MS Windows se auto-asignará una dirección APIPA (Automatic Private Internet Protocol Addressing – Direccionamiento Privado Automático del Protocolo de Internet). El procedimiento APIPA asigna una dirección IP y su máscara de red únicamente, y no configura ningún otro parámetro que configuraría un servidor DHCP, como pueden ser una ruta por omisión (Gateway) o un servidor DNS. Esto significa que el sistema APIPA permite la funcionalidad básica para que el equipo funcione en un esquema de red local, pero no proporcionará salida fuera de la misma, a Internet. Esta dirección IP privada de clase B que comprende el rango que va desde la 169.254.0.1 a la 169.254.255.254 con máscara 255.255.0.0 está definida como link-local por la RFC 3330.

Si el cliente encuentra un servidor DHCP, éste le proporcionará, para un periodo predeterminado (cesión), una configuración IP que le permitirá comunicarse con la red. Cuando haya transcurrido un cierto periodo, el cliente solicitará una renovación de la misma.

 

Terminología

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 del servidor DHCP: Un ámbito es un agrupamiento administrativo de equipos o clientes de una subred que utilizan el servicio DHCP.

Rango del servidor DHCP: Un rango de DHCP está definido por un grupo de direcciones IP en una subred determinada (Pool), como por ejemplo de la 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 PC’s clientes de forma que cada uno reciba la misma dirección. 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 ciertas máquinas ( impresoras de red, PC’s especiales…) la misma IP.

 

Instalación del servidor DHCP

Para instalar los archivos necesarios de nuestro servidor DHCP podemos utilizar (apt-get, yum ó dnf, zypper ó yast) desde una consola de root dependiendo de nuestra distribución:

# apt-get install dhcp3-server (Debian o Ubuntu)

# zypper install dhcp-server (OpenSuse)

# dnf install dhcp-server (Fedora 22)

 

Archivo de configuración del servidor DHCP

Al igual que todas las aplicaciones en GNU/Linux, el servidor DHCP dispone de su propio archivo de configuración:

“/etc/dhcp3/dhcpd.conf”

Este archivo de configuración consta de una parte principal donde se especifican los parámetros generales que definen el “alquiler” y los parámetros adicionales que se proporcionarán al cliente.

El resto del archivo de configuración consta de una serie de secciones que especifican principalmente rangos de direcciones IP’s que serán cedidas a los clientes que lo soliciten (sección subnet) y especificaciones concretas de equipos (sección host). Los parámetros de las secciones deberán ir entre llaves “{ }” y éstos deberán terminar con punto y coma “;”.

Los valores de los parámetros especificados al principio del archivo (en la sección general) se aplican como valores por defecto. Si dentro de una sección en particular se redefine alguno de los parámetros, se aplicarán éstos ignorándose el valor por defecto de la sección general.

Los rangos de direcciones IP se especifican en secciones que empiezan con la palabra clave subnet seguido de la dirección de red de la subred y continua con la palabra netmask seguida de la máscara de red. A continuación estará la lista de parámetros para dicha sección encerrados entre llaves y finalizados con punto y coma como hemos citado más arriba.

Por ejemplo, supongamos que en nuestra red local disponemos de direcciones pertenecientes a la subred 192.168.1.0/24 (máscara 255.255.255.0) y deseamos que nuestro servidor DHCP “alquile” direcciones del rango comprendido entre la dirección 192.168.1.10 y 192.168.1.100. La sección subnet que debemos crear será:

Rango de cesión:

=============================================================

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.10 192.168.1.100;

}

=============================================================

NOTA: El rango de cesión debe pertenecer a la misma subred a la que pertenece la IP del servidor, de lo contrario los clientes no podrían comunicarse con el servidor DHCP. Por ejemplo, si un servidor tiene la IP 192.168.1.1/24, no puede ceder direcciones del rango 172.16.0.0/16 (máscara 255.255.0.0) porque dicho rango está fuera del alcance de la subred del servidor.

Si además de proporcionar al cliente la dirección IP y la máscara, quisiéramos configurar también la dirección de la puerta de enlace (Gateway) y las direcciones DNS para que pueda navegar por Internet, la sección subnet que deberíamos crear sería de esta forma:

Rango de cesión y parámetros adicionales:

=============================================================

subnet 192.168.1.0 netmask 255.255.255.0 {

option routers 192.168.1.254;

option domain-name-servers 80.58.0.33, 80.58.32.97;

range 192.168.1.10 192.168.1.100;

}

=============================================================

Existe la posibilidad de establecer una configuración concreta a un cliente concreto identificándolo por la dirección MAC de su tarjeta de red. Recordemos que la dirección MAC, es un número único, formado por 6 octetos hexadecimales separados por “:” que están grabados en la memoria ROM de las tarjetas de red ethernet y que viene fijada de fábrica. Todas las tarjetas de red tienen una dirección MAC única, sería algo parecido al DNI de las personas. Los tres primeros octetos indican el fabricante y los tres siguientes el número de serie de fabricación. En GNU/Linux se puede averiguar la dirección MAC mediante el comando “ifconfig”, mientras que para MS Windows se puede utilizar el comando “ipconfig”.

Para establecer una configuración de equipo es necesario crear una sección host. Por ejemplo, si deseamos que el cliente cuya dirección MAC es “00:0a:19:c8:41:70” se configure siempre con la dirección IP 192.168.1.50 y la puerta de enlace 192.168.1.254, que además su nombre de dominio sea «midominio.com» y que el servidor de nombres “netbios” sea el 192.168.1.200 la sección host que debemos crear quedará tal que así:

=============================================================

host equipo1 {

hardware ethernet 00:0a:19:c8:41:70;

fixed-address 192.168.1.50;

option routers 192.168.1.254;

option domain.name «midominio.com»;

option netbios-name-servers 192.168.1.200;

}

=============================================================

Cuando el PC cuya dirección MAC sea la “00:0a:19:c8:41:70” solicite una dirección IP al servidor DHCP, recibirá la 192.168.1.50 junto con el resto de parámetros.

 

Archivo dhcpd.conf

En este ejemplo, tenemos un archivo bastante simple que está comentado línea por línea, los comentarios comienzan por almohadilla “#” y son ignorados por el servidor DHCP, esto es muy común en los archivos de configuración de GNU/Linux como bien sabemos, otro ejemplo serían los scripts de BASH. Todas las líneas que especifican parámetros deben terminar en punto y coma “;”, tal como citamos anteriormente.

NOTA: En este caso, tenemos un fichero de ejemplo creado desde 0, pero podríamos tomar como referencia el fichero por defecto de la instalación y modificarlo a nuestro gusto. Es importante tener en cuenta que para ello, se debe de tener la buena costumbre de hacer una copia del fichero original antes de tocar nada, por lo que ejecutaríamos:

$ cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf.bak

 

################ INICIO DEL FICHERO #####################

# Este fichero es un ejemplo de configuración para un servidor DHCP

# Y el contenido esta explicado con comentarios como éste para que

# Así resulte más fácil entenderlo.

#####################################################

#####################################################

# Estas son las opciones generales del servidor DHCP aplicables por

# defecto a todo el resto de secciones.

# Estas opciones generales pueden ser sobrescritas por otras que

# correspondan a secciones más concretas tal como explicamos

# anteriormente.

#####################################################

### DNS para los clientes dhpc. ###

option domain-name-servers 8.8.8.8;

### Nombre de dominio para los clientes. ###

option domain-name «midominio.com»;

### Máscara por defecto para los clientes. ###

option subnet-mask 255.255.255.0;

### Tiempo en segundos del “alquiler”. ###

default-lease-time 600;

### Máximo tiempo en segundos que durará el “alquiler”. ###

max-lease-time 7200;

### Especificación de un rango de direcciones IP. ###

subnet 192.168.1.0 netmask 255.255.255.0 {

### Rango de la 10 a la 100 inclusive. ###

range 192.168.1.10 192.168.1.100;

### Dirección de difusión (Broadcast). ###

option broadcast-address 192.168.1.255;

### Puerta de enlace. ###

option routers 192.168.1.254;

### Servidores de DNS del ISP. ###

option domain-name-servers 80.58.0.33, 80.58.32.97;

### Tiempo. ###

default-lease-time 6000;

}

### Aquí termina la sección general del fichero. ###

#####################################################

# Configuración en particular para un equipo concreto.

#####################################################

host equipo1 {

### Dirección MAC en cuestión. ###

hardware ethernet 00:0a:19:c8:41:70;

### Siempre se asignará la misma IP a esa dirección MAC. ###

fixed-address 192.168.1.50;

}

#####################################################

# Si nuestro servidor tiene varias interfaces de red, será necesario indicar

# la interfaz o interfaces por las cuales se va a ofrecer el servicio DHCP.

# Para ello editaremos el fichero “/etc/default/dhcp3-server”.

# Si la máquina tiene 2 tarjetas y queremos dar servicio por las 2

# Editaríamos el fichero “/etc/default/dhcp3-server” y añadiríamos el

# parámetro  “INTERFACES”.

# INTERFACES=»eth0 eth1″

################### FIN DEL FICHERO ####################

 

Para otras opciones de configuración deberemos consultar la página MAN de dhcpd.conf:

# man dhcpd.conf

NOTA: Si el servidor DHCP da algún error al arrancarlo, casi siempre suele ser porque el rango de cesión está en un rango diferente al de la dirección IP del servidor. De todas formas siempre podemos consultar el fichero “log” del sistema para ver cual puede ser el fallo.

# tail -n 20 /var/log/syslog

Con el comando “tail” y la opción “-n 20” veremos las últimas 20 líneas del fichero “log” del sistema.

 

Arranque y parada manual del servidor DHCP

El arranque y parada del servicio dependerá de si nuestra distribución esta basada en “SysVinit”, “Systemd” o “Upstart”

El servidor DHCP, al igual que todos los servicios de nuestra distribución, dispone de un script de arranque y parada en la carpeta “/etc/init.d” para los sistemas basados en “SysVinit”. La gestión del servicio en este caso sería:

Arrancar el servidor DHCP

root@equipo:/# /etc/init.d/dhcp3-server start

Parar el servidor DHCP

root@equipo:/# /etc/init.d/dhcp3-server stop

Reiniciar el servidor DHCP

root@equipo:/# /etc/init.d/dhcp3-server restart

Mencionar que también podríamos hacer uso del comando “service” de la siguiente manera:

# service <servicio> start|stop|restart|reload

 

Arranque automático del servidor DHCP al iniciar el sistema.

Para un arranque automático del servicio al iniciar el servidor, debemos crear los enlaces simbólicos correspondientes.

Cuando GNU/Linux arranca, puede hacerlo de 7 modos distintos, numerados del 0 al 6. A estos modos se les denomina “niveles de ejecución” y son los siguientes:

  • Nivel 0 (Halt): Detiene el sistema
  • Nivel 1 (Monousuario): Permite entrar en el sistema como root sin contraseña y en modo texto (modo mantenimiento).
  • Nivel 2 (Multiusuario sin red): Modo multiusuario en modo texto y sin red (esto depende de la distribución , para Debian es el nivel por defecto).
  • Nivel 3 (Multiusuario con red): Modo multiusuario en modo texto y con red.
  • Nivel 4 (Pruebas): No utilizado
  • Nivel 5 (Multiusuario con red y modo gráfico): Multiusuario en entorno gráfico (para algunas distribuciones derivadas de Red Hat).
  • Nivel 6 (Reboot): Reinicia el sistema.

En función del nivel de ejecución, existe la posibilidad de configurar qué servicios deben iniciarse de forma automática, para ello es necesario crear unos enlaces simbólicos en las carpetas “/etc/rcN.d” (donde N es un número de 0 a 6 que indica el nivel de ejecución de GNU/linux) que apunten al script de inicio del servicio que se encuentra en “/etc/init.d/”. Dichos enlaces deberán tener un nombre un poco especial ya que deberán comenzar con la letra “S” de Start (arrancar) seguida de un número de dos cifras (para establecer el orden de arranque de los servicios) y del nombre del servicio, ejemplo: “S20samba” ó “S30nfs”. Si lo que nos interesa es que el servicio no arranque, la primera letra deberá ser una “K” de Kill (detener) en lugar de una “S”, ejemplo: “K20samba” ó “K30nfs”.

Estos enlaces se pueden crear con el comando “update-rc.d”. Por ejemplo, si deseamos que el servicio samba se arranque cuando el servidor inicia en los niveles 3, 4 y 5 y no arranque cuando inicia en los niveles 1, 2 y 6, ejecutaremos el siguiente comando (Atentos a no olvidar el punto del final “.” al escribir el comando):

Crear enlaces para inicio automático del servicio

# update-rc.d samba start 20 3 4 5 . stop 20 1 2 6 .

De esta forma se crearán enlaces simbólicos de arranque con nombre “S20samba” en las carpetas “/etc/rc3.d”, “/etc/rc4.d” y “/etc/rc5.d” y de parada con nombre “K20samba” en las carpetas “/etc/rc1.d”, ”/etc/rc2.d” y “/etc/rc6.d”.

El número 20 indica la prioridad y sirve para arrancar o parar antes unos servicios que otros ya que los scripts se procesan por orden alfabético. Se puede utilizar cualquier número entre 10 y 99.

Si por alguna razón el comando “update-rc.d” no crea los enlaces porque ya están creados, existe la posibilidad de eliminarlos con la opción “-f” (forzado) y acto seguido volver a crearlos:

Eliminación forzosa de enlaces para inicio automático del servicio

# update-rc.d -f samba remove

 

Una forma más fácil de iniciar el servicio en el arranque “sysv-rc-conf”

La instalamos según sea nuestra distribución, como siempre:

# sudo apt-get install sysv-rc-conf (para Debian)

Y al ejecutar la herramienta obtendremos lo siguiente:

sysv-rc-con

Ahora sólo tenemos que movernos con los cursores y presionar la tecla “espacio” para marcar ó desmarcar el “runlevel” en el que queremos iniciar dicho servicio. Para salir pulsamos la tecla “q”.

 

Uso de “systemctl” y compatibilidad con “init”

Pero que sucede si nuestro sistema usa “Systemd” en vez de “SysVinit”. La utilidad de administración de las “unit” de “Systemd” es “systemctl”, la cual combina las herramientas “service” y “chkconfig” de “SysVinit”, por lo tanto podremos arrancar, parar, recargar servicios, activarlos o desactivarlos en el arranque, listar los estados de los servicios y un largo etc.

Adjunto una foto con la compatibilidad entre los distintos sistemas:

2_systemctl

Además podemos:

  • Listar todas las unidades de servicios instaladas.

# systemctl list-unit-files –all

  • Solo aquellas que se encuentran activadas.

# systemctl list-unit

  • Comprobar en que modos de ejecución se inicia un determinado servicio.

# ls /etc/systemd/system/*.wants/httpd.service

  • La operación inversa sería ver para que niveles de ejecución se inicia una determinada aplicación.

# systemctl show -p “Wants” multi-user.target

  • Para ver todos los servicios disponibles en el sistema.

# systemctl -t service list-units –all

  • Ver todas las targets (niveles de ejecución) disponibles en el sistema.

# systemctl list-units –type=target

  • Pasar de un target (nivel de ejecución o runlevel) a otro.

# systemctl isolate graphical.target

Y hasta aquí, el “HOW TO” de cómo instalar y configurar un servidor DHCP en nuestra red.

 

Saludos cordiales.

 

 

Una respuesta a “CÓMO INSTALAR Y CONFIGURAR UN SERVIDOR DHCP EN GNU/LINUX

  1. Pingback: “DNSMASQ”, UN SENCILLO SERVIDOR DNS | A Linux a Day

Deja un comentario