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