Servidor DHCP bajo GNU/Linux

Un servidor de DHCP se encarga de asignar IP’s, de forma estática y dinámica, a los host de una red; acontinuación se detalla su configuración (ha sido testeado en Ubuntu).

1.- Bajar, descomprimir, compilar e instalar el servidor dhcp, para ello ejecutaremos los siguientes comandos:

wget http://zeus.unex.es/~victor/software/Practicas/Linux/ dhcp-latest.tar.gz

tar -zxvf dhcp-lat*

cd dhcp-lat*

./configure

make && make install

NOTA: Si da problemas de compilación:

echo “#include <asm/types.h>” ./common/tr.c

ó instalar libglib-dev

2.- Configurarlo:

Según la documentación (man dhcpd), el programa utiliza al menos dos archivos:
/var/state/dhcp/dhcpd.leases: Guarda un registro de todas las asignaciones de IP del servidor. El programa funciona sin él, pero no habra registro de asignaciones.

Lo creamos:

echo “” >> /var/state/dhcp/dhcpd.leases

/etc/dhcpd.conf: Se puede configurar de diferentes formas dependiendo de la configuración de la red que tengas.

En mi caso tengo dos subredes, con ip’s 10.0.0.144 y mascara 255.255.255.248 y 192.168.1.0 y mascara 255.255.255.0
Ambas interconectadas con un portatil y haciendo forwarding y firewall con iptables.
Pondré la configuración necesaria para la configuración de los ordenadores de la sala de telemática, si alguien quiere hacerlo con dos tarjetas de red que deje un comentario.

2.1.- Lo creamos

echo “” >> /etc/dhcpd.conf

2.2.- Editamos el fichero de configuración:

Si queremos que el servidor provea las DNS automáticamente, ponemos esta línea #(la dirección DNS es indiferente mientras sea válida):

option domain-name-servers 158.49.17.21;

En segundo lugar añadimos esta linea, que nos indica que el tipo de #actualizacion en caso de DNS dinamicas es ad-hoc (equipo a equipo)

ddns-update-style ad-hoc;

Ahora vamos a configurar las diferentes subredes que tengamos (como mínimo una). Los datos de ip’s, como es lógico, habrá que sustiturilos por los valores concretos de cada configuración.

Indicamos la 1ª subred y máscara de la siguiente forma

subnet 10.0.0.144 netmask 255.255.255.248{

Indicamos el router (gateway) para esta subred

option routers 10.0.0.145;

Indicamos el rango de asignación(cuidado con las mascaras y rangos)

range 10.0.0.146 10.0.0.149

Ahora el tiempo que queremos que la asignación se mantenga por defecto. Si quisieramos más, se indica al arrancar el servicio

 

default-lease-time 36000; #Son 10 horas

max-lease-time 180000; # 50 horas como máximo al arrancar el servicio

Ahora viene una opción algo complicada de comprender; resulta que los clientes #con Windows antiguos (que son gestionados, lógicamente con implementaciones de #red Microsoft, no se llevan bien con los anuncios broadcast de red, usan en su #lugar el servicio WINS, para entenderse con NetBIOS). Así que si nuestra red tiene #algún cliente Güindos deberiamos activar esta opcion

option netbios-node-type 2;

Ahora podemos especificar si el cliente hará ip_forwarding

($(echo /proc/net/ipv4/io_forwarding) -eq 1)

option ip-forwarding false;

}

En principio esta configuración deberia valer: Guardamos el archivo y comprobemos que la sintaxis es correcta haciendo un dhcpd -t, en principio no deberían salir errores, así que iniciamos el servicio y probamos desde un cliente :

Servidor:

dhcpd eth0

Probamos que efectivamente el servicio esté corriendo:

ps -ef | grep dhcpd

Cliente:

dhclient eth1

Debería de funcionar todo perfectamente.

Ahora añadimos al archivo algo para hacer que la asignacion de ip sea estática por MAC:

group {

host Bixito-I {

hardware ethernet 00:0F:1F:CF:6C:01;

fixed-address 10.0.0.147;

}

}

Nota: Para saber el host tecleamos hostname

En este caso nos asigna la ip correspondiente según nuestra MAC.

Consideraciones y supuestos varios:

Al cambiar algo del fichero de configuracion debemos recargar el servicio.
Al haberlo implementado en modo standalone si queremos matar el proceso dhcpd:

kill -9 $(pidof dhcpd)

Por otro lado hemos supuesto que el cliente tiene el dhcpclient. En caso de que no fuera así editamos el archivo /etc/interfaces y añadimos:

auto eth2
iface eth2 inet dhcp

y ejecutamos

/etc/init.d/networking restart

—————————————————————————————————–

ACTUALIZACIÓN: Implementación dentro de inetd

Lo primero es buscar la ruta del binario dhcpd. Suele ser /usr/sbin/dhcpd 

En segundo lugar instalamos el superservidor inetd:

apt-get install netkit-inetd

Ahora editamos el fichero /etc/inetd.conf añadiéndole:

bootps dgram udp wait root /usr/sbin/dhcpd

bootps: Indica el servicio : Será bootps/dhcp por el puerto 67 (especificado en /etc/services)

dgram : El protocolo DHCP usa datagramas (por estar implementado sobre udp)

udp: Procotolo usado

wait: Serviremos las peticiones correlativamente, no en paralelo

usr/sbin/dhcpd: Ruta al binario del servidor dhcp

Reiniciamos el inetd:

 /etc/init.d/inetd restart

——————————————————————————————-

Referencias:

https://revartm.wordpress.com/2007/02/23/inetdconf/ 

http://www.linuxmanpages.com/man5/dhcp-options.5.php

http://www.europe.redhat.com/documentation/rhl8.0/rhl-cg-es-8.0/s1-dhcp-configuring-server.php3

Pablo Mathamel

~ por Pablo en febrero 23, 2007.

8 comentarios to “Servidor DHCP bajo GNU/Linux”

  1. Para la instalación del servidor de dhcp, vamos a aprovechar que nos encontramos en Ubuntu para utilizar el siguientes comando:

    # aptitude install dhcp3-server

    Con el comando anterior una vez haya terminado su ejecución, tendremos instalado el servidor de dhcp.
    El fichero de configuración (dhcpd.conf) se encontrará en el directorio /etc/dhcp3/ , y el dhcpd.leases en /var/lib/dhcp3/. Estos ficheros no hay que crearlos porque al instalar dhcp3-server, son creados y ubicados en esos directorios. Se recomienda que del fichero de configuración se haga un copia, ya que contiene la información necesaria para poder crearlo, para ello ejecutaremos el siguiente comando:

    # cd /etc/dhcp3/
    # cp dhcpd.conf dhcpd.conf_backup

    A partir de ahora ya podremos editar el fichero de configuración, tal y como se indica en el post. A continuación comentaré un poco algunos de los parámetros con sus posible opciones:

    option domain-name [nombre] : Nombre de dominio que el cliente usará en una resolución de nombrs via DNS.
    option domain-name-servers [IP, [IP, …]] : En esta opción se pueden poner mas de un servidor de DNS, en este caso estos iran separados por coma.
    ddns-update-style [tipo] : Define el método de actualización de las DNS. Los valores que puede tomar son: ad-hoc, interim o none.
    authoritative : Poner este parámetro en el archivo de configuración hará que el servidor de DHCP reasigne direcciones a los clientes mal configurados, incluida una nueva configuración del servidor. En el caso de no aparecer no hará nada de esto (también puede aparecer not authoritative, que es lo mismo que no aparezca).
    default-lease-time [duración] : Especifica la cantidad de tiempo, en segundos, que será mantenida una asignación de direcciones, siempre y cuando el cliente no haya especificado algo concreto.
    max-lease-time [duración] : Especifica la cantidad máxima de tiempo, en segundos, que será mantenida una asignación de direcciones.
    range [ip_menor] [ip_mayor] : Define el rango de direcciones que se asignará.
    option routers [puerta_enlace] : Define la puerta de enlace.
    option broadcast-address [dirección] : Define la dirección de broadcast.
    hardware [tipo] [dirección] : Especifica el hardware de un cliente BOOTP para que éste sea reconocido por el servidor de DHCP. El tipo puede ser ethernet o token-ring y la dirección será una serie de octetos hexadecimales inequívocos de la tarjeta.
    fixed-address [dirección]: Define las dirección estática para asignarla a un host determinado. Esta opción aparece únicamente en una declaración de host.
    group : Define un grupo que puede utilizarse para aplicar parámetros globales.
    shared-network : Engloba varias subredes que están sobre la misma red física. Los parámetros dentro de shared-network y fuera de las diferentes subnet, son parámetros globales. El nombre de shared-network puede ser un nombre descriptivo de la red o una dirección IP.

    Otro posible fichero de configuración podría ser el siguiente:

    ddns-update-style none;

    option domain-name “OpenDNS”;

    option domain-name-servers 208.67.222.222, 208. 67.220.220;

    default-lease-time 600;

    max-lease-time 7200;

    authoritative;

    subnet 192.168.0.0 netmask 255.255.255.0 {

    range 192.168.0.1 192.168.0.30;

    option routers 192.168.0.254;

    option broadcast-address 192.168.0.255;

    default-lease-time 600;

    max-lease-time 7200;

    }

    host server_ftp {

    hardware ethernet 00:10:B5:15:C6:A1;

    fixed-address 192.168.0.69;

    }

    La siguiente dirección es sobre una web que nos calcula los parámetros de la subred, nos puede resultar útil en algún momento.

    http://www.subnetmask.info/

    Referencias:

    http://www.liberaliatempus.com/articulos/linux/configurar-un-servidor-dhcp.html

    http://www.howtoforge.com/dhcp_server_linux_debian_sarge

    http://fferrer.dsic.upv.es/cursos/Linux/Avanzado/HTML/ch06s04.html

    http://www.ldc.usb.ve/~pedro/coloquio_dhcp/node16.html

    MTB

  2. Víctor nos ha dejado un ejemplo de dhcpd.conf en su servidor, aquí os dejo el reporte del mismo:

    option domain-name-servers 158.49.17.21;
    option domain-name “unex.es”;
    ddns-update-style ad-hoc;
    subnet 192.168.0.0 netmask 255.255.255.0 {
    option routers 192.168.0.254;
    range 192.168.0.1 192.168.0.128;
    default-lease-time 36000;
    max-lease-time 180000;
    option netbios-node-type 2;
    option ip-forwarding false;
    }
    group {
    host puesto1 {
    hardware ethernet 00:c0:26:10:04:c5;
    fixed-address 192.168.0.1;
    }
    host puesto2 {
    hardware ethernet 00:c0:26:10:03:f9;
    fixed-address 192.168.0.2;
    }
    host puesto3 {
    hardware ethernet 00:c0:26:24:5e:6f;
    fixed-address 192.168.0.3;
    }
    host puesto4 {
    hardware ethernet 00:c0:26:24:60:7c;
    fixed-address 192.168.0.4;
    }
    host puesto5 {
    hardware ethernet 00:c0:26:24:5f:44;
    fixed-address 192.168.0.5;
    }
    host puesto6 {
    hardware ethernet 00:c0:26:24:61:5c;
    fixed-address 192.168.0.6;
    }
    host puesto7 {
    hardware ethernet 00:c0:26:10:04:bc;
    fixed-address 192.168.0.7;
    }
    host puesto8 {
    hardware ethernet 00:c0:26:10:04:be;
    fixed-address 192.168.0.8;
    }
    host puesto9 {
    hardware ethernet 00:c0:26:10:04:c3;
    fixed-address 192.168.0.9;
    }
    host puesto10 {
    hardware ethernet 00:c0:26:10:04:c0;
    fixed-address 192.168.0.10;
    }
    host puesto11 {
    hardware ethernet 00:c0:26:24:5f:98;
    fixed-address 192.168.0.11;
    }
    host puesto12 {
    hardware ethernet 00:c0:26:24:5a:7b;
    fixed-address 192.168.0.12;
    }
    host puesto13 {
    hardware ethernet 00:c0:26:24:5d:76;
    fixed-address 192.168.0.13;
    }
    host puesto14 {
    hardware ethernet 00:c0:26:24:5b:10;
    fixed-address 192.168.0.14;
    }
    host puesto15 {
    hardware ethernet 00:c0:26:24:5f:8c;
    fixed-address 192.168.0.15;
    }
    host puesto16 {
    hardware ethernet 00:c0:26:15:2c:f4;
    fixed-address 192.168.0.16;
    }
    host puesto17 {
    hardware ethernet 00:c0:26:15:2c:f1;
    fixed-address 192.168.0.17;
    }
    host puesto18 {
    hardware ethernet 00:c0:26:10:03:fd;
    fixed-address 192.168.0.18;
    }
    host puesto19 {
    hardware ethernet 00:c0:26:15:2e:2f;
    fixed-address 192.168.0.19;
    }
    host puesto20 {
    hardware ethernet 00:c0:26:10:04:c6;
    fixed-address 192.168.0.20;
    }
    host puesto21 {
    hardware ethernet 00:c0:26:10:04:c0;
    fixed-address 192.168.0.21;
    }
    host puestoprof {
    hardware ethernet 00:c0:26:24:5d:f6;
    fixed-address 192.168.0.21;
    }
    }

    subnet 192.168.2.0 netmask 255.255.255.0 {
    option routers 192.168.2.254;
    range 192.168.2.1 192.168.2.20;
    }
    group {
    host p1 {
    hardware ethernet 00:05:1C:0B:3F:F7;
    fixed-address 192.168.2.1;
    }
    host p2 {
    hardware ethernet 00:05:1C:09:59:15;
    fixed-address 192.168.2.2;
    }
    host p3 {
    hardware ethernet 00:05:1C:09:61:20;
    fixed-address 192.168.2.3;
    }
    host p4 {
    hardware ethernet 00:05:1C:0A:CD:CD;
    fixed-address 192.168.2.4;
    }
    host p5 {
    hardware ethernet 00:05:1C:06:25:05;
    fixed-address 192.168.2.5;
    }
    host p6 {
    hardware ethernet 00:05:1C:0A:D2:38;
    fixed-address 192.168.2.6;
    }
    host p7 {
    hardware ethernet 00:05:1C:0A:CC:FF;
    fixed-address 192.168.2.7;
    }
    host p8 {
    hardware ethernet 00:05:1C:09:DC:D5;
    fixed-address 192.168.2.8;
    }
    host p9 {
    hardware ethernet 00:05:1C:0A:2E:55;
    fixed-address 192.168.2.9;
    }
    host p10 {
    hardware ethernet 00:05:1C:05:CB:E8;
    fixed-address 192.168.2.10;
    }
    host p11 {
    hardware ethernet 00:05:1C:0A:33:99;
    fixed-address 192.168.2.11;
    }
    host p12 {
    hardware ethernet 00:05:1C:06:2B:D8;
    fixed-address 192.168.2.12;
    }
    host p13 {
    hardware ethernet 00:05:1C:0A:CA:00;
    fixed-address 192.168.2.13;
    }
    host p14 {
    hardware ethernet 00:05:1C:05:E5:F8;
    fixed-address 192.168.2.14;
    }
    }

  3. Creo que nos repetimos más que el ajo señores….

  4. y com hacemos para dos subredes con 3 tarjetas??? (una internet, y las otras dos para subredes)?

  5. Nemesisx666: Te refieres a tener tres tarjetas en un PC, una de ellas conectada al router que dá internet y las otras dos configuradas con subredes diferentes?

    No hay que hacer nada especial, el servidor dhcp sirve por las interfaces cuyas subredes esten configuradas en dhcpd.conf

    Lo que no puedes hacer (creo) es servir dhcp a una subred a la que no esté el servidor conectado directamente (ni enrutando)

  6. Si me dejais el atrevimiento (siendo un completo noob en linux)… para un proyecto ‘virtual’, he configurado un servidor dhcp en línux como en el ejemplo anterior (pero sin los ‘group’ en varias subredes… 3 en concreto.
    En la 192.168.1. se encuentra el servidor que enruta y otras máquinas.
    En la 192.168.2. no puse ninguna máquina pero configuré algunas..
    En la 192.168.3. configuré algunas máquinas y conecté una.

    Tanto servidor (192.168.1.x) como cliente dhcp (192.168.3.x) se encontraban conectados en un switch y no hubo problema.
    Lo que no probé fue meter otro host más en el switch a ver que pasaba… pero supongo que no habría problema, no?🙂

    Sólo una tarjeta de red😀 (vale, no teníamos acceso a internet, pero se conecta al switch y ningun problema en la teoria, no?🙂

  7. oye amigo se ve que saben bastante, ando empezando y me piden una practica, que divida mi actual red para crear dos subredes, la verdad me hago bolas para crearlas y hacer que se vean las dos y puedan compartir archivos con samba, y le pueda asignar a las dos direcciones con dhcp tengo instalado ubuntu-server 7.10 .mi red actual es :
    10.24.1.xx
    255.255.255.0
    10.24.1.1

    me podrian indicar como quedarian dividida en dos subredes?.

    gracias y saludos,
    pd: muchas de las cosas que he visto aqui me han servido bastante sigan asi, cuando ya sea bueno yo voy a apoyar aqui.

  8. Hola mi problema es que estoy implementando un DHCP en una maquina con dos tarjetas de red, y en teoria mi dhcp su funciona, el problema es que no puedo hacer q mi otra ip se conecte a internet, podria ayudarme??

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: