MySQL DNS · 6 min read · Oct 02, 2025
Ejecutando un Servidor DNS Basado en MySQL: MyDNS
¡Este es un “copiar y pegar” HowTo! La forma más fácil de seguir este tutorial es usar un cliente de línea de comandos/cliente SSH (como PuTTY para Windows) y simplemente copiar y pegar los comandos (excepto donde tengas que proporcionar tu propia información como direcciones IP, nombres de host, contraseñas,…). Esto ayuda a evitar errores tipográficos.
Ejecutando un Servidor DNS Basado en MySQL: MyDNS
Versión 1.0
Autor: Falko Timme
Última edición: 01/02/2006
En este tutorial describiré cómo instalar y configurar MyDNS, un servidor DNS que utiliza una base de datos MySQL como backend en lugar de archivos de configuración como, por ejemplo, Bind o djbdns. Esto tiene la ventaja de que puedes usar fácilmente frontends basados en la web para administrar tus registros DNS. Incluso podrías escribir tu propio frontend, por ejemplo, usando PHP, para interactuar con la base de datos MyDNS. MyDNS simplemente lee los registros de la base de datos, y no tiene que ser reiniciado/recargado cuando los registros DNS cambian o se crean/editan/eliminan zonas. ¡Esta es una gran ventaja!
También mostraré cómo configurar un servidor DNS secundario, pero no usaré transferencias de zona normales para obtener los registros del servidor DNS primario al secundario; en su lugar, usaré replicación de base de datos MySQL. Simplemente replicaré los datos del servidor primario al secundario.
Hay múltiples frontends web para MyDNS. Por supuesto, puedes usar phpMyAdmin para la administración de MyDNS, o puedes usar el frontend web que viene con MyDNS (que no es para principiantes porque carece de las descripciones de campo), o puedes usar MyDNSConfig, una herramienta escrita por mí. Mostraré cómo instalar cada uno de ellos.
En general, MyDNS me deja una muy buena impresión, y creo que el futuro pertenece a los servicios que utilizan una base de datos como backend en lugar de archivos de configuración.
He utilizado un sistema Debian Sarge para esta configuración. Sin embargo, la mayoría de los pasos descritos aquí también deberían aplicarse a otras distribuciones como Fedora, SuSE, Mandriva, etc.
Quiero decir primero que esta no es la única forma de configurar un sistema así. Hay muchas maneras de lograr este objetivo, pero este es el camino que tomo. ¡No emito ninguna garantía de que esto funcione para ti!
1 Instalar MySQL Y MyDNS
Primero, asegúrate de tener una instalación básica de Debian funcionando, como se describe en https://www.howtoforge.com/perfect_setup_debian_sarge y https://www.howtoforge.com/perfect_setup_debian_sarge_p2 (por favor, consulta el respectivo documento de “Configuración Perfecta” en HowtoForge si usas otra distribución).
Luego instala MySQL:
apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin
Se te harán algunas preguntas:
¿Habilitar suExec? <– Sí
¿Qué servidor web te gustaría reconfigurar automáticamente? <– apache, apache2
¿Quieres que reinicie apache ahora? <– Sí
Establece una contraseña root para MySQL así:
mysqladmin -u root password yourrootsqlpassword
La instalación de MyDNS es fácil. Simplemente sigue estos pasos:
cd /tmp/
wget http://mydns.bboy.net/download/mydns-1.0.0.tar.gz
tar xvfz mydns-1.0.0.tar.gz
cd mydns-1.0.0/
./configure
make
make install
Ahora tenemos que crear la base de datos MyDNS (llamada mydns) y un usuario de base de datos MyDNS (también llamado mydns, con mydns_password como contraseña):
mysql -u root -p
Introduce la contraseña:
Ahora, en la consola de MySQL, creamos la base de datos mydns y el usuario mydns:
CREATE DATABASE mydns;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost’ IDENTIFIED BY ‘mydns_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost.localdomain’ IDENTIFIED BY ‘mydns_password’;
FLUSH PRIVILEGES;
quit;
De vuelta en la consola normal, creamos las tablas en la base de datos mydns:
mydns –create-tables | mysql -u root -p mydns
Introduce la contraseña:
Si ves errores como estos:
mydns[14287]: error loading gid for group nobody' mydns[14287]: using gid 65534 from usernobody’
no te preocupes, puedes olvidarte de ellos.
A continuación, agregamos dos columnas más a la tabla soa de la base de datos mydns:
mysql -u root -p
Introduce la contraseña:
ALTER TABLE mydns.soa ADD COLUMN active ENUM(‘Y’,’N’) NOT NULL;
ALTER TABLE mydns.soa ADD INDEX (active);
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;
quit;
Con la columna active, puedes habilitar/deshabilitar zonas más adelante, y la columna xfer puede ser utilizada para transferencias de zona (que no necesitamos porque usaremos replicación de base de datos MySQL para obtener los datos al servidor DNS secundario, pero lo menciono por completitud) (si deseas usar transferencias de zona en lugar de replicación de base de datos, entonces la columna xfer debería contener una o más direcciones IP separadas por comas. Estas direcciones IP estarán permitidas para transferir la zona.).
Ahora creamos el archivo de configuración de MyDNS /etc/mydns.conf ejecutando este comando:
cd /tmp/mydns-1.0.0/
make conf
Luego editamos /etc/mydns.conf para que se vea así:
| ## ## /etc/mydns.conf ## Vie Oct 21 16:36:32 2005 ## Para más información, consulta mydns.conf(5). ## # INFORMACIÓN DE LA BASE DE DATOS db-host = localhost # Nombre de host del servidor SQL db-user = mydns # Nombre de usuario del servidor SQL db-password = mydns_password # Contraseña del servidor SQL database = mydns # Nombre de la base de datos MyDNS # OPCIONES GENERALES user = nobody # Ejecutar con los permisos de este usuario group = nogroup # Ejecutar con los permisos de este grupo listen = * # Escuchar en estas direcciones ('*' para todas) # OPCIONES DE CACHE zone-cache-size = 1024 # Número máximo de elementos almacenados en la caché de zona zone-cache-expire = 60 # Número de segundos después de los cuales las zonas en caché expiran reply-cache-size = 1024 # Número máximo de elementos almacenados en la caché de respuestas reply-cache-expire = 30 # Número de segundos después de los cuales las respuestas en caché expiran # ESOTERICA log = LOG_DAEMON # Instalación para usar para la salida del programa (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Ruta al archivo PID timeout = 120 # Número de segundos después de los cuales las consultas expiran multicpu = 1 # Número de CPUs instalados en tu sistema allow-axfr = no # ¿Debería habilitarse AXFR? allow-tcp = yes # ¿Debería habilitarse TCP? ignore-minimum = no # ¿Ignorar TTL mínimo para la zona? soa-table = soa # Nombre de la tabla que contiene registros SOA rr-table = rr # Nombre de la tabla que contiene datos RR |
Asegúrate de completar los detalles correctos de la base de datos, y también cuida el grupo. En Debian, el grupo de nobody es nogroup, que es diferente del valor predeterminado en /etc/mydns.conf (también nobody), así que asegúrate de cambiar esto. También establece allow-tcp en yes.
Ahora creamos el script de inicio de MyDNS /etc/init.d/mydns:
| #! /bin/sh # # mydns Iniciar el servidor MyDNS # # Autor: Falko Timme <[email protected]>. # set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=mydns DAEMON=/usr/local/sbin/$NAME DESC="Servidor DNS" SCRIPTNAME=/etc/init.d/$NAME # Salir graciosamente si el paquete ha sido eliminado. test -x $DAEMON || exit 0 case "$1" in start) echo -n "Iniciando $DESC: $NAME" $DAEMON --background echo "." ;; stop) echo "Deteniendo $DESC: $NAME." kill -9 `pidof $NAME` &> /dev/null ;; restart) echo "Reiniciando $DESC: $NAME." $0 stop && sleep 1 $0 start ;; *) echo "Uso: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0 |
Luego lo hacemos ejecutable y comenzamos MyDNS:
chmod 755 /etc/init.d/mydns
/etc/init.d/mydns start
Si deseas que MyDNS se inicie automáticamente durante el arranque del sistema, debes crear los enlaces necesarios para el arranque del sistema. En Debian, lo haces así:
update-rc.d mydns defaults 21 22
En Fedora o RedHat, ejecutarías esto:
chkconfig –levels 235 mydns on
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.