Migrar servidor DNS - BIND 9.3 a Technitium DNS Server (y sobreviviendo al “enemigo de la línea 30”)
Hace unos días me enfrenté a una de esas tareas que uno posterga hasta que la VM del DNS viejo empieza a congelarse cada dos por tres… Sí, ese BIND 9.3.4-P1 de 2007 que seguía en pie como un guerrero cansado.
Tenía muchas zonas configuradas, archivos .db acumulados durante casi dos décadas, y un solo objetivo: migrar todo a algo moderno, mantenible y con interfaz web. La elección fue clara: Technitium DNS Server .
El plan
Recopilar info del DNS actual (BIND 9 en CentOS 5 — sí, ¡aún existía!).
Evaluar opciones: seguir con BIND en Rocky Linux o saltar a Technitium también sobre Rocky.
Instalar Technitium con su script automático (¡un solo comando!).
Migrar las zonas… sin morir en el intento.
Todo iba bien… hasta que llegó el error:
Error! The zone file parser failed to parse 'rdata' field on line #30.


La línea maldita
Technitium es estricto (y con razón): espera archivos de zona en formato RFC 1035 limpio. Pero el viejo BIND era tan permisivo que toleraba cosas como:
tareas IN 1H A 10.1.1.9 <- ¡TTL en el lugar del tipo!¿Ves el problema? El TTL (1H) está en la posición del tipo de registro. BIND lo entendía...; Technitium, no.
Además, el archivo tenía cientos de tabs innecesarios y un bloque SOA roto:
@ IN SOA @ root.localhost. (@ como servidor primario y root.localhost. como contacto… ¡imposible!
La solución (con truco de experiencia)
Lo primero que hice fue corregir el orden de los campos, eliminar los TTL mal ubicados y limpiar los espacios y tabs sobrantes. Incluso reescribí el bloque SOA con valores válidos y validé el archivo con named-checkzone.
Pero… el error persistía.
Fue entonces cuando cambié de estrategia. En vez de insistir con el archivo problemático, importé solo unas pocas zonas limpias. Funcionó. Agregué más… y más… hasta que aislé el bloque que contenía la famosa “línea 30”.
Ahí tomé la decisión más simple: recrear esa zona directamente desde la interfaz web de Technitium.
Nada de scripts, nada de formato legacy. Solo fui a Zones → Create Zone, cargué los registros a mano… y ¡listo!Technitium DNS Server es una herramienta sólida, ligera, con una UI clara y funciones modernas (DoH, DoT, bloqueo de dominios…). Pero el verdadero descubrimiento no fue la tecnología, sino el método.
Cuando enfrentás un error persistente, a veces el problema no está en el archivo… sino en el enfoque.
En vez de pelearte con un formato legacy que ni el autor original entendía, divide, prueba, aísla y decide: ¿vale la pena arreglarlo… o es más rápido empezar de cero?
Y si algún día te topás con “la línea 30”, no la odies. Solo tomá un respaldo, probá con un subconjunto y recordá:
La migración no es un acto heroico… es un proceso iterativo.

Configuración final
Forwarders: Ese tipo de zonas, simplemente como eran pocas, agregue desde le panel Web.
Zonas inversas: todas importadas igual que las directas.
Pruebas: con
digynslookupdesde clientes de prueba antes de apagar el viejo DNS.
Conclusión
Technitium DNS Server es una herramienta sólida, ligera, con una UI clara y funciones modernas (DoH, DoT, bloqueo de dominios…). Pero el verdadero descubrimiento no fue la tecnología, sino el método.
Cuando enfrentás un error persistente, a veces el problema no está en el archivo… sino en el enfoque.
En vez de pelearte con un formato legacy que ni el autor original entendía, divide, prueba, aísla y decide: ¿vale la pena arreglarlo… o es más rápido empezar de cero?
Y si algún día te topás con “la línea 30”, no la odies. Solo tomá un respaldo, probá con un subconjunto y recordá:
Tip rápido: Instalá Technitium en menos de un minuto
Technitium DNS Server se instala en casi cualquier Linux moderno con un solo comando. Solo necesitás curl y permisos de sudo:
curl -sSL https://download.technitium.com/dns/install.sh | sudo bashEl script instala automáticamente:
El runtime de .NET 8 (si no está presente),
El servidor DNS,
Y lo configura como servicio del sistema.
Una vez instalado, abrí tu navegador y accedé a:
http://<tu-servidor>:5380Importante: si tenés un firewall activo (como ufw o firewalld), recordá abrir al menos el puerto 5380/tcp para la consola web y 53/udp-tcp para el servicio DNS.
Y listo. Ya tenés tu propio DNS moderno, con interfaz web, bloqueo de publicidad y soporte para DoH/DoT.
¡Salud y buen blogging!
— Valerka (Montevideo, Uruguay)
¿Te gustó el post? ¿Tenés dudas, comentarios o querés compartir tu experiencia?
Escribime a: valerkasystem@protonmail.com — ¡Siempre leo los mails y trato de responder cuando puedo!