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.
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)
pdns-server + pdns-backend-mysql, blog PowerDNS 5.1.x, dan EOL statements resmi.Persyaratan
| Komponen | Syarat resmi | Catatan 2026 |
|---|---|---|
| PHP | 8.2+ | Debian 12=8.2, 13=8.4; Ubuntu 24.04=8.3, 26.04=8.5 |
| Ekstensi | intl, gettext, openssl, filter, tokenizer, xml, pdo + pdo_mysql | ldap opsional |
| PowerDNS | Auth 4.0+ termasuk 5.x | Produksi: 5.1.x (5.1.4+); API mode sejak 4.7+ |
| DB | MySQL 5.7/8, MariaDB, PG, SQLite | utf8mb4; MariaDB 10.11+ / MySQL 8 disarankan |
| Nginx | try_files ke index.php | Wajib sejak Poweradmin 4.1.0 |
| RAM / CPU | 1 GB / 1 vCPU | 2 GB+ jika banyak zona + DNSSEC |
Hardening OS
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
PowerDNS + backend gmysql
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
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=GantiPasswordPDNS!
gmysql-dnssec=yes
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
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
API hanya di localhost
Poweradmin 4.3+ mendukung backend API. Kunci API wajib. Jangan bind 0.0.0.0 pada webserver API.
api=yes
api-key=GantiKunciAPIPanjangAcak
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
webserver-allow-from=127.0.0.1
Instal Poweradmin 4.4.x
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.
return [
'dns' => ['backend' => 'api'],
'pdns_api' => [
'url' => 'http://127.0.0.1:8081',
'key' => 'GantiKunciAPIPanjangAcak',
'server_name' => 'localhost',
],
];
sql/poweradmin-mysql-update-to-4.4.0.sql setelah backup. Jangan timpa settings.php.Nginx — ns1.domain.tld
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
}
sudo ln -sf /etc/nginx/sites-available/ns1.domain.tld /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
TLS Let's Encrypt
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.
Zona, uji, DNSSEC
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
Best Practices
- API hanya 127.0.0.1; file
gmysql.confmode 640, milikpdns:pdns. - Backup DB
pdns+config/settings.phpsebelum 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 denganpdnsutil show-zonedan DNSViz. - Pantau log:
journalctl -u pdns -f. Ikuti security advisory PowerDNS secara rutin. - Jangan samakan Poweradmin dengan PowerDNS-Admin (proyek berbeda).
https://ns1.domain.tld siap mengelola zona dengan rewrite URL, API lokal, dan DNSSEC.