PowerDNS adalah nameserver serbaguna yang mendukung sejumlah besar backend berbeda mulai dari zonefile sederhana hingga database relasional dan algoritma penyeimbangan beban/failover. PowerDNS mencoba untuk menekankan kecepatan dan keamanan. Dari faktor kestabilan, PowerDNS juga dapat dihandalkan tak kalah dengan server DNS seperti Bind atau lainnya.
Karena berbagai macam kelebihan yang dimiliki PowerDNS, server DNS ini dapat anda jadikan solusi server DNS, karena memiliki kode sumber terbuka yang membantu menyelesaikan namespace. PowerDNS juga mendukung kecepatan tingkat tinggi, redundansi data, dan berbagai backend, yang menjadikannya solusi yang fleksibel dan tangguh.
Panduan ini menunjukkan cara menginstal PowerDNS dan antarmuka Admin PowerDNS di Ubuntu.
1. Persyaratan Sistem
Agar PowerDNS dapat berjaaln secara sempurna dan berdaya guna, ada beberapa persyaraan sistem yang harus anda penuhi diantaranya adalah:
a. IP Addresses
Server akan memerlukan alamat IPv4 privat khusus yang telah anda setup di router, pada artikel ini kami menggunakan IP private 192.168.5.3. Agar lebih sempurna lagi anda juga harus mengetahui alamat IPv4 publik di gateway router anda. Pada contoh ini, kami menggunakan router Indihome dengan gateway IPv4 publik 36.90.11.52.
b. Router Firewall Gateway
Karena kami menggunakan internet Indihome, jadi kita jadikan router Indihome sebagai router firewall gatewaynya. Fungsi router disini untuk meneruskan lalu lintas IPv4 eksternal yang masuk pada port TCP dan UDP 53 ke alamat IPv4 privat server DNS anda.
c. Database server
Anda bebas memilih database server yang akan digunakan sebagai backend PowerDNS. Umumnya MySQL server banyak digunaakn sebagai backen PowerDNS.
d. Server Ubuntu
Ini sudah pasti, karena PowerDNS akan kita jalankan di Ubuntu. Versi Ubuntu yang anda gunakan terserah anda, tapi kami sarankan versi terakhir dan terbaru.
2. Proses Instalasi PowerDNS
Perangkat lunak server PowerDNS ada di repositori paket perangkat lunak Ubuntu. Pada artikel ini kami memasang server dan backend basis data MariaDB.
Install PowerDNS
$ sudo apt-get install pdns-server pdns-backend-mysql
Selama proses instalasi berlangsung, anda akan dimintai kata sandi pengguna root MySQL, sehingga basis data dapat dibuat dan disinkronkan. Dan selama proses instalasi, ada file dan folder yang dibuat secara otomatis sebagai reaksi dari perintah install yang anda jalankan. Berikut ini file dan folder yang akan anda gunakan untuk proses konfigurasi PowerDNS.
- /etc/powerdns/pdns.conf.
- /etc/default/pdns.
- /etc/powerdns/pdns.d/pdns.local.conf.
- /etc/powerdns/pdns.d/pdns.simplebind.conf.
- /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Jangan lupa, anda juga harus membuat user dan group yang kan dikoneksikan ke database MySQL server.
3. Edit Systemd Service Dependencies
Karena kami menggunakan MariaDB server sebagai backend basis data untuk PowerDNS, kita pastikan bahwa PowerDNS selalu dapat terhubung ke server basis data sebelum dijalankan.
File layanan Systemd untuk server PowerDNS /lib/systemd/system/pdns.service dibuat sebagai bagian dari instalasi paket perangkat lunak. Metode yang disarankan adalah membuat file override Systemd dan tidak mengubah apa pun dalam file layanan yang disediakan, karena file tersebut akan hilang saat pembaruan paket perangkat lunak.
Anda dapat membuat file override dengan mudah menggunakan perintah systemctl.
Edit pdns.service
$ sudo systemctl edit pdns.service
Perintah di atas digunakan untuk memulai editor dengan file kosong, tempat Anda dapat menambahkan opsi konfigurasi layanan Systemd kustom Anda sendiri.
[Unit]
BindsTo=mariadb.service
Pernyataan konfigurasi After=mariadb.service memastikan bahwa mariadb.service telah dimulai sepenuhnya sebelum pdns.service dimulai. Layanan ini sudah disertakan dalam berkas layanan yang diinstal oleh paket perangkat lunak.
Baris BindsTo=mariadb.service memastikan bahwa jika layanan Basis Data dihentikan, server PowerDNS juga akan dihentikan. Setelah Anda menyimpan dan keluar dari editor, berkas akan disimpan sebagai /etc/systemd/system/pdns.service.d/override.conf dan Systemd akan memuat ulang konfigurasinya.
systemctl show pdns.service |grep -E "After=|BindsTo="
Secara default PowerDNS menggunakan file zona bergaya BIND untuk menyimpan data DNS.
Karena hanya satu backend yang dapat aktif pada satu waktu dan kami memasang backend MariaDB, kami perlu menghapus "backend BIND" default Ubuntu. Hal ini dapat anda lakukan hanya dengan menghapus file konfigurasinya.
Edit pdns.service
$ sudo rm /etc/powerdns/pdns.d/pdns.simplebind.conf
Setelah itu, anda perlu mengubah file /etc/powerdns/pdns.d/pdns.local.gmysql.conf, seperti contoh di bawah ini.
/etc/powerdns/pdns.d/pdns.local.gmysql.conf
# MySQL Configuration
#
# Launch gmysql backend
launch=gmysql
# gmysql parameters
#gmysql-host=localhost
#gmysql-port=
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=********
gmysql-dnssec=yes
gmysql-socket=/var/run/mysqld/mysqld.sock
4. Membuat Backend Data Base Server
Pada proses ini anda harus membuat database kosong baru bernama pdns di server MariaDB atau MySQL.
Buat database baru
$ mysql -u root -p
GRANT SELECT ON pdns.* TO 'pdns'@'127.0.0.1'
IDENTIFIED BY 'password123';
FLUSH PRIVILEGES;
EXIT;
File powerdns.sql berisi struktur database PowerDNS seperti yang ditunjukkan dalam dokumentasi PoweDNS. Di bawah ini kami berikan contoh file script powerdns.sql yang harus anda jalankan di database MariaDB/MySQL.
Script file powerdns.sql
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id INT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id),
) Engine=InnoDB;
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB;
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
ALTER TABLE `records` ADD CONSTRAINT `records_ibfk_1` FOREIGN KEY (`domain_id`)
REFERENCES `domains` (`id`) ON DELETE CASCADE;
Setelah anda menjalankan script di atas, lanjutkan dengan membuat struktur tabel di bawah ini di database PowerDNS yang baru kita buat.
$ mysql -u root -p pdns < powerdns.sql
5. Konfigurasi PowerDNS
Langkah ini merupakan langkah terpenting selama proses pemasangan PowerDNS. setelah instalasi selesai, PowerDNS memiliki file konfigurasi utama, anda harus mengedit file tersebut (sesuaikan dengan kebutuhan sistem anda). Berikut ini kami berikan contoh script file /etc/powerdns/pdns.conf.
/etc/powerdns/pdns.conf
# Autogenerated configuration file template
#
#################################
# Secondary slaves
#
# puck.nether.net
# 204.42.254.5
# 2001:418:3f4::5 - notify, axfr
#
# ns1.rollernet.us
# 208.79.240.3
# 2607:fe70:0:3::b - notify, axfr
#
# ns2.rollernet.us
# 208.79.241.3
# 2607:fe70:0:4::b - notify, axfr
#
# ns2.afraid.org
# 208.43.71.243 - notify
# 2607:f0d0:3001:e::2
# 174.37.196.55 - axfr
#
#################################
# only-notify Only send AXFR NOTIFY to these IP addresses or netmasks.
# The default is to notify the world.
#
#only-notify=204.42.254.5 2001:418:3f4::5 2607:fe70:0:3::b 2607:fe70:0:4::b 208.43.71.243
#################################
# allow-axfr-ips If enabled, restrict zonetransfers to originate from these
# IP addresses
allow-axfr-ips=127.0.0.1 ::1 192.0.2.0/24 2001:db8::/64
#################################
# allow-recursion List of netmasks that are allowed to recurse
#
allow-recursion=127.0.0.1
#################################
# allow-recursion-override Local data even about hosts that don't exist will
# override the internet. (on/off)
#
# allow-recursion-override=
#################################
# cache-ttl Seconds to store packets in the PacketCache
#
# cache-ttl=20
#################################
# chroot If set, chroot to this directory for more security
#
# chroot=/var/spool/powerdns
#################################
# config-dir Location of configuration directory (pdns.conf)
#
config-dir=/etc/powerdns
#################################
# config-name Name of this virtual configuration - will rename the binary image
#
# config-name=
#################################
# control-console Debugging switch - don't use
#
# control-console=no
#################################
# daemon Operate as a daemon
#
daemon=yes
#################################
# default-soa-name name to insert in the SOA record if none set in the backend
#
# default-soa-name=a.misconfigured.powerdns.server
#################################
# disable-axfr Disable zonetransfers but do allow TCP queries
#
disable-axfr=no
#################################
# disable-tcp Do not listen to TCP queries
#
# disable-tcp=no
#################################
# distributor-threads Default number of Distributor (backend) threads to start
#
# distributor-threads=3
#################################
# fancy-records Process URL and MBOXFW records
#
# fancy-records=no
#################################
# guardian Run within a guardian process
#
guardian=yes
#################################
# launch Which backends to launch and order to query them in
#
# launch=
#################################
# load-modules Load this module - supply absolute or relative path
#
# load-modules=
#################################
# local-address Local IP address to which we bind
#
local-address=192.0.2.41
#################################
# local-ipv6 Local IP address to which we bind
#
local-ipv6=2001:db8::41
#################################
# local-port The port on which we listen
#
local-port=53
#################################
# log-dns-details If PDNS should log failed update requests
#
log-dns-details=yes
#################################
# log-failed-updates If PDNS should log failed update requests
#
log-failed-updates=yes
#################################
# use-logfile Use a log file
#
#use-logfile=yes
#################################
# logfile Logfile to use
#
#logfile=/var/log/pdns.log
#################################
# logging-facility Log under a specific facility
#
logging-facility=0
#################################
# loglevel Amount of logging. Higher is more. Do not set below 3
#
loglevel=4
#################################
# master Act as a master
#
master=yes
#################################
# max-queue-length Maximum queuelength before considering situation lost
#
# max-queue-length=5000
#################################
# max-tcp-connections Maximum number of TCP connections
#
# max-tcp-connections=10
#################################
# module-dir Default directory for modules
#
module-dir=/usr/lib/powerdns
#################################
# negquery-cache-ttl Seconds to store packets in the PacketCache
#
# negquery-cache-ttl=60
#################################
# out-of-zone-additional-processing Do out of zone additional processing
#
# out-of-zone-additional-processing=no
#################################
# query-cache-ttl Seconds to store packets in the PacketCache
#
# query-cache-ttl=20
#################################
# query-logging Hint backends that queries should be logged
#
# query-logging=no
#################################
# queue-limit Maximum number of milliseconds to queue a query
#
# queue-limit=1500
#################################
# query-local-address The IP address to use as a source address for sending
# queries.
query-local-address=192.0.2.41
query-local-address6=2001:db8::41
#################################
# receiver-threads Number of receiver threads to launch
#
# receiver-threads=1
#################################
# recursive-cache-ttl Seconds to store packets in the PacketCache
#
# recursive-cache-ttl=10
#################################
# recursor If recursion is desired, IP address of a recursing nameserver
#
# recursor=
#################################
# setgid If set, change group id to this gid for more security
#
setgid=pdns
#################################
# setuid If set, change user id to this uid for more security
#
setuid=pdns
#################################
# skip-cname Do not perform CNAME indirection for each query
#
# skip-cname=no
#################################
# slave Act as a slave
#
# slave=no
#################################
# slave-cycle-interval Reschedule failed SOA serial checks once every .. seconds
#
# slave-cycle-interval=60
#################################
# smtpredirector Our smtpredir MX host
#
# smtpredirector=a.misconfigured.powerdns.smtp.server
#################################
# soa-minimum-ttl Default SOA mininum ttl
#
# soa-minimum-ttl=3600
#################################
# soa-refresh-default Default SOA refresh
#
# soa-refresh-default=10800
#################################
# soa-retry-default Default SOA retry
#
# soa-retry-default=3600
#################################
# soa-expire-default Default SOA expire
#
# soa-expire-default=604800
#################################
# soa-serial-offset Make sure that no SOA serial is less than this number
#
# soa-serial-offset=0
#################################
# socket-dir Where the controlsocket will live
#
socket-dir=/var/run
#################################
# strict-rfc-axfrs Perform strictly rfc compliant axfrs (very slow)
#
# strict-rfc-axfrs=no
#################################
# urlredirector Where we send hosts to that need to be url redirected
#
# urlredirector=127.0.0.1
#################################
# webserver Start a webserver for monitoring
#
webserver=yes
#################################
# webserver-address IP Address of webserver to listen on
#
webserver-address=127.0.0.1
#################################
# webserver-password Password required for accessing the webserver
#
webserver-password=********
#################################
# webserver-port Port of webserver to listen on
#
webserver-port=8081
#################################
# webserver-print-arguments If the webserver should print arguments
#
# webserver-print-arguments=no
#################################
# wildcard-url Process URL and MBOXFW records
#
# wildcard-url=no
#################################
# wildcards Honor wildcards in the database
#
# wildcards=
#################################
# version-string What should PowerDNS return for version
# allowed methods are anonymous / powerdns / full / custom
version-string=powerdns
include-dir=/etc/powerdns/pdns.d
a. REST API
Buat string acak untuk digunakan sebagai kunci API untuk mengakses server oleh aplikasi lain.
$ pwgen -cns 64 1
# cache-ttl=20
#################################
# chroot If set, chroot to this directory for more security
#
# chroot=/var/spool/powerdns
#################################
# config-dir Location of configuration directory (pdns.conf)
#
config-dir=/etc/powerdns
#################################
# config-name Name of this virtual configuration - will rename the binary image
#
# config-name=
#################################
# control-console Debugging switch - don't use
b. Izinkan Transfer Zona
#################################
# allow-axfr-ips If enabled, restrict zonetransfers to originate from these
# IP addresses
allow-axfr-ips=127.0.0.1 ::1 192.0.2.0/24 2001:db8::/64
#################################
c. Mengaktifkan Transfer Zona
#################################
# disable-axfr Disable zonetransfers but do allow TCP queries
#
disable-axfr=no
#################################
d. Alamat IP Server
#################################
# local-address Local IP address to which we bind
#
local-address=192.0.2.41
#################################
# local-ipv6 Local IP address to which we bind
#
local-ipv6=2001:db8::41
#################################
e. Buat Server Master
#################################
# master Act as a master
#
master=yes
#################################
Secara default PowerDNS akan menggunakan alamat IP terakhir yang ditetapkan sebagai alamat sumber untuk mengirimkan pesan PEMBERITAHUAN DNS ke server slave.
Server slave tidak akan menerima pesan PEMBERITAHUAN apa pun, jika pesan tersebut tidak berasal dari server master yang ditetapkan dari suatu domain. Berikut ini adalah cara kami memberi tahu PowerDNS untuk menggunakan alamat IPv4 dan IPv6 khusus untuk koneksi keluar.
Buat kunci API
#################################
# query-local-address The IP address to use as a source address for sending
# queries.
query-local-address=192.0.2.41
query-local-address6=2001:db8::41
#################################
Langkah selanjutnya adalah anda lakukan restart terhadap PowerDNS
Restart PowerDNS
$ sudo service pdns restart
f. Cara Import Zone-Files
Jika Anda sudah memiliki file zona, dari server DNS sebelumnya atau penyedia pihak ketiga, Anda dapat mengimpornya dengan cara berikut.
Import zona file
$ zone2sql --zone=example.net.zone \
--zone-name=example.net \
--gmysql --transactions --verbose \
> example.net.zone.sql
1 domains were fully parsed, containing 49 records
$ mysql -u root -p pdns < example.net.zone.sql
Enter password:
Sampai sini proses instalasi dan konfigurasi PowerDNS telah selesai, sangat simpel dan sangat mudah bukan. Bila anda belum puas dengan satu server PowerDNS, lanutkan dengan mengkonfigurasi server PowerDNS sebagai Slave.
Posting Komentar
別ページに移動します