- 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)
- ```