The Authoritative Server atau Server Resmi, yang dimana menggunakan database untuk me-resolve query mengenai domain.
The Recursor atau Perulangan, yang dimana membuat konsultasi dengan Authoritative Server lainnya untuk me-resolve query
Nameserver lain menggabungkan kedua fungsi tersebut secara otomatis. PowerDNS menawarkannya secara terpisah, dan memungkinkan perpaduan
dua solusi secara mulus untuk pengaturan modular.
Selain itu, PowerDNS adalah sumber terbuka, berfungsi sama baiknya untuk volume query kecil dan besar, dan menawarkan banyak kemungkinan
untuk solusi backend.
Ikuti langkah dibawah ini untuk instalassi dan konfigurasi PowerDNS dengan MySQL atau MariaDB sebagai backend database.
Selain itu langkah-langkah ada tambahan instalasi untuk setup untuk PowerDNS Admin sebagai web interface dan API.
# MySQL Configurationlaunch=gmysqlgmysql-host=127.0.0.1gmysql-port=3306gmysql-dbname=powerdnsgmysql-user=powerdnsusergmysql-password=YOUR_PASSWORD_HEREgmysql-dnssec=yes# APIapi=yesapi-key=YOUR_API_KEY_HERE# Webserverwebserver=yeswebserver-address=<loopback/your_second_ip>webserver-port=8081webserver-allow-from=127.0.0.1,<your_second_ip>webserver-password=<YOUR_WEB_SERVER_PASSWORD>
Dikarenakan default config flask menggunakan database SQLite maka kita perlu mengubah konfigurasi nya agar menggunakan MySQL.
Untuk melakukan nya masih di dalam file yang sama yaitu production.py di baris 30 - 49
configs/production.py
### DATABASE - MySQL## Don't forget to uncomment the import in the topSQLALCHEMY_DATABASE_URI = 'mysql://{}:{}@{}/{}'.format( urllib.parse.quote_plus(SQLA_DB_USER), urllib.parse.quote_plus(SQLA_DB_PASSWORD), SQLA_DB_HOST, SQLA_DB_NAME)### DATABASE - PostgreSQL## Don't forget to uncomment the import in the top#SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format(# urllib.parse.quote_plus(SQLA_DB_USER),# urllib.parse.quote_plus(SQLA_DB_PASSWORD),# SQLA_DB_HOST,# SQLA_DB_NAME#)### DATABASE - SQLite#SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')
image
Export konfigurasi production ke dalam variable FLASK_CONF
bash
export FLASK_CONF=../configs/production.py
Export konfigurasi flask ke dalam variable FLASK_APP
bash
export FLASK_APP=powerdnsadmin/__init__.py
Upgrade skema database
bash
flask db upgrade
image
Install project dependencies menggunakan yarn
bash
yarn install --pure-lockfile
image
Build assets untuk aplikasi flask
shell
flask assets build
image
Menjalankan aplikasi flask di virtual env
shell
./run.py
image
Membuka aplikasi yang sudah di running pada port 9191
Catatan:
Untuk membuka aplikasi nya masukan URL pada web browser dengan format
plaintext
http://<ip_address>:9191
image
Catatan:
Jika mengalami error seperti gambar dibawah ini ketika berada di halaman register, maka perlu melakukan downgrade untuk dependency package pillow
Error tersebut terjadi karena pada aplikasi flask (PowerDNS Admin) ini menggunakan library pillow untuk mengenerate CAPTCHA
image
Menghapus package pillow
shell
pip uninstall pillow
image
Install pillow versi 9.4.0
shell
pip install pillow==9.4.0
image
Menjalankan kembali aplikasi flask di virtual env
shell
./run.py
image
Sampai proses ini, kita telah berhasil melakukan install PowerDNS sebagai DNS Service, MySQL sebagai backend dari PowerDNS dan PowerDNS Admin sebagai web interface nya.
Untuk langkah selanjutnya kita memerlukan web server seperti Nginx atau Apache agar aplikasi flask dari PowerDNS Admin ini bisa berjalan tanpa standalone
Untuk melakukan hal tersebut ikuti langkah dibawah ini
Setelah sebelumnya kita berhasil menjalankan aplikasi flask PowerDNS Admin dengan standalone (tanpa webserver) selanjutnya kita perlu membuat
service sendiri agar bisa berjalan dengan webserver
Matikan standalone aplikasi PowerDNS Admin nya
Untuk mematikannya cukup tekan CTRL + C pada terminal nya
Menonaktifkan virtual env
shell
deactivate
image
Membuat file systemd service untuk PowerDNS Admin
shell
vim /etc/systemd/system/powerdns-admin.service
Tambahkan konfigurasi berikut ini kedalam file powerdns-admin.service
Mengecek webserver Nginx berjalan di port http atau 80
shell
netstat -tunlp | grep nginx
Catatan:
Dapat dilihat digambar dibawah inih, bahwa webserver Nginx berjalan di port 80
image
Membuka aplikasi yang sudah running di port 80
Catatan:
Untuk membuka aplikasi nya masukan URL pada web browser dengan format
plaintext
http://<ip_address>
image
Apabila muncul nya seperti gambar diatas maka ada konfigurasi yang kurang pada nginx nya, ikuti langkah dibawah ini
agar default page pada port 80 yang dibuka nya adalah aplikasi PowerDNS Admin
Mengubah konfigurasi nginx.conf
bash
vim /etc/nginx/nginx.conf
Berikan komen pada konfigurasi di baris 60
/etc/nginx/nginx.conf
... #include /etc/nginx/sites-enabled/*;...
image
Restart kembali service nginx nya, agar konfigurasi yang sudah diubah tadi digunakan
shell
systemctl restart nginx
image
Buka kembali alamat url http://<ip_address> di web browser
image
Sekarang aplikasi Flask PowerDNS Admin sudah berjalan dengan web server nginx di port 80.
Selanjutnya anda dapat melakukan daftar untuk user login di halaman PowerDNS Admin nya
Untuk melakukan konfigurasi PowerDNS API, ikuti langkah dibawah ini
Login kedalam aplikasi PowerDNS Admin menggunakan web browser
Catatan:
Jika kalian pertama kali, buat akun terlebih dahulu.
Default atau bawaan akun yang pertama kali dibuat akan otomatis role user nya adalah Administrator
image
Buka tab API Keys pada menu sidebar
image
Klik Create Key
image
Pada bagian Role pilih Administrator dan untuk Description isikan My Key
image
Klik Create API Key
Setelah memilih role dan mengisikan description untuk API Key selanjutnya tekan Create API Key
Apabila terdapat alert konfirmasi, copy API Key nya kemudian klik Confirm
image
Mengisikan PowerDNS API URL, PowerDNS API Key, PowerDNS Version
Catatan:
Untuk mengetahui PowerDNS API URL dan PowerDNS Version kalian bisa lihat di server
Mengecek PowerDNS API URL:
image
Mengecek PowerDNS Version:
image
image
Mengganti API Key PowerDNS Server agar sesuai dengan PowerDNS Admin
Setelah kalian copy API Key yang sebelumnya dibuat, selanjutnya ubah atau isikan konfigurasi api-key pada file /etc/powerdns/pdns.conf dengan API Key yang di copy sebelumnya.
Setelah mengubah nya, jangan lupa restart service pdns agar perubahan nya tersimpan
bash
systemctl restart pdns
image
Untuk mencoba apakah API nya berjalan kalian bisa menggunakan curl
Setelah melalui langkah-langkah dalam panduan ini, kalian telah menyiapkan PowerDNS, PowerDNS Web Interface pada Nginx, dan menghubungkan PowerDNS API.