PowerDNS es un servidor DNS gratuito y de código abierto, desarrollado en C++, que permite alojar dominios con soporte para DNSSEC. Funciona en la mayoría de los sistemas operativos basados en Unix y puede almacenar sus registros DNS en bases de datos como MariaDB, MySQL, PostgreSQL y SQLite.
Además, incorpora mecanismos de caché de paquetes y consultas para optimizar el rendimiento en la resolución de nombres. Para su gestión, cuenta con una herramienta web llamada PowerDNS-Admin, que ofrece una interfaz intuitiva para administrar el servidor de forma centralizada.
En este tutorial, aprenderás a instalar PowerDNS y PowerDNS-Admin en un servidor en la nube con Ubuntu 24.04.
Requisitos previos
- Un servidor VPS en la nube con Ubuntu 24.04 instalado.
- Acceso al servidor con usuario root o un usuario con privilegios sudo.
Empezamos
Primero, te recomendamos actualizar los paquetes de tu servidor cloud a la última versión. Puedes hacerlo con el siguiente comando:
# apt update && apt upgrade -y
Una vez que tu sistema esté actualizado, reinícialo para aplicar todos los cambios.
Instalar y Configurar MySQL/MariaDB
Primero, deberás instalar la base de datos MySQL/MariaDB en tu servidor. Puedes hacerlo ejecutando el siguiente comando:
# apt install pdns-backend-mysql mariadb-server -y
Una vez que se haya completado la instalación, deberás crear la base de datos y el usuario para PowerDNS.
Primero, inicia sesión en el shell de MariaDB con el siguiente comando:
# mariadb -u root
Proporciona tu contraseña de root cuando te lo solicite, luego crea una base de datos y un usuario para PowerDNS con el siguiente comando:
MariaDB [(none)]>CREATE DATABASE powerdns;
MariaDB [(none)]>GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';
A continuación, elimina los privilegios con el siguiente comando:
MariaDB [(none)]>FLUSH PRIVILEGES; EXIT;
A continuación, utiliza el SQL de pdns para crear las tablas necesarias con el siguiente comando:
# mariadb -u root powerdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Instala PowerDNS
Primero, deberás deshabilitar systemd-resolution para que PowerDNS funcione correctamente.
Puedes hacerlo con el siguiente comando:
# systemctl disable systemd-resolved && systemctl stop systemd-resolved
A continuación, restablece el archivo resolv.conf predeterminado y crea uno nuevo con el siguiente comando:
# echo "nameserver 8.8.8.8" > /etc/resolv.conf
# echo "nameserver 8.8.4.4" >> /etc/resolv.conf
Ahora, instala PowerDNS con el siguiente comando:
# apt-get install pdns-server virtualenv -y
Durante la instalación, se te preguntará si deseas configurar la base de datos PowerDNS con dbconfig-common. Selecciona ‘No’ y presiona ‘Enter’ para continuar con la instalación.
A continuación, deberás configurar PowerDNS para usar MySQL. Puedes hacerlo editando el archivo de configuración de PowerDNS:
# nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Haz los siguientes cambios:
launch+=gmysql gmysql-host=localhost gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=password gmysql-dnssec=yes
Guarda y cierra el archivo. Luego, reinicia el servicio PowerDNS para aplicar los cambios:
# systemctl restart pdns
También puedes verificar el estado de PowerDNS con el siguiente comando:
# systemctl status pdns
Deberías ver el siguiente resultado:
pdns.service - PowerDNS Authoritative Server
Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-09-17 11:44:54 CEST; 4s ago
Docs: man:pdns_server(1)
man:pdns_control(1)
https://doc.powerdns.com
Main PID: 18354 (pdns_server)
Tasks: 8 (limit: 9436)
Memory: 46.5M (peak: 46.9M)
CPU: 97ms
CGroup: /system.slice/pdns.service
└─18354 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no
Sep 17 11:44:54 powerdns pdns_server[18354]: TCP server bound to [::]:53
Sep 17 11:44:54 powerdns pdns_server[18354]: PowerDNS Authoritative Server 4.8.3 (C) 2001-2022 Powe>
Sep 17 11:44:54 powerdns pdns_server[18354]: Using 64-bits mode. Built using gcc 13.2.0.
Sep 17 11:44:54 powerdns pdns_server[18354]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is fr>
Sep 17 11:44:54 powerdns pdns_server[18354]: [bindbackend] Parsing 0 domain(s), will report when do>
Sep 17 11:44:54 powerdns pdns_server[18354]: [bindbackend] Done parsing domains, 0 rejected, 0 new,>
Sep 17 11:44:54 powerdns pdns_server[18354]: Creating backend connection for TCP
Sep 17 11:44:54 powerdns pdns_server[18354]: About to create 3 backend threads for UDP
Sep 17 11:44:54 powerdns systemd[1]: Started pdns.service - PowerDNS Authoritative Server.
Sep 17 11:44:54 powerdns pdns_server[18354]: Done launching threads, ready to distribute questionsInstala PowerDNS-Admin
A continuación, deberás instalar la interfaz web de PowerDNS-Admin en tu servidor. Puedes administrar el dominio, el usuario, la base de datos local, LDAP, el servicio PowerDNS y mucho más con PowerDNS-Admin.
Primero, deberás instalar algunos paquetes necesarios para PowerDNS-Admin en tu servidor. Puedes instalarlos todos con el siguiente comando:
# apt install python3-dev python3-mysqldb python3-certbot-nginx libpq-dev gcc libmysqlclient-dev libsasl2-dev libffi-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev pkg-config -y
A continuación, también deberás instalar el hilo en tu servidor.
First, download and add the GPG key with the following command:
# curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnpkg-archive-keyring.gpg > /dev/null
A continuación, agrega el repositorio de hilos con el siguiente comando:
# echo "deb [signed-by=/usr/share/keyrings/yarnpkg-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
A continuación, actualiza el repositorio e instala el hilo con el siguiente comando:
# apt update && apt install yarn nodejs -y && yarn --version
A continuación, descarga la última versión de PowerDNS-Admin desde el repositorio de Git:
# git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin
A continuación, crea el entorno virtual para PowerDNS-Admin con el siguiente comando:
# cd /opt/web/powerdns-admin && virtualenv -p python3 flask && pip3 install --upgrade setuptools
A continuación, activa el entorno python3 e instala todos los paquetes necesarios con el siguiente comando:
# . ./flask/bin/activate && pip3 install -r requirements.txt
A continuación, deberás editar default_config.py y definir tu base de datos en este archivo:
# nano powerdnsadmin/default_config.py
Añade las siguientes líneas:
SQLA_DB_USER = 'powerdns' SQLA_DB_PASSWORD = 'password' SQLA_DB_HOST = '127.0.0.1' SQLA_DB_NAME = 'powerdns' SQLALCHEMY_TRACK_MODIFICATIONS = True
Guarda y cierra el archivo. Luego, crea el archivo de esquema de base de datos:
# export FLASK_APP=powerdnsadmin/__init__.py && flask db upgrade
A continuación, genera los archivos de activos utilizando el comando yarn como se muestra a continuación:
# yarn install --pure-lockfile && flask assets build
Deberías ver el siguiente resultado:
Building bundle: generated/login.js [2025-09-17 12:18:27,629] [script.py:167] INFO - Building bundle: generated/login.js Building bundle: generated/validation.js [2025-09-17 12:18:27,643] [script.py:167] INFO - Building bundle: generated/validation.js Building bundle: generated/login.css [2025-09-17 12:18:27,645] [script.py:167] INFO - Building bundle: generated/login.css Building bundle: generated/main.js [2025-09-17 12:18:27,695] [script.py:167] INFO - Building bundle: generated/main.js Building bundle: generated/main.css [2025-09-17 12:18:27,768] [script.py:167] INFO - Building bundle: generated/main.css
A continuación, puedes verificar tu PowerDNS-Admin con el siguiente comando:
# ./run.py
Advertencia
No utilices el servidor de desarrollo en un entorno de producción. En su lugar, usa un servidor WSGI de producción.
* Serving Flask app 'powerdnsadmin' * Debug mode: on [2025-09-17 12:18:46,655] [_internal.py:187] INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:9191 * Running on http://161.22.44.39:9191 [2025-09-17 12:18:46,655] [_internal.py:187] INFO - Press CTRL+C to quit [2025-09-17 12:18:46,656] [_internal.py:187] INFO - * Restarting with stat [2025-09-17 12:18:47,354] [_internal.py:187] WARNING - * Debugger is active! [2025-09-17 12:18:47,358] [_internal.py:187] INFO - * Debugger PIN: 863-469-169
Primero, instala NGINX con el siguiente comando:
# apt install nginx -y
A continuación, deberás crear un archivo de host virtual Nginx para PowerDNS-Admin. Puedes hacerlo con el siguiente comando:
# nano /etc/nginx/conf.d/powerdns-admin.conf
Añade las siguientes líneas:
server {
listen *:80;
server_name powerdns.example.com; # Cambialo por tu dominio
access_log /var/log/nginx/powerdns-admin.access.log;
error_log /var/log/nginx/powerdns-admin.error.log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /opt/web/powerdns-admin/powerdnsadmin/static/;
access_log off;
}
}Guarda y cierra el archivo cuando hayas terminado. Luego, reinicia el servicio NGINX para aplicar todos los cambios:
# systemctl restart nginx
A continuación, deberás crear un archivo de servicio de systemd para PowerDNS-Admin. Así podrás iniciar, detener y administrar el servicio PowerDNS-Admin. Puedes hacerlo con el siguiente comando:
# nano /etc/systemd/system/powerdns.service
Añade las siguientes líneas:
[Unit] Description=PowerDNS-Admin After=network.target [Service] User=root Group=root WorkingDirectory=/opt/web/powerdns-admin ExecStart=/opt/web/powerdns-admin/flask/bin/gunicorn -w 4 -b 127.0.0.1:8000 "powerdnsadmin:create_app()" [Install] WantedBy=multi-user.target
Guarda y cierra el archivo cuando hayas terminado. Luego, inicia el servicio PowerDNS-Admin y habilítalo para que se inicie en el arranque con el siguiente comando:
# systemctl daemon-reload && systemctl enable powerdns && systemctl start powerdns
Por último, utiliza certbot para obtener y configurar el certificado SSL para el HTTPS:
# certbot --nginx --redirect -d powerdns.example.com
Ahora ya tienes PowerDNS-Admin instalado y configurado. Puedes abrir tu navegador web y la URL https://powerdns.example.com y serás redirigido a la interfaz web de PowerDNS-Admin. Recuerda crear el usuario y posteriormente, deshabilitar la opción de registro de nuevas cuentas desde el inicio de sesión.
Conclusión
¡Felicidades! Has instalado y configurado con éxito PowerDNS y PowerDNS-Admin en el servidor Ubuntu 24.04. Ya puedes alojar tus registros de dominio y zona DNS mediante la interfaz web de PowerDNS-Admin.
¿Tienes alguna pregunta sobre este tutorial? No dudes en contactar con nosotros. Estaremos encantados de ayudarte 🙂