So installierst du PowerDNS und PowerDNS-Admin unter Ubuntu 22.04
PowerDNS ist ein kostenloser und quelloffener autoritativer Nameserver, der in C++ geschrieben wurde. Er ist plattformübergreifend und kann auf Unix-, Linux- und macOS-Betriebssystemen ausgeführt werden. Er unterstützt verschiedene Datenbanken wie MySQL, MariaDB, PostgreSQL und Oracle, um Zonendateien und Datensätze zu speichern.
PowerDNS Admin ist eine webbasierte Anwendung, mit der du PowerDNS über einen Webbrowser verwalten kannst. Sie ermöglicht es dir, DNS-Zonen über die PowerDNS-Webschnittstelle zu erstellen und zu verwalten. Sie bietet sehr nützliche Funktionen, darunter IPv4- und IPv6-Unterstützung, Bulk-Domain, DNSSec-Unterstützung, AD-, LDAP- und SAML-Authentifizierung und mehr.
In diesem Beitrag erklären wir dir, wie du PowerDNS und PowerDNS admin auf einem Ubuntu 22.04 Server installierst.
Voraussetzungen
- Ein Server, auf dem Ubuntu 22.04 läuft.
- Ein gültiger Domainname, der auf die IP deines Servers zeigt.
- Ein Root-Passwort ist auf dem Server konfiguriert.
MariaDB Server installieren und konfigurieren
Zuerst musst du den MariaDB-Datenbankserver auf deinem System installieren.
apt-get install mariadb-server -y
Sobald MariaDB installiert ist, musst du eine Datenbank und einen Benutzer für PowerDNS erstellen.
Melde dich zunächst mit folgendem Befehl bei MariaDB an:
mysql
Nach der Anmeldung erstellst du eine Datenbank und einen Benutzer mit dem folgenden Befehl:
MariaDB [(none)]> create database pdns; MariaDB [(none)]> grant all on pdns.* to pdnsadmin@localhost identified by 'password';
Als Nächstes löschst du die Berechtigungen und verlässt die MariaDB-Shell mit dem folgenden Befehl:
MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit;
PowerDNS installieren
Bevor du beginnst, musst du den Dienst systemd-resolved in deinem System deaktivieren. Du kannst ihn mit dem folgenden Befehl deaktivieren:
systemctl disable --now systemd-resolved
Als Nächstes entfernst du die Standarddatei resolv.conf und erstellst eine neue Datei:
rm -rf /etc/resolv.conf echo "nameserver 8.8.8.8" > /etc/resolv.conf
Als Nächstes installierst du den PowerDNS-Server mit dem folgenden Befehl:
apt-get install pdns-server pdns-backend-mysql -y
Sobald der PowerDNS installiert ist, kannst du mit dem nächsten Schritt fortfahren.
PowerDNS konfigurieren
Importiere zunächst das PowerDNS-Datenbankschema mit dem folgenden Befehl in die PowerDNS-Datenbank:
mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Als Nächstes musst du eine PowerDNS-Konfigurationsdatei erstellen und die Details der PowerDNS-Datenbankverbindung festlegen:
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Füge die folgenden Zeilen hinzu:
# 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=
Speichere und schließe die Datei und erteile der Datei pdns.local.gmysql.conf die entsprechenden Rechte :
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf chown pdns:pdns /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Als Nächstes beendest du den PowerDNS-Server und testest PowerDNS mit dem folgenden Befehl:
systemctl stop pdns pdns_server --daemon=no --guardian=no --loglevel=9
Wenn alles in Ordnung ist, solltest du die folgende Ausgabe erhalten:
Aug 06 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'. Aug 06 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'. Aug 06 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'. Aug 06 10:43:47 Done launching threads, ready to distribute questions
Starte als Nächstes den PowerDNS-Server mit dem folgenden Befehl:
systemctl start pdns
Du kannst nun den Status des PowerDNS mit folgendem Befehl überprüfen:
systemctl status pdns
Du solltest die folgende Ausgabe sehen:
? pdns.service - PowerDNS Authoritative Server Loaded: loaded (/lib/systemd/system/pdns.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-08-06 10:37:28 UTC; 8s ago Docs: man:pdns_server(1) man:pdns_control(1) https://doc.powerdns.com Main PID: 93982 (pdns_server) Tasks: 8 (limit: 2242) Memory: 43.1M CPU: 166ms CGroup: /system.slice/pdns.service ??93982 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: UDP server bound to [::]:53 Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: TCP server bound to 0.0.0.0:53 Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: TCP server bound to [::]:53 Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: PowerDNS Authoritative Server 4.5.3 (C) 2001-2021 PowerDNS.COM BV Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: Using 64-bits mode. Built using gcc 11.2.0. Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redi> Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: Creating backend connection for TCP Aug 06 10:37:28 ubuntu2204 systemd[1]: Started PowerDNS Authoritative Server. Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: About to create 3 backend threads for UDP Aug 06 10:37:29 ubuntu2204 pdns_server[93982]: Done launching threads, ready to distribute questions
Zu diesem Zeitpunkt ist PowerDNS gestartet und lauscht an Port 53. Du kannst es mit dem folgenden Befehl überprüfen:
ss -alnp4 | grep pdns
Du solltest die folgende Ausgabe erhalten:
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("pdns_server",pid=93982,fd=5)) tcp LISTEN 0 128 0.0.0.0:53 0.0.0.0:* users:(("pdns_server",pid=93982,fd=7))
PowerDNS Admin installieren
In diesem Abschnitt zeigen wir dir, wie du PowerDNS Admin mit Nginx installierst.
Erforderliche Abhängigkeiten installieren
Installiere zunächst alle Abhängigkeiten, die für PowerDNS Admin erforderlich sind, mit dem folgenden Befehl:
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
Sobald alle Abhängigkeiten installiert sind, fügst du das Node.js-Repository mit dem folgenden Befehl hinzu:
curl -sL https://deb.nodesource.com/setup_16.x | bash -
Als Nächstes installierst du Node.js mit dem folgenden Befehl:
apt-get install nodejs -y
Als Nächstes fügst du das Garn-Repository mit folgendem Befehl hinzu:
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
Als Nächstes aktualisierst du das Repository und installierst Yarn mit dem folgenden Befehl:
apt-get update -y apt-get install yarn -y
Jetzt sind alle erforderlichen Abhängigkeiten installiert und du kannst mit dem nächsten Schritt fortfahren.
PowerDNS Admin herunterladen
Als Nächstes lädst du die neueste Version von PowerDNS Admin aus dem Git-Repository in das Nginx-Stammverzeichnis herunter:
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns
Wechsle dann in das heruntergeladene Verzeichnis und erstelle eine virtuelle Python-Umgebung mit dem folgenden Befehl:
cd /var/www/html/pdns/ virtualenv -p python3 flask
Als Nächstes aktivierst du die virtuelle Umgebung und installierst alle Python-Abhängigkeiten mit dem folgenden Befehl:
source ./flask/bin/activate pip install -r requirements.txt
Deaktiviere dann die virtuelle Umgebung mit folgendem Befehl:
deactivate
Datenbankverbindung konfigurieren
Als nächstes musst du die Details der PowerDNS-Datenbankverbindung in der Datei default_config.py definieren:
nano /var/www/html/pdns/powerdnsadmin/default_config.py
Ändere die folgenden Zeilen:
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
Speichere und schließe die Datei, ändere dann das Verzeichnis in pdns und aktiviere die virtuelle Umgebung:
cd /var/www/html/pdns/ source ./flask/bin/activate
Als Nächstes aktualisierst du die Datenbank mit dem folgenden Befehl:
export FLASK_APP=powerdnsadmin/__init__.py flask db upgrade yarn install --pure-lockfile flask assets build
Deaktiviere dann die virtuelle Umgebung mit dem folgenden Befehl:
deactivate
Aktivieren der PowerDNS Admin API
PowerDNS Admin verwendet JSON API, um Statistiken zu lesen und Zoneninhalte, Metadaten und DNSSEC-Schlüsselmaterial zu ändern. Du kannst sie aktivieren, indem du die Datei pdns.conf bearbeitest :
nano /etc/powerdns/pdns.conf
Ändere die folgenden Zeilen:
api=yes api-key=yoursecretekey
Speichere und schließe die Datei und starte dann den PowerDNS-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart pdns
Nginx als Reverse Proxy für PowerDNS Admin konfigurieren
Als Nächstes musst du Nginx als Reverse-Proxy für den PowerDNS-Admin konfigurieren. Dazu erstellst du mit dem folgenden Befehl eine Konfigurationsdatei für den virtuellen Nginx-Host:
nano /etc/nginx/conf.d/pdns-admin.conf
Füge die folgenden Zeilen hinzu:
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; } }
Speichere und schließe die Datei und überprüfe dann Nginx mit dem folgenden Befehl auf Syntaxfehler:
nginx -t
Du solltest die folgende Ausgabe erhalten:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Als Nächstes änderst du die Eigentümerschaft von pdns in www-data:
chown -R www-data:www-data /var/www/html/pdns
Zum Schluss startest du den Nginx-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart nginx
Erstellen einer Systemd-Dienstdatei für PowerDNS Admin
Als Nächstes musst du eine systemd-Dienstdatei erstellen, um den PowerDNS-Dienst zu verwalten.
Erstelle zunächst eine pdns-Dienstdatei mit dem folgenden Befehl:
nano /etc/systemd/system/pdnsadmin.service
Füge die folgenden Zeilen hinzu:
[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
Speichere und schließe die Datei und erstelle dann eine pdnsadmin sockt Datei mit dem folgenden Befehl:
nano /etc/systemd/system/pdnsadmin.socket
Füge die folgenden Zeilen hinzu:
[Unit] Description=PowerDNS-Admin socket [Socket] ListenStream=/run/pdnsadmin/socket [Install] WantedBy=sockets.target
Speichere und schließe die Datei und erstelle dann die benötigten Dateien und Verzeichnisse mit dem folgenden Befehl:
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/
Als Nächstes lädst du den systemd-Daemon mit dem folgenden Befehl neu:
systemctl daemon-reload
Aktiviere als Nächstes den pdnsadmin-Dienst mit folgendem Befehl, damit er beim Neustart des Systems gestartet wird:
systemctl enable --now pdnsadmin.service pdnsadmin.socket
Als Nächstes überprüfst du den Status beider Dienste mit dem folgenden Befehl:
systemctl status pdnsadmin.service pdnsadmin.socket
Du solltest die folgende Ausgabe erhalten:
? pdnsadmin.service - PowerDNS-Admin Loaded: loaded (/etc/systemd/system/pdnsadmin.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-08-06 10:52:44 UTC; 9s ago TriggeredBy: ? pdnsadmin.socket Main PID: 98696 (gunicorn) Tasks: 2 (limit: 2242) Memory: 63.1M CPU: 913ms CGroup: /system.slice/pdnsadmin.service ??98696 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdns> ??98697 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdns> Aug 06 10:52:44 ubuntu2204 systemd[1]: Started PowerDNS-Admin. Aug 06 10:52:44 ubuntu2204 gunicorn[98696]: [2022-08-06 10:52:44 +0000] [98696] [INFO] Starting gunicorn 20.0.4 Aug 06 10:52:44 ubuntu2204 gunicorn[98696]: [2022-08-06 10:52:44 +0000] [98696] [INFO] Listening at: unix:/run/pdnsadmin/socket (98696) Aug 06 10:52:44 ubuntu2204 gunicorn[98696]: [2022-08-06 10:52:44 +0000] [98696] [INFO] Using worker: sync Aug 06 10:52:44 ubuntu2204 gunicorn[98697]: [2022-08-06 10:52:44 +0000] [98697] [INFO] Booting worker with pid: 98697 ? pdnsadmin.socket - PowerDNS-Admin socket Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-08-06 10:52:44 UTC; 9s ago Triggers: ? pdnsadmin.service Listen: /run/pdnsadmin/socket (Stream) CGroup: /system.slice/pdnsadmin.socket Aug 06 10:52:44 ubuntu2204 systemd[1]: Listening on PowerDNS-Admin socket.
Zugriff auf PowerDNS Admin
Du kannst jetzt deinen Webbrowser öffnen und über die URL http://pdnsadmin.example.com auf die PowerDNS Admin-Weboberfläche zugreifen . Du wirst auf die folgende Seite weitergeleitet:
Klicke auf die Schaltfläche Ein Konto erstellen. Du solltest den folgenden Bildschirm sehen:
Gib deine Admin-Benutzerdaten ein und klicke auf die Schaltfläche Registrieren, um ein Konto zu erstellen. Auf dem folgenden Bildschirm solltest du die PowerDNS-Admin-Webschnittstelle sehen:
Gib die PowerDNS API URL an, um dich mit PowerDNS zu verbinden und es zu verwalten. Klicke dann auf die Schaltfläche Aktualisieren, um die Änderungen zu speichern. Du solltest die folgende Seite sehen:
Klicke auf die Schaltfläche Dashboard. Auf dem folgenden Bildschirm solltest du das PowerDNS Admin-Dashboard sehen:
Fazit
Herzlichen Glückwunsch! Du hast PowerDNS und PowerDNS admin mit Nginx auf dem Ubuntu 22.04 Server erfolgreich installiert und konfiguriert. Du kannst jetzt über die PowerDNS-Admin-Weboberfläche Zonen erstellen und Datensätze hinzufügen und sie dann testen. Wenn du noch Fragen hast, kannst du mich gerne fragen