Úvod
PowerDNS je řešení serveru DNS s otevřeným zdrojovým kódem, které pomáhá řešit jmenné prostory. PowerDNS podporuje vysokou dostupnost, redundanci dat a různé backendy, což z něj činí flexibilní a robustní řešení.
Tato příručka ukazuje, jak nainstalovat PowerDNS a rozhraní PowerDNS Admin na Ubuntu.

Předpoklady
- Přístup k terminálu.
- Přístup k uživateli root.
- Textový editor, jako je nano.
- Webový prohlížeč pro přístup k PowerDNS Admin.
Proč používat PowerDNS?
PowerDNS poskytuje dvě řešení jmenného serveru:
- Autoritativní server , který používá databázi k řešení dotazů na domény.
- Rekurzor , která konzultuje dotazy s dalšími autoritativními servery.
Ostatní jmenné servery kombinují tyto dvě funkce automaticky. PowerDNS je nabízí samostatně a umožňuje bezproblémovou kombinaci těchto dvou řešení pro modulární nastavení.
PowerDNS je navíc open source, funguje stejně dobře pro malé i velké objemy dotazů a nabízí mnoho možností pro backendová řešení.
Instalace PowerDNS na Ubuntu 18.04, 20.04 a 22.04
Chcete-li nainstalovat a nakonfigurovat PowerDNS se serverem MariaDB jako backendovou databází, postupujte podle následujících kroků. Tyto kroky navíc uživatele provedou nastavením webového rozhraní PowerDNS Admin a API.
Krok 1:Instalace a konfigurace serveru MariaDB
Chcete-li nainstalovat a nakonfigurovat MariaDB, postupujte takto:
1. Aktualizujte a upgradujte systémové balíčky:
sudo apt update && sudo apt upgrade
2. Nainstalujte server a klienta MariaDB pomocí:
sudo apt install mariadb-server mariadb-client
Poznámka: Mezi další možné databázové servery patří PostgreSQL, MySQL a další relační databáze.
Než budete pokračovat, počkejte na dokončení instalace.
3. Připojte se k MariaDB pomocí:
sudo mysql

Terminál se připojí k relaci databáze.
4. Vytvořte databázi pro jmenný server PowerDNS:
create database pda;
Poznámka: Pokud používáte jiný název databáze, změňte odpovídajícím způsobem všechny následné příkazy.
5. Udělte všechna oprávnění pda
uživatele a zadejte uživatelské heslo:
grant all privileges on pda.* TO 'pda'@'localhost' identified by 'YOUR_PASSWORD_HERE';
flush privileges;
6. Připojte se k databázi:
use pda;

7. Pomocí následujících dotazů SQL vytvořte tabulky pro pda databáze:
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
8. Potvrďte, že tabulky byly vytvořeny pomocí:
show tables;

Výstup uvádí dostupné tabulky.
9. Ukončete připojení k databázi:
exit;

Příkaz vrátí relaci do terminálu.
Krok 2:Nainstalujte PowerDNS
Chcete-li nainstalovat PowerDNS na Ubuntu, postupujte takto:
1. Přepněte na uživatele root:
sudo su -

Relace terminálu se změní na uživatele root.
Poznámka: Přečtěte si o rozdílu mezi sudo a su.
2. systemd-resolved
služba poskytuje rozlišení názvů místním aplikacím. PowerDNS používá vlastní službu pro rozlišení názvů.
Deaktivujte systemd-resolved
služba s:
systemctl disable --now systemd-resolved

Výstup potvrdí odebrání služby.
3. Smažte konfigurační soubor systémové služby pomocí:
rm -rf /etc/resolv.conf
4. Vytvořte nový soubor resolv.conf soubor:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Připojení jmenného serveru Google zajistí rozlišení DNS.
5. Nainstalujte server PowerDNS a balíčky backend databáze pomocí:
apt-get install pdns-server pdns-backend-mysql -y
Než budete pokračovat, počkejte na dokončení instalace.
Krok 3:Nakonfigurujte PowerDNS
Nakonfigurujte místní soubor PowerDNS pro připojení k databázi:
1. Otevřete konfigurační soubor pro úpravy:
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
2. Přidejte do souboru následující informace:
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pda
gmysql-user=pda
gmysql-password=YOUR_PASSWORD_HERE
gmysql-dnssec=yes
# gmysql-socket=

Pokud používáte jiné, vyměňte název databáze, uživatele a heslo se správnými parametry. Uložte a zavřete soubor.
3. Změňte oprávnění souboru:
chmod 777 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
4. Zastavte pdns služba:
systemctl stop pdns
5. Otestujte připojení k databázi:
pdns_server --daemon=no --guardian=no --loglevel=9

Výstup ukazuje úspěšné připojení. Stiskněte CTRL +C pro ukončení testu.
6. Spusťte službu:
systemctl start pdns
7. Zkontrolujte připojení pomocí příkazu ss:
ss -alnp4 | grep pdns

Ověřte port TCP/UDP 53
je otevřená a v LISTEN
/UCONN
stavu.
Krok 4:Instalace závislostí správce PowerDNS
Správce PowerDNS pomáhá spravovat PowerDNS prostřednictvím webového rozhraní. Chcete-li řídicí panel nainstalovat místně, postupujte takto:
1. Nainstalujte vývojový balíček Pythonu:
apt install python3-dev
2. Nainstalujte závislosti:
apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl
3. Načtěte nastavení Node.js:
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

4. Nainstalujte Node.js pomocí:
apt install -y nodejs
5. Dále nainstalujte správce balíčků Yarn. Získejte veřejný klíč Yarn a přidejte jej do apt :
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -

Yarn pomáhá vytvářet soubory aktiv.
6. Přidejte přízi do seznamu zdrojů:
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
7. Aktualizujte seznam zdrojů apt:
apt update -y
8. Nainstalujte přízi pomocí:
apt install yarn -y
9. Naklonujte úložiště PowerDNS Admin Git do /opt/web/powerdns-admin :
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin

Pokud používáte jiný adresář, vyměňte cílový adresář v příkazu a ve všech následujících vzhledech.
10. Přejděte do klonovaného adresáře Git:
cd /opt/web/powerdns-admin
11. Vytvořte virtuální prostředí Pythonu:
python3 -mvenv ./venv
12. Aktivujte virtuální prostředí pomocí:
source ./venv/bin/activate

13. Upgradujte pip na nejnovější verzi:
pip install --upgrade pip
Správce balíčků pip pomáhá instalovat další požadavky Pythonu.
14. Nainstalujte požadavky ze souboru requirements.txt soubor:
pip install -r requirements.txt

Po instalaci všech požadavků vyžaduje správce PowerDNS před spuštěním další konfiguraci.
Krok 5:Konfigurace a spuštění PowerDNS Admin
Chcete-li nakonfigurovat a spustit PowerDNS Admin v místní instanci, postupujte takto:
1. Pomocí příkazu cp zkopírujte příklad development.py Soubor Python do production.py :
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py
2. Otevřete soubor production.py soubor pro úpravy:
nano /opt/web/powerdns-admin/configs/production.py
3. Upravte následující řádky:
#import urllib.parse
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2'
SQLA_DB_PASSWORD = 'changeme'
4. Odkomentujte import knihovny, zadejte náhodně vygenerovaný tajný klíč a zadejte správné heslo databáze.
import urllib.parse
SECRET_KEY = '\x19\xc7\xd8\xa7$\xb6P*\xc6\xb8\xa1E\x90P\x12\x95'
SQLA_DB_PASSWORD = 'YOUR_PASSWORD_HERE'

Poznámka: Vygenerujte náhodný klíč pomocí Pythonu:
python3 -c "import os; print(os.urandom(16))"
Zkopírujte a vložte výstup do SECRET_KEY
hodnotu.
Uložte a zavřete soubor.
5. Exportujte konfigurační proměnnou produkční aplikace:
export FLASK_CONF=../configs/production.py
6. Exportujte proměnnou aplikace baňky:
export FLASK_APP=powerdnsadmin/__init__.py
7. Upgradujte schéma databáze:
flask db upgrade

8. Nainstalujte závislosti projektu:
yarn install --pure-lockfile

9. Sestavte prostředky aplikace flask:
flask assets build

Počkejte na dokončení sestavení.
10. Spusťte aplikaci pomocí:
./run.py

Nechte aplikaci spuštěnou.
11. Aplikace aktuálně běží na localhost na portu 9191
. Navštivte následující adresu:
http://localhost:9191

Zobrazí se přihlašovací obrazovka pro PowerDNS Admin. V současné době zde nejsou žádní uživatelé a prvním registrovaným uživatelem bude administrátorský účet.
12. V terminálu ukončete virtuální prostředí a odhlaste se od uživatele root pomocí:
exit
Terminál se vrátí do normálního stavu.
Krok 6:Vytvořte službu PowerDNS Admin Service
Nakonfigurujte PowerDNS Admin pro spuštění při spuštění:
1. Vytvořte soubor služby systemd pro PowerDNS Admin:
sudo nano /etc/systemd/system/powerdns-admin.service
2. Přidejte následující obsah:
[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target
[Service]
User=root
Group=root
PIDFile=/run/powerdns-admin/pid
WorkingDirectory=/opt/web/powerdns-admin
ExecStartPre=/bin/bash -c '$$(mkdir -p /run/powerdns-admin/)'
ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

3. Vytvořte soubor jednotky:
sudo systemctl edit --force powerdns-admin.service
4. Připojte následující:
[Service]
Environment="FLASK_CONF=../configs/production.py"

5. Vytvořte soubor soketu:
sudo nano /etc/systemd/system/powerdns-admin.socket
6. Vložte následující informace:
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target

7. Vytvořte soubor prostředí:
sudo nano /etc/tmpfiles.d/powerdns-admin.conf
8. Přidejte následující informace:
d /run/powerdns-admin 0755 pdns pdns -
9. Znovu načtěte démona:
sudo systemctl daemon-reload
10. Spusťte a povolte službu a soket:
sudo systemctl start powerdns-admin.service powerdns-admin.socket
sudo systemctl enable powerdns-admin.service powerdns-admin.socket

11. Zkontrolujte stav pomocí:
sudo systemctl status powerdns-admin.service powerdns-admin.socket

Služby se zobrazují jako spuštěné bez jakýchkoli chyb.
Krok 7:Nainstalujte a nakonfigurujte Nginx
Chcete-li nakonfigurovat PowerDNS Admin pro spuštění na Nginx, postupujte takto:
1. Nainstalujte Nginx pomocí:
sudo apt install nginx -y
2. Upravte konfigurační soubor Nginx:
sudo nano /etc/nginx/conf.d/pdns-admin.conf
3. Přidejte následující informace:
server {
listen *:80;
server_name localhost;
index index.html index.htm index.php;
root /opt/web/powerdns-admin;
access_log /var/log/nginx/powerdns-admin.local.access.log combined;
error_log /var/log/nginx/powerdns-admin.local.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 /opt/web/powerdns-admin/powerdnsadmin;
location ~* \.(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/run/powerdns-admin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}
Pokud používáte jiný název serveru, změňte localhost
na adresu vašeho serveru.
4. Potvrďte, že soubor neobsahuje žádné syntaktické chyby:
nginx -t

5. Změňte vlastnictví powerdns-admin
na www-data
:
sudo chown -R www-data:www-data /opt/web/powerdns-admin
6. Restartujte službu Nginx:
sudo systemctl restart nginx
7. Prostřednictvím prohlížeče přejděte na stránku správce PowerDNS:
localhost
Pokud odkazujete na jinou adresu, použijte adresu uvedenou v konfiguračním souboru Nginx.
Krok 8:Konfigurace PowerDNS API
Chcete-li nakonfigurovat rozhraní PowerDNS API, postupujte takto:
1. Přihlaste se do správce PowerDNS prostřednictvím prohlížeče. Pokud běží poprvé, vytvořte nejprve nového uživatele. První uživatel je automaticky administrátor.
2. Otevřete Klíč API s v levé nabídce.

3. Klikněte na Přidat klíč+ tlačítko.

4. Role výchozí pole Administrátor uživatel. Přidejte volitelný popis klíče.
5. Klikněte na Vytvořit klíč pro vygenerování klíče API.

6. Vyskakovací okno vytiskne klíč. Zkopírujte klíč a stiskněte Potvrdit pokračovat.

7. Přejděte na Hlavní panel stránku.
8. Zadejte doménu a klíč API. Uložte změny.

9. Povolte rozhraní API v konfiguraci PowerDNS. Otevřete konfigurační soubor v terminálu:
nano /etc/powerdns/pdns.conf
10. Odkomentujte a změňte následující řádky:
api=yes
api-key=yoursecretekey
webserver=yes
11. Uložte změny a zavřete nano. Rozhraní API je nastaveno a připraveno k použití.
Závěr
Poté, co jste prošli kroky v této příručce, jste nastavili PowerDNS, webové rozhraní PowerDNS Admin na Nginx, a připojili PowerDNS API.
Dále se dozvíte o různých typech záznamů DNS nebo o doporučených postupech zabezpečení DNS.