Hemos creado un servidor personal utilizando una solución docker de CoreDNS, que modificaremos para poder utilizarla a nuestro gusto.

Vamos a crear una nueva zona, en la que añadiremos los host esxi que tenemos dentro de nuestro laboratorio, en este caso:

  • vcenter100
  • esxi101
  • esxi102
  • esxi103

Partimos de que tenemos un CoreDNS ya ejecutandose, (si no lo tienes y te gustaría configurarlo puedes ver nuestro anterior post), por lo que vamos a modificar el fichero Corefile que tenemos en nuestro motor de docker.

Si recordais tenemos una carpeta ~/containers/coredns/ donde tenemos el fichero Corefile

cat ~/containers/coredns/Corefile

Lo primero que vamos a crear es un fichero que contendrá la zona DNS deseada, a modo base de datos, con los registros que nos interese añadir. En este caso vsphere.local

nano containers/coredns/db.vsphere.local

Añadimos las siguientes líneas para configurar la zona y añadir los host pertinentes:

$TTL    604800

@    IN    SOA    dns.vsphere.local. admin.vsphere.local. (

                  3        ; Serial

             604800        ; Refresh

              86400        ; Retry

            2419200        ; Expire

             604800 )    ; Negative Cache TTL

;

 vcenter100.vsphere.local.    IN    A    192.168.0.100
 esxi101.vsphere.local.    IN    A    192.168.0.101
 esxi102.vsphere.local.    IN    A    192.168.0.102
 esxi103.vsphere.local.    IN    A    192.168.0.103 

Hay muchas formas de declarar las zonas, y diferentes formas de darle los parámetros de TTL, hemos pensado que esta es la más sencilla/visual

Debería quedar así:

Una vez hemos generado el fichero de la zona, debemos decirle a Corefile donde se tiene que dirigir, en el caso de que le hagan una petición de *.vsphere.local.

Modificamos el fichero Corefile

nano ~containers/coredns/Corefile

Añadimos estas líneas:

.:53 {
forward . 8.8.8.8 {
except vsphere.local
}
log
}
vsphere.local:53 {
file /root/db.vsphere.local vsphere.local
errors
log
}

Diferencias respecto al fichero de origen, le hemos dicho que las entradas que hagan referencias al dominio vsphere.local las obvie y no las reenvíe.

Creamos una zona de escucha al dominio vsphere.local y en el puerto específico 53.

Utilizamos el plugin file, para decirle el fichero a consultar en caso de petición al dominio vsphere.local.

Es importante decirle la ruta, donde se encontrará el fichero de la base de datos una vez esté montado en el contenedor, si os fijáis estamos trabajando sobre nuestro usuario user, pero en el docker ese usuario no existe y trabaja todo con el usuerio root del contenedor.

Una vez hemos realizado los cambios debería quedar así:

Una vez hecho los cambios, ¿Deberíamos reiniciar de alguna forma el servicio para que cargue la nueva zona?

Lo más fácil es reiniciar el contenedor.

docker restart coredns

Siempre que no eliminemos este contenedor, tendrá adjunto el volumen con la información de la configuración del DNS, podemos reiniciarlo, pararlo, y ejecutar infinididad de acciones. Si el contenedor se elimina, hay que volver a añadir el volumen.

docker inspect coredns

Comprobamos si nos resuelve correctamente el nombre del esxi101 por ejemplo:

dig  @localhost esxi101.vpshere.local

Así tenemos otra forma más en la que sacarle partido a docker, CoreDNS y por supuesto está funcionando en Raspberry Pi.