Cómo instalar PowerDNS Server y PowerDNS Admin en Ubuntu 20.04

Inicio de sesión de administrador de PowerDNS

PowerDNS es un servidor de nombres autorizado gratuito y de código abierto. Está escrito en C++ y se ejecuta en los sistemas operativos Unix, Linux y macOS. Utiliza MySQL, MariaDB, PostgreSQL y Oracle para almacenar archivos y registros de zona.

PowerDNS Admin es una herramienta basada en web que se utiliza para administrar PowerDNS. Puede crear y administrar zonas DNS utilizando el navegador web. Viene con un rico conjunto de características. Algunos de ellos se enumeran a continuación:

  • Compatibilidad con IPv4 e IPv6
  • Página de estado que muestra información útil
  • Creación/actualización automática de registros PTR inversos
  • Soporte para la creación masiva de dominios
  • Soporte para plantillas de dominio
  • Soporte de seguridad DNS
  • Admite autenticación de usuario de base de datos local, SAML, LDAP y Active Directory

En este tutorial, le mostraremos cómo instalar PowerDNS y PowerDNS admin en el servidor Ubuntu 20.04.

requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de su servidor.
  • Se configura una contraseña de root en el servidor.

Instalar y configurar el servidor MariaDB

Antes de comenzar, deberá instalar el servidor de base de datos MariaDB en su sistema. De forma predeterminada, la última versión de MariaDB no está disponible en el repositorio predeterminado de Ubuntu 20.04. Por lo tanto, deberá agregar el repositorio de MariaDB a su sistema.

Primero, instale los paquetes necesarios con el siguiente comando:

apt-get install software-properties-common gnupg2 -y

Una vez que todos los paquetes estén instalados, agregue la clave de firma de MariaDB con el siguiente comando:

apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'

A continuación, agregue el repositorio de MariaDB con el siguiente comando:

add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.ukfast.co.uk/sites/mariadb/repo/10.5/ubuntu focal main'

A continuación, instale el servidor MariaDB ejecutando el siguiente comando:

apt-get install mariadb-server -y

Una vez instalado, deberá crear una base de datos y un usuario para PowerDNS.

Primero, inicie sesión en MariaDB con el siguiente comando:

mysql

Una vez que inicie sesión, cree una base de datos y un usuario con el siguiente comando:

MariaDB [(none)]> create database pdns;
MariaDB [(none)]> grant all on pdns.* to [email protected] identified by 'password';

A continuación, elimine los privilegios y salga del shell de MariaDB con el siguiente comando:

MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Instalar PowerDNS

Primero, deberá deshabilitar el servicio resuelto por systemd de su sistema. Puedes desactivarlo con el siguiente comando:

systemctl disable --now systemd-resolved

A continuación, elimine el archivo resolv.conf predeterminado y cree un nuevo archivo:

rm -rf /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf

A continuación, instale el servidor PowerDNS con el siguiente comando:

apt-get install pdns-server pdns-backend-mysql -y

Una vez que PowerDNS esté instalado, puede continuar con el siguiente paso.

Configurar PowerDNS

Primero, deberá importar el esquema de la base de datos de PowerDNS a la base de datos de PowerDNS. Puedes importarlo con el siguiente comando:

mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

A continuación, deberá definir los detalles de conexión de la base de datos de PowerDNS. Puede hacerlo editando el archivo pdns.local.gmysql.conf:

nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Cambia las siguientes líneas:

# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql

# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdnsadmin
gmysql-password=password
gmysql-dnssec=yes
# gmysql-socket=

Guarde y cierre el archivo, luego otorgue el permiso adecuado al archivo pdns.local.gmysql.conf:

chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Luego, detenga el servidor PowerDNS y verifique el PowerDNS con el siguiente comando:

systemctl stop pdns
pdns_server --daemon=no --guardian=no --loglevel=9

Si todo está bien, debería obtener el siguiente resultado:

Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Nov 02 10:43:47 Done launching threads, ready to distribute questions

A continuación, inicie el servidor PowerDNS con el siguiente comando:

systemctl start pdns

En este punto, PowerDNS se inicia y escucha en el puerto 53. Puede verificarlo con el siguiente comando:

ss -alnp4 | grep pdns

Debería obtener el siguiente resultado: Anuncio

udp     UNCONN   0        0                0.0.0.0:53             0.0.0.0:*      users:(("pdns_server",pid=33140,fd=5))                                         
tcp     LISTEN   0        128              0.0.0.0:53             0.0.0.0:*      users:(("pdns_server",pid=33140,fd=7))                                         

Instalar el administrador de PowerDNS

En esta sección, le mostraremos cómo instalar el administrador de PowerDNS con Nginx.

Instalar las dependencias requeridas

Primero, instale todas las dependencias requeridas para el administrador de PowerDNS con el siguiente comando:

apt-get install nginx python3-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential libmariadb-dev git python3-flask -y

Una vez que todas las dependencias estén instaladas, agregue el repositorio de Node.js con el siguiente comando:

curl -sL https://deb.nodesource.com/setup_14.x | bash -

A continuación, instale Node.js con el siguiente comando:

apt-get install nodejs -y

A continuación, agregue el repositorio de hilo con el siguiente comando:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

A continuación, actualice el repositorio e instale Yarn con el siguiente comando:

apt-get update -y
apt-get install yarn -y

En este punto, todas las dependencias requeridas están instaladas, ahora puede continuar con el siguiente paso.

Descargar administrador de PowerDNS

A continuación, descargue la última versión del administrador de PowerDNS desde el repositorio de Git al directorio raíz de Nginx:

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns

A continuación, cambie el directorio al directorio descargado y cree un entorno virtual de Python con el siguiente comando:

cd /var/www/html/pdns/
virtualenv -p python3 flask

A continuación, active el entorno virtual e instale todas las dependencias de Python con el siguiente comando:

source ./flask/bin/activate
pip install -r requirements.txt

A continuación, desactívelo desde el entorno Virtual con el siguiente comando:

deactivate

Definir conexión de base de datos

A continuación, deberá definir los detalles de conexión de la base de datos de PowerDNS en el archivo default_config.py:

nano /var/www/html/pdns/powerdnsadmin/default_config.py

Cambia las siguientes líneas:

SALT = 'yoursecretekey'
SECRET_KEY = 'yoursecretekey'
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

Guarde y cierre el archivo, luego cambie el directorio a pdns y active el entorno virtual:

cd /var/www/html/pdns/
source ./flask/bin/activate

A continuación, actualice la base de datos con el siguiente comando:

export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade
yarn install --pure-lockfile
flask assets build

A continuación, desactive el entorno virtual con el siguiente comando:

deactivate

Habilitar la API de administración de PowerDNS

El administrador de PowerDNS usa la API JSON para leer estadísticas y modificar el contenido de la zona, los metadatos y el material clave de DNSSEC. Puede habilitarlo editando el archivo pdns.conf:

nano /etc/powerdns/pdns.conf

Cambia las siguientes líneas:

api=yes
api-key=yoursecretekey

Guarde y cierre el archivo, luego reinicie el servicio PowerDNS para aplicar los cambios:

systemctl restart pdns

Configurar Nginx para el administrador de PowerDNS

A continuación, deberá configurar Nginx para el administrador de PowerDNS. Para hacerlo, cree un archivo de configuración de host virtual Nginx con el siguiente comando:

nano /etc/nginx/conf.d/pdns-admin.conf

Agregue las siguientes líneas:

server {
  listen	*:80;
  server_name               pdnsadmin.example.com;

  index                     index.html index.htm index.php;
  root                      /var/www/html/pdns;
  access_log                /var/log/nginx/pdnsadmin_access.log combined;
  error_log                 /var/log/nginx/pdnsadmin_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 /var/www/html/pdns/powerdnsadmin;

    location ~*  \.(jpg|jpeg|png|gif)$ {
      expires 365d;
    }

    location ~* ^.+.(css|js)$ {
      expires 7d;
    }
  }

  location / {
    proxy_pass            http://unix:/run/pdnsadmin/socket;
    proxy_read_timeout    120;
    proxy_connect_timeout 120;
    proxy_redirect        off;
  }

}

Guarde y cierre el archivo, luego verifique el Nginx para ver si hay algún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener el siguiente resultado:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, cambie la propiedad de los pdns a www-data:

chown -R www-data:www-data /var/www/html/pdns

Finalmente, reinicie el servicio Nginx para aplicar los cambios:

systemctl restart nginx

Crear un archivo de servicio de Systemd para el administrador de PowerDNS

A continuación, deberá crear un archivo de servicio systemd para administrar el servicio PowerDNS.

Primero, cree un archivo de servicio pdns con el siguiente comando:

nano /etc/systemd/system/pdnsadmin.service

Agregue las siguientes líneas:

[Unit]
Description=PowerDNS-Admin
Requires=pdnsadmin.socket
After=network.target

[Service]
PIDFile=/run/pdnsadmin/pid
User=pdns
Group=pdns
WorkingDirectory=/var/www/html/pdns
ExecStart=/var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Guarde y cierre el archivo, luego cree un archivo sockt pdnsadmin con el siguiente comando:

nano /etc/systemd/system/pdnsadmin.socket

Agregue las siguientes líneas:

[Unit]
Description=PowerDNS-Admin socket

[Socket]
ListenStream=/run/pdnsadmin/socket

[Install]
WantedBy=sockets.target

Guarde y cierre el archivo, luego cree los archivos y directorios requeridos con el siguiente comando:

echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf
mkdir /run/pdnsadmin/
chown -R pdns: /run/pdnsadmin/
chown -R pdns: /var/www/html/pdns/powerdnsadmin/

A continuación, vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, habilite el servicio pdnsadmin para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl enable --now pdnsadmin.service pdnsadmin.socket

A continuación, verifique el estado de ambos servicios con el siguiente comando:

systemctl status pdnsadmin.service pdnsadmin.socket

Deberías obtener el siguiente resultado:

? pdnsadmin.service - PowerDNS-Admin
     Loaded: loaded (/etc/systemd/system/pdnsadmin.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 10:54:19 UTC; 5s ago
TriggeredBy: ? pdnsadmin.socket
   Main PID: 38881 (gunicorn)
      Tasks: 2 (limit: 2353)
     Memory: 62.5M
     CGroup: /system.slice/pdnsadmin.service
             ??38881 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>
             ??38898 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>

Nov 02 10:54:19 pdnsadmin.example.com systemd[1]: Started PowerDNS-Admin.
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Starting gunicorn 20.0.4
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Listening at: unix:/run/pdnsadmin/socket (38881)
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Using worker: sync
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38898]: [2020-11-02 10:54:19 +0000] [38898] [INFO] Booting worker with pid: 38898

? pdnsadmin.socket - PowerDNS-Admin socket
     Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 10:54:19 UTC; 5s ago
   Triggers: ? pdnsadmin.service
     Listen: /run/pdnsadmin/socket (Stream)
     CGroup: /system.slice/pdnsadmin.socket

Nov 02 10:54:19 pdnsadmin.example.com systemd[1]: Listening on PowerDNS-Admin socket.

Acceder a la interfaz de usuario web de administración de PowerDNS

Ahora, abra su navegador web y acceda a la interfaz web de administración de PowerDNS usando la URL http://pdnsadmin.ejemplo.com. Será redirigido a la siguiente página:

Inicio de sesión de administrador de PowerDNS

Haga clic en el Crea una cuenta botón. Debería ver la siguiente pantalla:

Crea una cuenta

Proporcione los detalles de su usuario administrador y haga clic en el Registro botón para crear una cuenta. Debería ver la página de inicio de sesión del administrador de PowerDNS en la siguiente pantalla:

Iniciar sesión

Proporcione su nombre de usuario y contraseña de administrador y haga clic en el Registrarse botón. Debería ver la interfaz web de administración de PowerDNS en la siguiente página:

Panel de administración de PowerDNS

Aquí, proporcione la URL de la API de PowerDNS para conectarse a PowerDNS y administrarlo. Luego, haga clic en el Actualizar botón para guardar los cambios. Deberías ver la siguiente página:

API PowerDNS configurada

Haga clic en el Tablero botón. Debería ver el panel de administración de PowerDNS en la siguiente pantalla:

El tablero de su servidor PowerDNS

Conclusión

¡Felicidades! Ha instalado y configurado con éxito PowerDNS y el administrador de PowerDNS en el servidor Ubuntu 20.04. Ahora puede crear zonas y agregar registros a través de la interfaz web de administración de PowerDNS.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *