2.7 Dhcp

DHCP (Dynamic Host Configuration Protocol) es un protocolo de red en el que el servidor bajo el que está corriendo provee los parámetros de configuración necesarios a las máquinas conectadas a la red que así lo soliciten. Mediante DHCP se asignarán de forma totalmete automática y transparente parámetros como la puerta de enlace, la máscara de subred, la DNS o la propia dirección IP.

Funcionamiento

El protocolo DHCP nace en octubre de 1993 de la mano del Grupo de Trabajo Dynamic Host Configuration del IETF (Internet Engineering Task Force), una organización de voluntarios que define protocolos para su uso en internet) y sus características quedan definidas por el estándar RFC 2131 y RFC 2132. Dicho protocolo cubría la necesidad de control que empezaban a requerir ciertas redes de tamaño bastante abultado, donde la administración de las mismas se hacía bastante complicada, ya fuera por el número de equipos instalados o por la longitud física de la misma (proveedores de acceso a internet). Sin el protocolo DHCP, cada ordenador de una red ha de recibir su configuración manualmente, con el inconveniente que esto supone a la hora de reasignar direcciones a ordenadores que cambian frecuentemente su conexión, el cambio eventual de un servidor de DNS externo o la puerta de enlace de salida al exterior. El control de todos estos parámetros es absoluto desde un servidor de DHCP.

El protocolo admite tres tipos de asignación de direcciones IP, que pueden combinarse entre sí:

Básicamente, DHCP se dividirá en dos partes bien diferenciadas: un protocolo encargado de intercambiar los parámetros de red específicos para cada cliente y un mecanismo encargado de la asignación de las direcciones. Por otra parte, y de forma habitual, el servidor de DHCP se estructurará a partir de dos bases de datos: una estática, al uso de BOOTP, protocolo anterior a DHCP y compatible con éste y otra con una pila de direcciones disponibles, que será la encargada de facilitar los datos en una asignación automática o dinámica.

El funcionamiento sobre el papel de DHCP es bastante simple: el servidor DHCP recibe una petición del cliente y se chequea la base de datos estática en busca de alguna dirección asignada a la máquina que realiza la petición. Si existe una entrada para la dirección física que realiza la petición, se devuelve la dirección almacenada que corresponda. Si no se encuentra nada, el servidor selecciona una dirección disponible de la base de datos dinámica y se asigna de forma temporal a la máquina que lo solicita.

Repasemos las opciones más importantes que un servidor DHCP puede asignar/proveer a cualquier cliente que lo solicite. Dado que este es un artículo sobre un protocolo determinado, no se explicará el cometido de cada una de estas opciones:

Instalación del software DHCP en un servidor linux

Para nuestra instalación, vamos a utilizar una implementación del protocolo DHCP programada y mantenida por el ISC (Internet Systems Consortium). El software puede descargarse de su página web, aunque la gran mayoría de las distribuciones de linux han compilado un paquete que incluye la versión de DHCP del ISC. En nuestro caso, instalaremos DHCP desde la herramienta de paquetería YUM, aunque podemos usar la herramienta que creamos más conveniente:

[root@anna ~]# yum install dhcp
Installing: dhcp    ################ [1/1]
Installed: dhcp.i386 10:3.0.2-34.FC4
Complete!

Con este paso, el software que implementará el protocolo en nuestro servidor quedará totalmente instalado. No se necesitan más programas adicionales y tan sólo habrá que configurar el servidor para que arranque de manera predeterminada con el inicio del sistema. En sistemas con Fedora Core, dicha configuración se implantaría de la siguiente manera:

# /sbin/chkconfig dhcpd on
# /sbin/service dhcpd start

Configuración del servidor

La instalación del servidor deja un fichero de configuración en la ruta /etc/dhcp.conf. Este fichero será leído durante la carga del protocolo DHCP y en él se configuran todas las opciones del mismo. Cualquier modificación realizada sobre este fichero será tenida en cuenta cada vez que el demonio de DHCP se inicie. Veamos un ejemplo de dicho fichero:

authoritative;
ddns-updates on;
ddns-update-style ad-hoc;
option domain-name-servers 10.0.0.1, 202.188.0.133, 202.188.1.5;
option subnet-mask 255.255.255.0;
option routers 10.0.0.1;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.201 192.168.1.220;
default-lease-time 86400;
max-lease-time 86400;
option routers 192.168.1.1;
option ip-forwarding off;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.100;
option nntp-server 192.168.1.100;
option netbios-name-servers 192.168.1.100;
}

subnet 10.0.0.0 netmask 255.255.255.0 {
ddns-updates on;
range 10.0.0.60 10.0.0.150;
}

group {
host 001_1 {
ddns-updates on;
hardware ethernet 00:50:8b:aa:f3:24;
fixed-address 10.0.0.50;
}

host 001_2 {
ddns-updates on;
hardware ethernet 00:50:8b:aa:f3:24;
fixed-address 10.0.0.50;
}

host cosh {
hardware ethernet 00:30:6e:28:5c:3f;
fixed-address 10.0.0.9;
}
}

Como podemos observar, cada órden o parámetro termina con un punto y coma (;), a excepción de las opciones que necesitan de varios parámetros, que se agrupan entre llaves ({…}). Repasemos a continuación las opciones y parámetros más importantes a nuestra disposición (para un detalle completo de todos los comandos accederemos al manual de configuración dhcp.conf(5) y dhcp-options(5)):

Así, tal y como hemos visto en el archivo de configuración de ejemplo, primero se escriben una serie de opciones gernerales (authoritative, ignore client-updates, etc.), para seguidamente definir una red compartida (shared-network) con todas sus opciones específicas. Dicha red incluye tres definiciones: una subred (subnet) y dos hosts específicos (host). Se puede advertir igualmente que las direcciones de estos dos hosts no tienen por qué incluirse dentro del rango de la red general.

Ejemplos de configuración

Las opciones a nuestra disposición para configurar un servidor de DHCP son casi interminables. A continuación vamos a detallar con varios ejemplos las declaraciones más importantes que podemos usar en un fichero de configuración.

  • Declaración de Subred

Debe incluir una declaración subnet para cada subred en su red. Si no es así, el servidor DHCP no arrancará.
En este ejemplo, hay opciones globales para cada cliente DHCP en la subred y un range declarado. A los clientes se les asignará una dirección IP dentro de las IP declaradas en range.

subnet 192.168.1.0 netmask 255.255.255.0 {
option routers                  192.168.1.254;
option subnet_mask              255.255.255.0;

option domain_name              “example.com”;
option domain_name_servers       192.168.1.1;

option time_offset              _18000;
range 192.168.1.10 192.168.1.100;
}

  • Declaración de shared-network, o red compartida

Todas las subredes que comparten la misma red física deben especificarse dentro de una declaración shared_network. Los parámetros dentro de shared_network pero fuera del cerco de las declaraciones subnet se consideran parámetros globales. El nombre de shared_network debe ser el título descriptivo de la red, como, por ejemplo, mi_red_local. Dicho nombre puede ser igualmente una dirección IP.

shared_network mi_red_local {
option domain_name              “test.fedora.com”;
option domain_name_servers      ns1.fedora.com, ns2.fedora.com;
option routers                  192.168.1.254;
—Declaración de subredes específicas—
subnet 192.168.1.0 netmask 255.255.255.0 {
parameters for subnet
range 192.168.1.1 192.168.1.31;
}
subnet 192.168.1.32 netmask 255.255.255.0 {
parameters for subnet
range 192.168.1.33 192.168.1.63;
}
}

  • Declaración de Grupo

La declaración group puede utilizarse para aplicar parámetros globales a un grupo de declaraciones. Puede agrupar redes compartidas, subredes, hosts u otros grupos.

group {
option routers                  192.168.1.254;
option subnet_mask              255.255.255.0;

option domain_name              “example.com”;
option domain_name_servers       192.168.1.1;

option time_offset              _18000;

host apex {
option host_name “apex.example.com”;
hardware ethernet 00:A0:78:8E:9E:AA;
fixed_address 192.168.1.4;
}

host raleigh {
option host_name “raleigh.example.com”;
hardware ethernet 00:A1:DD:74:C3:F2;
fixed_address 192.168.1.6;
}
}

Consideraciones de seguridad

El servidor de DHCP utiliza el puerto 67 y 68 a través de UDP para recibir y enviar datos a los clientes. Es por esto que lo primero que deberemos retocar serán las reglas de nuestro cortafuegos, si es que este existe y si es que el servidor de DHCP comparte con él la misma máquina. Suponiendo que tenemos instalado iptables, la regla a introducir en el fichero de configuración será la siguiente:

$IPTABLES  -I INPUT -i $LAN_IFACE -p udp –dport 67:68 –sport \
67:68 -j ACCEPT

Con esta regla se permite el tráfico hacia y desde los puertos UDP 67 y 68, lo cual nos deja abierto un pequeño agujero en el cortafuegos que permite el funcionamiento del servidor de DHCP.

En el caso de tener varios dispositivos de red configurados en la misma máquina, habrá que asegurarse de que nuestro servidor de DHCP sólo se ejecuta sobre el que tiene acceso a la red a la que va a proveer de servicio. En un sistema con Fedora Core, tenemos a nuestra disposición un fichero de configuración en la ruta /etc/sysconfig/dhcpd. Agregaremos lo siguiente a dicho fichero:

DHCPDARGS=eth0

eth0 se cambiará por el interfaz usado por DHCP.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: