Ir al contenido principal

Asignación estática de direcciones IP basadas en rangos de direcciones MAC

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

Entradas populares de este blog

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD . En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores. Acerca de Moodle No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP . Además requiere que PHP tenga instalado una serie de componentes adicionales. Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL , MariaDB o PostgreSQL . También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesari

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione