PowerDNS Server
Install PowerDNS + Recursor + Admin + MariaDB + DNSdist
Розгортаємо високопродуктивний безкоштовний авторитарний DNS-сервер для тримання власних зон доменів
All we do from sudo user!!!
sudo su
Install MariaDB
За бажанням можна встановити apache2 та phpMyAdmin для доступу до бази даних через веб панель керування
Install PowerDNS server
В репозиторіях є зазвичай, застаріла версія, тому заглянемо на сайт https://repo.powerdns.com/
Там знаходимо стабільну версію програми і застосовуємо зміни в списку репозиторіїв
sh -c 'echo "deb [arch=amd64] http://repo.powerdns.com/debian bullseye-auth-46 main" > /etc/apt/sources.list.d/pdns.list'
tee /etc/apt/preferences.d/pdns<<EOF Package: pdns-* Pin: origin repo.powerdns.com Pin-Priority: 600 EOF
curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/powerdns.gpg --import chmod 644 /etc/apt/trusted.gpg.d/*
apt-get update apt-get install -y pdns-server pdns-backend-mysql cp -r /etc/powerdns/ /etc/powerdns.orig/
tee /etc/powerdns/pdns.conf<<EOF setgid=pdns setuid=pdns local-address=127.0.0.1 local-port=53 include-dir=/etc/powerdns/pdns.d launch= EOF
prepeare mysql db
mysql -u root -p
CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'strongpassword'; FLUSH PRIVILEGES; quit;
Якщо це нове встановлення, то створимо структуру бази даних
mysql powerdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Інакше, відновимо структуру з вашої резервної копії
mysql powerdns < /tmp/backup_powerdns.sql
Після відновлення з резервної копії, перевіряємо наявність змін структури
ls /usr/share/pdns-backend-mysql/schema/ | grep -E -i '^[0-9]' "3.4.0_to_4.1.0_schema.mysql.sql 4.1.0_to_4.2.0_schema.mysql.sql 4.2.0_to_4.3.0_schema.mysql.sql"
Якщо вони є, застосовуємо всі почерзі, починаючи з версії з резервної копії, наприклад з 4.1.0
mysql powerdns < /usr/share/pdns-backend-mysql/schema/4.1.0_to_4.2.0_schema.mysql.sql mysql powerdns < /usr/share/pdns-backend-mysql/schema/4.2.0_to_4.3.0_schema.mysql.sql
Підключимо нашу базу даних
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
# MySQL Configuration # Launch gmysql backend launch+=gmysql # gmysql parameters gmysql-host=127.0.0.1 gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=strongpassword gmysql-dnssec=yes # gmysql-socket=
systemctl restart pdns netstat -tap | grep pdns
dig mydomain.local @127.0.0.1 dig @127.0.0.1
Панель адміністрування PowerDNS-Admin
https://computingforgeeks.com/install-powerdns-and-powerdns-admin-on-debian/
https://github.com/PowerDNS-Admin/PowerDNS-Admin/wiki/Running-PowerDNS-Admin-on-Ubuntu-or-Debian
apt install python3-dev python3-venv git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential curl jq
curl -sL https://deb.nodesource.com/setup_18.x | bash - apt-get update && apt install -y nodejs
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list apt-get update && apt-get install yarn
mysql
CREATE DATABASE poweradmin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON poweradmin.* TO 'pdnsadmin'@'%' IDENTIFIED BY 'p4ssw0rd'; FLUSH PRIVILEGES; quit
git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin cd /opt/web/powerdns-admin python3 -mvenv ./venv source ./venv/bin/activate pip install --upgrade pip pip install -r requirements.txt
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py nano /opt/web/powerdns-admin/configs/production.py
import os import urllib.parse basedir = os.path.abspath(os.path.dirname(__file__)) ### BASIC APP CONFIG SALT = '$2b$12$yLUMTIfl21FKJQpTkRQXCu' SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2' BIND_ADDRESS = '0.0.0.0' PORT = 9191 OFFLINE_MODE = False ### DATABASE CONFIG SQLA_DB_USER = 'pdnsadmin' SQLA_DB_PASSWORD = 'p4ssw0rd' SQLA_DB_HOST = '127.0.0.1' SQLA_DB_NAME = 'poweradmin' SQLALCHEMY_TRACK_MODIFICATIONS = True ### DATABASE - MySQL SQLALCHEMY_DATABASE_URI = 'mysql://{}:{}@{}/{}'.format( urllib.parse.quote_plus(SQLA_DB_USER), urllib.parse.quote_plus(SQLA_DB_PASSWORD), SQLA_DB_HOST, SQLA_DB_NAME ) ### DATABASE - SQLite #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')
nft add rule ip filter input ct state new tcp dport 9191 counter accept comment "PDNS_ADMIN"
export FLASK_CONF=../configs/production.py export FLASK_APP=powerdnsadmin/__init__.py flask db upgrade yarn install --pure-lockfile flask assets build
./run.py
tee /etc/systemd/system/powerdns-admin.service<<EOF [Unit] Description=PowerDNS-Admin Wants=network.target After=network.target mysqld.service mariadb.service [Service] PIDFile=/run/powerdns-admin/pid User=www-data Group=root WorkingDirectory=/opt/web/powerdns-admin ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --pid /run/powerdns-admin/pid --workers 2 --bind '0.0.0.0:9191' 'powerdnsadmin:create_app()' ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID PrivateTmp=true Restart=on-failure RestartSec=10 StartLimitInterval=0 [Install] WantedBy=multi-user.target EOF
mkdir -p /etc/systemd/system/powerdns-admin.service.d/ tee /etc/systemd/system/powerdns-admin.service.d/override.conf<<EOF [Service] Environment="FLASK_CONF=../configs/production.py" EOF
echo 'd /run/powerdns-admin 0755 www-data root -' > /etc/tmpfiles.d/powerdns-admin.conf mkdir -p /run/powerdns-admin chown -R www-data:root /run/powerdns-admin chown -R www-data:root /opt/web/powerdns-admin
systemctl daemon-reload
systemctl enable powerdns-admin
systemctl restart powerdns-admin
systemctl status powerdns-admin
nano /etc/powerdns/pdns.d/api.conf
webserver-port=8081 api=yes api-key=changemechangemechangeme
chown -R pdns:root /etc/powerdns/ systemctl restart pdns
Visit PowerDNS-Admin web interface. http://your-host-ip:9191/
Click “Create an account” button and Register a user. The first user will be in the Administrator role.
Provide PowerDNS API connection information before PowerDNS-Admin can query your PowerDNS data. This is done under Settings > PDNS
Нотатки
https://dnslookup.online/ptr.html
https://github.com/ngoduykhanh/PowerDNS-Admin/wiki
https://fossies.org/linux/pdns-dnsdist/pdns/dnsdistdist/docs/advanced/snmp.rst
pdnsutil create-zone example.com ns1.example.com
/etc/init.d/pdns-recursor restart rec_control wipe-cache /etc/init.d/pdns-recursor status