La principal ventaja de tener un servidor DHCP consiste en que los administradores no tienen que preocuparse de asignarle una dirección IP a cada máquina de forma individual, ya que el servidor se encargará de ello. Si la red es pequeña, esta tarea no es muy ardua, pero conforme la red crece, la cosa se complica.
En una configuración normal se establece un rango de direcciones, llamado pool, que el servidor utilizará para asignar de forma dinámica a las máquinas clientes. Muchas veces nos interesa asignar una dirección IP concreta a una máquina, por ejemplo, a un servidor o a una impresora. Todo esto entra dentro de lo que se considera configuración básica de DHCP y nuestros alumnos lo practican tanto en la configuración de los servidores DHCP que incorporan los routers como en los servidores que ellos mismos configuran tanto en Linux como en Windows.
Pero hay veces que se necesitan configuraciones más complejas, como la que vamos a ver en este artículo, para resolver ciertos escenarios.
Escenario
Recientemente hemos instalado un servidor Proxmox VE en mi departamento para tener la posibilidad de crear máquinas virtuales y contenedores conforme los profesores y alumnos los vayan necesitando, actualmente está en fase de pruebas. Estas máquinas virtuales y contenedores deben tener una dirección IP y el servidor DHCP del departamento se las tiene que proporcionar. Desde hace años trabajamos con la red privada 10.0.0.0/8. Dentro de esta red tenemos los distintos servidores y ciertos PC, ahora también debe incluir las máquinas virtuales y contenedores de Proxmox. Pero por otro lado, queremos distinguirlos por sus direcciones IP, es decir, el servidor tendrá que asignarle a estas máquinas virtuales y contenedores unas direcciones concretas de un pool específico y no cualquier dirección dentro de la red.
Sobre direcciones MAC privadas
Una de las características que suelen tener los sistemas de virtualización consiste en permitir al usuario definir que dirección MAC quiere asignarle a sus máquinas virtuales y contenedores. Esto se puede hacer de forma manual, cada vez que se crea una nueva se le asigna a mano una dirección MAC, o bien, de forma automática utilizando un patrón. Esta última es la opción que hemos utilizado con Proxmox. Le hemos indicado a Proxmox que le asigne a cada máquina virtual y contenedor una dirección MAC que comience por AA:BB:CC.
Del mismo modo que el direccionamiento IP cuenta con una serie de direcciones privadas, las direcciones MAC también cuenta con otra serie de direcciones privadas que podemos utilizar con total tranquilidad sin correr el riesgo de que vayan a colisionar con la dirección MAC de una interfaz de red física. Este tipo de direcciones se utilizan normalmente en sistemas empotrados y en sistemas de virtualización.
Las direcciones MAC privadas son aquellas que tienen el bit menos significativo del byte más significativo a cero. Esto que parece un trabalenguas lo podemos resumir de la siguiente manera, todas aquellas direcciones de la forma:
x2:xx:xx:xx:xx:xx
x6:xx:xx:xx:xx:xx
xA:xx:xx:xx:xx:xx
xE:xx:xx:xx:xx:xx
Utilizando Clases en el servidor DHCP
Ahora sólo tenemos que configurar el servidor DHCP para que cada vez que se encuentre con una máquina cuya dirección MAC coincida con el patrón AA:BB:CC le asigne una dirección IP de este pool específico.
El servidor DHCP que utilizamos es el de ISC, que es el que normalmente se utiliza en Linux y que cuenta con una multitud de opciones de configuración. En este caso vamos a hacer uso de las clases. Las clases nos permiten crear categorías basándonos en algún criterio, nuestro criterio va a ser aquellas direcciones MAC que comiencen por el patrón que le indiquemos. El código que define nuestra clase es el siguiente:
class "virtuales"{
match if substring (hardware,1,3) = aa:bb:cc;
}
Con la palabra reservada class creamos nuestra clase que se va a llamar virtuales. Los miembros de la clase se incorporan si coinciden con la expresión substring (hardware,1,3) = aa:bb:cc. La parte de la izquierda de la expresión utiliza la función substring. Esta función extrae una subcadena de una cadena de caracteres y toma 3 parámetros: el primero es la cadena de caracteres original, el segundo es el índice del byte donde comienza la subcadena y el tercer parámetro es la longitud en bytes donde termina la subcadena.
La palabra reservada hardware hace referencia a la dirección MAC de la máquina cliente que está solicitando una dirección IP. Hay que tener en cuenta que hardware almacena en el primer byte, índice 0 de la cadena, el tipo de interfaz de red, a día de hoy sólo se admite ethernet y token ring. A partir del segundo byte, índice 1 de la cadena de caracteres, encontramos la dirección MAC. Nótese que en la parte derecha de la expresión sí hay que poner los separadores de la dirección MAC aunque no se tengan en cuenta a la hora de contabilizarlos. De hecho hemos encontrado numerosos ejemplos en Internet que los tenía en cuenta y no funcionaban.
Ahora nuestro servidor, cada vez que reciba una solicitud, se fijará en la dirección MAC de la máquina cliente y si cumple este criterio lo meterá dentro de la clase virtuales.
Pools
El último paso que nos queda es definir un pool que se le asignará sólo y exclusivamente a los miembros de nuestra clase virtuales. Para ello utilizamos el siguiente código:
pool{
allow members of "virtuales";
range 10.222.0.1 10.222.255.255;
}
La primera línea le indica al pool que sólo los miembros de la clase virtuales pertenecen al mismo. La segunda línea define el rango de direcciones a utilizar. Esto lo insertaremos dentro de nuestro bloque subnet correspondiente.
Y esto es todo por ahora, para más información puede consultarse la documentación oficial del servidor DHCP.
Comentarios
Publicar un comentario