Repository ini berisikan instalasi dan konfigurasi Master-Slave DNS pada PowerDNS

Ilazog authored on 20 Mar 2020
README.md Update README.md 5 years ago
README.md

Master-Slave-DNS-with-PowerDNS

Repository ini berisikan instalasi dan konfigurasi Master-Slave DNS pada PowerDNS

Task

Instalasi dan Konfigurasi

  • PowerDNS
  • Database Server MariaDB 10.1.44
  • Glue Record Domain

Ketentuan pengerjaan:

  • Menggunakan 2 VPS dengan OS centos7
  • Menggunakan domain utama (domain.tld)
  • Menggunakan DNS Server Pdns
  • Menggunakan Master Slave Pdns
  • Menggunakan Database Server MariaDB 10.1.44

Instalasi dan Konfigurasi Pdns dan MariaDB 10.1.44 (Master)

Step 1: Install MariaDB 10.1.44

Untuk melakukan instalasi MariaDB 10.1.44 yang pertama adalah melakukan remote ke IP VPS dengan menggunakan SSH

$ ssh root@ipaddress

Setelah berhasil login ke VPS, lakukan pembaharuan paket/repository dari system operasi Centos7 dengan perintah sebagai berikut:

# yum -y update

Setelah melakukan update system selanjutnya lakukan install epel-release

# yum install epel-release -y

Setelah melakukan install epel-release selanjutnya lakukan instalasi database server mariaDB 10.1.44 dan langkah pertama ialah menambahkan repository untuk mariaDB.

# vi /etc/yum.repos.d/mariadb.repo

Masukan perintah berikut:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Setelah menambahkan repo mariaDB, lakukan instalasi mariaDB dengan perintah berikut:

# yum install mariadb-server

Selanjutnya lakukan enable direktori dan file database mariaDB, berikut perintahnya:

# systemctl enable mariadb

Setelah direktori dan file database mariaDB dienable, jalankan service mariaDB dengan perintah berikut:

# systemctl start mariadb

Apabila paket database server telah selesai diinstall pastikan service mariaDB berjalan dengan status Running.

# systemctl status mariadb
● mariadb.service - MariaDB 10.1.44 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Sat 2020-03-07 20:09:38 WIB; 22h ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 29925 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 29885 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 29883 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 29897 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─29897 /usr/sbin/mysqld

Step 2: Secure mariaDB server and Configure Database

Setelah melakukan instalasi mariaDB Server selanjutnya kita harus mengamankan databese server dengan cara menambahkan password login saat mengakses mariaDB server.

# mysql_secure_installation

Nantinya kita akan melakukan perubahan password untuk root database server, pilih Y dan masukan Password baru yang kuat.

Set root password? [Y/n] Y
New password: 
Re-enter new password:

Apabila ada yang lain silakan klik Y

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Setelah itu kita coba untuk melakukan login dengan password baru yang telah dibuat dengan perintah berikut:

# mysql -u root -p
Input Password

Apabila telah login selanjutnya buat database, user dan password untuk service PowerDNS.

MariaDB [(none)]> Create database testpdns;
MariaDB [(none)]> grant all privileges on testdns.* to pdns@localhost identified by 'pdnspassword';
MariaDB [(none)]> flush privileges;

Setelah itu pilih database testpdns;

MariaDB [(none)]>use testpdns;
MariaDB [testpdns]>

Buat table baru untuk menyimpan record pdns pada database testpdns.

MariaDB [testpdns]> 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 UNSIGNED DEFAULT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]> CREATE UNIQUE INDEX name_index ON domains(name);
MariaDB [testpdns]>CREATE TABLE records (
  id                    BIGINT 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,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]> CREATE INDEX nametype_index ON records(name,type);
MariaDB [testpdns]> CREATE INDEX domain_id ON records(domain_id);
MariaDB [testpdns]> CREATE INDEX ordername ON records (ordername);
MariaDB [testpdns]> CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]> 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) CHARACTER SET 'utf8' DEFAULT NULL,
  comment               TEXT CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]> CREATE INDEX comments_name_type_idx ON comments (name, type);
MariaDB [testpdns]> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
MariaDB [testpdns]> CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
MariaDB [testpdns]> CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  published             BOOL DEFAULT 1,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]>CREATE INDEX domainidindex ON cryptokeys(domain_id);
MariaDB [testpdns]> CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [testpdns]> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

Tambahkan perintah berikut untuk membuat kunci untuk setiap table diatas.

MariaDB [testpdns]> ALTER TABLE records ADD CONSTRAINT `records_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MariaDB [testpdns]> ALTER TABLE comments ADD CONSTRAINT `comments_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MariaDB [testpdns]> ALTER TABLE domainmetadata ADD CONSTRAINT `domainmetadata_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MariaDB [testpdns]> ALTER TABLE cryptokeys ADD CONSTRAINT `cryptokeys_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Lihat hasil dari penambahan table dengan perintah berikut:

MariaDB [testpdns]> show tables;
+--------------------+
| Tables_in_testpdns |
+--------------------+
| comments           |
| cryptokeys         |
| domainmetadata     |
| domains            |
| records            |
| supermasters       |
| tsigkeys           |
+--------------------+
7 rows in set (0.00 sec)

Step 3: Instalasi dan konfigurasi PowerDNS

Setelah membuat database dan table untuk service PowerDNS selanjutnya lakukan instalasi PowerDNS.

# yum -y install pdns pdns-backend-mysql bind-utils

Lakukan konfigurasi file pdns.conf

# cd /etc/pdns/
pdns#  vi pdns.conf

Rubah dan tambahakan perintah berikut.

#i################################
# launch        Which backends to launch and order to query them in
#
# launch=bind (kasih tanda pagar untuk nonaktifkan)
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns (user database)
gmysql-password=y4m4h475 (Password database)
gmysql-dbname=testpdns (nama database)

Save dan Close kemudian enable serta aktifkan service PowerDNS.

# systemctl enable pdns
# systemctl start pdns

Pastikan service PowerDNS berjalan

# systemctl status pdns
● pdns.service - PowerDNS Authoritative Server
   Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-03-15 13:08:11 WIB; 1h 21min ago
     Docs: man:pdns_server(1)
           man:pdns_control(1)
           https://doc.powerdns.com
 Main PID: 2796 (pdns_server)
   CGroup: /system.slice/pdns.service
           └─2796 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-s...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: UDP server bound to 0....
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: UDPv6 server bound to ...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: TCP server bound to 0....
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: TCPv6 server bound to ...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: PowerDNS Authoritative...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: Using 64-bits mode. Bu...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: PowerDNS comes with AB...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: Creating backend conne...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: About to create 3 back...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: Done launching threads...
Hint: Some lines were ellipsized, use -l to show in full.

Instalasi dan Konfigurasi Pdns dan MariaDB 10.1.44 (Slave)

Step 1: Install MariaDB 10.1.44

Untuk melakukan instalasi MariaDB 10.1.44 yang pertama adalah melakukan remote ke IP VPS dengan menggunakan SSH

$ ssh root@ipaddress

Setelah berhasil login ke VPS, lakukan pembaharuan paket/repository dari system operasi Centos7 dengan perintah sebagai berikut:

# yum -y update

Setelah melakukan update system selanjutnya lakukan install epel-release

# yum install epel-release -y

Setelah melakukan install epel-release selanjutnya lakukan instalasi database server mariaDB 10.1.44 dan langkah pertama ialah menambahkan repository untuk mariaDB.

# vi /etc/yum.repos.d/mariadb.repo

Masukan perintah berikut:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Setelah menambahkan repo mariaDB, lakukan instalasi mariaDB dengan perintah berikut:

# yum install mariadb-server

Selanjutnya lakukan enable direktori dan file database mariaDB, berikut perintahnya:

# systemctl enable mariadb

Setelah direktori dan file database mariaDB dienable, jalankan service mariaDB dengan perintah berikut:

# systemctl start mariadb

Apabila paket database server telah selesai diinstall pastikan service mariaDB berjalan dengan status Running.

# systemctl status mariadb
● mariadb.service - MariaDB 10.1.44 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Sat 2020-03-07 20:09:38 WIB; 22h ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 29925 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 29885 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 29883 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 29897 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─29897 /usr/sbin/mysqld

Step 2: Secure mariaDB server and Configure Database

Setelah melakukan instalasi mariaDB Server selanjutnya kita harus mengamankan databese server dengan cara menambahkan password login saat mengakses mariaDB server.

# mysql_secure_installation

Nantinya kita akan melakukan perubahan password untuk root database server, pilih Y dan masukan Password baru yang kuat.

Set root password? [Y/n] Y
New password: 
Re-enter new password:

Apabila ada yang lain silakan klik Y

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Setelah itu kita coba untuk melakukan login dengan password baru yang telah dibuat dengan perintah berikut:

# mysql -u root -p
Input Password

Apabila telah login selanjutnya buat database, user dan password untuk service PowerDNS.

MariaDB [(none)]> Create database Slave_dns;
MariaDB [(none)]> grant all privileges on Slave_dns.* to pdns@localhost identified by 'pdnspassword';
MariaDB [(none)]> flush privileges;

Setelah itu pilih database testpdns;

MariaDB [(none)]>use Slave_pdns;
MariaDB [Slave_pdns]>

Buat table baru untuk menyimpan record pdns pada database testpdns.

MariaDB [Slave_pdns]> 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 UNSIGNED DEFAULT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]> CREATE UNIQUE INDEX name_index ON domains(name);
MariaDB [Slave_pdns]>CREATE TABLE records (
  id                    BIGINT 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,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]> CREATE INDEX nametype_index ON records(name,type);
MariaDB [Slave_pdns]> CREATE INDEX domain_id ON records(domain_id);
MariaDB [Slave_pdns]> CREATE INDEX ordername ON records (ordername);
MariaDB [Slave_pdns]> CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]> 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) CHARACTER SET 'utf8' DEFAULT NULL,
  comment               TEXT CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]> CREATE INDEX comments_name_type_idx ON comments (name, type);
MariaDB [Slave_pdns]> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
MariaDB [Slave_pdns]> CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
MariaDB [Slave_pdns]> CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  published             BOOL DEFAULT 1,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]>CREATE INDEX domainidindex ON cryptokeys(domain_id);
MariaDB [Slave_pdns]> CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [Slave_pdns]> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

Tambahkan perintah berikut untuk membuat kunci untuk setiap table diatas.

MariaDB [Slave_pdns]> ALTER TABLE records ADD CONSTRAINT `records_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MariaDB [Slave_pdns]> ALTER TABLE comments ADD CONSTRAINT `comments_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MariaDB [Slave_pdns]> ALTER TABLE domainmetadata ADD CONSTRAINT `domainmetadata_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MariaDB [Slave_pdns]> ALTER TABLE cryptokeys ADD CONSTRAINT `cryptokeys_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Lihat hasil dari penambahan table dengan perintah berikut:

MariaDB [Slave_pdns]> show tables;
+----------------------+
| Tables_in_Slave_pdns |
+----------------------+
| comments             |
| cryptokeys           |
| domainmetadata       |
| domains              |
| records              |
| supermasters         |
| tsigkeys             |
+----------------------+
7 rows in set (0.00 sec)

Step 3: Instalasi dan konfigurasi PowerDNS

Setelah membuat database dan table untuk service PowerDNS selanjutnya lakukan instalasi PowerDNS.

# yum -y install pdns pdns-backend-mysql bind-utils

Lakukan konfigurasi file pdns.conf

# cd /etc/pdns/
pdns#  vi pdns.conf

Rubah dan tambahakan perintah berikut.

#i################################
# launch        Which backends to launch and order to query them in
#
# launch=bind (kasih tanda pagar untuk nonaktifkan)
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns (user database)
gmysql-password=y4m4h475 (Password database)
gmysql-dbname=Slave_pdns (nama database)

Save dan Close kemudian enable serta aktifkan service PowerDNS.

# systemctl enable pdns
# systemctl start pdns

Pastikan service PowerDNS berjalan

# systemctl status pdns
● pdns.service - PowerDNS Authoritative Server
   Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-03-15 13:08:11 WIB; 1h 21min ago
     Docs: man:pdns_server(1)
           man:pdns_control(1)
           https://doc.powerdns.com
 Main PID: 2796 (pdns_server)
   CGroup: /system.slice/pdns.service
           └─2796 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-s...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: UDP server bound to 0....
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: UDPv6 server bound to ...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: TCP server bound to 0....
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: TCPv6 server bound to ...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: PowerDNS Authoritative...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: Using 64-bits mode. Bu...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: PowerDNS comes with AB...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: Creating backend conne...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: About to create 3 back...
Mar 15 13:08:11 pdns.padiakse.my.id pdns_server[2796]: Done launching threads...
Hint: Some lines were ellipsized, use -l to show in full.

Konfigurasi PowerDNS Master Slave

Step 1: Konfigurasi PowerDNS Master

Lakukan konfigurasi file pdns.conf

# cd /etc/pdns/
pdns#  vi pdns.conf

Lakukan perubahan pada file pdns.conf seperti berikut:

  • Script ini digunakan untuk mengenali alamat IP dari PowerDNS Slave
#################################
# allow-axfr-ips        Allow zonetransfers only to these subnets
#
# allow-axfr-ips=127.0.0.0/8,::1
allow-axfr-ips=117.53.47.189 (isikan alamat IP Pdns Slave)
  • Script ini digunakan untuk menandai bahwa PowerDNS pada VM ini berperan sebagai master
#################################
# master        Act as a master
#
# master=no
master=yes

Step 2: Konfigurasi PowerDNS Slave

Lakukan konfigurasi file pdns.conf

# cd /etc/pdns/
pdns#  vi pdns.conf

Lakukan perubahan pada file pdns.conf seperti berikut:

  • Script ini digunakan untuk mengenali alamat IP dari PowerDNS Master
#################################
# allow-axfr-ips        Allow zonetransfers only to these subnets
#
# allow-axfr-ips=127.0.0.0/8,::1
allow-axfr-ips=103.23.20.70 (Isikan IP Pdns Master)
  • Script ini digunakan untuk mengizinkan alamat IP master agar dapat melakukan perubahan pada PowerDNS Slave
#################################
# allow-dnsupdate-from  A global setting to allow DNS updates from these IP ranges.
#
# allow-dnsupdate-from=127.0.0.0/8,::1
allow-dnsupdate-from=103.23.20.70 (Isikan IP Pdns Master)
  • Script ini digunakan untuk mengizinkan alamat IP master agar bisa memberi info terkait dengan perubahan pada PowerDNS Master ke PowerDNS Slave
#################################
# allow-notify-from     Allow AXFR NOTIFY from these IP ranges. If empty, drop all incoming notifies.
#
# allow-notify-from=0.0.0.0/0,::/0
allow-notify-from=103.23.20.70 (Isikan IP Pdns Master)
  • Script ini digunakan sebagai identitas PowerDNS Slave
#################################
# slave Act as a slave
#
# slave=no
slave=yes
  • Script ini dijalankan untuk melakukan refresh pada PowerDNS Slave dengan interval waktu tertentu
#################################
# slave-cycle-interval  Schedule slave freshness checks once every .. seconds
#
# slave-cycle-interval=60
slave-cycle-interval=60

Konfigurasi Zona dan Add Record DNS di PowerDNS Master

Langkah pertama terlebih dahulu kita buat zona untuk menyimpan record domain.

MariaDB [testpdns]> INSERT INTO domains (name, type) values ('padiakse.my.id', 'Master');

Langkah kedua tambahkan record domain pada table records

MariaDB [testpdns]> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'padiakse.my.id','padiakse.my.id root.padiakse.my.id 1 10380 3600 604800 3600','SOA',86400,NULL);
MariaDB [testpdns]> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'padiakse.my.id','pd1.padiakse.my.id','NS',86400,NULL);
MariaDB [testpdns]> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'padiakse.my.id','pd2.padiakse.my.id','NS',86400,NULL);
MariaDB [testpdns]> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'pd1.padiakse.my.id','103.23.20.70','A',3600,NULL);
MariaDB [testpdns]> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'pd2.padiakse.my.id','117.53.47.189','A',3600,NULL);
MariaDB [testpdns]> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'padiakse.my.id','103.23.20.70','A',3600,NULL);

Langkah ketiga tambahkan kolom change_date pada table records

MariaDB [testpdns]> ALTER TABLE records add change_date INT DEFAULT NULL;

Berikut hasil penambahan record tersebut.

MariaDB [testpdns]> select *from records;
+----+-----------+------------------------+------+----------------------------------------------------------------+-------+------+----------+-----------+------+-------------+
| id | domain_id | name                   | type | content                                                        | ttl   | prio | disabled | ordername | auth | change_date |
+----+-----------+------------------------+------+----------------------------------------------------------------+-------+------+----------+-----------+------+-------------+
|  4 |         1 | pd1.padiakse.my.id     | A    | 103.23.20.70                                                   |  3600 | NULL |        0 | NULL      |    1 |        NULL |
|  5 |         1 | pd2.padiakse.my.id     | A    | 117.53.47.189                                                  |  3600 | NULL |        0 | NULL      |    1 |        NULL |
|  6 |         1 | padiakse.my.id         | A    | 103.23.20.70                                                   |  3600 | NULL |        0 | NULL      |    1 |        NULL |
| 21 |         1 | padiakse.my.id         | NS   | pd1.padiakse.my.id                                             | 86400 |    0 |        0 | NULL      |    1 |        NULL |
| 22 |         1 | padiakse.my.id         | NS   | pd2.padiakse.my.id                                             | 86400 |    0 |        0 | NULL      |    1 |        NULL |
| 40 |         1 | padiakse.my.id         | SOA  | padiakse.my.id. root.padiakse.my.id. 12 10380 3600 604800 3600 | 86400 |    0 |        0 | NULL      |    1 |        NULL |
+----+-----------+------------------------+------+----------------------------------------------------------------+-------+------+----------+-----------+------+-------------+
7 rows in set (0.00 sec)