Configuración de PowerDNS con Poweradmin en un VPS: creación de su propio servidor DNS autoritativo
TL;DR
En esta guía detallada, configuraremos paso a paso nuestro propio servidor DNS autoritativo, utilizando PowerDNS Authoritative Server y la interfaz web Poweradmin, sobre el sistema operativo Ubuntu Server 24.04 LTS. Aprenderá cómo preparar un VPS, instalar y configurar todos los componentes necesarios, incluyendo la base de datos MariaDB, el servidor web Nginx y PHP-FPM, así como garantizar la seguridad y la redundancia de su infraestructura DNS.
- Instalación y configuración de PowerDNS Authoritative Server para la gestión de zonas de dominio.
- Despliegue de Poweradmin – una interfaz web conveniente para la gestión de registros DNS.
- Uso de MariaDB como backend para almacenar datos DNS.
- Protección del servidor con el firewall UFW, Fail2ban y certificados TLS de Let's Encrypt.
- Recomendaciones para elegir la configuración óptima del VPS, copias de seguridad y solución de problemas.
¿Qué configuramos y por qué?
Hoy nos dedicaremos al despliegue de nuestro propio servidor DNS autoritativo. Un servidor DNS autoritativo es un servidor que almacena los registros oficiales para uno o varios nombres de dominio (por ejemplo, example.com) y responde a las consultas sobre ellos. A diferencia de los servidores DNS recursivos (que simplemente reenvían consultas y almacenan en caché las respuestas), un servidor autoritativo es la "fuente de la verdad" para sus dominios.
Como base, utilizaremos PowerDNS Authoritative Server – un servidor DNS de alto rendimiento y flexible que soporta varios backends para el almacenamiento de datos, incluyendo bases de datos. Para una gestión conveniente de las zonas de dominio y los registros, instalaremos Poweradmin – una interfaz web que simplifica significativamente el trabajo con PowerDNS a través del navegador, eliminando la necesidad de editar manualmente los archivos de zona.
Al final, obtendrá un servidor DNS completamente funcional, tolerante a fallos y fácil de gestionar, donde podrá alojar zonas de dominio para sus sitios web, servicios o proyectos. Esto le permite controlar completamente sus registros DNS, realizar cambios rápidamente, integrar DNS con otros sistemas y no depender de proveedores de DNS de terceros, lo cual es críticamente importante para muchos desarrolladores, startups y entusiastas.
Existen alternativas, como los servicios DNS en la nube (Cloudflare DNS, AWS Route 53, Google Cloud DNS) o los servidores DNS integrados en el panel de control del hosting. Los servicios en la nube ofrecen alta disponibilidad y rendimiento, pero a menudo tienen limitaciones de personalización y pueden ser costosos para un gran número de zonas o solicitudes específicas. El alojamiento propio de DNS en un VPS le brinda control total sobre la configuración, los datos y la seguridad, y también puede ser más económico a largo plazo para proyectos con requisitos específicos de privacidad o integración. Al elegir una solución autoalojada, obtiene flexibilidad y soberanía sobre su infraestructura DNS.
¿Qué configuración de VPS se necesita para esta tarea?
Para un servidor DNS autoritativo, especialmente si no atiende un número muy grande de zonas (hasta varios cientos) y no está sujeto a ataques DDoS, los requisitos de recursos son bastante modestos. PowerDNS es muy eficiente.
Requisitos mínimos:
- CPU: 1 núcleo (arquitectura x64). Los procesadores modernos con una frecuencia de reloj de 2 GHz o más son más que suficientes.
- RAM: 1 GB. Esto será suficiente para el sistema operativo, PowerDNS, MariaDB, Nginx y PHP-FPM. Si se planean muchas zonas (miles) o una carga alta, se pueden considerar 2 GB.
- Disco: 20-30 GB SSD. PowerDNS y la base de datos ocupan poco espacio. El volumen principal es necesario para el sistema operativo, los registros y las copias de seguridad. El SSD es crítico para el rápido funcionamiento de la base de datos.
- Red: 100 Mbps o 1 Gbps. Para las consultas DNS, el ancho de banda no es un cuello de botella, ya que las consultas son muy ligeras. Lo principal es la estabilidad de la conexión y la baja latencia.
Plan de VPS específico para la tarea:
Para la mayoría de los escenarios, incluyendo desarrolladores, fundadores individuales y equipos pequeños, un VPS con las siguientes características será óptimo:
- 2 vCPU
- 2 GB RAM
- 50 GB SSD
- Interfaz de red de 1 Gbps
- Dirección IPv4 dedicada (mínimo 2, si desea ejecutar dos servidores NS en diferentes IP)
Esta configuración garantizará un trabajo cómodo, suficiente margen de rendimiento y espacio para el crecimiento. Puede considerar un VPS con las características indicadas de un proveedor confiable.
Cuándo se necesita un dedicado, no un VPS:
Un servidor dedicado puede ser necesario en los siguientes casos:
- Carga muy alta: Si planea atender cientos de miles o millones de consultas DNS por segundo, o gestionar decenas de miles de zonas de dominio.
- Aplicaciones críticas: Para infraestructuras donde cualquier retraso o problema potencial con los "vecinos" en un VPS es inaceptable.
- Requisitos de seguridad y aislamiento: Aislamiento físico completo de otros clientes.
- Requisitos de hardware específicos: Por ejemplo, para el uso de módulos de seguridad de hardware (HSM) o una gran cantidad de RAM/discos NVMe rápidos.
Para la mayoría de las tareas de un servidor DNS autoritativo, especialmente en la etapa inicial, un VPS es una solución más que suficiente y económicamente ventajosa.
Ubicación: en qué influye
La elección de la ubicación del VPS para un servidor DNS es importante por dos razones:
- Latencia: Cuanto más cerca físicamente esté su servidor DNS de la audiencia principal de sus dominios, menor será la latencia al resolver los nombres de dominio. Esto afecta la velocidad de carga de los sitios web y la capacidad de respuesta de los servicios.
- Jurisdicción: En algunos casos, la ubicación del servidor puede ser importante desde el punto de vista legislativo y legal para el almacenamiento de datos.
Idealmente, se deben tener al menos dos servidores DNS autoritativos (uno primario, uno secundario) en diferentes ubicaciones geográficas y con diferentes proveedores para una máxima tolerancia a fallos.
Preparación del servidor
Antes de proceder con la instalación de PowerDNS, es necesario realizar una preparación básica del servidor. Utilizaremos Ubuntu Server 24.04 LTS, ya que es una versión actual y estable para el año 2026.
1. Conexión por SSH
Conéctese a su nuevo VPS como usuario root o el usuario proporcionado por el proveedor:
ssh root@ВАШ_IP_АДРЕС_VPS
2. Actualización del sistema
Siempre comience actualizando el gestor de paquetes y los paquetes instalados a las últimas versiones:
sudo apt update && sudo apt upgrade -y
Actualiza la lista de paquetes e instala todas las actualizaciones disponibles.
3. Creación de un nuevo usuario con permisos sudo
Trabajar como root no es seguro. Crearemos un nuevo usuario y le daremos permisos sudo:
sudo adduser username # Reemplace 'username' con el nombre de usuario deseado
Añade un nuevo usuario al sistema. Siga las instrucciones para crear la contraseña y la información del usuario.
sudo usermod -aG sudo username
Añade el nuevo usuario al grupo sudo, otorgándole permisos de administrador.
su - username
Cambia al nuevo usuario. Ahora todos los comandos se ejecutarán en su nombre.
4. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, se recomienda usar claves SSH en lugar de contraseñas. Genere las claves en su máquina local (si aún no lo ha hecho):
ssh-keygen -t ed25519 -C "[email protected]"
Copie la clave pública al servidor:
ssh-copy-id username@ВАШ_IP_АДРЕС_VPS
Deshabilite el inicio de sesión con contraseña para root y el nuevo usuario en el archivo /etc/ssh/sshd_config. Busque las líneas:
#PermitRootLogin prohibit-password
#PasswordAuthentication yes
Y cámbielas a:
PermitRootLogin no
PasswordAuthentication no
Reinicie el servicio SSH:
sudo systemctl restart sshd
5. Instalación y configuración del firewall (UFW)
El firewall es necesario para restringir el acceso al servidor. Permitiremos solo los puertos SSH, HTTP, HTTPS y DNS.
sudo apt install ufw -y
Instala Uncomplicated Firewall (UFW).
sudo ufw allow ssh # Permitir SSH (puerto 22 por defecto)
sudo ufw allow http # Permitir HTTP (puerto 80) para Poweradmin y Let's Encrypt
sudo ufw allow https # Permitir HTTPS (puerto 443) para Poweradmin
sudo ufw allow 53/tcp # Permitir tráfico TCP para DNS
sudo ufw allow 53/udp # Permitir tráfico UDP para DNS
sudo ufw enable
Habilita el firewall y aplica las reglas. Confirme la acción introduciendo y.
sudo ufw status verbose
Verifica el estado actual y las reglas de UFW.
6. Instalación de Fail2ban
Fail2ban protege el servidor contra ataques de fuerza bruta, bloqueando las direcciones IP desde las cuales se detectaron intentos fallidos de inicio de sesión.
sudo apt install fail2ban -y
Instala Fail2ban.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Crea un archivo de configuración local que no será sobrescrito durante la actualización del paquete.
Edite /etc/fail2ban/jail.local para reforzar la protección. Por ejemplo, cambie bantime (tiempo de bloqueo) y maxretry (número de intentos).
sudo nano /etc/fail2ban/jail.local
Busque la sección [DEFAULT] y cambie los valores:
[DEFAULT]
bantime = 1h # Bloquear durante 1 hora
findtime = 10m # Escanear los últimos 10 minutos
maxretry = 3 # Bloquear después de 3 intentos fallidos
Reinicie Fail2ban para aplicar los cambios:
sudo systemctl restart fail2ban
Su servidor ahora está preparado y protegido de forma básica.
Instalación de software — paso a paso
Ahora que el servidor está preparado, procederemos con la instalación de los componentes principales: MariaDB, PowerDNS Authoritative Server, Nginx y PHP-FPM, así como Poweradmin.
1. Instalación de MariaDB Server (versión 11.x)
MariaDB se utilizará como backend para PowerDNS y Poweradmin. Ubuntu 24.04 LTS viene con MariaDB Server 11.x.
sudo apt install mariadb-server -y # Instala el servidor MariaDB
Ejecute el script de instalación segura de MariaDB:
sudo mysql_secure_installation # Script para mejorar la seguridad de la instalación de MariaDB
Siga las instrucciones: establezca una contraseña para el usuario root de la base de datos, elimine los usuarios anónimos, prohíba el inicio de sesión remoto de root y elimine la base de datos de prueba.
Cree una base de datos y un usuario para PowerDNS:
sudo mysql -u root -p # Conectarse a MariaDB como root
Ingrese la contraseña que estableció anteriormente. Dentro de la consola de MariaDB, ejecute:
CREATE DATABASE powerdns; # Crea la base de datos 'powerdns'
CREATE USER 'pdns_user'@'localhost' IDENTIFIED BY 'YOUR_STRONG_PASSWORD'; # Crea el usuario 'pdns_user'
GRANT ALL PRIVILEGES ON powerdns. TO 'pdns_user'@'localhost'; # Otorga todos los privilegios sobre la base de datos 'powerdns' al usuario 'pdns_user'
FLUSH PRIVILEGES; # Actualiza los privilegios
EXIT; # Salir de la consola de MariaDB
Reemplace YOUR_STRONG_PASSWORD con una contraseña segura.
2. Instalación de PowerDNS Authoritative Server (versión ~4.8-4.9)
Instalaremos PowerDNS y las dependencias necesarias para el backend de MariaDB.
sudo apt install pdns-server pdns-backend-mysql -y # Instala PowerDNS Authoritative Server y el backend para MySQL/MariaDB
Importe el esquema de la base de datos de PowerDNS. El esquema se encuentra en la documentación de PowerDNS o en el paquete.
sudo mysql -u pdns_user -p powerdns < /usr/share/doc/pdns-backend-mysql/schema.mysql.sql # Importa el esquema de la base de datos de PowerDNS
Ingrese la contraseña para pdns_user.
3. Configuración de PowerDNS
Edite el archivo de configuración principal de PowerDNS /etc/powerdns/pdns.conf.
sudo nano /etc/powerdns/pdns.conf # Abre el archivo de configuración de PowerDNS
Encuentre o agregue las siguientes líneas, asegurándose de que coincidan con su configuración:
# /etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=pdns_user
gmysql-password=YOUR_STRONG_PASSWORD
default-soa-name=ns1.yourdomain.com # Reemplace con el nombre de su servidor NS
allow-recursion=0.0.0.0/0 # O restrinja a IPs específicas si no desea recursión
allow-axfr-ips=127.0.0.1 # Direcciones IP a las que se permite AXFR (transferencia de zona)
setuid=pdns
setgid=pdns
log-level=4
daemon=yes
local-address=SU_DIRECCIÓN_IP_VPS # Dirección IP en la que PowerDNS escuchará las solicitudes
Reemplace YOUR_STRONG_PASSWORD con la contraseña del usuario de la base de datos de PowerDNS, y ns1.yourdomain.com y SU_DIRECCIÓN_IP_VPS con sus propios valores.
sudo systemctl enable pdns # Habilita el inicio automático de PowerDNS al arrancar el sistema
sudo systemctl start pdns # Inicia el servicio PowerDNS
sudo systemctl status pdns # Comprueba el estado de PowerDNS
4. Instalación de Nginx y PHP-FPM (versiones ~1.28 y ~8.3)
Nginx será el servidor web para Poweradmin, y PHP-FPM procesará los scripts PHP.
sudo apt install nginx php8.3-fpm php8.3-mysql php8.3-gd php8.3-curl php8.3-xml php8.3-mbstring php8.3-intl -y # Instala Nginx, PHP-FPM y los módulos PHP necesarios
sudo systemctl enable nginx php8.3-fpm # Habilita el inicio automático de Nginx y PHP-FPM
sudo systemctl start nginx php8.3-fpm # Inicia los servicios Nginx y PHP-FPM
sudo systemctl status nginx php8.3-fpm # Comprueba el estado de los servicios
5. Instalación de Poweradmin (versión ~3.0)
Descargaremos Poweradmin desde el repositorio oficial de GitHub. Para 2026, nos centraremos en la versión estable 3.0.
cd /var/www/ # Cambia al directorio para sitios web
sudo git clone https://github.com/PowerDNS/poweradmin.git html # Clona el repositorio de Poweradmin en la carpeta 'html'
sudo chown -R www-data:www-data /var/www/html # Establece el propietario para los archivos de Poweradmin
sudo find /var/www/html -type d -exec chmod 755 {} \; # Establece permisos para directorios
sudo find /var/www/html -type f -exec chmod 644 {} \; # Establece permisos para archivos
Vaya al directorio de Poweradmin y copie el archivo de configuración:
cd /var/www/html
sudo cp config-dist.inc.php config.inc.php # Copia la plantilla de configuración
Ahora necesita editar config.inc.php. Especifique los datos de conexión a la base de datos que creamos anteriormente:
sudo nano config.inc.php # Abre el archivo de configuración de Poweradmin
Encuentre las secciones relacionadas con la base de datos y modifíquelas:
// config.inc.php (fragmento)
$db_host = 'localhost';
$db_user = 'pdns_user';
$db_pass = 'YOUR_STRONG_PASSWORD'; // Contraseña del usuario de PowerDNS en MariaDB
$db_name = 'powerdns';
$db_type = 'mysql'; // O 'pgsql' para PostgreSQL
Especifique también los dominios para los servidores NS:
// config.inc.php (fragmento)
$primary_ns = 'ns1.yourdomain.com'; // Reemplace con el nombre de su primer NS
$secondary_ns = 'ns2.yourdomain.com'; // Reemplace con el nombre de su segundo NS (si existe)
Cree un usuario administrador de Poweradmin. Vaya en su navegador a http://SU_DIRECCIÓN_IP_VPS/install/. Siga las instrucciones del asistente de instalación: cree un administrador, elimine el directorio install.
sudo rm -rf /var/www/html/install # Elimina el directorio de instalación después de finalizar
Ahora Poweradmin está listo para usar.