PowerDNS 5 + Poweradmin 4.4

Instalasi otoritatif PowerDNS (cabang 5.1.x direkomendasikan per Agustus 2026; 4.9.x masih menerima critical updates hingga ~September 2026) dan Poweradmin 4.4.x (PHP 8.2–8.5) di Debian 12/13 & Ubuntu 24.04/26.04. GUI di subdomain ns1.domain.tld, DNS UDP/TCP 53 di IP publik.

5.x
PowerDNS Auth
4.4.x
Poweradmin
gmysql
Backend
API
127.0.0.1:8081
Navigasi Cepat
1

Ringkasan Arsitektur

Poweradmin 4.4.0 menyesuaikan UI dengan versi PowerDNS. Sejak 4.1.0, URL rewriting wajib. Backend bisa Database (gmysql) atau API (dns.backend = api). PowerDNS 4.8 sudah EOL; 4.9 menerima critical-only updates; produksi baru sebaiknya memakai cabang 5.1.x (rilis 5.1.4 tersedia Agustus 2026, termasuk perbaikan security advisory 2026-07/2026-11).

Stack yang dipakai
  • PowerDNS Authoritative 5.1.x + pdns-backend-mysql
  • MariaDB/MySQL (utf8mb4) di localhost
  • API webserver hanya di 127.0.0.1:8081
  • Poweradmin 4.4.x di /var/www/poweradmin
  • Nginx + PHP-FPM + Certbot
Prinsip produksi
  • Port 53 publik (UDP/TCP); GUI hanya 443
  • API tidak diekspos ke internet
  • DNSSEC aktif (gmysql-dnssec=yes)
  • Backup DB + settings sebelum upgrade
  • NS sekunder terpisah (AXFR + TSIG)
Referensi: docs.poweradmin.org, paket pdns-server + pdns-backend-mysql, blog PowerDNS 5.1.x, dan EOL statements resmi.
2

Persyaratan

KomponenSyarat resmiCatatan 2026
PHP8.2+Debian 12=8.2, 13=8.4; Ubuntu 24.04=8.3, 26.04=8.5
Ekstensiintl, gettext, openssl, filter, tokenizer, xml, pdo + pdo_mysqlldap opsional
PowerDNSAuth 4.0+ termasuk 5.xProduksi: 5.1.x (5.1.4+); API mode sejak 4.7+
DBMySQL 5.7/8, MariaDB, PG, SQLiteutf8mb4; MariaDB 10.11+ / MySQL 8 disarankan
Nginxtry_files ke index.phpWajib sejak Poweradmin 4.1.0
RAM / CPU1 GB / 1 vCPU2 GB+ jika banyak zona + DNSSEC
Jangan menjalankan systemd-resolved atau bind9 pada port 53. GUI dan API tidak boleh diekspos ke internet tanpa TLS + batasan IP (atau VPN). Selalu baca security advisory sebelum upgrade.
3

Hardening OS

Baseline
sudo timedatectl set-timezone Asia/Jakarta
sudo hostnamectl set-hostname ns1.domain.tld
echo "127.0.1.1 ns1.domain.tld ns1" | sudo tee -a /etc/hosts
sudo apt update && sudo DEBIAN_FRONTEND=noninteractive apt full-upgrade -y
# Lepas bind9/resolved dari :53 jika konflik
sudo systemctl disable --now systemd-resolved 2>/dev/null || true
sudo rm -f /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
4

PowerDNS + backend gmysql

Paket & skema
sudo apt install -y mariadb-server pdns-server pdns-backend-mysql pdns-tools
sudo mysql --protocol=socket <<'SQL'
CREATE DATABASE pdns CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'pdns'@'localhost' IDENTIFIED BY 'GantiPasswordPDNS!';
GRANT ALL ON pdns.* TO 'pdns'@'localhost';
FLUSH PRIVILEGES;
SQL
# Path skema bervariasi antar paket:
# /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
# /usr/share/doc/pdns-backend-mysql/schema.mysql.sql
SCHEMA=$(ls /usr/share/pdns-backend-mysql/schema/schema.mysql.sql \
  /usr/share/doc/pdns-backend-mysql/schema.mysql.sql 2>/dev/null | head -1)
sudo mysql pdns < "$SCHEMA"
sudo rm -f /etc/powerdns/pdns.d/bind.conf
/etc/powerdns/pdns.d/gmysql.conf
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=GantiPasswordPDNS!
gmysql-dnssec=yes
Potongan pdns.conf
local-address=0.0.0.0
local-port=53
setuid=pdns
setgid=pdns
default-soa-content=ns1.domain.tld hostmaster.domain.tld 0 10800 3600 1209600 3600
default-ttl=3600
include-dir=/etc/powerdns/pdns.d
Izin & start
sudo chown pdns:pdns /etc/powerdns/pdns.d/gmysql.conf
sudo chmod 640 /etc/powerdns/pdns.d/gmysql.conf
sudo systemctl restart pdns
sudo systemctl enable pdns
ss -lunp | grep ':53'
pdns_control ping
5

API hanya di localhost

Poweradmin 4.3+ mendukung backend API. Kunci API wajib. Jangan bind 0.0.0.0 pada webserver API.

API di pdns.conf
api=yes
api-key=GantiKunciAPIPanjangAcak
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
webserver-allow-from=127.0.0.1
6

Instal Poweradmin 4.4.x

PHP + unduhan rilis
sudo apt install -y nginx php-fpm php-mysql php-intl php-xml php-mbstring \
  php-curl php-zip php-gettext git unzip
# Rilis: https://github.com/poweradmin/poweradmin/releases
cd /tmp
curl -fsSL -o poweradmin.tar.gz \
  https://github.com/poweradmin/poweradmin/archive/refs/tags/v4.4.0.tar.gz
sudo mkdir -p /var/www/poweradmin
sudo tar -xzf poweradmin.tar.gz -C /var/www/poweradmin --strip-components=1
sudo chown -R www-data:www-data /var/www/poweradmin

Buka installer web, pilih backend Database atau API. Untuk API isi URL http://127.0.0.1:8081 dan kunci. Setelah selesai, hapus direktori installer dan jaga config/settings.php.

config/settings.php (API)
return [
  'dns' => ['backend' => 'api'],
  'pdns_api' => [
    'url' => 'http://127.0.0.1:8081',
    'key' => 'GantiKunciAPIPanjangAcak',
    'server_name' => 'localhost',
  ],
];
Upgrade 4.4 membutuhkan migrasi SQL sql/poweradmin-mysql-update-to-4.4.0.sql setelah backup. Jangan timpa settings.php.
7

Nginx — ns1.domain.tld

try_files wajib 4.1+
server {
    listen 80;
    listen [::]:80;
    server_name ns1.domain.tld;
    root /var/www/poweradmin;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }
    location ~ /\.(git|ht) { deny all; }
    location ^~ /install { deny all; }  # aktifkan setelah wizard
}
Aktifkan
sudo ln -sf /etc/nginx/sites-available/ns1.domain.tld /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
8

TLS Let's Encrypt

Certbot
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ns1.domain.tld --redirect \
  --agree-tos -m [email protected] --no-eff-email

Catatan NS publik (ns1.domain.tld A/AAAA) terpisah dari vhost GUI. Banyak operator memakai dns.domain.tld untuk GUI agar tidak mencampur manajemen dengan hostname NS.

9

Zona, uji, DNSSEC

pdnsutil + dig
sudo pdnsutil create-zone domain.tld ns1.domain.tld
sudo pdnsutil add-record domain.tld @ A 203.0.113.10
sudo pdnsutil add-record domain.tld www A 203.0.113.10
sudo pdnsutil add-record domain.tld @ MX "10 mail.domain.tld."
sudo pdnsutil rectify-zone domain.tld
sudo pdnsutil secure-zone domain.tld
sudo pdnsutil set-nsec3 domain.tld '1 0 0 -' narrow
dig @127.0.0.1 domain.tld SOA +norec
dig @127.0.0.1 www.domain.tld A +short
10

Best Practices

  • API hanya 127.0.0.1; file gmysql.conf mode 640, milik pdns:pdns.
  • Backup DB pdns + config/settings.php sebelum setiap upgrade; uji restore secara berkala.
  • UFW/firewall: 53/tcp+udp publik; 80/443 untuk ACME + GUI; 8081 tertutup dari luar.
  • NS sekunder terpisah (AXFR terbatas + TSIG). Jangan biarkan AXFR terbuka ke 0.0.0.0/0.
  • Setelah pdnsutil secure-zone, unggah DS ke registrar/parent. Cek dengan pdnsutil show-zone dan DNSViz.
  • Pantau log: journalctl -u pdns -f. Ikuti security advisory PowerDNS secara rutin.
  • Jangan samakan Poweradmin dengan PowerDNS-Admin (proyek berbeda).
PowerDNS 5.x + Poweradmin 4.4.x di https://ns1.domain.tld siap mengelola zona dengan rewrite URL, API lokal, dan DNSSEC.
Dokumentasi PDNS + Poweradmin — ALSYUNDAWY IT SOLUTION · 16 Agustus 2026