Instalación DNS · 9 min read · Oct 01, 2025

Cómo instalar PowerDNS y Poweradmin en CentOS 7

PowerDNS (pdns) es un servidor DNS de código abierto escrito en C++ y lanzado bajo la Licencia GPL. Se ha convertido en una buena alternativa para el servidor DNS tradicional Bind, diseñado con mejor rendimiento y bajos requisitos de memoria. PowerDNS proporciona dos productos, el servidor autoritativo y el recursor. El servidor autoritativo de PowerDNS se puede configurar a través de diferentes backend, incluidos los archivos de zona de Bind, RDBMS como MySQL, PostgreSQL, SQLite3 o LDAP.

En este tutorial, te mostraré cómo instalar y configurar un servidor autoritativo de PowerDNS con el servidor de base de datos MariaDB como backend y usando Poweradmin para una fácil gestión de DNS.

Requisitos previos

  • Servidor CentOS 7
  • Privilegios de root

Lo que haremos:

  1. Instalar los repositorios EPEL y Remi
  2. Instalar y configurar MariaDB
  3. Instalar PowerDNS
  4. Instalar Poweradmin
  5. Post-instalación de Poweradmin
  6. Crear zona de ejemplo

Paso 1 - Instalar los repositorios EPEL y Remi

Primero que nada, necesitamos instalar dependencias para la instalación de PowerDNS. Vamos a instalar el repositorio EPEL y el REMI para la instalación de PHP 7.2.

Instala el repositorio EPEL y el repositorio Remi de PHP usando los siguientes comandos.

yum -y install epel-release  
 yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Una vez que estos repositorios se hayan agregado al sistema, instala el paquete ‘yum-utils’.

yum -y install yum-utils

Y habilita el repositorio Remi de PHP 7.2 usando el siguiente comando.

yum-config-manager --enable remi-php72

Paso 2 - Instalar y configurar MariaDB

El servidor autoritativo de PowerDNS tiene soporte para diferentes backend, incluido el servidor de base de datos MySQL/MariaDB. El término ‘backend’ es un almacén de datos que el servidor consultará y que contiene registros DNS (y algunos metadatos). Y para esta guía, utilizaremos MariaDB como backend.

Instala MariaDB usando el siguiente comando yum.

yum -y install mariadb mariadb-server

Una vez que la instalación esté completa, inicia el servicio de MariaDB y agrégalo al inicio del sistema.

systemctl start mariadb  
 systemctl enable mariadb

A continuación, vamos a configurar la contraseña de root para MariaDB usando la herramienta interactiva llamada ‘mysql_secure_installation’.

Ejecuta el siguiente comando.

mysql_secure_installation

Y se te pedirá que configures la contraseña de root del servidor de base de datos. Escribe ‘Y’ para establecer la contraseña de root y escribe una contraseña fuerte.

Set root password? [Y/n] Y  
New password:   
Re-enter new password: 

Para los demás, simplemente escribe ‘Y’ para sí.

Remove anonymous users? [Y/n] Y  
Disallow root login remotely? [Y/n] Y  
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y

Como resultado, has instalado el servidor de base de datos MariaDB y configurado la contraseña de root para la autenticación.

A continuación, crearemos una nueva base de datos y un usuario para la instalación de PowerDNS. Inicia sesión en el shell de MySQL con el usuario root y tu contraseña.

Ejecuta el siguiente comando de MySQL.

mysql -u root -p  
 PASSWORD

Ahora crea una nueva base de datos llamada ‘powerdns’ y otorga todos los privilegios de base de datos a un nuevo usuario llamado ‘pdns’ con la contraseña ‘pdnspassword2018’.

create database powerdns;  
 grant all privileges on powerdns.* to pdns@localhost identified by 'pdnspassword2018';  
 flush privileges;

Instalar base de datos PowerDNS

Después de eso, crea la estructura de tablas para la base de datos PowerDNS ejecutando las siguientes consultas de MySQL.

use powerdns;  
   
 CREATE TABLE domains (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255) NOT NULL,  
   master                VARCHAR(128) DEFAULT NULL,  
   last_check            INT DEFAULT NULL,  
   type                  VARCHAR(6) NOT NULL,  
   notified_serial       INT DEFAULT NULL,  
   account               VARCHAR(40) DEFAULT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX name_index ON domains(name);  
   
   
 CREATE TABLE records (  
   id                    BIGINT AUTO_INCREMENT,  
   domain_id             INT DEFAULT NULL,  
   name                  VARCHAR(255) DEFAULT NULL,  
   type                  VARCHAR(10) DEFAULT NULL,  
   content               VARCHAR(64000) DEFAULT NULL,  
   ttl                   INT DEFAULT NULL,  
   prio                  INT DEFAULT NULL,  
   change_date           INT DEFAULT NULL,  
   disabled              TINYINT(1) DEFAULT 0,  
   ordername             VARCHAR(255) BINARY DEFAULT NULL,  
   auth                  TINYINT(1) DEFAULT 1,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX nametype_index ON records(name,type);  
 CREATE INDEX domain_id ON records(domain_id);  
 CREATE INDEX recordorder ON records (domain_id, ordername);  
   
   
 CREATE TABLE supermasters (  
   ip                    VARCHAR(64) NOT NULL,  
   nameserver            VARCHAR(255) NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   PRIMARY KEY (ip, nameserver)  
 ) Engine=InnoDB;  
   
   
 CREATE TABLE comments (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   name                  VARCHAR(255) NOT NULL,  
   type                  VARCHAR(10) NOT NULL,  
   modified_at           INT NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   comment               VARCHAR(64000) NOT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX comments_domain_id_idx ON comments (domain_id);  
 CREATE INDEX comments_name_type_idx ON comments (name, type);  
 CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);  
   
   
 CREATE TABLE domainmetadata (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   kind                  VARCHAR(32),  
   content               TEXT,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);  
   
   
 CREATE TABLE cryptokeys (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   flags                 INT NOT NULL,  
   active                BOOL,  
   content               TEXT,  
   PRIMARY KEY(id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainidindex ON cryptokeys(domain_id);  
   
   
 CREATE TABLE tsigkeys (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255),  
   algorithm             VARCHAR(50),  
   secret                VARCHAR(255),  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);  
   
 quit;

Como resultado, se ha creado la base de datos MySQL/MariaDB y un usuario para la instalación de PowerDNS.

Paso 3 - Instalar PowerDNS

Instala PowerDNS y todos los paquetes necesarios usando el siguiente comando.

yum -y install pdns pdns-backend-mysql bind-utils

Después de instalar los paquetes de PowerDNS, ve al directorio ‘/etc/pdns/‘ y edita el archivo de configuración ‘pdns.conf’ usando el editor vim.

cd /etc/pdns/  
 vim pdns.conf

Por defecto, PowerDNS está utilizando ‘bind’ como backend. Así que, escribe el comentario ‘#’ al frente de la configuración ‘launch=bind’ y pega la configuración del backend de MySQL como se muestra a continuación.

#launch=bind  
  
launch=gmysql  
gmysql-host=localhost  
gmysql-user=pdns  
gmysql-password=pdnspassword2018  
gmysql-dbname=powerdns

Guarda y cierra.

Instalar PowerDNS

Ahora inicia el servicio pdns y agrégalo al inicio del sistema.

systemctl start pdns  
 systemctl enable pdns

Después de eso, agrega el servicio DNS al firewall.

firebase-cmd --add-service=dns --permanent  
 firebase-cmd --reload

Configurar el Firewall

Y el servicio PowerDNS está en funcionamiento, verifica usando el siguiente comando.

netstat -tap | grep pdns  
 netstat -tulpn | grep 53  
 dig @10.9.9.10

Como resultado, verás que el servicio pdns está en funcionamiento en el puerto 53 y obtendrás la respuesta del servidor PowerDNS.

Verificar estado de PowerDNS

Paso 4 - Instalar Poweradmin

En este paso, vamos a instalar la gestión de DNS para PowerDNS llamada ‘Poweradmin’. Es una aplicación web basada en PHP, por lo que necesitamos instalar PHP y un servidor web para ejecutar la aplicación.

Instala un servidor web httpd y paquetes de PHP usando el siguiente comando.

yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

Después de la instalación, necesitamos instalar paquetes adicionales de PHP Pear. Ejecuta el siguiente comando.

yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli

Una vez que la instalación de httpd y PHP esté completa, inicia el servicio httpd y agrégalo al inicio del sistema.

systemctl start httpd  
 systemctl enable httpd

A continuación, ve al directorio ‘/var/www/html’ y descarga el código fuente de poweradmin.

cd /var/www/html/  
 wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

Extrae el archivo comprimido de poweradmin y renómbralo.

tar xvf poweradmin-2.1.7.tgz  
 mv poweradmin-2.1.7/ poweradmin/

Después de eso, agrega los protocolos HTTP y HTTPS al firewall.

firebase-cmd --add-service={http,https} --permanent  
 firebase-cmd --reload

Y estamos listos para la post-instalación de poweradmin.

Paso 5 - Post-instalación de Poweradmin

Abre tu navegador web y escribe la dirección IP del servidor más la URL de la ruta /poweradmin/install/ para la instalación. La mía es:

http://10.9.9.10/poweradmin/install/

Elige tu idioma preferido y haz clic en el botón ‘Ir al Paso 2’.

Ahora simplemente haz clic en el botón ‘Ir al Paso 3’.

Y se te mostrará la configuración de la base de datos. Escribe los detalles de la base de datos de PowerDNS que hemos creado y la contraseña de administrador para PowerDNS.

Configuración de la base de datos PowerAdmin

Haz clic en el botón ‘Ir al Paso 4’.

Después de eso, necesitarás crear un nuevo usuario con privilegios limitados. Escribe los detalles como los siguientes y cambia el usuario, la contraseña, etc. por los tuyos.

Ahora haz clic en el botón ‘Ir al Paso 5’.

Y se te mostrará la página como a continuación.

Abre nuevamente tu terminal de servidor, inicia sesión con el usuario root y la contraseña. Luego ejecuta las consultas de MySQL como en la página.

mysql -u root -p  
 PASSWORD  
   
 GRANT SELECT, INSERT, UPDATE, DELETE  
 ON powerdns.*  
 TO 'hakase'@'localhost'  
 IDENTIFIED BY 'hakase-labs123';

Comandos Mysql

Ahora vuelve al navegador web y haz clic en el botón ‘Ir al Paso 6’.

Y se te mostrará la página como a continuación.

Paso de instalación 6

El instalador no pudo crear una nueva configuración ‘../inc/config.inc.php’. Así que, necesitamos crearla manualmente.

Vuelve al servidor terminal, ve al directorio ‘/var/www/html/poweradmin’ y crea un nuevo archivo de configuración ‘inc/config.inc.php’.

cd /var/www/html/poweradmin  
 vim inc/config.inc.php

Ahora pega el script PHP de la página en él.

Guarda y cierra, luego vuelve al navegador y haz clic en el botón.

Archivo de configuración de base de datos

Y la instalación está completa.

Opcionalmente:

Si deseas soporte para las URL utilizadas por otros proveedores dinámicos, copia el archivo htaccess.

cd /var/www/html/poweradmin  
 cp install/htaccess.dist .htaccess

Después de eso, DEBES eliminar el directorio ‘install’.

rm -rf /var/www/html/poweradmin/install

Vuelve a tu navegador web y accede al panel de Poweradmin usando la URL a continuación.

http://10.9.9.10/poweradmin/

Inicia sesión con el usuario predeterminado ‘admin’ y la contraseña, haz clic en el botón ‘Ir’.

Y como resultado, se te mostrará el panel de Poweradmin y la instalación ha finalizado.

Paso 6 - Crear zona de muestra y registros DNS

En esta etapa, vamos a probar la instalación de PowerDNS y Poweradmin creando una nueva zona DNS para un dominio llamado ‘emma.io’.

En el panel de Poweradmin, haz clic en el menú ‘Agregar zona maestra’.

Establece el nombre de la zona con el nombre de dominio ‘emaa.io’ y haz clic en el botón ‘Agregar zona’.

Haz clic en el menú ‘Listar zonas’ para obtener todas las zonas disponibles. Y haz clic en el botón ‘editar’ para la zona ‘emma.io’.

Haz clic en el menú ‘Listar zonas’ para obtener todas las zonas disponibles. Y haz clic en el botón ‘editar’ para la zona ‘emma.io’.

Listar zonas

Ahora haz clic en el botón ‘Agregar registro’ y hemos agregado exitosamente la zona DNS y el registro DNS para el dominio llamado ‘emma.io’.

A continuación, vamos a probar el dominio ‘emma.io’ usando un comando de utilidad DNS ‘dig’.

Verifica el servidor de nombres o el registro ns del dominio ‘emma.io’.

dig NS emma.io @10.9.9.10

Verificar zona con comando dig

Verifica el registro A DNS del dominio ‘emma.io’.

dig A emma.io @10.9.9.10

Resultado del comando dig

Y se te mostrará que el dominio ‘emma.io’ tiene un servidor de nombres de nuestro servidor DNS ‘ns1.hakase-labs.io’, y el ‘A’ de ese nombre de dominio coincide con nuestra configuración en la parte superior con la dirección IP del servidor ‘10.9.9.11’.

Finalmente, la instalación y configuración de PowerDNS y Poweradmin en CentOS 7 se ha completado con éxito.

Referencia

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.