PowerDNS en Debian 12

Basado en parte de aquí

Prerequisitos

Servidor instalado, con hostname apuntado al ip y clave de root
Posterior instalamos mysql y nos logueamos.

sudo apt-get install mariadb-server -y
sudo mysql

Posteriormente creamos la base de datos, el usuario, su clave, flusheamos permisos y salimos

create database pdns;
grant all on pdns.* to pdnsadmin@localhost identified by 'password';
flush privileges;
exit;

Para instalar desde repositorio oficial y no el de la distribución es mejor porque está siempre actualizado. La información se sacó de acá

Instalar powerdns

Deshabilitamos el systemd-resolved, configuramos dns fijo

sudo systemctl disable --now systemd-resolved > /dev/null 2>&1
sudo rm -rf /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Crear archivo ‘/etc/apt/sources.list.d/pdns.list

#Authoritative
deb [signed-by=/etc/apt/keyrings/auth-48-pub.asc arch=amd64] http://repo.powerdns.com/debian bookworm-auth-48 main
#Recursor
deb [signed-by=/etc/apt/keyrings/rec-49-pub.asc arch=amd64] http://repo.powerdns.com/debian bookworm-rec-49 main

Crear otro archivo ‘/etc/apt/preferences.d/auth-48’

Package: auth*
Pin: origin repo.powerdns.com
Pin-Priority: 600

Crear un archivo más ‘/etc/apt/preferences.d/rec-49’

Package: rec*
Pin: origin repo.powerdns.com
Pin-Priority: 600

Ejecutar lo siguiente

echo -------------Curl--------------
sudo apt install curl -y
echo -------------keyrings Authoritative--------------
sudo install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo tee /etc/apt/keyrings/auth-48-pub.asc &&
echo -------------keyrings Recursor--------------
sudo install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo tee /etc/apt/keyrings/rec-49-pub.asc &&
sudo apt-get update &&
echo -------------pDNS Authoritative y Recursor--------------
sudo apt-get install pdns-server pdns-recursor pdns-backend-mysql -y

Creamos esquema en la base de datos (colocando la clave de arriba) y posteriormente creamos el archivo de configuración

sudo mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
sudo vi /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Dentro del archivo colocamos lo siguiente

# 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=

Aplicamos los permisos correctos al archivo

sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
sudo chown pdns:pdns /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Detenemos el servicio y lo probamos manualmente con los siguientes comandos

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

Deberíamos ver algo asi

Sep 09 22:15:45 gmysql Connection successful. Connected to database ‘pdns’ on ‘127.0.0.1’.
Sep 09 22:15:45 Creating backend connection for TCP
Sep 09 22:15:45 gmysql Connection successful. Connected to database ‘pdns’ on ‘127.0.0.1’.
Sep 09 22:15:45 About to create 3 backend threads for UDP
Sep 09 22:15:45 gmysql Connection successful. Connected to database ‘pdns’ on ‘127.0.0.1’.
Sep 09 22:15:45 gmysql Connection successful. Connected to database ‘pdns’ on ‘127.0.0.1’.
Sep 09 22:15:45 gmysql Connection successful. Connected to database ‘pdns’ on ‘127.0.0.1’.
Sep 09 22:15:45 Done launching threads, ready to distribute questions

Luego, salimos con CONTROL + C y a continuación iniciamos el servicio y chequeamos el estado

sudo systemctl start pdns
sudo systemctl status pdns

Deberíamos verlo active (running) y a su vez enabled

● pdns.service – PowerDNS Authoritative Server
Loaded: loaded (/lib/systemd/system/pdns.service; enabled; preset: enabled)
Active: active (running) since Sat 2023-09-09 22:21:16 -03; 54ms ago

Veríamos el servicio escuchando en el 53 tanto en udp como tcp

ss -alnp4 | grep pdns

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

Instalar pDNS Admin

Instalamos NGINX y otras dependencias (información oficial aquí)

sudo 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 libpq-dev python3.11 pip -y

sudo apt install -y python3-dev git libsasl2-dev libldap2-dev python3-venv libmariadb-dev pkg-config build-essential curl libpq-dev

Instalamos node y también yarn (información oficial aquí y aquí)

echo -------------Node-------------------------
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update && sudo apt-get install nodejs -y

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

Clonamos, creamos un virtual environment, instalamos dependencias y salimos del ambiente

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

sudo chmod 777 -R flask
virtualenv -p python3 flask
source ./flask/bin/activate
pip install -r requirements.txt
deactivate

python3 -m venv ./venv
pip install --upgrade pip
pip install -r requirements.txt
Scroll al inicio