PowerDNS es un servidor DNS gratuito y de código abierto escrito en lenguaje C ++ que se puede usar para hostear dominios usando DNSSEC. Se ejecuta en la mayoría de los sistemas operativos basados en Unix y utiliza bases de datos como MariaDB, MySQL, PostgreSQL y SQLite para almacenar sus entradas DNS. PowerDNS utiliza la caché de paquetes y la caché de consultas para almacenar las consultas de back-end. PowerDNS viene con una herramienta basada en web incorporada: PowerDNS-Admin, que se puede utilizar para administrar PowerDNS a través de la interfaz web.
En este tutorial, explicaremos cómo instalar PowerDNS en un servidor en la nube corriendo con Ubuntu 20.04.
Requisitos
Un servidor en la nube VPS que se ejecute en Ubuntu 20.04.
Una configuración de contraseña de root en tu servidor cloud.
Empezamos
Primero, te recomendamos actualizar tu servidor cloud con la última versión. Puedes hacerlo con el siguiente comando:
# apt update && apt upgrade -y
Una vez que tu sistema esté actualizado, reiniciarlo para aplicar todos los cambios.
Instalar y Configurar MySQL
Primero, deberás instalar la base de datos MySQL en tu servidor. Puedes hacerlo ejecutando el siguiente comando:
# apt install pdns-backend-mysql -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 MySQL con el siguiente comando:
# mysql -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:
MySQL [(none)]>CREATE DATABASE powerdns;
MySQL [(none)]>GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';
A continuación, elimina los privilegios con el siguiente comando:
MySQL [(none)]>FLUSH PRIVILEGES; EXIT;
A continuación, utiliza el SQL de pdns para crear las tablas necesarias con el siguiente comando:
# mysql -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, elimina el archivo resolv.conf predeterminado y crea uno nuevo con el siguiente comando:
# rm /etc/resolv.conf
# echo "nameserver 8.8.8.8" > /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 (/lib/systemd/system/pdns.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-06-24 15:29:08 UTC; 5s ago
Docs: man:pdns_server(1)
man:pdns_control(1)
https://doc.powerdns.com
Main PID: 8915 (pdns_server)
Tasks: 8 (limit: 1718)
CGroup: /system.slice/pdns.service
└─8915 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: TCPv6 server bound to [::]:53
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: PowerDNS Authoritative Server 4.1.1 (C) 2001-2017 PowerDNS.COM BV
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: Using 64-bits mode. Built using gcc 7.3.0.
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistr
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: Creating backend connection for TCP
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: [bindbackend] Parsing 0 domain(s), will report when done
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Jun 24 15:29:08 ubuntu2004 systemd[1]: Started PowerDNS Authoritative Server.
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: About to create 3 backend threads for UDP
Jun 24 15:29:08 ubuntu2004 pdns_server[8915]: Done launching threads, ready to distribute questions
Instala 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-get install python3-dev libmysqlclient-dev python-mysqldb 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 | apt-key add -
A continuación, agrega el repositorio de hilos con el siguiente comando:
# echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list
A continuación, actualiza el repositorio e instala el hilo con el siguiente comando:
# apt-get update
# apt-get install yarn -y
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
A continuación, activa el entorno python3 e instala todos los paquetes necesarios con el siguiente comando:
# . ./flask/bin/activate
# pip install -r requirements.txt
A continuación, deberás cambiar el nombre del archivo config_template.py y definir tu base de datos en este archivo:
# mv config_template.py config.py
# nano config.py
Haz los siguientes cambios:
SQLA_DB_USER = 'powerdns'
SQLA_DB_PASSWORD = 'password'
SQLA_DB_HOST = 'localhost'
SQLA_DB_NAME = 'powerdns'
MySQL
SQLALCHEMY_DATABASE_URI = 'mysql://'+SQLA_DB_USER+':'+SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME
SQLite
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')
Guarda y cierra el archivo. Luego, crea el archivo de esquema de base de datos:
export FLASK_APP=app/__init__.py
flask db upgrade
flask db migrate -m "Init DB"
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[2019-06-24 16:27:54,218] [INFO] | Building bundle: generated/login.js
Building bundle: generated/validation.js
[2019-06-24 16:27:54,848] [INFO] | Building bundle: generated/validation.js
Building bundle: generated/login.css
[2019-06-24 16:27:54,859] [INFO] | Building bundle: generated/login.css
Building bundle: generated/main.js
[2019-06-24 16:29:31,467] [INFO] | Building bundle: generated/main.js
Building bundle: generated/main.css
[2019-06-24 16:29:34,217] [INFO] | Building bundle: generated/main.css
A continuación, puedes verificar tu PowerDNS-Admin con el siguiente comando:
# ./run.py
# * Serving Flask app "app" (lazy loading)
# * Environment: production
Advertencia
No utilices el servidor de desarrollo en un entorno de producción. En su lugar, usa un servidor WSGI de producción.
* Debug mode: on
[2019-06-24 16:49:06,065] [INFO] | * Running on http://127.0.0.1:9191/ (Press CTRL+C to quit)
[2019-06-24 16:49:06,068] [INFO] | * Restarting with stat
[2019-06-24 16:49:19,104] [WARNING] | * Debugger is active!
[2019-06-24 16:49:19,107] [INFO] | * Debugger PIN: 193-133-562
Primero, instala Nginx con el siguiente comando:
# apt-get 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 example.com;
index index.html index.htm index.php;
root /opt/web/powerdns-admin;
access_log /var/log/nginx/powerdns.access.log combined;
error_log /var/log/nginx/powerdns.error.log;
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 $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include /etc/nginx/mime.types;
root /opt/web/powerdns-admin/app;
location ~* \.(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/opt/web/powerdns-admin/powerdns-admin.sock;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}
Guarda y cierra el archivo cuando hayas terminado. Luego, reinicia el servicio Nginx para aplicar todos los cambios:
# systemctl restart nginx
Crea el archivo del servicio de Systemd para PowerDNS-Admin
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 --workers 2 --bind unix:/opt/web/powerdns-admin/powerdns-admin.sock app: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 start powerdns
systemctl enable powerdns
Ahora ya tienes PowerDNS-Admin instalado y configurado. Puedes abrir tu navegador web y la URL http://example.com. Serás redirigido a la interfaz web de PowerDNS-Admin.
Conclusión
¡Felicidades! Has instalado y configurado con éxito PowerDNS y PowerDNS-Admin en el servidor Ubuntu 20.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 🙂