Cómo instalar PowerDNS y Poweradmin en CentOS 7

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

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

Requisitos previos

  • Servidor CentOS 7
  • Privilegios de root

Qué vamos a hacer

  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 una zona de muestra

Paso 1 – Instalar los repositorios EPEL y Remi

En primer lugar, necesitamos instalar las 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 para PHP utilizando los siguientes comandos.

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

Una vez añadidos estos repositorios al sistema, instala el paquete ‘yum-utils’.

yum -y install yum-utils

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

yum-config-manager --enable remi-php72

Paso 2 – Instalar y configurar MariaDB

El servidor PowerDNS Autoritativo tiene soporte para un backend diferente, incluyendo el servidor de bases 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 con el siguiente comando yum.

yum -y install mariadb mariadb-server

Una vez completada la instalación, inicia el servicio MariaDB y añádelo al arranque.

systemctl start mariadb
systemctl enable mariadb

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

Ejecuta el siguiente comando.

mysql_secure_installation

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

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

Para las demás, simplemente escribe «Y» para que 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 bases de datos MariaDB y has configurado la contraseña raíz para la autenticación.

A continuación, crearemos una nueva base de datos y un nuevo usuario para la instalación de PowerDNS. Accede al 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 concede todos los privilegios de la 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 la base de datos PowerDNS

A continuación, crea las estructuras de las tablas de la base de datos PowerDNS ejecutando las siguientes consultas 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 utilizando 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’ utilizando el editor vim.

cd /etc/pdns/
vim pdns.conf

Por defecto, PowerDNS utiliza ‘bind’ como backend. Por tanto, escribe el comentario ‘#’ delante de la configuración ‘launch=bind’ y pega la configuración del backend MySQL como se indica 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 añádelo al arranque.

systemctl start pdns
systemctl enable pdns

Después, añade el servicio DNS al cortafuegos.

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

Configurar el cortafuegos

Y el servicio PowerDNS está en funcionamiento, compruébalo con el siguiente comando.

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

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

Comprueba el estado del PowerDNS

Paso 4 – Instalar Poweradmin

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

Instala un servidor web httpd y paquetes PHP con 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 PHP Pear adicionales. Ejecuta el siguiente comando.

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

Una vez completada la instalación de httpd y PHP, inicia el servicio httpd y añádelo al arranque.

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, añade los protocolos HTTP y HTTPS al cortafuegos.

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

Y ya 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 el idioma que prefieras y haz clic en el botón «Ir al paso 2».

Configuración de PowerAdmin 1

Ahora haz clic en el botón «Ir al paso 3».

Configuración de PowerAdmin 2

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

Configuración de la base de datos PowerAdmin

Haz clic en el botón «Ir al Paso 4».

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

Configuración del usuario de PowerAdmin

Ahora haz clic en el botón «Ir al Paso 5».

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

La configuración de PowerAdmin ha finalizado

Abre de nuevo tu servidor de terminales, inicia sesión con el usuario y la contraseña de root. A continuación, 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 que aparece a continuación.

Paso 6 de la instalación

El instalador no ha podido crear una nueva configuración ‘../inc/config.inc.php’. Así que tenemos que crearla manualmente.

Vuelve al servidor de terminales, 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 en él el script PHP de la página.

<?php

$db_host                = 'localhost';
$db_user                = 'hakase';
$db_pass                = 'hakase-labs123';
$db_name                = 'powerdns';
$db_type                = 'mysql';
$db_layer               = 'PDO';

$session_key            = 'xTNxUiXIu320Z@N=uetwJeD2#uApgO)2Ekj+S#oN1Khhoj';

$iface_lang             = 'en_EN';

$dns_hostmaster         = 'server.hakase-labs.io';
$dns_ns1                = 'ns1.hakase-labs.io';
$dns_ns2                = 'ns2.hakase-labs.io';

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

Archivo de configuración de la base de datos

Y la instalación se habrá completado.

Opcionalmente:

Si quieres dar soporte a las URLs utilizadas por otros proveedores de Dynamic, copia el archivo htaccess.

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

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

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

Protección .htaccess

Vuelve a tu navegador web y entra en el panel de control de Poweradmin utilizando la URL que aparece a continuación.

http://10.9.9.10/poweradmin/

Entra con el usuario por defecto ‘admin’ y la contraseña, haz clic en el botón ‘Go’.

Acceso a PowerAdmin

Y como resultado, se te mostrará el panel de control de Poweradmin y la instalación habrá terminado.

Panel de control de PowerAdmin

Paso 6 – Crear la zona de muestra y los registros DNS

En este paso, 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 control de Poweradmin, haz clic en el menú «Añadir zona maestra».

Añadir zona maestra

Establece el nombre de la zona con el nombre del dominio «emaa.io» y haz clic en el botón «Añadir zona».

Añadir zona DNS en PowerAdmin

Haz clic en el menú «Lista de zonas» para obtener todas las zonas disponibles. Y haz clic en el botón «Editar» para la zona «emma.io».

Establecer el nombre de la zona

Haz clic en el menú «Lista de zonas» para obtener todas las zonas disponibles. Y haz clic en el botón «editar» de la zona «emma.io».

Lista de zonas

Ahora haz clic en el botón «Añadir registro» y añadiremos con éxito la zona DNS y el registro DNS para el dominio llamado «emma.io».

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

Comprueba el servidor de nombres o el registro ns del dominio «emma.io».

dig NS emma.io @10.9.9.10

Comprueba la zona con el comando dig

Comprueba el registro DNS A del dominio «emma.io».

dig A emma.io @10.9.9.10

resultado del comando dig

Y se mostrará que el dominio ‘emma.io’ tiene un servidor de nombres de nuestro servidor DNS ‘ns1.hakase-labs.io’, y la ‘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

También te podría gustar...