Treens: un servidor DNS dinámico y local para homelabs escrito en Rust

Fuentes: Treens: a Local Dynamic DNS Server for Homelabs, Written in Rust

Treens es un servidor DNS dinámico pensado para entornos domésticos y de laboratorio casero que resuelve el problema habitual de depender de direcciones IP asignadas por DHCP. Su autor, un administrador de sistemas aficionado al autohospedaje, lo desarrolló tras quedarse sin empleo y contar con tiempo libre, cansado de que las reservas DHCP de su router Ubiquiti cambiaran sin aviso y de la fricción de mantener máquinas dentro de una red Tailscale solo para acceder a servicios de la LAN.

El diseño se basa en autenticación mediante firma de mensajes con pares de claves ed25519: cada cliente genera su propia clave privada y registra la pública en el servidor, reclamando así su nombre de host de forma autónoma, sin API keys ni configuraciones manuales. Las actualizaciones posteriores se envían con una cabecera de firma que el servidor verifica antes de modificar el registro. Los registros no se sirven hasta que el host queda aprobado, y para evitar intervención humana el servidor permite autoaprobar clientes según la subred desde la que realizan la petición, no según la IP que declaran.

El servidor, escrito en Rust y respaldado por SQLite, expone manejadores TCP y UDP para consultas DNS y un endpoint HTTP básico para registrar hosts y actualizar IPs. En su homelab, el autor lo integra como stub-zone en instancias Unbound bajo el subdominio .lan.gmem.ca. El proyecto se publica en git.gmem.ca/arch/treens y, según su creador, es una de las pocas herramientas propias que recomendaría desplegar a otros usuarios por su carácter genérico. Entre las ideas pendientes figuran incorporar un Merkle Tree para validar el registro de auditoría y explorar clustering mediante gossip para escalar la instancia.