Construcción automática de un DHCP

ArticleCategory:

System Administration

AuthorImage:

[Foto del autor]

TranslationInfo:

original in fr Eric SEIGNE
fr to enJohn Perr
en to esHugo Lastras Membrive

AboutTheAuthor:

Eric trabaja para el mundo del software libre. Su pan de cada día es programar aplicaciones dedicadas al acceso a bases de datos en la web con herramientas como PostGreSQL, MySQL y PHP3.



Abstract:

Este artículo explica como configurar de forma sencilla DHCP en una red.


ArticleIllustration:

[Ilustración]

ArticleBody:

Introducción

El objetivo del artículo es presentar:

El servidor utilizado en este artículo es el ISC DHCPd de Paul Vixie.

Construcción de un DHCP en blanco

Nuestro primer paso es crear un fichero de configuración en blanco que sea capaz de aceptar a todos los clientes en la red.
Usaré aquí la configuración de red de la Slash Party #2 para la que probé a configurar un servidor Linux.

<fichero dhcpd.conf>
default-lease-time 86400;
max-lease-time 604800;
get-lease-hostnames true;
option subnet-mask 255.255.255.0;
option domain-name "slach2-100.party";
option domain-name-servers 192.168.12.1;
option interface-mtu 1500;

subnet 192.168.12.0 netmask 255.255.255.0 
        # gateway por defecto
        option routers 192.168.12.1;
        option broadcast-address 192.168.12.255;
        range 192.168.12.50 192.168.12.200;

</fichero>

Una vez el servidor DHCP está funcionando (después de usar dhcp start o un comando similar, según la distribución de Linux), se pueden iniciar estaciones cliente en la red. Deben estar configuradas para obtener automáticamente una dirección IP.
Tan pronto como los clientes pidan una dirección al servidor DHCP, se añadirá un bloque como este al fichero dhcpd.leases:

<bloque de atributos de un cliente dhcp>
lease 192.168.12.58 
        starts 2 1999/08/24 06:28:48;
        ends 3 1999/08/25 06:28:48;
        hardware ethernet 00:10:5a:2e:56:a7;
        uid 01:00:10:5a:2e:56:a7;
        client-hostname "KLUSTER";

</bloque>

Así pues, una vez que todos los clientes han obtenido una dirección IP del servidor, el fichero dhcpd.leases tendrá el siguiente aspecto:

<fichero dhcpd.leases>
lease 192.168.12.58 
        starts 2 1999/08/24 06:28:48;
        ends 3 1999/08/25 06:28:48;
        hardware ethernet 00:10:5a:2e:56:a7;
        uid 01:00:10:5a:2e:56:a7;
        client-hostname "KLUSTER";

lease 192.168.12.53 
        starts 2 1999/08/24 05:42:22;
        ends 3 1999/08/25 05:42:22;
        hardware ethernet 00:80:ad:97:e1:76;
        uid 01:00:80:ad:97:e1:76;
        client-hostname "ceddz";

lease 192.168.12.54 
        starts 2 1999/08/24 03:07:26;
        ends 3 1999/08/25 03:07:26;
        hardware ethernet 00:80:ad:97:e1:7d;
        uid 01:00:80:ad:97:e1:7d;
        client-hostname "SDS";

lease 192.168.12.67 
        starts 2 1999/08/24 02:52:19;
        ends 3 1999/08/25 02:52:19;
        hardware ethernet 00:50:04:45:e1:65;
        uid 01:00:50:04:45:e1:65;
        client-hostname "HOMER";

lease 192.168.12.64 
        starts 2 1999/08/24 01:26:05;
        ends 3 1999/08/25 01:26:05;
        hardware ethernet 00:80:ad:97:e2:1c;
        uid 01:00:80:ad:97:e2:1c;
        client-hostname "chAwArmA";

lease 192.168.12.59 
        starts 2 1999/08/24 01:14:06;
        ends 3 1999/08/25 01:14:06;
        hardware ethernet 00:00:21:2c:30:e7;
        uid 01:00:00:21:2c:30:e7;
        client-hostname "WOOKIE";

</fichero>

Seguridad en la configuración DHCP

A continuación, es necesario convertir nuestro DHCP "abierto" en uno estático y más seguro. Esto lo haremos usando el fichero dhcp.lease que acabamos de crear y convirtiéndolo en lo que he llamado un dhcp estático.

¿Cuál es la diferencia entre un DHCP estático y uno abierto? En lo que nos concierne, un DHCP abierto permite a cualquier ordenador conectado a la red obtener una dirección IP y el resto de parámetros de la red. Esto es un gran agujero en la seguridad, ya que cualquier pirata no autorizado puede conectarse físicamente a la red y obtener parámetros de red correctos :( Para contrarrestar tales ataques, usaremos el DHCP estático. Cada dirección IP sólo se da a clientes que tengan el Mac correspondiente al adaptador ethernet asociado. De esta manera es fácil detectar una intrusión.

<fichero dhcpd.conf>
default-lease-time 86400;
max-lease-time 604800;
get-lease-hostnames true;
option subnet-mask 255.255.255.0;
option domain-name "slach2-100.party";
option domain-name-servers 192.168.12.1;
option lpr-servers 192.168.12.1;
option interface-mtu 1500;

subnet 192.168.12.0 netmask 255.255.255.0 
        # gateway por defecto
        option routers 192.168.12.1;
        option broadcast-address 192.168.12.255;
	# Those not in the dhcp
	# will get ip between .10 et .50
        range 192.168.12.10 192.168.12.50;


host 
        hardware ethernet 00:10:5a:2e:56:a7;
        fixed-address "kluster.slach2-100.party";

host 
        hardware ethernet 00:80:ad:97:e1:76;
        fixed-address "ceddz.slach2-100.party";
host 
        hardware ethernet 00:80:ad:97:e1:7d;
        fixed-address "sds.slach2-100.party";

host 
        hardware ethernet 00:40:95:49:0b:a5;
        fixed-address "saigneur.slach2-100.party";

host 
        hardware ethernet 00:50:04:45:e1:65;
        fixed-address "homer.slach2-100.party";

</file>

ATENCIÓN: Si no tienes un servidor DNS, el fichero dhcp.conf debe usar direcciones IP y no nombres de máquinas.

<extracto de dhcpd.conf sin dns>
host 
        hardware ethernet 00:40:95:49:0b:a5;
        fixed-address "192.168.12.57";

host 
        hardware ethernet 00:50:04:45:e1:65;
        fixed-address "192.168.12.67";

</extracto>

He escrito un pequeño script de perl que convierte el fichero dhcpd.leases en un fichero de configuración de dhcp estático.

Construcción automática del DNS

¿Por qué parar a medio camino cuando podemos configurar el servidor DNS al mismo tiempo?

El mismo script de perl, con la opción -dns, creará los ficheros named.$domaine.ajouter y named.$domaine.rev.ajouter que deberías comprobar antes de añadirlos a tus propios ficheros de configuración del dns.

Además, es necesario rellenar el fichero named.conf con parámetros de tu propio dominio. Por ejemplo:

<añadir al fichero named.conf>
zone "slach2-100.party" 
        type master;
        file "named.slach2-100";
;

zone "12.168.192.in-addr.arpa" 
        type master;
        file "named.slach2-100.rev";
;
</añadir>

Ya tienes un dhcp funcionando, y la configuración del dns. '!'!'! Felicítate !!!

Entorno de Red

Disponible por el mismo precio (mejor incluso cuando es gratis :), la configuración del "Entorno de red" de las máquinas con windows. Esta es la historia, con un pequeño dibujo y sus explicaciones:

En Slach 2 (una demo party), instalé dos redes, una era de 10 Mbits y la otra de 100 Mbits (en aquel tiempo, para usuarios privilegiados...). El principal problema fue que ambas redes no podían "ver" a la otra a través del "Entorno de Red" de windows.

La solución es WINS. WINS permite declarar, en la red, un servidor que mantiene una lista de enlaces entre IPs y nombre de varios dominios. Es una especie de master para las redes R1 y R2.

Es pues necesario configurar un servidor WINS y a los clientes para que lo usen y crear un gateway IP entre ambas redes.

Samba soporta perfectamente WINS :)

Esquema:

-------------------
I                 I
I      Red R1     I
I                 I
I  192.168.0.0    I
I  255.255.255.0  I
-------+-----------
       |
  -----|-----
 eth0: 192.168.0.1

     Servidor
     Linux

 eth1: 192.168.100.1
  -----|-----
       |
-------+-----------
I                 I
I     Red R2      I
I                 I
I  192.168.100.0  I
I  255.255.255.0  I
-------------------

Se modifica dhcpd.conf para que autoconfigure a los clientes para usar nuestro servidor wins :). ¡Sin dhcp, hubiera sido necesario configurar cada cliente individualmente para activar su acceso al servidor wins!

AVISO: NO OLVIDES AÑADIR LAS SIGUIENTES LÍNEAS A TU FICHERO DHCPD.CONF PARA QUE TU SERVIDOR WINS SEA USADO POR LOS CLIENTES

<fichero dhcpd.conf>
[...]
option routers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
option netbios-node-type 8;
[...]
</fichero>

Para tener el servidor wins funcionando, tengo funcionando Samba, configurado como sigue:

<fichero smb.conf>
; validated with samba 2.0.5
[global]
   workgroup = rycks.com
   server string = Linux Box
   comment = Linux Box
   netbios name = pantoufle
   volume = pantoufle
   guest only = yes

   guest account = nobody
   log file = /var/log/samba-log.%m
   max log size = 50

   share modes = yes
   security = share
   socket options = TCP_NODELAY 
   os level = 33

   ; Configured as network master
   domain master = yes
   local master = yes
   preferred master = yes

   ; Activate wins support
   wins support = yes
   wins proxy = yes

 ; FTP sharing
 [ftp]
   path = /home/ftp/pub
   public = yes
   printable = no
   guest ok = yes

</fichero>

Es necesario reiniciar los servidores, dhcp, samba y dns si se hacen modificaciones. Reinicia también los clientes dhcp para que se den cuenta de la nueva configuración. Busca los grupos en la "otra" red en el "Entorno de Red".
Dado el usual retraso que windows necesita para añadir las nuevas máquinas en el "entorno de red", sugiero que busques un ordenador usando su nombre. Prueba a encontrar un ordenador de la red en la que estás, y luego otro de la "otra" red.

Si puedes "ver" máquinas de fuera, pero no puedes acceder a ellas, necesitas configurar el gateway para que actúe como un gateway real entre ambas redes.
Para más información sobre ello, mírate el ipchains.

Normalmente es necesario usar algo similar a:

#Reiniciar cadenas
ipchains -F
#Activar masquerading
ipchains -A forward -i eth0 -j MASQ

Bugs y limitaciones

Ves con cuidado, si el servidor dhcp se usa en dos áreas a la vez, solo habrá un fichero dns a la salida del programa... Será necesario ordenarlo a mano.

Espero que este documento sea útil. No dudes en contactar conmigo para cualquier comentario o pregunta.

Referencias

Para un análisis más profundo de las diferentes partes, consulta:

¿Dónde encontrar la última versión de este documento?

Las actualizaciones son frecuentes, mira en la siguiente dirección para la última versión en francés: http://www.rycks.com/erics/linux/