Cómo instalar PowerDNS y PowerAdmin en Rocky Linux
PowerDNS es un software de servidor DNS gratuito y de código abierto. Se puede utilizar como servidor de nombres autoritativo y recursor DNS. PowerDNS está escrito en C++ y es compatible con varios sistemas operativos, como BSD, Linux y macOS.
PowerDNS es un servidor DNS de gama alta y alto rendimiento que admite varios tipos de backends, como BIND, y backends RDBMS, como MySQL/MariaDB, PostgreSQL y la base de datos Oracle.
El servidor PowerDNS es de alto rendimiento que puede manejar decenas de miles de concurrentes, soporta DNSSEC, y proporciona alta scriptabilidad con Lua.
En esta guía, te mostraremos cómo instalar PowerDNS y el PowerDNS-Admin en un sistema Linux Rocky. Ejecutaremos el PowerDNS con el backend de base de datos MySQL/MariaDB y configuraremos el PowerDNS-Admin que se utilizará como herramienta de gestión basada en web para el servidor PowerDNS.
Esta guía también muestra la instalación de paquetes Python para proyectos basados en Flask y la configuración de Nginx y Gunicorn que se utilizarán como proxy inverso para la aplicación web PowerDNS-Admin.
Requisitos previos
Para comenzar con esta guía, necesitarás los siguientes requisitos:
- Un servidor Rocky Linux – Puedes utilizar el Rocky Linux v8 o v9.
- Un usuario no root con privilegios de administrador sudo/root.
Instalación y configuración del servidor de bases de datos MariaDB
El PowerDNS es un software de servidor DNS escalable que admite múltiples backends como PostgreSQL, MariaDB/MySQL y SQLite. Para grandes despliegues, deberías considerar el uso de PostgreSQL o MySQL/MariaDB como backend de la base de datos.
Ahora empezarás instalando y configurando la base de datos MariaDB en el servidor Rocky Linux. Configurarás el PowerDNS con MariaDB como backend de la base de datos.
El repositorio por defecto de Rocky Linux proporciona varias versiones de los paquetes del servidor MariaDB. Ejecuta el siguiente comando dnf para instalar el servidor de base de datos MariaDB.
sudo dnf install mariadb-server
Cuando se te pida confirmación, introduce y para confirmar y pulsa ENTER para continuar.
Una vez instalado el servidor MariaDB, ejecuta el siguiente comando systemctl para iniciar y habilitar el servicio MariaDB.
sudo systemctl start mariadb sudo systemctl enable mariadb
Ahora el servidor MariaDB debería estar funcionando y habilitado. Ejecuta el siguiente comando para verificar el servicio MariaDB y asegúrate de que se está ejecutando.
sudo systemctl status mariadb
Verás el siguiente resultado: el servicio MariaDB se está ejecutando y está habilitado, lo que significa que el servicio se ejecutará automáticamente al arrancar.
Ahora que el servidor MariaDB se está ejecutando, vas a configurar y asegurar la instalación de MariaDB mediante la herramienta de línea de comandos «mysql_secure_installation».
Ejecuta el siguiente comando para empezar a asegurar la instalación del servidor MariaDB.
sudo mysql_secure_installation
A continuación se te pedirán algunas configuraciones del servidor MariaDB.
- ¿Configurar la contraseña raíz de MariaDB? Introduce y para confirmar y escribe la nueva contraseña para tu servidor MariaDB, luego repite la contraseña.
- ¿Desactivar el inicio de sesión remoto para el usuario raíz de MariaDB? Introduce y para confirmar y desactívalo.
- ¿Eliminar el usuario anónimo por defecto de MariaDB? Introduce y para confirmar.
- ¿Eliminar la prueba de base de datos por defecto de MariaDB? Introduce y de nuevo para confirmar.
- Por último, ¿recargar los privilegios de las tablas para aplicar los nuevos cambios? Introduce y para confirmar y MariaDB recargará todos los privilegios y aplicará la nueva configuración.
Ahora que has asegurado la implementación de MariaDB, a continuación configurarás una nueva base de datos MariaDB y un nuevo usuario para el PowerDNS.
Para empezar, ejecuta el siguiente comando mysql para acceder al shell de MariaDB como usuario raíz de MariaDB.
sudo mysql -u root -p
Cuando te pida la contraseña, introduce la contraseña de tu usuario raíz de MariaDB.
A continuación, ejecuta las siguientes consultas para crear una nueva base de datos y un nuevo usuario MariaDB. En este ejemplo, crearás una nueva base de datos pdns con el usuario pdnsadmin y la contraseña es‘password‘.
CREATE DATABASE pdns; GRANT ALL ON pdns.* TO pdnsadmin@localhost IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
Ahora ejecuta las siguientes consultas para verificar los privilegios del usuario MariaDB pdnsadmin@localhost. Esto te mostrará la lista de privilegios del usuario MariaDB pdnsadmin@localhost.
SHOW GRANTS FOR pdnsadmin@localhost;
Verás la siguiente salida – El usuario MariaDB pdnsadmin@localhost tiene privilegios para la base de datos PowerDNS pdns.
Ahora escribe‘quit‘ para salir del intérprete de comandos MariaDB.
Con el servidor MariaDB en funcionamiento, a continuación instalarás y configurarás el servidor PowerDNS con el backend de la base de datos MariaDB.
Instalar y configurar PowerDNS
Una vez instalado el servidor de base de datos MariaDB, ahora instalarás el servidor PowerDNS y configurarás el PowerDNS con el backend de base de datos MariaDB.
Para los sistemas operativos basados en RHEL, los PowerDNS están disponibles en el repositorio EPEL. Por tanto, antes de instalar PowerDNS, debes añadir el repositorio EPEL a tu sistema.
Ejecuta el siguiente comando dnf para instalar el repositorio EPEL.
sudo dnf install epel-release -y
Una vez añadido el repositorio EPEL, ejecuta el siguiente comando dnf para instalar PowerDNS y el backend MySQL de PowerDNS.
sudo dnf install pdns pdns-backend-mysql
Cuando se te pida confirmación, introduce y para confirmar y pulsa ENTER para continuar.
Una vez finalizada la instalación de PowerDNS, ejecuta el siguiente comando mysql para importar el esquema de la base de datos para PowerDNS. El siguiente comando importará el esquema de la base de datos a través del usuario MariaDB pdnsadmin a la base de datos pdns.
sudo mysql -u pdnsadmin -p pdns < /usr/share/doc/pdns/schema.mysql.sql
Introduce la contraseña del usuario pdnsadmin y pulsa ENTER para confirmar y continuar.
A continuación, edita la configuración PowerDNS ‘/etc/pdns/pdns.conf’ utilizando el siguiente comando del editor nano.
sudo nano /etc/pdns/pdns.conf
Descomenta la configuración del backend MariaDB y cambia los detalles nombre de la base de datos, usuario y contraseña. Asegúrate de utilizar los detalles correctos de la base de datos MariaDB que has creado.
################################# # launch Which backends to launch and order to query them in # launch=gmysql gmysql-host=localhost gmysql-user=pdnsadmin gmysql-password=password gmysql-dbname=pdns
A continuación, descomenta la ‘api’ y cambia el valor a‘yes’. A continuación, descomenta la opción ‘api-key‘ y cambia la clave por defecto. La siguiente API PowerDNS se utilizará para gestionar el servidor PowerDNS a través de la aplicación web PowerDNS-Admin.
################################# # api Enable/disable the REST API (including HTTP listener) # api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
api-key=CHANGEME
Guarda el archivo y sal del editor cuando hayas terminado.
Después de configurar el servidor PowerDNS, ejecuta el siguiente comando para verificar la configuración PowerDNS.
pdns_server --daemon=no --guardian=no --loglevel=9
Verás una salida como la siguiente – La conexión de PowerDNS con el backend de la base de datos MariaDB se ha realizado correctamente, ahora puedes pulsar ‘Ctrl+c’ para finalizar el proceso.
Ahora ejecuta el siguiente comando systemctl para iniciar y habilitar el servicio PowerDNS.
sudo systemctl start pdns sudo systemctl enable pdns
Por último, verifica el servicio PowerDNS para asegurarte de que se está ejecutando y habilitando.
sudo systemctl status pdns
En el siguiente resultado, verás que el servicio PowerDNS se está ejecutando y está habilitado, lo que significa que se ejecutará automáticamente en el proceso de arranque.
Llegados a este punto, ya has finalizado la instalación del servidor PowerDNS. A continuación iniciarás la instalación de PowerDNS-Admin, que se utilizará como interfaz web de gestión del servidor PowerDNS.
Instalación de PowerDNS-Admin
Con el PowerDNS en funcionamiento, ahora instalarás y configurarás el PowerDNS-Admin en el servidor Rocky Linux. El PowerDNS-Admin es una aplicación web basada en Python Flask, por lo que la instalación del PowerDNS-Admin es bastante similar a la instalación del framework web Flask.
A continuación se indican algunos pasos que debes seguir para instalar PowerDNS-Admin en Rocky Linux
- Instalar las dependencias de los paquetes
- Configurar el entorno virtual de Python
- Instalación de las dependencias de Python
- Configurar PowerDNS-Admin con la base de datos MariaDB
- Generación del esquema de la base de datos y creación de archivos estáticos
Ahora vamos a comenzar la instalación de PowerDNS-Admin
Instalación de dependencias de paquetes
El primer paso para instalar PowerDNS-Admin es instalar las dependencias de paquetes como Python3, Pip, Node.js y Yarn.
Antes de empezar, ejecuta el siguiente comando dnf para habilitar el repositorio ‘powertools‘ en tu sistema Rocky Linux.
sudo dnf config-manager --set-enabled powertools
Una vez habilitado el repositorio ‘powertools’, instala los paquetes de Python mediante el comando dnf que aparece a continuación.
sudo dnf install python3 python3-devel python3-pip python3-xmlsec gcc git mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel
Cuando te pida confirmación, introduce y y pulsa ENTER para continuar.
A continuación, añade los repositorios Node.js y Yarn a tu sistema mediante el siguiente comando. Los paquetes Node.js y Yarn se utilizarán para generar archivos estáticos para la aplicación web PowerAdmin. Este ejemplo utiliza Node.js v16.
curl -sL https://rpm.nodesource.com/setup_16.x | bash - curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo
Una vez añadidos los repositorios, ejecuta el comando dnf que aparece a continuación para instalar el gestor de paquetes Node.js y Yarn.
sudo dnf install nodejs yarn
Introduce y y pulsa ENTER cuando se te solicite la instalación.
Además, cuando se te pida que confirmes la clave GPG, introduce y y pulsa INTRO.
A continuación, ejecuta el siguiente comando pip3 para actualizar el paquete pip de Python e instalar el virtualenv en tu sistema.
pip3 install -U pip pip3 install -U virtualenv
El pip de Python y el virtualenv se instalarán ahora en el directorio ‘/usr/local/bin‘. Añade el directorio ‘/usr/local/bin‘ a la variable de entorno $PATH del sistema mediante el siguiente comando.
echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc
Aplica ahora los nuevos cambios en el archivo‘~/.bashrc ‘ mediante el comando siguiente. Ahora deberías ejecutar los comandos‘pip’ y‘virtualenv‘.
source ~/.bashrc
Configurar el Entorno Virtual de Python
Con las dependencias de los paquetes instaladas, ahora descargarás el código fuente de PowerDNS-Admin y configurarás el entorno virtual Python para PowerDNS-Admin.
Clona el código fuente de PowerDNS-Admin en el directorio ‘/opt/powerdns-admin’ utilizando el siguiente comando git.
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/powerdns-admin
Una vez descargado el código fuente, mueve el directorio de trabajo a ‘/opt/powerdns-admin‘ y crea un nuevo entorno virtual Python‘flask’.
cd /opt/powerdns-admin virtualenv -p python3 flask
Ahora activa el entorno virtual Python ‘flask‘ mediante el siguiente comando.
source flask/bin/activate
Una vez activado, deberías ver que el prompt se convierte en algo como ‘(flask) [usuario@nombre_de_host /directorio/ruta]#‘.
A partir de aquí, tu entorno de trabajo debería estar siempre en el entorno virtual Python‘flask‘.
Instalar las dependencias de python
Después de configurar el entorno virtual de Python y catearlo, instalarás las dependencias de Python mediante el comando pip.
Ejecuta el siguiente comando pip para instalar las dependencias de Python para el PowerDNS-Admin.
pip install python-dotenv pip install -r requirements.txt
Ahora comenzará la instalación – Esto instalará las dependencias de Python que requiere el PowerDNS-Admin, que está almacenado en el archivo‘requirements.txt‘.
Ahora que tienes instaladas las dependencias de Python, estás listo para instalar y configurar el PowerDNS-Admin con la base de datos MariaDB.
Configurar PowerDNS-Admin con la base de datos MariaDB
Con las dependencias de Python instaladas, ahora configurarás el PowerDNS-Admin con la base de datos MariaDB. Los detalles de la base de datos para el PowerDNS-Admin serán la misma base de datos que el servidor PowerDNS.
Ahora edita el archivo‘/opt/powerdns-admin/powerdnsadmin/default_config.py‘ utilizando el siguiente comando del editor nano.
nano /opt/powerdns-admin/powerdnsadmin/default_config.py
Cambia la configuración como se indica a continuación.
SALT = 'RANDOM-GENERATED' SECRET_KEY = 'RANDOM-GENERATED' BIND_ADDRESS = '0.0.0.0' PORT = 9191 HSTS_ENABLED = False OFFLINE_MODE = False
SQLA_DB_USER = ‘pdnsadmin’
SQLA_DB_PASSWORD = ‘password’
SQLA_DB_HOST = ‘127.0.0.1’
SQLA_DB_NAME = ‘pdns’
SQLALCHEMY_TRACK_MODIFICATIONS = True
Guarda el archivo y sal del editor cuando hayas terminado.
Generar el esquema de la base de datos y crear los archivos estáticos
Después de configurar la base de datos MariaDB en PowerDNS-Admin, migrarás la base de datos y generarás archivos estáticos para PowerDNS-Admin.
En primer lugar, ejecuta el siguiente comando para migrar la base de datos del PowerDNS-Admin. Esto insertará un nuevo esquema de base de datos en la base de datos que se utilizará para el PowerDNS-Admin.
export FLASK_APP=powerdnsadmin/__init__.py flask db upgrade
A continuación se muestra la salida que obtendrás cuando finalice la migración de la base de datos.
Una vez finalizada la migración de la base de datos, ejecuta el siguiente comando para generar archivos estáticos para el PowerDNS-Admin.
yarn install --pure-lockfile flask assets build
A continuación puedes ver la instalación de algunas dependencias de JavaScript mediante el gestor de paquetes yarn y el proceso de generación de archivos estáticos para el PowerDNS-Admin.
Una vez generados los archivos estáticos, ejecuta el siguiente comando para desactivar el entorno virtual Python.
deactivate
Llegados a este punto, habrás finalizado la instalación básica de PowerDNS-Admin con el servidor de base de datos MariaDB. Ahora puedes iniciar la aplicación PowerDNS-Admin a través de la línea de comandos, pero también puedes ejecutar PowerDNS-Admin como servicio systemd.
Configurar el servicio Systemd para PowerDNS-Admin
En este paso, configurarás un nuevo archivo de servicio systemd para la aplicación PowerDNS-Admin. Esto te permitirá gestionar y mantener fácilmente PowerDNS-Admin mediante el comando systemd. Además, esto simplificará la configuración del PowerDNS-Admin.
Para empezar, crea un nuevo archivo de servicio systemd ‘/etc/systemd/system/powerdns-admin.service ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/systemd/system/powerdns-admin.service
Añade la siguiente configuración al archivo. Con esta configuración, ejecutarás la aplicación PowerDNS-Admin a través del gunicorn y se ejecutará como usuario y grupo‘pdns‘. Además, el PowerDNS-Admin se ejecutará con el archivo socket UNIX‘/run/powerdns-admin/socket’.
[Unit] Description=PowerDNS-Admin Requires=powerdns-admin.socket After=network.target [Service] PIDFile=/run/powerdns-admin/pid User=pdns Group=pdns WorkingDirectory=/opt/powerdns-admin ExecStartPre=+mkdir -p /run/powerdns-admin/ ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/ ExecStart=/usr/local/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()' ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, crea un nuevo archivo de socket systemd para el PowerDNS-Admin‘/etc/systemd/system/powerdns-admin.socket ‘ utilizando el editor nano que aparece a continuación.
sudo nano /etc/systemd/system/powerdns-admin.socket
Añade la siguiente configuración al archivo.
[Unit] Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora crea un nuevo archivo de configuración ‘/etc/tmpfiles.d/powerdns-admin.conf ‘ utilizando el comando del editor nano de abajo.
sudo nano /etc/tmpfiles.d/powerdns-admin.conf
Añade la siguiente configuración al archivo.
d /run/powerdns-admin 0755 pdns pdns -
Guarda el archivo y sal del editor cuando hayas terminado.
Después de añadir un nuevo archivo de servicio systemd y la nueva configuración, ejecuta el siguiente comando para recargar el gestor systemd y aplicar los nuevos archivos de servicio en systemd.
sudo systemctl daemon-reload
Ahora inicia y habilita el servicio PowerDNS-Admin mediante el siguiente comando systemctl. El PowerDNS-Admin debería ejecutarse ahora con gunicorn y abrir el archivo socket que está disponible en el directorio‘/run/powerdns-admin/‘.
sudo systemctl start powerdns-admin.socket powerdns-admin.service sudo systemctl enable powerdns-admin.socket powerdns-admin.service
Por último, ejecuta el siguiente comando para verificar el servicio PowerDNS-Admin y asegurarte de que se está ejecutando.
sudo systemctl status powerdns-admin.service powerdns-admin.socket
En la siguiente salida, el servicio powerdns-admin.service y el socket powerdns-admin.socket se están ejecutando y ambos están habilitados. Ambos servicios se ejecutarán automáticamente al iniciar el sistema.
Instalar Nginx como Proxy Inverso para PowerDNS-Admin
En este paso, configurarás Nginx como proxy inverso para el PowerDNS-Admin.
Ejecuta el siguiente comando dnf para instalar Nginx en tu servidor Rocky Linux. Cuando se te solicite, introduce y para confirmar y pulsa ENTER para continuar.
sudo dnf install nginx
A continuación, crea un nuevo bloque de servidor Nginx ‘/etc/nginx/conf.d/pdns.conf‘ utilizando el siguiente editor nano.
sudo nano /etc/nginx/conf.d/pdns.conf
Añade la siguiente configuración al archivo y asegúrate de cambiar el nombre del dominio. Este ejemplo utiliza el dominio ‘pdns.hwdomain.io’ para el PowerDNS-Admin.
server { listen 80; server_name pdns.hwdomain.io; return 301 https://$http_host$request_uri; } server { listen 443 ssl http2; server_name pdns.hwdomain.io; index index.html index.htm; error_log /var/log/nginx/error_powerdnsadmin.log error; access_log off; ssl_certificate /etc/letsencrypt/live/pdns.hwdomain.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/pdns.hwdomain.io/privkey.pem; #ssl_dhparam path_to_your_dhparam.pem; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_session_cache shared:SSL:10m; client_max_body_size 10m; client_body_buffer_size 128k; proxy_redirect off; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; proxy_buffer_size 8k; proxy_set_header Host $http_host; proxy_set_header X-Scheme $scheme; 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; proxy_headers_hash_bucket_size 64; location ~ ^/static/ { include mime.types; root /opt/powerdns-admin/powerdnsadmin; location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; } location ~* ^.+.(css|js)$ { expires 7d; } } location ~ ^/upload/ { include mime.types; root /opt/powerdns-admin; location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; } location ~* ^.+.(css|js)$ { expires 7d; } } location / { proxy_pass http://unix:/run/powerdns-admin/socket; proxy_read_timeout 120; proxy_connect_timeout 120; proxy_redirect http:// $scheme://; } }
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, ejecuta el siguiente comando para verificar la configuración de Nginx y asegurarte de que la configuración es correcta. Deberías ver un mensaje de salida como«sintaxis correcta – la prueba se ha realizado correctamente«.
sudo nginx -t
Ahora ejecuta el siguiente comando systemctl para iniciar y habilitar el servicio Nginx.
sudo systemctl start nginx sudo systemctl enable nginx
Por último, verifica el servicio Nginx mediante el siguiente comando para asegurarte de que el servicio se está ejecutando.
sudo systemctl status nginx
Deberías ver la salida que indica que el servicio nginx se está ejecutando y está habilitado. Con esto, el servicio Nginx se ejecutará automáticamente al iniciarse el sistema.
Acceder a la instalación de PowerDNS-Admin
Abre el navegador web y visita el nombre de dominio de tu instalación de PowerDNS-Admin (es decir: https://pdns.hwdomain.io), y deberías obtener la página de inicio de sesión de PowerDNS-Admin.
Haz clic en el enlace«Crear una cuenta» para configurar un nuevo usuario administrador para PowerDNS-Admin.
Ahora introduce los datos del nuevo usuario, correo electrónico y contraseña. A continuación, haz clic en «Registrar» para confirmar.
Una vez creado el usuario administrador, serás redirigido de nuevo a la página de inicio de sesión de PowerDNS-Admin. Inicia sesión con tu nuevo usuario administrador y contraseña, y luego haz clic en ‘Iniciar sesión‘.
Ahora deberías obtener el panel de control de PowerDNS-Admin. El PowerDNS-Admin se está ejecutando, pero todavía no está conectado al servidor PowerDNS.
Para configurar el servidor PowerDNS con PowerDNS-Admin, debes añadir al PowerDNS-Admin la clave API que has configurado a través del servidor PowerDNS.
Introduce los detalles API del servidor PowerDNS en la sección‘Configuración PDNS‘ y haz clic en‘Actualizar‘.
Cuando PowerDNS-Admin y el servidor PowerDNS estén conectados a través de la API, tu panel de control debería parecerse a la siguiente captura de pantalla.
A partir de aquí, ya puedes añadir fácilmente nuevos registros DNS o modificar los existentes fácilmente a través del panel de PowerDNS-Admin.
Conclusión
En esta guía, has aprendido a instalar un servidor PowerDNS con base de datos MySQL/MariaDB en un servidor Linux Rocky. También aprendiste el despliegue básico de la base de datos MariaDB en Rocky Linux. Por último, aprendiste a instalar y configurar el PowerDNS-Admin que se utilizará como herramienta de gestión basada en web para el servidor PowerDNS. El PowerDNS-Admin se ejecuta con Nginx como proxy inverso y backend de la base de datos MariaDB.
Con el servidor PowerDNS y el PowerDNS-Admin en funcionamiento, ya puedes gestionar tu servidor DNS a través del panel de administración web. Puedes añadir, editar o eliminar registros DNS a través del panel de administración de PowerDNS-Admin.