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.