PowerDNS merupakan software DNS Server free dan open source yang mendukung banyak sistem operasi seperti BSD, Linux, dan macOS.
Selain berkinerja tinggi, PowerDNS juga mendukung beberapa jenis backend seperti BIND dan backend RDBMS seperti MySQL/MariaDB, PostgreSQL, dan database Oracle.
Installing and Configuring MariaDB Database Server #
Setting repo mariadb.
nano /etc/yum.repos.d/mariadb.repo# MariaDB 11.0 RedHatEnterpriseLinux repository list - created 2023-08-10 04:06 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/11.0/rhel/$releasever/$basearch
baseurl = https://suro.ubaya.ac.id/mariadb/yum/11.0/rhel/$releasever/$basearch
module_hotfixes = 1
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://suro.ubaya.ac.id/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1Selanjutnya install MariaDB
yum install MariaDB-server MariaDB-clientEnable dan start service.
systemctl enable --now mariadbBuat database dan user pdns
mysqlcreate database pdns;
create user 'pdns'@'localhost' identified by 'password';
grant all privileges on pdns.* to 'pdns'@'localhost' with grant option;
flush privileges;
quitInstalling and Configuring PowerDNS #
Setelah menginstall dan konfigurasi database Mariadb, selanjutnya install PowerDNS dengan backend database MariaDB.
Install repo epel.
yum -y install epel-releaseLalu install pdns dan pdns-backend-mysql
yum -y install pdns pdns-tools pdns-backend-mysqlImport skema database pdns.
mysql -u pdns -p pdns < /usr/share/doc/pdns/schema.mysql.sqlEdit file /etc/pdns/pdns.conf dengan menambahkan konfig pada bagian launch.
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-password=password
gmysql-dbname=pdnsSelanjutnya uncomment bagian api dan api-key.
#################################
# api Enable/disable the REST API (including HTTP listener)
#
api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
api-key=7c354e13f2482cd821c715b563d5f90ea4a57aAPI Power DNS akan digunakan untuk mengelola server PowerDNS melalui aplikasi PowerDNS-Admin. api-key dapat Anda ganti sesuai keinginan.
Save file dan keluar dari editor setelah selesai.
Jalankan perintah berikut untuk memverifikasi dan memastikan konfigurasi PowerDNS sudah sesuai atau tidak erorr.
pdns_server --daemon=no --guardian=no --loglevel=9Aug 10 13:42:43 gmysql Connection successful. Connected to database 'pdns' on 'localhost'.
Aug 10 13:42:43 Creating backend connection for TCP
Aug 10 13:42:43 gmysql Connection successful. Connected to database 'pdns' on 'localhost'.
Aug 10 13:42:43 About to create 3 backend threads for UDP
Aug 10 13:42:43 gmysql Connection successful. Connected to database 'pdns' on 'localhost'.
Aug 10 13:42:43 gmysql Connection successful. Connected to database 'pdns' on 'localhost'.
Aug 10 13:42:43 gmysql Connection successful. Connected to database 'pdns' on 'localhost'.
Aug 10 13:42:43 Done launching threads, ready to distribute questionsEnable dan start service pdns.
systemctl enable --now pdnsInstalling PowerDNS-Admin #
PowerDNS-Admin adalah aplikasi web berbasis Python Flask, jadi instalasi PowerDNS-Admin hampir sama dengan instalasi web framework Flask.
Installing Package Dependencies
Install python beserta dependensi package lainnya.
yum -y install python38-pip python38-devel MariaDB-devel git openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel postgresql-devel gccSelanjutnya install virtualenv.
pip3.8 install -U pip
pip install -U virtualenvTambahkan repo NodeJS. Ini digunakan untuk generate file statis aplikasi web PowerAdmin
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -Setelah repo ditambahkan, install NodeJS dengan perintah.
yum install -y nodejsInstall juga Yarn package manager
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo
yum install yarnPastikan versi NodeJS yang terinstall sudah sesuai.
# node -v
v16.20.1Setting up Python Virtual Environment
Clone source code PowerDNS-Admin ke direktori /opt/pdns.
git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/pdnsMasuk ke direktori /opt/pdns lalu buat virtual environment python.
cd /opt/pdns
virtualenv -p /usr/bin/python3.8 venvActivate virtual environment.
source /opt/pdns/venv/bin/activateInstalling python dependencies
Jalankan perintah pip berikut untuk menginstall dependensi python pada PowerDNS-Admin.
pip install python-dotenv
pip install -r requirements.txtConfiguring PowerDNS-Admin with MariaDB Database
Edit file /opt/pdns/powerdnsadmin/default_config.py untuk konfigurasi databasenya.
nano /opt/pdns/powerdnsadmin/default_config.py### DATABASE CONFIG
SQLA_DB_USER = 'pdns'
SQLA_DB_PASSWORD = 'pdns'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'pdns'
SQLALCHEMY_TRACK_MODIFICATIONS = True
### DATABASE - MySQL
SQLALCHEMY_DATABASE_URI = 'mysql://{}:{}@{}/{}'.format(
urllib.parse.quote_plus(SQLA_DB_USER),
urllib.parse.quote_plus(SQLA_DB_PASSWORD),
SQLA_DB_HOST,
SQLA_DB_NAME
)Comment bagian DATABASE - SQLite.
### DATABASE - SQLite
# SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')Generating Database Schema and Building Static Files
Migrasikan skema database baru ke database yang akan digunakan untuk PowerDNS-Admin.
export FLASK_APP=powerdnsadmin/__init__.py
flask db upgradeSetelah selesai, generate file statis untuk web PowerDNS-Admin.
yarn install --pure-lockfile
flask assets buildTesting web untuk memastikan statis file berhasil digenerate.
./run.py# ./run.py
* Serving Flask app 'powerdnsadmin' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
[2023-08-10 22:22:15,798] [_internal.py:224] INFO - * Running on all addresses (0.0.0.0)
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://127.0.0.1:9191
* Running on http://192.168.100.31:9191 (Press CTRL+C to quit)
[2023-08-10 22:22:15,802] [_internal.py:224] INFO - * Restarting with stat
[2023-08-10 22:22:19,822] [_internal.py:224] WARNING - * Debugger is active!
[2023-08-10 22:22:19,823] [_internal.py:224] INFO - * Debugger PIN: 122-229-422Akses http://IP:9191 melalui browser Anda.
Deactivate virtual environment untuk melanjutkan ke step berikutnya.
deactivateSetting up Systemd Service for PowerDNS-Admin
Buat file service untuk aplikasi PowerDNS-Admin menggunakan systemd.
nano /etc/systemd/system/powerdns-admin.service[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target
[Service]
PIDFile=/run/powerdns-admin/pid
User=pdns
Group=pdns
WorkingDirectory=/opt/pdns
ExecStartPre=+mkdir -p /run/powerdns-admin/
ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/
ExecStart=/opt/pdns/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.targetSelanjutnya buat file socket systemd.
nano /etc/systemd/system/powerdns-admin.socket[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.targetBuat file pada direktori /etc/tmpfiles.d lalu salin konfigurasi berikut untuk mengatur supaya direktori /run/powerdns-admin dapat dibuat secara otomatis apabila belum
ada.
nano /etc/tmpfiles.d/powerdns-admin.confd /run/powerdns-admin 0755 pdns pdns -Setting permission direktori /opt/pdns.
chown -R pdns:pdns /opt/pdnsReload systemd untuk menerapkan service dan socket yang baru.
systemctl daemon-reloadEnable dsn start service powerdns-admin.service powerdns-admin.socket
systemctl enable --now powerdns-admin.service powerdns-admin.socketCek status service dan socket lalu pastikan statusnya running.
systemctl status powerdns-admin.service powerdns-admin.socketInstalling Nginx as a Reverse Proxy for PowerDNS-Admin
Tambahkan repo nginx.
nano /etc/yum.repos.d/nginx.repo[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueInstall nginx
yum install nginxBuat virtualhost nginx dengan domain local.
/etc/nginx/conf.d/pdns.confserver {
listen *:80;
server_name powerdns-admin.local www.powerdns-admin.local;
index index.html index.htm index.php;
root /opt/pdns;
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/pdns/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;
}
}Test akses http://powerdns-admin.local
Accessing PowerDNS-Admin Installation
Klik Create an account untuk membuat akun baru.
Lalu isi semua form yang tersedia.
Setelah berhasil login, konfigurasi PowerDNS API menggunakan api-key yang sudah ditentukan pada /etc/pdns/pdns.conf
Apabila sudah terhubung selanjutnya buat zone dan tambahkan A record.
Tes untuk memastikan DNS Server dapat berjalan.
# dig muterin.local @192.168.33.22 +short
192.168.33.11