Armadillo: un servidor DNS autohospedado escrito en Gleam para laboratorios domésticos

Fuentes: Armadillo: a self-hosted DNS server written in Gleam for homelab use

Armadillo es un servidor DNS autohospedado pensado para entornos de laboratorio doméstico, implementado en el lenguaje Gleam y ejecutado sobre la máquina virtual BEAM de Erlang. Su propósito es resolver de forma centralizada los nombres de dominio locales de una red: una vez configurado como resolver en el router, todos los dispositivos de la red obtienen automáticamente las direcciones IP asignadas en la zona local.

Cuando llega una consulta, el servidor consulta primero su almacén interno en memoria (ETS). Si existe un registro coincidente, responde de inmediato; en caso contrario, reenvía la consulta a un resolver externo configurable, almacena la respuesta en caché según el TTL y la devuelve al cliente. Los registros locales se definen en un archivo de zona DNS que se carga al arranque y no se vuelve a leer durante la resolución de consultas.

El proyecto se distribuye como imagen de contenedor en ghcr.io/vshakitskiy/armadillo:latest e incluye una interfaz web y API REST para su administración. Las variables de entorno permiten ajustar el puerto DNS (53 por defecto), el resolver upstream (8.8.8.8 de forma predeterminada), el TTL por defecto (300 segundos), el TTL mínimo SOA (3600), el puerto de la API (3000), la clave secreta de sesión y la ruta del archivo de zona (/data/local.zone). Para conservar los registros entre reinicios basta con montar un volumen en /data.

El repositorio se organiza en tres paquetes independientes: server, con el resolutor DNS y la API HTTP; client, la interfaz web basada en Lustre; y shared, con los módulos comunes. Se proporcionan guías de despliegue con Podman Quadlet y Caddy como proxy inverso, y se recomienda usar direnv durante el desarrollo. Los autores desaconsejan usar el TLD .local, reservado para mDNS/Bonjour, y sugieren alternativas como .lan o .internal. También incluyen configuraciones de ejemplo para integrar el servidor con clientes VPN como xray y sing-box.