Instal PowerDNS dengan MariaDB Backend di Fedora 30/29/CentOS 7

Dalam panduan ini, kita akan mempelajari cara menginstal PowerDNS dengan backend MariaDB di Fedora 30/29/CentOS 7. PowerDNS adalah server DNS opensource yang kuat yang menyediakan service DNS alternatif untuk BIND. Ini menyediakan dua produk nameserver yaitu, Server Resmi dan Rekursor.

Sementara Server Resmi hanya menjawab pertanyaan tentang domain yang diketahuinya, Recursor di sisi lain tidak memiliki pengetahuan tentang domain itu sendiri secara default, ia akan selalu berkonsultasi dengan server otoritatif lain untuk menjawab pertanyaan yang diberikan kepadanya.

Server PowerDNS otoritatif mendukung berbagai backend mulai dari database backend seperti MySQL, PostgreSQL, Oracle dan  file zona BIND  hingga  proses bersama  dan  JSON API.

Instal PowerDNS dengan MariaDB Backend di Fedora 30/29/CentOS 7

Instal PowerDNS di Fedora 30/29/CentOS 7

Perbarui dan tingkatkan sistem Anda.

yum update yum upgrade

Instal MariaDB

Dalam panduan ini, kita akan menggunakan MariaDB sebagai backend PowerDNS. Karenanya sebelum Anda dapat melanjutkan, Anda perlu menginstal dan mengkonfigurasi MariaDB.

Lihat panduan kami tentang cara menginstal MariaDB 10.3 dengan mengikuti tautan di bawah ini;

Instal MariaDB 10.3 di Fedora 30

Instal MariaDB 10.3 di CentOS 7

Mengonfigurasi Backend MariaDB untuk PowerDNS

Buat Pengguna dan Database PowerDNS MariaDB

Setelah instalasi selesai, lanjutkan untuk membuat database dan user MariaDB untuk PowerDNS.

mysql -u root -p
create database powerdns; grant all privileges on powerdns.* to [email protected] identified by '[email protected]';

Selanjutnya, gunakan database PowerDNS yang dibuat di atas dan jalankan perintah berikut untuk membuat struktur tabel.

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 UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' 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, 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 ordername ON records (ordername);
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;
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;
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);

Selanjutnya, Anda perlu menambahkan batasan kunci asing ke tabel untuk mengotomatiskan penghapusan catatan, materi kunci, dan informasi lainnya setelah penghapusan domain dari tabel domain. Ini memastikan bahwa tidak ada catatan, komentar, atau kunci untuk domain yang sudah Anda hapus.

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

Instal PowerDNS

Setelah konfigurasi database selesai, lanjutkan untuk menginstal PowerDNS.

Di Fedora 30, PowerDNS tersedia di repo default dan dengan demikian dapat diinstal dengan menjalankan perintah di bawah ini;

dnf install pdns pdns-backend-mysql bind-utils

Untuk CentOS 7, Anda perlu menginstal repo EPEL.

yum install epel-release yum install pdns pdns-backend-mysql bind-utils

Konfigurasikan Backend PowerDNS

PowerDNS menggunakan bind sebagai backend default. Oleh karena itu, buka konfigurasi PowerDNS dan beri komentar,launch=bind, ganti dengan baris berikut. Ganti Anda konfigurasi yang sesuai.

vim /etc/pdns/pdns.conf
... #launch=bind launch=gmysql gmysql-host=127.0.0.1 gmysql-user=dnsadmin gmysql-dbname=powerdns [email protected]...

Verifikasi koneksi PowerDNS ke Backend

Sebelum Anda dapat memulai PowerDNS, jalankan di latar depan seperti yang ditunjukkan di bawah ini untuk memverifikasi koneksi ke backend MariaDB.

pdns_server --daemon=no --guardian=no --loglevel=9

Jika semuanya baik-baik saja, maka;

... Jun 05 01:24:36 Creating backend connection for TCP Jun 05 01:24:36 gmysql Connection successful. Connected to database 'powerdns' on '127.0.0.1'. Jun 05 01:24:36 About to create 3 backend threads for UDP Jun 05 01:24:36 gmysql Connection successful. Connected to database 'powerdns' on '127.0.0.1'. Jun 05 01:24:36 gmysql Connection successful. Connected to database 'powerdns' on '127.0.0.1'. Jun 05 01:24:36 gmysql Connection successful. Connected to database 'powerdns' on '127.0.0.1'. Jun 05 01:24:36 Done launching threads, ready to distribute questions

Jika Anda menemukan error, harap perbaiki sebelum Anda dapat melanjutkan.

Menjalankan PowerDNS

Untuk memulai dan mengaktifkan PowerDNS untuk berjalan pada boot sistem;

systemctl start pdns systemctl enable pdns

Untuk memeriksa status PowerDNS,

systemctl status pdns ● pdns.service - PowerDNS Authoritative Server Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-06-05 01:29:33 EAT; 3min 9s ago Docs: man:pdns_server(1) man:pdns_control(1) https://doc.powerdns.com Main PID: 4066 (pdns_server) Tasks: 8 (limit: 2351) Memory: 4.3M CGroup: /system.slice/pdns.service └─4066 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no

Jika FirewallD berjalan, izinkan DNS melewatinya.

firewall-cmd --add-service=dns --pe
rmanent firewall-cmd --reload

Anda dapat memverifikasi bahwa port DNS 53 dibuka.

ss -altnp | grep 53 LISTEN 0 128 0.0.0.0:53 0.0.0.0:* users:(("pdns_server",pid=4066,fd=8)) LISTEN 0 128 [::]:53 [::]:* users:(("pdns_server",pid=4066,fd=9))

Nah, Anda telah berhasil menginstal PowerDNS dengan MariaDB dikonfigurasi sebagai backend. Dalam panduan berikutnya, kita akan belajar bagaimana mengelola PowerDNS menggunakan alat berbasis web yang disebut Poweradmin.

Author: fungsi