Uygulama

Debian 10/11 ‘de PowerDNS Kurulumu ve Yapılandırması

Bu yazı, PowerDNS’nin Debian 11/Debian 10’a nasıl kolayca kurulacağı ve kullanılacağı hakkındadır. PowerDNS, “ açık kaynaklı DNS yazılımı” Hem Authoritative Server hem de Recursor DNS ürünlerini sağlar.

PowerDNS;

  • çok yüksek alan çözünürlüğü performansı sunar.
  • basit bölge dosyalarından ilişkisel veritabanlarına ve yük dengeleme/yük devretme algoritmalarına kadar çok sayıda farklı arka ucu destekler.
  • daha iyi güvenlik özellikleri sunar.
  • kaynak kodu oldukça küçüktür ve bu da denetimi kolaylaştırır.
  • hem bir kurulumun ölçeklenebilirliğini belirlemede hem de sorunları tespit etmede yardımcı olan, çalışması hakkında birçok istatistik verir.

PowerDNS ‘nin Debian 10/11’e Kurulumu ve Ayarlanması

Sistem Güncellemesini Çalıştırın

Başlamak için sistem paketi önbelleğinizi güncelleyin.

apt update

PowerDNS İlişkisel Veritabanını Yükleyin

Yukarıda belirtildiği gibi, yetkili PowerDNS sunucusu MySQL, PostgreSQL, Oracle ve  BIND bölge dosyaları  gibi  veritabanı arka uçlarından ortak işlemlere  ve  JSON API’lerine kadar farklı arka uçları destekler .

Bu yazıda, ilişkisel veritabanlarından biri, özellikle MariaDB kullanılacaktır.

Bu nedenle, MariaDB’nin en son ve kararlı yayın sürümünü yüklemek için aşağıdaki komutları çalıştırın.

apt install software-properties-common gnupg2 -y
wget -qO- https://mariadb.org/mariadb_release_signing_key.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/mariadb_release_signing_key.gpg

Ardından,  MariaDB depoları sitesine gidin  ve kurulum aynalarınızı seçin. Bu kurulumda  ukfast.co.uk aynalarını kullanıyoruz .

echo "deb [arch=amd64,arm64,ppc64el] http://mirrors.ukfast.co.uk/sites/mariadb/repo/10.6/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list

Sistem paketi önbelleğini güncelleyin ve MariaDB 10.6’yı Debian 11/Debian 10’a yükleyin;

apt update
apt install mariadb-server -y

Kurulum tamamlandıktan sonra, anonim kullanıcıları kaldırmak ve veritabanlarını test etmek için ilk MySQL güvenlik komut dosyasını çalıştırın, uzaktan root oturumu açmaya izin vermeyin.

mysql_secure_installation

systemd-resolved Hizmetini devre dışı bırakın

systemd-resolved hizmeti , yerel uygulamalara ağ adı çözümlemesi sağlar . Bunun yerine PowerDNS kullanmak istiyoruz

systemctl disable --now systemd-resolved

Kurulumu yapabilmeniz için resolv.conf dosyasını özel DNS sunucusu ayrıntılarıyla güncelleyin.

echo "nameserver 8.8.8.8" > /etc/resolv.conf

Ardından, PowerDNS’yi Debian 10/11’e yükleyin. PowerDNS,  pdns-server paket tarafından sağlanır.

En son sürümü yüklediğinizden emin olmak için PowerDNS depolarını yüklemeniz gerekir.

PowerDNS 4.5, bu yazı itibariyle mevcut kararlı sürümdür. Dolayısıyla aşağıdaki repolar;

echo "deb [arch=amd64] http://repo.powerdns.com/debian $(lsb_release -sc)-auth-45 main" > /etc/apt/sources.list.d/pdns.list
cat > /etc/apt/preferences.d/pdns << EOL
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
EOL
wget -qO- https://repo.powerdns.com/FD380FBB-pub.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/pdns.gpg
apt update
apt install pdns-server

Ayrıca PowerDNS MySQL arka ucunu da yüklemeniz gerekir;

apt install pdns-backend-mysql

PowerDNS Veritabanı Oluşturun

PowerDNS ve MySQL arka uç paketleri yüklendiğine göre, MariaDB’de oturum açın ve PowerDNS name server için bir veritabanı oluşturun.

mysql -u root

Tercih ettiğiniz veritabanı adlarını ve veritabanı kullanıcı adlarını kullandığınızdan emin olun. Burada kullanılan isimler standart değildir.

create database kifarunixdemopdns;

Bir PowerDNS veritabanı kullanıcısı oluşturun ve PowerDNS veritabanındaki tüm ayrıcalıkları verin. Parolayı isteğinize göre belirleyin.

grant all on kifarunixdemopdns.* to pdnsadmin@localhost identified by 'PdnSPassW0rd';

Ayrıcalık tablolarını yeniden yükleyin ve veritabanından çıkın;

flush privileges;
quit

PowerDNS Veritabanı Şemasını İçe Aktarın

Varsayılan PowerDNS veritabanı şeması, /usr/share/pdns-backend-mysql/schema/ dizini altında schema.mysql.sql olarak bulunur. Bu şemayı yukarıda oluşturulan PowerDNS veritabanına aktarmanız gerekir;

mysql -u pdnsadmin -p kifarunixdemopdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

PowerDNS veritabanı şeması içe aktarımını doğrulamak için kullanılabilir tabloları listelemeye çalışın;

mysqlshow kifarunixdemopdns
Database: kifarunixdemopdns
+----------------+
|     Tables     |
+----------------+
| comments       |
| cryptokeys     |
| domainmetadata |
| domains        |
| records        |
| supermasters   |
| tsigkeys       |

PowerDNS Veritabanı Bağlantı Ayrıntılarını Yapılandırma

PowerDNS veritabanı bağlantı ayrıntılarını tanımlamak için bir yapılandırma dosyası oluşturun. Özellikleri size uygun şekilde değiştirin.

cat > /etc/powerdns/pdns.d/pdns.local.gmysql.conf << 'EOL'
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql

# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=kifarunixdemopdns
gmysql-user=pdnsadmin
gmysql-password=PdnSPassW0rd
gmysql-dnssec=yes
# gmysql-socket=
EOL

Veritabanı bağlantı ayrıntılarının izinlerini ayarlayın.

chown pdns: /etc/powerdns/pdns.d/pdns.local.gmysql.conf
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf

PowerDNS veritabanı bağlantısını doğrulayın

PowerDNS zaten çalışıyorsa, durdurun ve veritabanına bağlanıp bağlanamadığını doğrulamak için ön planda çalıştırın;

systemctl stop pdns.service
pdns_server --daemon=no --guardian=no --loglevel=9

PowerDNS’i yeniden başlatın

PDNS’nin arka planda çalışmasını durdurmak için Ctrl+C tuşlarına basın.

Yapılan değişiklikleri uygulamak için PowerDNS’i yeniden başlatın.

systemctl restart pdns

DNS bağlantı noktası UDP/TCP bağlantı noktası 53’ün açık olduğunu doğrulayın

ss -alnp4 | grep pdns
udp   UNCONN 0      0            0.0.0.0:53        0.0.0.0:*    users:(("pdns_server",pid=9986,fd=5))                   
tcp   LISTEN 0      128          0.0.0.0:53        0.0.0.0:*    users:(("pdns_server",pid=9986,fd=7))

PowerDNS Forward Zone Kayıtları Oluşturma

Veritabanını doğrudan manipüle ederek bölgeler oluşturabildiğiniz kadar, bunun yerine pdnsutil aracını kullanmanız önerilir.

Bu nedenle, Forward Zone’u oluşturmaya başlamak için;

pdnsutil create-zone kifarunix-demo.com

Çeşitli  PowerDNS çalışma modları vardır . Yerel çalışma modu, PowerDNS için varsayılan moddur. Çalıştırarak listeleyebilirsiniz;

pdnsutil list-all-zones native

Forward Zone DNS Kayıtlarını PowerDNS Veritabanına Ekleme

Kayıt eklemek için aşağıdaki komutu kullanın;

pdnsutil add-record ZONE NAME TYPE [ttl] content

Bölge oluşturduğunuzda, SOA (Yetki Başlangıcı) kaydı otomatik olarak eklenir.

Komutu çalıştırarak detayları gösterebilirsiniz;

pdnsutil list-zone kifarunix-demo.com

Örnek Çıktı;

Nov 25 22:59:40 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
$ORIGIN .
kifarunix-demo.com	3600	IN	SOA	a.misconfigured.dns.server.invalid hostmaster.kifarunix-demo.com 0 10800 3600 604800 3600

SOA biçimi:

primary hostmaster serial refresh retry expire default_ttl

  • primary:  default-soa-name  yapılandırma seçeneği
  • hostmaster: hostmaster@domain-name
  • serial: 0
  • refresh: 10800 (3 saat)
  • retry 3600 (1 saat)
  • expire: 604800 (1 hafta)
  • default_ttl: 3600 (1 saat)

SOA’yı buna göre güncelleyin.

export EDITOR=vim
pdnsutil edit-zone kifarunix-demo.com

Yalnızca default- soa-content adını ve ana bilgisayar yöneticisini şöyle görünecek şekilde güncelleyeceğiz;

; Warning - every name in this file is ABSOLUTE!
$ORIGIN .
kifarunix-demo.com      3600    IN      SOA     ns1.kifarunix-demo.com admin.kifarunix-demo.com 0 10800 3600 604800 3600

Dosyayı kaydedip çıkın ve değişiklikleri uygulayın.

[Error] No NS record at zone apex in zone 'kifarunix-demo.com'
Checked 1 records of 'kifarunix-demo.com', 1 errors, 0 warnings.
There was a problem with your zone
Options are: (e)dit your changes, (r)etry with original zone, (a)pply change anyhow, (q)uit: 
a
Detected the following changes:
-kifarunix-demo.com 3600 IN SOA a.misconfigured.dns.server.invalid hostmaster.kifarunix-demo.com 0 10800 3600 604800 3600
+kifarunix-demo.com 3600 IN SOA ns1.kifarunix-demo.com admin.kifarunix-demo.com 0 10800 3600 604800 3600

(a)pply these changes, (e)dit again, (r)etry with original zone, (q)uit: a
Adding empty non-terminals for non-DNSSEC zone 'kifarunix-demo.com', 1 updates

Ad sunucusu NS kayıtları oluşturun

pdnsutil add-record kifarunix-demo.com @ NS 86400 ns1.kifarunix-demo.com

Ad Sunucusu için A Kayıtları Ekle.

IP’leri uygun şekilde değiştirin.

pdnsutil add-record kifarunix-demo.com ns1 A 120 192.168.58.22

Diğer sistemlerin A kayıtlarını ekleyin;

pdnsutil add-record kifarunix-demo.com news A 120 192.168.59.12
pdnsutil add-record kifarunix-demo.com mail A 120 192.168.57.25

MX kayıtları ekle

pdnsutil add-record kifarunix-demo.com @ MX 120 "10 mail.kifarunix-demo.com"

Buraya kadar iyi, demomuz için bu kadarı yeterli ve kayıtlarımız bu şekilde;

pdnsutil list-zone kifarunix-demo.com
Nov 25 16:08:18 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
$ORIGIN .
kifarunix-demo.com	120	IN	MX	10 mail.kifarunix-demo.com.
kifarunix-demo.com	86400	IN	NS	ns1.kifarunix-demo.com.
kifarunix-demo.com	3600	IN	SOA	ns1.kifarunix-demo.com admin.kifarunix-demo.com 0 10800 3600 604800 3600
news.kifarunix-demo.com	120	IN	A	192.168.59.12
ns1.kifarunix-demo.com	120	IN	A	192.168.58.22

PowerDNS Forward Resolution Doğrulama

Kayıtlar DB’ye yerleştirildikten sonra PowerDNS doğrulaması gerçekleştirelim.

apt install dnsutils -y
dig ns1.kifarunix-demo.com @127.0.0.1
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> ns1.kifarunix-demo.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63327
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;ns1.kifarunix-demo.com.		IN	A

;; ANSWER SECTION:
ns1.kifarunix-demo.com.	120	IN	A	192.168.58.22

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 25 16:09:03 EST 2021
;; MSG SIZE  rcvd: 67
dig MX kifarunix-demo.com @127.0.0.1
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> MX kifarunix-demo.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5092
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;kifarunix-demo.com.		IN	MX

;; ANSWER SECTION:
kifarunix-demo.com.	120	IN	MX	10 mail.kifarunix-demo.com.

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 25 16:09:27 EST 2021
;; MSG SIZE  rcvd: 68

PowerDNS Reverse Zone Kayıtları Oluşturma

Reverse zone oluşturun;

pdnsutil create-zone 58.168.192.in-addr.arpa

Reverse zone SOA’sını güncelleyin;

pdnsutil list-zone 58.168.192.in-addr.arpa

192.168.58.x/x , 192.168.59.x/x , 192.168.57.x /x gibi birden fazla ağınız varsa, aşağıdaki gibi bir reverse zone oluşturabileceğinizi unutmayın;

pdnsutil create-zone 168.192.in-addr.arpa

Adı ve ana bilgisayar yöneticisini, aşağıda gösterildiği gibi görünebilecekleri şekilde güncelleyin.

pdnsutil edit-zone 168.192.in-addr.arpa
Nov 26 13:46:09 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
$ORIGIN .
168.192.in-addr.arpa	3600	IN	SOA	ns1.kifarunix-demo.com admin.kifarunix.demo.com 0 10800 3600 604800 3600

NS Reverse Zone Kaydı Ekle

pdnsutil add-record 168.192.in-addr.arpa @ NS 86400 ns1.kifarunix-demo.com

NS için PTR Kayıtları Ekle

pdnsutil add-record 168.192.in-addr.arpa 22.58 PTR 120 ns1.kifarunix-demo.com

Diğer Etki Alanları PTR Kayıtlarını Ekle

pdnsutil add-record 168.192.in-addr.arpa 12.59 PTR 120 news.kifarunix-demo.com
pdnsutil add-record 168.192.in-addr.arpa 25.57 PTR 120 mail.kifarunix-demo.com

Şimdi genel ters kayıtlar şöyle görünmeli;

pdnsutil list-zone 168.192.in-addr.arpa
Nov 26 13:56:58 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
$ORIGIN .
12.59.168.192.in-addr.arpa	120	IN	PTR	news.kifarunix-demo.com
168.192.in-addr.arpa	86400	IN	NS	ns1.kifarunix-demo.com.
168.192.in-addr.arpa	3600	IN	SOA	ns1.kifarunix-demo.com admin.kifarunix.demo.com 0 10800 3600 604800 3600
22.58.168.192.in-addr.arpa	120	IN	PTR	ns1.kifarunix-demo.com
25.57.168.192.in-addr.arpa	120	IN	PTR	mail.kifarunix-demo.com

PowerDNS Reverse Resolution Doğrulama

Veritabanından çıkın ve her şeyin yolunda olup olmadığını doğrulamak için ters DNS sorgularını çalıştırın.

dig -x 192.168.58.22 @127.0.0.1
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> -x 192.168.58.22 @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15391
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;22.58.168.192.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
22.58.168.192.in-addr.arpa. 120	IN	PTR	ns1.kifarunix-demo.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Nov 26 13:58:15 EST 2021
;; MSG SIZE  rcvd: 91
dig -x 192.168.57.25 @127.0.0.1
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> -x 192.168.57.25 @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10942
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;25.57.168.192.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
25.57.168.192.in-addr.arpa. 120	IN	PTR	mail.kifarunix-demo.com.

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Nov 26 14:00:30 EST 2021
;; MSG SIZE  rcvd: 92

UFW’de DNS Bağlantı Noktasını Açın

Uzak ana bilgisayarların ad çözümlemeleri için PowerDNS’i kullanabilmeleri için, 53/UDP DNS bağlantı noktasını açmanız gerekir;

ufw allow from 192.168.0.0/16 to any port 53 proto udp

Bu, 192.168.0.0/16 alt ağından DNS sorgularına izin verir.

İstemci Sistemlerinde DNS Sunucusunu Yapılandırma

Test amacıyla, PowerDNS ad sunucusu girişi ile /etc/resolv.conf dosyanızın üzerine yazın.

echo "nameserver 192.168.58.22" > /etc/resolv.conf

İstemci DNS Çözümlemesini Doğrulayın

Ardından, herhangi bir DNS yardımcı programını kullanarak DNS çözümlemesi gerçekleştirin.

dig news.kifarunix-demo.com
; <<>> DiG 9.16.22-Debian <<>> news.kifarunix-demo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27385
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;news.kifarunix-demo.com.	IN	A

;; ANSWER SECTION:
news.kifarunix-demo.com. 120	IN	A	192.168.59.12

;; Query time: 4 msec
;; SERVER: 192.168.58.22#53(192.168.58.22)
;; WHEN: Fri Nov 26 00:39:56 EAT 2021
;; MSG SIZE  rcvd: 68

Yazının orijinalini buradan okuyabilirsiniz.