Di post kali ini saya akan mencoba menginstall PowerDNS sebagai Authoritative DNS Server.
Pada percobaan kali ini saya menggunakan PowerDNS versi 4.9.x (stable) yang berjalan diatas distro linux Debian 12 (Bookworm) dengan domain yang digunakan adalah warscloud.online yang telah saya beli/sewa dari salahsatu domain registar di indonesia.
Pre Installation
Jika menggunakan VPS atau Cloud Image kita stop & disable terlebihdahulu service systemd-resolved
karena service tersebut menggunakan port 53 yang akan kita gunakan untuk PowerDNS.
Jika tidak menggunakan VPS atau Cloud Image Silakan skip bagian ini, dan bisa langsung ke bagian Instalasi dan Konfigurasi
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
Lalu reboot
reboot now
Jika setelah reboot tidak bisa ping ke domain seperti google.com
maka buat file /etc/resolv.conf
sudo nano /etc/resolv.conf
Lalu masukkan baris berikut
nameserver 1.1.1.1
nameserver 8.8.8.8
Lalu simpan.
Troubleshoot
Jika tidak bisa menyimpan dengan otuput error Error writing resolv.conf: No such file or directory
Caranya kita buat terlebihdahulu file dengan nama yang berbeda seperti /etc/resolv.conf.txt
lalu kita rename menjadi /etc/resolv.conf
nano /etc/resolv.conf.txt
mv /etc/resolv.conf.txt /etc/resolv.conf
Instalasi Dan Konfigurasi PowerDNS (Master)
Install PowerDNS melalui official repository PowerDNS di link berikut
Di halaman tersebut juga disediakan baris perintah untuk menginstall nya, namun akan saya tulis juga di post ini
Install curl
apt install curl
Create the file ‘/etc/apt/sources.list.d/pdns.list’ with this content:
nano /etc/apt/sources.list.d/pdns.list
And insert this line
deb [signed-by=/etc/apt/keyrings/auth-49-pub.asc arch=amd64] http://repo.powerdns.com/debian bookworm-auth-49 main
Put this in ‘/etc/apt/preferences.d/auth-49’:
nano /etc/apt/preferences.d/auth-49
And insert this line
Package: auth*
Pin: origin repo.powerdns.com
Pin-Priority: 600
and execute the following commands:
sudo install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo tee /etc/apt/keyrings/auth-49-pub.asc &&
sudo apt-get update &&
sudo apt-get install pdns-server
Dan install juga pdns-backend-mysql karena kali ini kita menggunakan mysql sebagai backend dari PowerDNS, nantinya MySQL ini akan berfungsi sebagai penyimpanan DNS record kita
apt install pdns-backend-mysql
Install MariaDB (MySQL)
apt install mariadb-server mariadb-client
Jalankan secure installation
mysql_secure_installation
Buat database untuk PowerDNS
Login kedalam MySQL (menggunakan user root)
mysql
Buat database
MariaDB [(none)]> create database pdnsdb;
Buat user
MariaDB [(none)]> create user 'pdns'@'localhost' identified by 'PasswordAman';
Berikan izin
MariaDB [(none)]> grant all privileges on pdnsdb.* to 'pdns'@'localhost';
Flush!
MariaDB [(none)]> flush privileges;
Keluar
MariaDB [(none)]> quit
Export PowerDNS database Schema
mysql -u pdns -p pdnsdb < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Verifikasi apakah schema sudah berhasil di export
mysql -u pdns -p -e "USE pdnsdb; SHOW TABLES;"
Konfigurasi PowerDNS
Buat file /etc/powerdns/pdns.d/pdns.local.gmysql.conf
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Masukkan baris berikut
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdnsdb
gmysql-user=pdns
gmysql-password=PasswordAman
gmysql-dnssec=yes
# gmysql-socket=
Berikan permission ke file /etc/powerdns/pdns.d/pdns.local.gmysql.conf
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
chown pdns:pdns /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Tes connection PowerDNS ke database
systemctl stop pdns
pdns_server --daemon=no --guardian=no --loglevel=9
Jika koneksi PowerDNS sudah berhasil maka akan muncul output sebagai berikut
Jun 18 12:42:50 Loading '/usr/lib/x86_64-linux-gnu/pdns/libbindbackend.so'
Jun 18 12:42:50 [bind2backend] This is the bind backend version 4.9.1 (May 28 2024 07:46:05) (with bind-dnssec-db support) reporting
Jun 18 12:42:50 Loading '/usr/lib/x86_64-linux-gnu/pdns/libgmysqlbackend.so'
Jun 18 12:42:50 [gmysqlbackend] This is the gmysql backend version 4.9.1 (May 28 2024 07:46:05) reporting
Jun 18 12:42:50 This is a standalone pdns
Jun 18 12:42:50 Created local state directory '/var/run/pdns/'
Jun 18 12:42:50 Listening on controlsocket in '/var/run/pdns/pdns.controlsocket'
Jun 18 12:42:50 UDP server bound to 0.0.0.0:53
Jun 18 12:42:50 UDP server bound to [::]:53
Jun 18 12:42:50 TCP server bound to 0.0.0.0:53
Jun 18 12:42:50 TCP server bound to [::]:53
Jun 18 12:42:50 PowerDNS Authoritative Server 4.9.1 (C) PowerDNS.COM BV
Jun 18 12:42:50 Using 64-bits mode. Built using gcc 12.2.0 on May 28 2024 07:46:05 by root@localhost.
Jun 18 12:42:50 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.
Jun 18 12:42:50 [stub-resolver] Doing stub resolving for 'auth-4.9.1.security-status.secpoll.powerdns.com.|TXT', using resolvers: 108.61.10.10, 2001:19f0:300:1704::6
Jun 18 12:42:50 [stub-resolver] Question for 'auth-4.9.1.security-status.secpoll.powerdns.com.|TXT' got answered by 108.61.10.10
Jun 18 12:42:50 Polled security status of version 4.9.1 at startup, no known issues reported: OK
Jun 18 12:42:50 [bindbackend] Parsing 0 domain(s), will report when done
Jun 18 12:42:50 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 Creating backend connection for TCP
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 About to create 3 backend threads for UDP
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 Done launching threads, ready to distribute questions
Tekan CTRL+C untuk stop test
Konfigurasi Tambahan Untuk DNS Server Master
Edit File /etc/powerdns/pdns.conf
nano /etc/powerdns/pdns.conf
Tambahkan baris berikut di paling bawah
primary=yes
allow-axfr-ips=103.152.233.107
also-notify=103.152.233.107
xfr-cycle-interval=60
IP yang saya tandai warna oranye adalah IP dari DNS Server Slave, sesuaikan dengan IP DNS Server Slave kamu.
Dan untuk xfr-cycle-interval=60 adalah berapa lama interval refresh/sinkronisasi kembali antara DNS Server Slave Dan DNS Server Master
Jalankan kembali service PowerDNS
systemctl start pdns
Agar memastikan service PowerDNS auto start pada saat mesin reboot ketikkan perintah berikut
systemctl enable pdns
Pastikan service PowerDNS berjalan dengan baik
systemctl status pdns
● pdns.service - PowerDNS Authoritative Server
Loaded: loaded (/lib/systemd/system/pdns.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-06-18 12:44:47 UTC; 1min 19s ago
Docs: man:pdns_server(1)
man:pdns_control(1)
https://doc.powerdns.com
Main PID: 4530 (pdns_server)
Tasks: 8 (limit: 1092)
Memory: 48.2M
CPU: 58ms
CGroup: /system.slice/pdns.service
└─4530 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write>
Jun 18 12:44:47 ns1 pdns_server[4530]: PowerDNS Authoritative Server 4.9.1 (C) PowerDNS.COM BV
Jun 18 12:44:47 ns1 pdns_server[4530]: Using 64-bits mode. Built using gcc 12.2.0 on May 28 2024 07:46:05 by ro>
Jun 18 12:44:47 ns1 pdns_server[4530]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and y>
Jun 18 12:44:47 ns1 pdns_server[4530]: Polled security status of version 4.9.1 at startup, no known issues repo>
Jun 18 12:44:47 ns1 pdns_server[4530]: [bindbackend] Parsing 0 domain(s), will report when done
Jun 18 12:44:47 ns1 pdns_server[4530]: [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Jun 18 12:44:47 ns1 pdns_server[4530]: Creating backend connection for TCP
Jun 18 12:44:47 ns1 systemd[1]: Started pdns.service - PowerDNS Authoritative Server.
Jun 18 12:44:47 ns1 pdns_server[4530]: About to create 3 backend threads for UDP
Jun 18 12:44:47 ns1 pdns_server[4530]: Done launching threads, ready to distribute questions
lines 1-23/23 (END)
(Optional, Jika terinstall UFW) Izinkan port 53 (DNS) diakses dari publik
ufw allow dns
Sampai tahap ini instalasi PowerDNS sudah selesai dan sudah bisa digunakan untuk menambah record secara CLI menggunakan perintah pdnsutil
, namun kali ini saya akan menggunakan PowerAdmin untuk manajemen record secara GUI melalui tampilah WEB (WebUI)
Instalasi PowerAdmin
Untuk mendownload PowerAdmin bisa melalui official github PowerAdmin di link berikut
https://github.com/poweradmin/poweradmin/releases
Kali ini saya mengguanakan PowerAdmin dengan versi 3.7.0 dan saya menggunakan LAMP Stack untuk menginstall PowerAdmin, cara install LAMP Stack bisa dilihat di link berikut.
*Note: pastikan juga menginstall extension dan requirement yang dibutuhkan
- PHP 8.1
- PHP intl extension
- PHP gettext extension
- PHP openssl extension
- PHP pdo extension
- PHP pdo-mysql, pdo-pgsql or pdo-sqlite extension
- PHP ldap extension (optional)
- MySQL 5.7.x/8.x, MariaDB, PostgreSQL or SQLite database ✅
- PowerDNS authoritative server 4.0.0+ ✅
Izinkan port 80 dan 443 (https & https) diakses dari publik
ufw allow http
ufw allow https
Ketika LAMP Stack dan source code PowerAdmin sudah di install, untuk mengakses PowerAdmin installer nya adalah
namadomain.com/install
Atau
IP-ADDRESS/install
Maka akan muncul tampilan installer seperti berikut

Pilih bahasa yang ingin kamu gunakan, lalu klik Go to step 2

Baca dan pahami mengenai PowerAdmin, jika sudah klik Go to step 3

Konfigurasi database yang telah kita buat, Jika sudah klik Go to step 4
Di halaman ini saya terdapat kesalahan pengetikan pada saat mengisikan secondary server yang harusnya adalah ns2.warscloud.online namun bisa di edit pada saat selesai instalasi, Jika sudah klik Go to step 5

Membuat user baru untuk manage zone dan records
MariaDB [(none)]> CREATE USER 'user1'@'localhost' IDENTIFIED BY 'PasswordAman';
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON pdnsdb.* TO 'user1'@'localhost';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
Jika sudah klik Go to step 6

Buat file konfigurasi
nano /var/www/html/inc/config.inc.php
Lalu masukkan baris sesuai dengan yang tertampil di installer, untuk case kali ini baris yang dimasukkan adalah
<?php
$db_host = 'localhost';
$db_name = 'pdnsdb';
$db_user = 'user1';
$db_pass = 'PasswordAman';
$db_type = 'mysql';
$session_key = 'xQEA0MO6vZuTcGBTMJF_IMwrD9dt0zq6Wv6sc#Vs*BMlWC';
$iface_lang = 'en_EN';
$dns_hostmaster = 'hostmaster.warscloud.online';
$dns_ns1 = 'ns1.warscloud.online';
$dns_ns2 = 'n2.warscloud.online';
$ignore_install_dir = true;
Jika sudah klik Go to step 7

Proses Instalasi selesai, namun agar lebih aman lanjut proses hapus direktori installer
Hapus direktori ../installer dari root directory PowerAdmin
rm -r /var/www/html/install/
Dan kamu bisa login kedalam Dashboard PowerAdmin menggunakan IP atau Domain
namadomain.com
Atau
IP-ADDRESS
Dalam case kali ini zone baru yang telah kita definisikan pada saat setup installer tidak terbuat, Dan saya akan membuatnya secara manual dengan cara masuk ke menu List Zone

Tambahkan Master Zone baru

Sesuaikan domain yang akan di manage contoh disini domain yang akan saya manage adalah warscloud.online

Penambahan Zone Master sudah selesai dan sukses

Klik edit untuk menyesuaikan NS record atau DNS server yang berhak melakukan management terhadap domain tersebut

Tambahkan record NS dan sesuaikan content nya
Dalam percobaan kali ini saya isikan ns1.warscloud.online dan ns2.warscloud.online dan jangan lupa juga mendefinisikan A records dari ns1.warscloud.online dan ns2.warscloud.online sehingga seperti berikut:

Instalasi PowerAdmin sudah selesai
Instalasi Dan Konfigurasi PowerDNS (Slave)
Untuk membuat DNS Server Slave cara instalasinya sama seperti kita menginstall PowerDNS Master hanya saja terdapat perbedaan pada saat kita menambahkan zone, jika pada DNS server master kita memilih type nya master maka pada DNS Server Slave kita memilih type nya Slave.
Untuk DNS server slave kita tidak akan menginstall PowerAdmin, karena DNS Server Slave hanya bertindak sebagai Replikasi zone dan record dari DNS Server Master
Lanjut, Install PowerDNS
Install PowerDNS melalui official repository PowerDNS di link berikut
Di halaman tersebut juga disediakan baris perintah untuk menginstall nya, namun akan saya tulis juga di post ini
Install curl
apt install curl
Create the file ‘/etc/apt/sources.list.d/pdns.list’ with this content:
nano /etc/apt/sources.list.d/pdns.list
And insert this line
deb [signed-by=/etc/apt/keyrings/auth-49-pub.asc arch=amd64] http://repo.powerdns.com/debian bookworm-auth-49 main
Put this in ‘/etc/apt/preferences.d/auth-49’:
nano /etc/apt/preferences.d/auth-49
And insert this line
Package: auth*
Pin: origin repo.powerdns.com
Pin-Priority: 600
and execute the following commands:
sudo install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo tee /etc/apt/keyrings/auth-49-pub.asc &&
sudo apt-get update &&
sudo apt-get install pdns-server
Dan install juga pdns-backend-mysql karena kali ini kita menggunakan mysql sebagai backend dari PowerDNS, nantinya MySQL ini akan berfungsi sebagai penyimpanan DNS record kita
apt install pdns-backend-mysql
Install MariaDB (MySQL)
apt install mariadb-server mariadb-client
Jalankan secure installation
mysql_secure_installation
Buat database untuk PowerDNS
Login kedalam MySQL (menggunakan user root)
mysql
Buat database
MariaDB [(none)]> create database pdnsdb;
Buat user
MariaDB [(none)]> create user 'pdns'@'localhost' identified by 'PasswordAman';
Berikan izin
MariaDB [(none)]> grant all privileges on pdnsdb.* to 'pdns'@'localhost';
Flush!
MariaDB [(none)]> flush privileges;
Keluar
MariaDB [(none)]> quit
Export PowerDNS database Schema
mysql -u pdns -p pdnsdb < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Verifikasi apakah schema sudah berhasil di export
mysql -u pdns -p -e "USE pdnsdb; SHOW TABLES;"
Konfigurasi PowerDNS
Buat file /etc/powerdns/pdns.d/pdns.local.gmysql.conf
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Masukkan baris berikut
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdnsdb
gmysql-user=pdns
gmysql-password=PasswordAman
gmysql-dnssec=yes
# gmysql-socket=
Berikan permission ke file /etc/powerdns/pdns.d/pdns.local.gmysql.conf
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
chown pdns:pdns /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Tes connection PowerDNS ke database
systemctl stop pdns
pdns_server --daemon=no --guardian=no --loglevel=9
Jika koneksi PowerDNS sudah berhasil maka akan muncul output sebagai berikut
Jun 18 12:42:50 Loading '/usr/lib/x86_64-linux-gnu/pdns/libbindbackend.so'
Jun 18 12:42:50 [bind2backend] This is the bind backend version 4.9.1 (May 28 2024 07:46:05) (with bind-dnssec-db support) reporting
Jun 18 12:42:50 Loading '/usr/lib/x86_64-linux-gnu/pdns/libgmysqlbackend.so'
Jun 18 12:42:50 [gmysqlbackend] This is the gmysql backend version 4.9.1 (May 28 2024 07:46:05) reporting
Jun 18 12:42:50 This is a standalone pdns
Jun 18 12:42:50 Created local state directory '/var/run/pdns/'
Jun 18 12:42:50 Listening on controlsocket in '/var/run/pdns/pdns.controlsocket'
Jun 18 12:42:50 UDP server bound to 0.0.0.0:53
Jun 18 12:42:50 UDP server bound to [::]:53
Jun 18 12:42:50 TCP server bound to 0.0.0.0:53
Jun 18 12:42:50 TCP server bound to [::]:53
Jun 18 12:42:50 PowerDNS Authoritative Server 4.9.1 (C) PowerDNS.COM BV
Jun 18 12:42:50 Using 64-bits mode. Built using gcc 12.2.0 on May 28 2024 07:46:05 by root@localhost.
Jun 18 12:42:50 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.
Jun 18 12:42:50 [stub-resolver] Doing stub resolving for 'auth-4.9.1.security-status.secpoll.powerdns.com.|TXT', using resolvers: 108.61.10.10, 2001:19f0:300:1704::6
Jun 18 12:42:50 [stub-resolver] Question for 'auth-4.9.1.security-status.secpoll.powerdns.com.|TXT' got answered by 108.61.10.10
Jun 18 12:42:50 Polled security status of version 4.9.1 at startup, no known issues reported: OK
Jun 18 12:42:50 [bindbackend] Parsing 0 domain(s), will report when done
Jun 18 12:42:50 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 Creating backend connection for TCP
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 About to create 3 backend threads for UDP
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 gmysql Connection successful. Connected to database 'pdnsdb' on '127.0.0.1'.
Jun 18 12:42:50 Done launching threads, ready to distribute questions
Tekan CTRL+C untuk stop test
Konfigurasi Tambahan Untuk DNS Server Slave
Edit File /etc/powerdns/pdns.conf
nano /etc/powerdns/pdns.conf
Lalu tambahkan baris berikut di paling bawah
secondary=yes
allow-dnsupdate-from=103.152.233.106
*IP yang saya tandai warna oranye adalah IP dari DNS Server Master
Jalankan kembali service PowerDNS
systemctl start pdns
systemctl enable pdns
Pastikan service PowerDNS berhasil running dan aktif
systemctl status pdns
Tambahkan zone yang sudah dibuat di DNS Server Master namun pada type kita pilih slave
pdnsutil create-secondary-zone warscloud.online 103.152.233.106
*IP yang saya tandai warna oranye adalah IP dari DNS Server Master
Konfigurasi DNS Server Slave telah selesai, untuk memverifikasi apakah didalam database sudah ada zone slave dan terupdate otomatis records nya caranya sebagai berikut
Login kedalam MySQL
mysql
MariaDB [(none)]> use pdnsdb;
Untuk melihat tabel apa saja yang ada didalam database pdnsdb ketikkan perintah berikut
MariaDB [pdnsdb]> show tables;
Untuk melihat zone apa saja yang sudah terbuat ketikkan perintah berikut
MariaDB [pdnsdb]> SELECT * FROM domains;
Output yang dihasilkan seperti berikut
MariaDB [pdnsdb]> select * from domains;
+----+------------------+-----------------+------------+-------+-----------------+---------+---------+---------+
| id | name | master | last_check | type | notified_serial | account | options | catalog |
+----+------------------+-----------------+------------+-------+-----------------+---------+---------+---------+
| 1 | warscloud.online | 103.152.233.106 | 1719221219 | SLAVE | NULL | | NULL | NULL |
+----+------------------+-----------------+------------+-------+-----------------+---------+---------+---------+
1 row in set (0.000 sec)
Untuk melihat apakah records sudah bertambah secara otomatis dari hasil replikasi DNS Server Master ketikkan perintah berikut
MariaDB [pdnsdb]> select * from records;
Output yang dihasilkan seperti berikut
MariaDB [pdnsdb]> select * from records;
+----+-----------+----------------------+------+-------------------------------------------------------------------------------------+-------+------+----------+-----------+------+
| id | domain_id | name | type | content | ttl | prio | disabled | ordername | auth |
+----+-----------+----------------------+------+-------------------------------------------------------------------------------------+-------+------+----------+-----------+------+
| 13 | 1 | warscloud.online | SOA | ns1.warscloud.online hostmaster.warscloud.online 2024062405 28800 7200 604800 86400 | 86400 | 0 | 0 | NULL | 1 |
| 14 | 1 | ns1.warscloud.online | A | 103.152.233.106 | 30 | 0 | 0 | NULL | 1 |
| 15 | 1 | ns2.warscloud.online | A | 103.152.233.107 | 30 | 0 | 0 | NULL | 1 |
| 16 | 1 | warscloud.online | NS | ns1.warscloud.online | 30 | 0 | 0 | NULL | 1 |
| 17 | 1 | warscloud.online | NS | ns2.warscloud.online | 30 | 0 | 0 | NULL | 1 |
+----+-----------+----------------------+------+-------------------------------------------------------------------------------------+-------+------+----------+-----------+------+
5 rows in set (0.000 sec)
Delegasi Domain
Langkah terkahir adalah mendelegasikan nameserver dari Domain Restistrar ke DNS Server yang telah kita buat
Pergi ke tempat kamu membeli domain (Domain Registrar)
Klik Private Nameserver

Definisikan Domain dan IP DNS Server Master

Definisikan Domain dan IP DNS Server Slave

Setelah kamu mendefinisikan Domain dan IP dari DNS Server kamu selanjutnya adalah mendaftarkan DNS Server kamu sebagai Nameserver untuk domain kamu, dalam hal ini adalah domain warscloud.online. Klik Nameserver Setting

Isikan Domain dari DNS Server Master dan Slave kamu

Instalasi dan konfigurasi PowerDNS sudah selesai, terimakasih.
Pengembangan Lebih Lanjut (Opsional)
Instalasi dan Konfigurasi PowerDNS dengan remote Database
Berikut adalah gambaran diagram hasil akhir

- Database NS1 hanya di ekspose untuk Node/VM 3
Dengan arsitektur seperti ini PowerAdmin (Web UI) hanya di install di Node/VM 3
Dengan arsitektur tersebut kita lebih fleksibel untuk menerapkan kebijakan/firewall, salah satu contoh implementasinya adalah PowerAdmin (Web GUI) hanya bisa diakses di jaringan Internal kita
Konfigurasi Node/VM 1
Buat salinan konfigurasi MariaDB
cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf.bak
Buat agar MariaDB di ekspose keluar
Edit konfigurasi
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Pada bagian
bind-address = 127.0.0.1
Ubah menjadi
bind-address = 0.0.0.0
Atau, dengan spesifik IP address yang terpasang
bind-address = 10.0.0.1
Jika bind ke spesifik IP pastikan tidak ada aplikasi (didalam host yang sama) yang merujuk ke database dengan IP
127.0.0.1
, jika ada silakan diganti denganlocalhost
.
Saya juga akan merubah port default 3306 menjadi port custom 13306, pada file yang sama silakan tambahkan baris berikut
port = 13306
Sehingga menjadi seperti berikut

Restart service MariaDB
systemctl restart mariadb
Jika sebelumnya sudah melakukan konfigurasi untuk PowerDNS nya maka ubah kembali konfigurasi nya hingga sesuai seperti contoh berikut
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Lalu sesuaikan gmysql-host
dan gmysql-port
gmysql-port
walaupun tidak sesuai namun masih bisa bekerja dengan normal karena berkomunikasi dengan database melalui Unix Socket (localhost) saran saya tetap diganti port nya agar tidak keliru dan sebagai dokumentasi saja.
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=localhost
gmysql-port=13306
gmysql-dbname=pdnsdb
gmysql-user=pdns
gmysql-password=PasswordAman
gmysql-dnssec=yes
# gmysql-socket=
Buat user remote database dan berikan izin untuk mengelola database powerdns yang telah kita buat di awal.
mysql
MariaDB [(none)]> create user 'pdns-remote'@'10.0.0.2' identified by 'PasswordAman';
MariaDB [(none)]> grant all privileges on pdnsdb.* to 'pdns-remote'@'10.0.0.2';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;
Catatan terbaru: Untuk username user database disarankan menggunakan underscore (_) daripada dash (-), karena di Poweradmin v3.9.4 untuk username tidak mendukung dash (-)
Sebagai Persiapan pada saat instalasi PowerAdmin nantinya pada Node/VM 3 nanti, disini kita juga buat user database untuk PowerAdmin (Limited-Rights User)
mysql
MariaDB [(none)]> CREATE USER 'poweradmin-remote'@'10.0.0.2' IDENTIFIED BY 'PasswordAman';
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON pdnsdb.* TO 'poweradmin-remote'@'10.0.0.2';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;
Catatan terbaru: Untuk username user database disarankan menggunakan underscore (_) daripada dash (-), karena di Poweradmin v3.9.4 untuk username tidak mendukung dash (-)
Lakukan test pengujian apakah PowerDNS masih bisa bisa berkomunikasi dengan database dan normal.
Stop service PowerDNS terlebihdahulu
systemctl stop pdns
Jalankan pengujian
pdns_server --daemon=no --guardian=no --loglevel=9
Jika outputnya seperti berikut maka berjalan dengan normal
Jul 22 06:36:57 Loading '/usr/lib/x86_64-linux-gnu/pdns/libbindbackend.so'
Jul 22 06:36:57 [bind2backend] This is the bind backend version 4.9.7 (Jul 7 2025 07:43:42) (with bind-dnssec-db support) reporting
Jul 22 06:36:57 Loading '/usr/lib/x86_64-linux-gnu/pdns/libgmysqlbackend.so'
Jul 22 06:36:57 [gmysqlbackend] This is the gmysql backend version 4.9.7 (Jul 7 2025 07:43:42) reporting
Jul 22 06:36:57 This is a standalone pdns
Jul 22 06:36:57 Listening on controlsocket in '/var/run/pdns/pdns.controlsocket'
Jul 22 06:36:57 UDP server bound to 0.0.0.0:53
Jul 22 06:36:57 UDP server bound to [::]:53
Jul 22 06:36:57 TCP server bound to 0.0.0.0:53
Jul 22 06:36:57 TCP server bound to [::]:53
Jul 22 06:36:57 PowerDNS Authoritative Server 4.9.7 (C) PowerDNS.COM BV
Jul 22 06:36:57 Using 64-bits mode. Built using gcc 12.2.0 on Jul 7 2025 07:43:42 by root@localhost.
Jul 22 06:36:57 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.
Jul 22 06:36:57 [stub-resolver] Doing stub resolving for 'auth-4.9.7.security-status.secpoll.powerdns.com.|TXT', using resolvers: 1.1.1.1, 8.8.8.8
Jul 22 06:36:58 [stub-resolver] Question for 'auth-4.9.7.security-status.secpoll.powerdns.com.|TXT' got answered by 1.1.1.1
Jul 22 06:36:58 Polled security status of version 4.9.7 at startup, no known issues reported: OK
Jul 22 06:36:58 [bindbackend] Parsing 0 domain(s), will report when done
Jul 22 06:36:58 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Jul 22 06:36:58 gmysql Connection successful. Connected to database 'pdnsdb' on 'localhost'.
Jul 22 06:36:58 Creating backend connection for TCP
Jul 22 06:36:58 gmysql Connection successful. Connected to database 'pdnsdb' on 'localhost'.
Jul 22 06:36:58 Primary/secondary communicator launching
Jul 22 06:36:58 gmysql Connection successful. Connected to database 'pdnsdb' on 'localhost'.
Jul 22 06:36:58 no primary or producer domains need notifications
Jul 22 06:36:58 About to create 3 backend threads for UDP
Jul 22 06:36:58 gmysql Connection successful. Connected to database 'pdnsdb' on 'localhost'.
Jul 22 06:36:58 gmysql Connection successful. Connected to database 'pdnsdb' on 'localhost'.
Jul 22 06:36:58 gmysql Connection successful. Connected to database 'pdnsdb' on 'localhost'.
Jul 22 06:36:58 Done launching threads, ready to distribute questions
Tekan CTRL+C untuk stop pengujian
Jalankan kembali service PowerDNS
systemctl start pdns
Install UFW untuk firewall
sudo apt install ufw
Set default tolak untuk traffic incoming
ufw default deny incoming
Set default allow untuk traffic outgoing
ufw default allow outgoing
Izinkan port 53 (DNS)
ufw allow dns
Izinkan port custom database yang telah kita sesuaikan diatas hanya dari IP tertentu contoh dari IP 10.0.0.2
ufw allow from 10.0.0.2 to any port 13306 proto tcp
Silakan allow port yang digunakan seperti SSH atau lainnya, Sesuaikan.
Contoh
ufw allow ssh
Terakhir, aktifkan/jalankan UFW
ufw enable
Untuk melihat list daftar rules yang telah kita tambahkan ketikkan perintah berikut
ufw status
Akan muncul output list port yang di izinkan seperti berikut
ufw status
Status: active
To Action From
-- ------ ----
DNS ALLOW Anywhere
13306/tcp ALLOW 10.0.0.2
22 ALLOW Anywhere
DNS (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
Konfigurasi di sisi Node/VM 1 selesai.
Konfigurasi Node/VM 3
Install Apache, dan PHP (Abaikan MariaDB)
Silakan download source code PowerAdmin Disini
Setelah Virtualhost dibuat dan source code sudah ditempatkan ke root directory virtualhost selanjutnya silakan akses alamat virtualhost tersebut melalui web browser (jika menggunakan virtualhost)
http://IPorDomain/install
Berikut saya lampirkan tangkapan layar step initial configuration nya



Pada bagian Step 3 ini, silakan sesuaikan dengan yang telah kita konfigurasi pada Node/VM 1, dan pada bagian Poweradmin administrator password silakan sesuaikan, passsword ini digunakan untuk login ke WEB UI Poweradmin untuk user admin

Pada bagian step 4 ini, silakan sesuaikan username dan password dengan yang telah kita konfigurasi pada Node/VM 1 (Limited-Rights User)

Pada bagian step 5 ini, karena kita sudah membuat user nya pada konfigurasi Node/VM 1 sebelumnya. maka kita bisa langsung Go to step 6

Pada step 6 ini, kita buat configuration file
nano /var/www/dirvirtualhost/inc/config.inc.php
Copy semua konfigurasi php yang ditampilkan lalu paste dan simpan.

Pada bagian step 7 ini, kita hapus directory ./install
agar aman dan bersih.
rm -r /var/www/dirvirtualhost/install/
Instalasi dan konfigurasi selesai. silakan akses kembali
http://IPorDomain
Lalu login menggunakan user admin dan password yang telah kita set di step 3
Keterangan Artikel:
Tested on: Debian 12 (Bookworm), PowerDNS 4.9.1
Penulis: Fariz Anwar
Sumber/Referensi:
https://repo.powerdns.com/
https://www.howtoforge.com/how-to-install-powerdns-on-ubuntu-22-04/