Fauzi Syahrul R
Fauzi Syahrul R Seorang pembelajar yang menekuni bidang Elektronika dan Cloud Computing

Membuat DNS Server menggunakan PowerDNS pada Centos7


Membuat DNS Server menggunakan PowerDNS pada Centos7

DNS Server tidak mungkin dipisahkan di era internet saat ini dimana server ini dibutuhkan sebagai penyimpan record-record DNS pada domain seperti A Record, TXT Record, MX Record dll, detail dapat dilihat pada laman berikut Penjelasan DNS Record.

Suatu IP Server tidak mudah dikenali apabila tidak dikenalkan sebagai nama domain, hal tersebut membutuhkan DNS Server sebagai penghubung diantara keduanya. PowerDNS (pdns) yang merupakan Open Source DNS Server yang berbasis C++ merupakan salah satu pilihan untuk membuat DNS Server. PowerDNS Authoritative server dapat dikonfigurasikan melalui backend yang berbeda seperti file Bind, RDBMS MySQL, PostgreSQL, SQLite3 atau LDAP.

Pada kali ini penulis akan membuat PowerDNS server Authoritative server dengan MariaDB sebagai databasenya dan menggunakan Poweradmin sebagai portal manajemen DNS nya pada Centos7

Persiapan

  • Server/instance Centos7 (pada kali ini menggunakan spesifikasi 1 core 2 GB RAM)

Penyelesaian

Langkah 1 – Install EPEL dan Remi Repositories

Sebelum melakukan penginstallan silakan anda dapat melakukan update terlebih dahulu pada server.

1
2
$ sudo –i
# yum update –y 

Selanjutnya anda dapat melakukan penginstalan dependecies untuk PHP 7.2.

1
2
# yum -y install epel-release
# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Setelah menginstall dependecies lakukan penginstallan ‘yum-utils’ dan enable PHP 7.2 Repository.

1
2
# yum -y install yum-utils
# yum-config-manager --enable remi-php72

Langkah 2 - Install dan Konfigurasi MariaDB

MariaDB disini akan diperuntukkan sebagai database server yang berfungsi menyimpan data DNS Record yang nanti akan dibuat. Lakukan penginstalan MariaDB dengan menggunakan command berikut :

Install MariaDB using the following yum command.

1
# yum -y install mariadb mariadb-server

Setelah instalasi sukses jalankan service MariaDB

1
2
3
# systemctl start mariadb  
# systemctl enable mariadb  
# systemctl status mariadb

Selanjutya lakukan konfigurasi root password pada MariaDB, anda dapat menggunakan tool ‘mysql_secure_installation’

1
# mysql_secure_installation

Silakan dapat dilakukan konfigurasi password baru pada MariaDB dengan password yang kuat.

1
2
3
4
5
6
7
8
Set root password? [Y/n] Y  
New password:   
Re-enter new password: 

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

Apabila telah selesai silakan dapat membuat database baru pada MariaDB. Silakan dapat login terlebih dahulu dan buat database baru.

1
# mysql -u root –p

Berikut contoh pembuatan database ‘powerdns’ yang memberikan semua privileges kepada user ‘pdns’

1
2
3
4
create database powerdns;  
grant all privileges on powerdns.* to pdns@localhost identified by 'pdnspassword123';  
flush privileges;  
exit;

Setelah itu alankan query pada MySQL/MariaDB untuk membuat Tabel dan Kolom data seperti berikut ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use powerdns;  
    
  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                    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,  
   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);  
    
  quit;

Langkah 3 - Install PowerDNS

Setelah menginstall database maka silakan dapat dilanjukan menginstall service PowerDNS

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

Setelah diinstall silakan dapat membuka file /etc/pdns/pdns.conf menggunakan editor kesayangan anda seperti berikut:

1
# vi /etc/pdns/pdns.conf

Sesuaikan dan tambah baris data seperti berikut ini:

1
2
3
4
5
6
7
#launch=bind  
  
launch=gmysql  
gmysql-host=localhost  
gmysql-user=pdns  
gmysql-password=pdnspassword123  
gmysql-dbname=powerdns

*Sesuaikan nama user dan password yang anda konfigurasikan sebelumnya pada langkah 2

Simpan dan tutup editor.

Setelah ditambahkan silakan jalankan service PowerDNS.

1
2
3
# systemctl start pdns  
# systemctl enable pdns  
# systemctl status pdns

Setelah itu anda perlu melakukan pembukaan port TCP 53 agar dapat diakses secara public. Pada kali ini penulis menggunakan fitur pada virtualisasi openstack dengan menambahkan rule TCP 53 seperti berikut: Anda dapat menyesuaikan dengan service/fitur firewall yang anda gunakan dengan membukan port TCP 53.

Untuk memastikan service PowerDNS berjalan silakan lakukan pengecekan degan command berikut:

1
2
netstat -tap | grep pdns  
netstat -tulpn | grep 53

Apabila berjalan dengan baik maka akan tampil output sebagai berikut:


Langkah 4 - Install Poweradmin

Setelah service PDNS telah berjalan maka kita perlu menginstall Poweradmin dimana berfungsi sebagai portal DNS manajemen dimana nanti kita akan melakukan konfigurasi DNS seperti penambahan record DNS dan lainnya.

Silakan dapat menginstall httpd web server dan PHP packages terlebih dahulu.

1
2
# yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext  
# yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli

Setelah instalasi sukses selanjutnya dapat dijalankan service httpd yang telah diinstall.

1
2
3
# systemctl start httpd  
# systemctl enable httpd  
# systemctl status httpd

Selanjutnya silakan menuju folder /var/www/html dan download source code untuk poweradmin.

1
2
3
# cd /var/www/html/  
# yum install wget -y  
# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

Lakukan ekstrak dan rename filder tersebut.

1
2
# tar xvf poweradmin-2.1.7.tgz  
# mv poweradmin-2.1.7/ poweradmin/

Setelah itu anda perlu melakukan pembukaan port TCP 80 & 443 agar dapat diakses secara public. Pada kali ini penulis menggunakan fitur pada virtualisasi openstack dengan menambahkan rule TCP 80 & 443 seperti berikut:

Anda dapat menyesuaikan dengan service/fitur firewall yang anda gunakan dengan membukan port TCP 80 & 443.


langkah 5 – Konfigurasi Poweradmin

Buka browser dan ketik server IP ditambah /poweradmin/install/ seperti contoh berikut :

http://IP-ADDRESS/poweradmin/install/

Pilih bahasa lalu klik ‘Go to Step 2’.

Pilih ‘Go to Step 3’.

Selanjutnya lakukan konfigurasi database, silakan dapat dimasukkan data seperti pada langkah 2. Setelah selesai bisa dilanjutkan dengan klik ‘Go to Step 4’.

*Catatan
Hostname = localhost
Username = pdns
Password = pdnspassword123
DBname = powerdns
Port = 3306
Poweradmin administrator password = bebas, password ini digunakan pada saat login poweradmin.

Setelah itu buatlah user baru yang memilki privileges terbatas dan server name sesuai hostname server anda juga primary & secondary name server yang akan digunakan. Setelah selesai dapat diklik tombol ‘Go to Step 5’.

Selanjutnya pada halaman ini anda perlu menyalin command yang diberikan dan menjalankannya pada MySQL/MariaDB anda.

Salin lalu login pada MySQL/MariaDB anda sebagai root lalu paste.

1
2
mysql -u root -p  
PASSWORD  
1
2
3
4
5
GRANT SELECT, INSERT, UPDATE, DELETE  
ON powerdns.*  
TO 'fauzi1976'@'localhost'  
IDENTIFIED BY 'YOUR_PASSWORD;
flush privileges;

Setelah selesai selanjutnya dapat kembali ke browser lalu klik ‘Go to Step 6’. Pada halaman ini anda perlu menambahkan code PHP seperti dibawah ini pada file /var/www/html/poweradmin/inc/config.inc.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

$db_host  = 'localhost';

$db_user  = 'fauzi1976';

$db_pass  = 'YOURPASSWORD';

$db_name  = 'powerdns';

$db_type  = 'mysql';

$db_layer  = 'PDO';

$session_key  = 'tcK0GU232RjGG33r1v81h3RRH8tKSqLZhWdCyxzQP#2tMS';

$iface_lang  = 'en_EN';

$dns_hostmaster  = 'server.koalabiru.my.id';

$dns_ns1  = 'ns1.koalabiru.my.id';

$dns_ns2  = 'ns2.koalabiru.my.id';
1
# vi /var/www/html/poweradmin/inc/config.inc.php

Lakukan copy file htaccess apabila anda ingin URL dapat digunakan pada Dynamic providers lainnya dan lakukan penghapusan directory install.

1
2
3
# cd /var/www/html/poweradmin  
# cp install/htaccess.dist .htaccess  
# rm -rf /var/www/html/poweradmin/install

Kembali lagi pada web browser dan login pada portal poweradmin menggunakan user admin dan password yang dibuat sebelumnya.

http://IP-Address/poweradmin/

*Catatan

Username = admin
Password = Poweradmin administrator password

Berikut tampilan Poweradmin dashboard


Langkah 6 - Membuat Zone dan DNS Records

Pada kali ini kita akan mencoba membuat DNZ Zone untuk domain ‘zetenzet.my.id’. Pada Poweradmin dashboard pilih menu ‘Add master zone’.

Isi Zone Name dengan domain yang akan dibuat ‘zetenzet.my.id’ lalu klik ‘Add zone’.

Apabila telah dibaut silakan dapat pilih menu ‘List zones’ lalu klik tombol ‘edit’ untuk Zone ‘zetenzet.my.id’.

Setelah itu tambah DNS Record pada kali ini penulis menambahkan A Record setelah itu dapat klik ‘Add record’ untuk menyimpannya

Jangan lupa tambahkan record NS sesuai alamat Name Server yang telah dibuat.


Langkah 7 – Mengatur Name Server pada Domain

Sebelum itu lakukan pointing Name Server yang telah dibuat sebelumnya pada DNS Management domain ke IP Public server Powerdns yang telah dibuat.

*Progasi penambahan DNS Record berlangsung masksimal 1x24 jam

Apabila propagasi telah selesai kita bisa melakukan pengaturan Name Server domain ‘zetenzet.my.id’ pada portal domain berada.

*Progasi perubahan Name Server berlangsung masksimal 2x24 jam

Apabila propagasi telah selesai kita bisa melakukan pengecekan A Record yang ditambahkan pada domain ‘zetenzet.my.id’ pada laman https://dnschecker.org/.

Apabila dilihat A Record mulai terpropagasi pada domain ‘zetenzet.my.id’

Referensi : https://www.howtoforge.com/how-to-install-powerdns-and-poweradmin-on-centos-7/

comments powered by Disqus