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
- Instalar los repositorios EPEL y Remi
- Instalar y configurar MariaDB
- Instalar PowerDNS
- Instalar Poweradmin
- Post-Instalación de Poweradmin
- 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;
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.
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
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.
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».
Ahora haz clic en el botón «Ir al paso 3».
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.
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.
Ahora haz clic en el botón «Ir al Paso 5».
Y se te mostrará la página que aparece a continuación.
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';
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.
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.
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
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’.
Y como resultado, se te mostrará el panel de control de Poweradmin y la instalación habrá terminado.
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».
Establece el nombre de la zona con el nombre del dominio «emaa.io» y haz clic en el botón «Añadir zona».
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».
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».
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 el registro DNS A del dominio «emma.io».
dig A emma.io @10.9.9.10
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.