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

  1. Recopilar info del DNS actual (BIND 9 en CentOS 5 — sí, ¡aún existía!).

  2. Evaluar opciones: seguir con BIND en Rocky Linux o saltar a Technitium también sobre Rocky.

  3. Instalar Technitium con su script automático (¡un solo comando!).

  4. 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.

bind-tapado.pngbindTapado2.png


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.

technitium.png


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 dig y nslookup desde 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 bash

El 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>:5380

Importante: 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!