Pardus üzerinde MariaDB destekli PowerDNS kurulumu

Ali Orhun Akkirman - May 10 '20 - - Dev Community

Pardus 19.x üzerinde ve doğal olarak Debian 10 üzerinde MariaDB veritabanı kullanılarak PowerDNS sunucusu kuracağız.

Öncelikle aşağıdaki komut ile mariadb sunucusunu ve istemcisini kurmamız gerekmekte:

apt install mariadb-server mariadb-client -y
Enter fullscreen mode Exit fullscreen mode

Bu arada mariadb'nin güvenliği ve diğer konulara hiç girmediğim için mevcut ve basit şekilde bir kurulum yapacağız. Fakat varsayılanda kullandığım kullanıcı ve parolaları kullanmamak daha verimli olacaktır.

Mariadb istemcisine giriş yapmak için aşağıdaki komutu yazıp parola ekranını diyerek geçiyoruz.

mysql -u root -p
Enter fullscreen mode Exit fullscreen mode

Bu adımdan sonra mariadb istemci arayüzündeyiz. Burada powerdns veritabanı oluşturup, powerdns kullanıcısı ve password parolası ile sadece localhost üzerinden giriş yapılacak şekilde yetki vereceğiz:

CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Enter fullscreen mode Exit fullscreen mode

İstemciyi kapatmadan önce powerdns veritabanına giriş yapıp gerekli tabloları oluşturabiliriz:

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 CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';


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';

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 CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Enter fullscreen mode Exit fullscreen mode

Eğer herhangi bir hata almadıysanız muhtemelen aşağıdaki komut da oluşturduğunuz tabloları göstermesi gerekmektedir:

show tables;
Enter fullscreen mode Exit fullscreen mode

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

Tabloları görmekte bir problem yaşamdıysanız CTRL + D komutu ile çıkış yapıp normal bash'e düşebilirsiniz. Burada var olan systemd'nin resolver servisini hem kapatıp hem de açılışta da kapalı gelmesi için aşağıdaki komutları uygulamalısınız:

systemctl disable systemd-resolved
systemctl stop systemd-resolved
Enter fullscreen mode Exit fullscreen mode

Daha sonra /etc/resolv.conf'u kendi istediğiniz gibi elle düzeltmeniz gerekir. Bu kısım hakkınd detaylı bilginiz yoksa ellemeyebilirsiniz.

Ve son adım olarak powerdns'i kurabiliriz:

apt install pdns-server pdns-backend-mysql
Enter fullscreen mode Exit fullscreen mode

Kurulum sonrasında oluşturduğunuz veritabanı, kullanıcı adı ve parola bilgilerine göre aşağıdaki dosyayı düzenlemeniz gerekmektedir:

echo """
launch+=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=password
gmysql-dnssec=yes""" > /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Enter fullscreen mode Exit fullscreen mode

pdns servisini yeniden başlatıp durumuna baktığınızda aktif yazısını görüyorsanız sorunsuzca kurulum gerçekleşmiş demektir:

systemctl restart pdns
systemctl status pdns
Enter fullscreen mode Exit fullscreen mode

Bu kısımdan sonra temel web arayüzü için PowerDNS-Admin paketini kurabilirsiniz ama biz o kısma gelmiyoruz. Fakat çalışıp çalışmadığını kontrol etmek için aşağıdaki komutlarla power.lab isminde bir zone oluşturup, ns ve veli isimli 2 A kaydı ekleme işlemi yapabilirsiniz:

pdnsutil create-zone power.lab ns.power.lab
pdnsutil add-record power.lab ns A 192.168.1.89
pdnsutil add-record power.lab veli A 192.168.1.88
Enter fullscreen mode Exit fullscreen mode

Bu komutları uzak bir linux makinesinden kontrol edebilmek için (dnsutils paketi yüklü kabul ederek) aşağıdaki komutu yazmalısınız. 192.168.1.89 powerdns kurduğunuz sunucunun IP adresidir:

nslookup veli.power.lab 192.168.1.89
Enter fullscreen mode Exit fullscreen mode

Çıktısı aşağıdaki gibi sonuç vermesi gerekmektedir:

unknown query class: IN
Server: 192.168.1.89
Address: 192.168.1.89#53

Name: veli.power.lab
Address: 192.168.1.88

Bu sonucu alıyorsanız sunucunuz temel olarak sorunsuz şekilde kurulmuştur.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .