GNU/Linux >> Tutoriales Linux >  >> Ubuntu

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

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
  • Compatibilidad con plantillas de dominio
  • Compatibilidad con DNSsec
  • 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 el administrador de PowerDNS en el servidor Ubuntu 20.04.

Requisitos

  • 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 requeridos 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. Puede 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. Puede 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

Cambie 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

A continuación, 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ías obtener el siguiente resultado:

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 administrador de PowerDNS

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

Instalar 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 yarn 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

Cambie 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

Cambie las siguientes líneas:

api=yes
api-key=yoursecretekey

Guarde y cierre el archivo y 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 Nginx en busca de cualquier 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

Luego, verifique el estado de ambos servicios usando 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.example.com . Será redirigido a la siguiente página:

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

Proporcione los detalles de su usuario administrador y haga clic en Registrarse 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:

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

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

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

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.


Ubuntu
  1. Cómo instalar y configurar un servidor NFS en Ubuntu 20.04

  2. Cómo instalar y configurar el servidor DHCP en Ubuntu 20.04

  3. Cómo instalar y configurar el servidor Redis en Ubuntu

  4. Cómo instalar y configurar Mariadb 10 en Ubuntu 20.04

  5. Cómo instalar MariaDB en Ubuntu 22.04

Cómo instalar y configurar DHCP en Ubuntu 18.04

Cómo instalar MariaDB en Ubuntu 18.04 / Ubuntu 16.04

Cómo instalar servidor y cliente NFS en Ubuntu

Cómo instalar servidor y cliente NTP en Ubuntu

Cómo instalar UrBackup Server and Client en Ubuntu 20.04

Cómo instalar el servidor y el cliente Telnet en Ubuntu