Configuración de servicios DHCP en FreeBSD

Alejandro Acosta

acosta@freebsd.org.mx

2002/08/22



1. Introducción

La administración de nodos de red puede ser una tarea ardua y que consume la mayor parte del tiempo, agregar nodos al sistema implica verificar varios factores para evitar conflictos con los equipos existentes, configurar el nuevo nodo a fin de de que pueda comunicarse y registrar los cambios realizados para tenerlos en cuenta la próxima vez. Este método es funcional cuando la red es simple, pero una vez que el número de equipos hace imposible el manejo manual de las configuraciones, tenemos a nuestra disposición herramientas que nos pueden ayudar en la automatización del manejo de la red: los servidores DHCP, por sus siglas en inglés Direct Host Configuration Protocol. La función de un servidor DHCP es la de asignar nombres, direcciones IP, las ubicaciones de los servidores de nombres en la red y de la ruta de comunicación hacia el exterior mientras lleva un registro de las operaciones de asignación realizadas para cada equipo, lo que nos permite la comodidad de conectar solamente el equipo a la red para que este configurado y pueda comunicarse.


2. Instalación

El servidor DHCP en este ejemplo es el de ISC, Internet software Consortium, la versión contenida en los ports de FreeBSD 4.6-STABLE. La instalación es bastante simple, solo tenemos que ubicarnos en nuestro directorio de ports del sistema y realizar un make install como root:

    infiernos# cd /usr/ports/net/isc-dhcp3
    infiernos# make install

Esta acción instalará los binarios del programa y los archivos de configuración.


3. Configuración del servidor DHCP

Los archivos de configuración están localizados en el directorio /usr/local/etc, pero antes de modificarlos vamos a plantear los datos de un caso imaginario. Vamos a dar servicio de DHCP a 200 hosts, nuestra red tiene los siguientes datos:

Debemos crear un archivo dhcpd.conf para que contenga las opciones de configuración que necesitamos:

    infiernos# cd /usr/local/etc
    infiernos# touch dhcpd.conf
    infiernos# ee dhcpd.conf

Nuestro archivo de configuración tendría algo como esto:

    ######### dhcpd.conf #########
    #
    option domain-name "freebsd.org.mx";
    option domain-name-servers 10.77.4.10, 10.77.4.11, 10.77.4.15;
    #
    
    default-lease-time 7200;
    max-lease-time 32400;
    #
    authoritative;
    ddns-update-style none;
    #
    subnet 10.77.4.0 netmask 255.255.255.0 {
      range 10.77.4.50 10.77.4.250;
      option routers 10.77.4.254;
      option broadcast-address 10.77.4.255;
    }
    #
    #EOF

Con esta configuracion basica podemos iniciar el servidor DHCP

    infiernos# /usr/local/etc/rc.d/isc-dhcpd.sh.sample start
    Internet Software Consortium DHCP Server V3.0.1rc1
    Copyright 1995-2001 Internet Software Consortium.
    All rights reserved.
    For info, please visit http://www.isc.org/products/DHCP
    Wrote 3 leases to leases file.
    Listening on BPF/xl1/00:10:5a:ab:9b:ab/10.77.4.0/24
    Sending on   BPF/xl1/00:10:5a:ab:9b:ab/10.77.4.0/24
    Sending on   Socket/fallback/fallback-net

Para que el servicio inicie de manera automática al momento de arranque, hay que renombrar el archivo isc-dhcpd.sh.sample y asegurarse que tenga permisos de ejecución.

    infiernos# mv isc-dhcpd.sh.sample isc-dhcpd.sh
    infiernos# chmod 755 isc-dhcpd.sh

Una vez que el servidor ha cargado crea un archivo de datos para llevar el control de las asignaciones de las direcciones IP en /var/db/dhcpd.leases con los datos de las terminales y la hora de asignación.


4. Asignaciones selectivas

El servidor DHCP ya está funcionando, pero que tal si queremos que ciertos equipos reciban siempre la misma configuración de red?, para esto podemos utilizar una declaración como esta:

    host c-tre-p0 {
      hardware ethernet 05:01:07:26:c0:a5;
      fixed-address 10.77.4.47;
    }
    
    host hirvientes {
      hardware ethernet 08:00:04:70:b0:c6;
      fixed-address 10.77.4.48;
    }

Con host podemos declarar la IP que se le asignará al equipo que tenga la dirección de hardware 05:01:07:26:c0:a5, pero las directivas listadas anteriormente tambien pueden ser utilizadas para declarar diferentes servidores de nombres o de router para este host. Solo hay que tener cuidado de no poner direcciones IP que esten en el rango de IPs declarado como dinámicas.

Otra de las opciones que podemos combinar con la identificacion de hosts es la posibilidad de no admitir hosts desconocidos, o de limitarlos en las opciones que se les pueden asignar desde el servidor, por ejemplo:

    host tre01 { hardware ethernet 0:c0:c3:49:2b:57; }
    host tre02 { hardware ethernet 0:c0:c3:80:fc:32; }
    host tre03 { hardware ethernet 0:c0:c3:22:46:81; }
    
    pool {
      option domain-name-servers ns1.freebsd.org.mx, ns2.freebsd.org.mx;
      max-lease-time 28800;
      range 10.77.4.50 10.77.4.100;
      optio routers 10.77.4.254;
      deny unknown clients;
    }
    
    pool {
      option domain-name-servers 10.77.4.252;
      max-lease-time 600;
      range 10.77.4.101 10.77.4.115;
      allow unknown clients;
    }

La declaración de los equipos con la directiva host nos permite utilizar una directiva pool para discernir entre los equipos conocidos para aplicar diferentes IPs, esto combinado con restricciones de firewall pueden ser de mucha ayuda con la seguridad en la red.


5. Conclusiones

Los servicios de DHCP son muy útiles cuando se maneja grán cantidad de equipos, pueden ahorrarnos muchas horas de trabajo y su instalación no es complicada. Aunque si vamos a depender del DHCP activamente, lo más recomendable es habilitar un servidor secundario para el segmento o configurar la opción de failover entre servidores. Les invito a que lean el handbook y las páginas del manual en línea del sistema sobre DHCP. Dudas, comentarios y sugerencias:

acosta@freebsd.org.mx