lunes, 3 de noviembre de 2008

Instalacion de un servidor DHCP en GNU/Linux

En esta oportunidad, vamos a instalar un servidor de DHCP para asignar dinamicamente direcciones a nuestras PC`S . La situacion es que tenemos nuestro servidor LINUX con 2 interfaces, por ejemplo eth0 y eth1. La interfaz eth0 es donde tenes una ip publica para la conexion a internet y eth1 la usaremos como interface para conectar nuestra LAN y alli brindaremos el servicio de DHCP.
DHCP significa Dinamic Host Configuration Protocol y trabaja con los puertos 67 y 68 UDP, puerto 67 es por donde escucha las peticiones y el puerto 68 lo utiliza para responderle a los clientes.

Si desean mas informacion acerca de este protocolo bueno verla desde este enlace a Wikipedia

Pero ahora vamos a instalarlo, la version que voy a utilizar es la "dhcpd", la pueden con herramientas como yum, apt , yast , etc.. dependiendo de la distribucion.
Dhcpd trabaja con un solo archivo de configuracion que generalmente se encuentra en /etc/dhcpd.conf y ahora vamos a configurar. La configuracion si bien es muy amplia , se pueden configurar multiples direcciones para distintas areas, vamos a hacer algo simple pero seguro, vamos a asignar direcciones libres excepto a algunas maquinas.

Vamos primero a hacer un backup del archivo de configuracion por default asi vamos a ir agregando nuestros parametros

# mv /etc/dhcpd.conf /etc/dhcpd.conf.old
# vim /etc/dhcpd.conf
Ahora iremos agregando
#Nombre de su dominio, servira para la busqueda del servidor de nombres
option domain-name "dominio.com.ar";

#Aqui le ponen el nombre o la direccion ip del servidor de DNS
option domain-name-servers 200.45.191.35, 200.45.191.40;

#Esta opciones las explicare mas abajo
default-lease-time 72000;
max-lease-time 86400;

#Ahora definimos la IP de RED, el rango de direcciones y el gateway
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.2 192.168.100.254;
option routers 192.168.100.1; #Esta es la ip de la interface eth1
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
deny unknown-clients;
}

#deny unknown-clients sirve para negar accesos de host que no definamos, mas abajo lo veran

#Debemos definir la subred para la ip publica , si tienen un router talves sea otra direccion de red como ser 192.168.0.1
subnet 200.57.123 netmask 255.255.255.0 {
}

Listo ahora vamos a reiniciar el servicio y vamos a probarlo
# /etc/init.d/dhcp restart
# netstat -anp |grep 67
udp 0 0 0.0.0.0:67 0.0.0.0:* 2265/dhcpd

Antes de seguir explico el tema de los tiempos:
default-lease-time = Es el tiempo en segundos que se le asigna a un cliente para renovar la direccion IP.

max-lease-time = Tiempo maximo de expiracion en segundos que se le da a un cliente para responder a la renovacion, la configure para un dia.

Aplique tiempos altos porque son pocos clientes, esto se evalua de acuerdo a las necesidades.

Bien ahora cuando un cliente se conecte en nuestra red vamos a ver que direccion le otorga mediante el archivo dhcpd.leases, que es la base de datos de dhcpd
# tail -f /var/lib/dhcp/dhcpd.leases

lease 192.168.100.2 {
starts 0 2008/11/02 22:13:26;
ends 1 2008/11/03 18:13:26;
hardware ethernet 00:10:c6:97:25:5a;
uid 01:00:10:c6:97:25:5a;
client-hostname "WINDOWSMOBILE23";
}

Bien , ahora cuando se conecta un cliente vemos sus datos, esto nos servira para ar un poco de seguridad , solo permitimos pcs conocidas, recordar el deny unknown clients que pusismos mas arriba .Para eso usamos la MAC ADDRESS del equipo, por lo tanto vamos a agregar en dhcpd.conf lo siguiente

host maquina10 {
hardware ethernet 00:10:c6:97:25:5a;
fixed-address 192.168.100.2;
}

maquina10 = es el nombre que le asignamos a la pc
fixed-address = le fijamos una direccion ip

Finalmente reiniciamos el servidor y volvemos a ver como el cliente, la maquina10 toma la direccion que le asignamos, tambien pueden probar como a otra maquina que no conoce la mac address no le asigna direccion ip.

Vemos como nos quedaria el archivo de configuracion dhcpd.conf en limpio

option domain-name "dominio.com.ar";
option domain-name-servers 200.45.191.35, 200.45.191.40;

default-lease-time 72000;
max-lease-time 86400;

subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.2 192.168.100.254;
option routers 192.168.100.1; #Esta es la ip de la interface eth1
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
deny unknown-clients;
}

#ip de la otra interface
subnet 200.57.123 netmask 255.255.255.0 {
}

host maquina10 {
hardware ethernet 00:10:c6:97:25:5a;

fixed-address 192.168.100.2;
}

Esto es todo, lo hice de una manera simple y entendible, dhcpd tiene muchas opciones, se pueden armar grupos, mas subnets, mas hosts, algo mucho mas avanzado. Si ustedes usaran este servidor para ofrecer internet, no se olviden # echo 1 > /proc/sys/net/ipv4/ip_forward para permitir pasar paquetes a travez del kernel y # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
para natear.

No hay comentarios: