Debian 10/11 Bind DNS Server Kurulumu

Fatih Arslan Tugay - Jan 22 '22 - - Dev Community

Başlangıç

Bu yazımızda Debian 10/11 tabanlı Pardus 19.5 ve 21 sunucularda bind9 DNS Server kurulumunu ve ayarlamalarını göstereceğiz. Başlamadan önce değinmemiz gereken birkaç nokta var.

  • Yazıdaki IP ve makine adresleri tamamen sizlere konuyu kavratmak adına oluşturulmuştur. Lütfen kurulum ve kullanım boyunca kendi adreslerinizi kullanmayı ihmal etmeyiniz.
  • Resimlerin bazı kısımlarında üstü kapatılan bölümler kullanılan makinelerin IP bloklarını gizlemek adına kapatılmıştır. Beyaz renkle kapatılan bölümlerin büyük bir kısmını aşağıda da belirtileceği üzere 14.8.18 (reverse zone kısımlar için 18.8.14) olarak kabul edebilirsiniz.
  • Kurulumda kullanılan konfigürasyon dosyalarını GitHub reposunda bulabilirsiniz.

Kurulum

Öncelikle olası bir hatadan kaçınmak için sistemimizi güncelleyelim.

sudo apt update -y
sudo apt upgrade -y
Enter fullscreen mode Exit fullscreen mode

Ardından ilgili paketleri yükleyerek sistemimize bind9 kurulumu yapalım.

sudo apt install bind9 bind9utils
Enter fullscreen mode Exit fullscreen mode

Kurulum tamamlandıktan sonra BIND'ı IPv4 moduna ayarlayacağız. Bunun için bir text editor ile (tercihen nano veya vi) /etc/default/bind9 dosyasının içeriğini aşağıdaki hale getiriyoruz.

sudo nano /etc/default/bind9
Enter fullscreen mode Exit fullscreen mode
# run resolvconf?
RESOLVCONF=no

# startup options for the server
OPTIONS="-4 -u bind"
Enter fullscreen mode Exit fullscreen mode

DNS Server Yapılandırma

NOT: Yapılandırma sırasında içeriği değiştirilen dosyalardaki syntax çok önemlidir. En ufak noktalı virgül, space veya tab hatası hatalara sebep olabilmektedir. Bu sebeple lütfen siz de komutları ve dosyaların içeriğini örneklerdeki gibi uygulayınız.

Kullanacağımız iki makinenin bilgilerini aşağıdaki tabloda görebilirsiniz. Birçok konfigürasyon yapacağımızdan ve bu konfigürasyonlarda makinelerin hostname, IP gibi bilgilerini kullanacağımızdan konfigürasyon dosyalarının hangi değişkenine ne yazmamız gerektini aşağıdaki tabloya bakarak anlayabiliriz.

Rol Hostname IP Oluşacak FQND*
DNS Server (nameserver) testdnsserver 14.8.18.121 testdnsserver.testzone.local
DNS Client testdnsclient 14.8.18.120 testdnsclient.testzone.local

*FQDN = Fully-Qualified Domain Name

*Oluşturacağımız DNS bölgesinin (zone) ismi tamamen bize bağlıdır. Lokalde denemeler yapacağımız için kendi isteğimize bağlı olarak "testzone.local" adında bir zone oluşturacağız.

  • Öncelikle konfigürasyonlarımızı yapacağımız dizine gidelim (bundan sonraki işlemleri bu klasör içerisinden yapacağız yani yazacağımız komutlar da buradaki pathe göre olacak). Daha sonra ilk dosyamızı düzenlemeye başlıyoruz. named.conf.options dosyasında güvenilir ağ üyelerini (host) ve forwarderları belirleyeceğiz.
cd /etc/bind/
sudo nano named.conf.options
Enter fullscreen mode Exit fullscreen mode
### DOSYA ICERIGI ###
acl "trusted" {
        14.8.18.121; # dns serverim
        14.8.18.120; # dns clientim
};

options {
        directory "/var/cache/bind";
        recursion yes;
        allow-recursion { trusted; }; # yukarida trusted olarak tanimladigim hostlara recursive query izni veriyorum
        listen-on { 14.8.18.121; }; # nameserver ozel IP adresi

        forwarders {
                8.8.8.8; # google dns
                8.8.4.4;
        };

        dnssec-validation auto;
        listen-on-v6 { any; };
};
Enter fullscreen mode Exit fullscreen mode

Recursive modda clientlardan domain talebi geldiğinde ve istenen domain nameserverda bulunamadığında nameserver diğer nameserverlara talebi iletir, bulunamadığında ise öneride bulunur. Döngü halinde çalışır. Iterative modda ise nameserverda istenen domain varsa size IP'yi verir, yoksa bilmediğini söyler. Profosyonel DNS Serverlarında recursive modun kapatılması önerilir çünkü kötü amaçlı aşırı sayıda yapılan request saldırıları ile DNS Server meşgul edileceğinden kendi işlevini de yerine getiremez hale gelir. Fakat biz lokalde çalıştığımızdan açık bırakabiliriz.

  • Ardından alan yani zoneları belirleyeceğiz. named.conf.local dosyası boş durumda olabilir. Biz örnek bir dosya oluşturacağız. İsterseniz kopyala yapıştır yaparak, isterseniz de named.conf.default-zones dosyasından şablonu kopyalayarak gerekli konfigürasyonlarla kendi dosyanızı oluşturabilirsiniz.

    • Yukarıda DNS alan adımızın testzone.local olacağından bahsetmiştik. Buradaki ayarlarımızı da bu alan adına göre yapıyoruz. Oluşturacağımız db dosyasının adı da db.testzone.local oluyor. (/etc/bind dizininin altında zones/ klasörü oluşturacağız ve burada zoneların db dosyalarını düzenleyeceğiz. Şimdilik yalnızca file pathi veriyoruz.)
    • Reverse Lookup Zone adımızı 18.8.14.in-addr.arpa, db dosyamızın adını ise db.14.8.18 olarak verdik. Örneğin IP bloğumuz 192.168.1.0 olsaydı zone adımız 1.168.192.arpa, db dosyamızın adı ise db.192.168.1 olacaktı.
sudo nano named.conf.local
Enter fullscreen mode Exit fullscreen mode
### DOSYA ICERIGI ###
zone "testzone.local" {
        type master;
        file "/etc/bind/zones/db.testzone.local";
};

zone "18.8.14.in-addr.arpa" {
        type master;
        file "/etc/bind/zones/db.14.8.18";
};
Enter fullscreen mode Exit fullscreen mode

Forward Lookup Zone

İlk olarak zonelar için ayrı bir klasör oluşturuyoruz. Daha sonra ise db.local dosyasını (oluşturacağımız dosyaya syntax olarak benzediğinden bu şablon üzerinde oynama yapmak daha kolay olacaktır) Forward Lookup Zone adımızı vererek buraya kopyalayalım. Bu isim named.conf.local dosyasında verdiğimizle aynı, yani db.testzone.local olacak. Ardından bu dosyanın konfigürasyonuna geçebiliriz. Birkaç temel bilgi vermek gerekirse:

sudo mkdir zones
cp db.local zones/db.testzone.local
Enter fullscreen mode Exit fullscreen mode
### DOSYA ICERIGI ###
;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     testdnsserver.testzone.local. root.testzone.local. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers - NS records
        IN      NS      testdnsserver.testzone.local.

; name servers - A records
testdnsserver.testzone.local.   IN      A       14.8.18.121

; 14.8.18.0/24 - A records
testdnsclient.testzone.local.   IN      A       14.8.18.120
;
Enter fullscreen mode Exit fullscreen mode

Reverse Lookup Zone

Reverse Lookup Zone dosyası, ters DNS aramaları için DNS PTR kayıtlarını tanımladığımız yerdir. Bu zone dosyasını da yine zones klasörünün altında oluşturacağız. Yine db.local dosyasını Reverse Lookup Zone adımızı vererek buraya kopyalayalım. Bu isim named.conf.local dosyasında verdiğimizle aynı, yani db.14.8.18 olacak. Ardından bu dosyanın konfigürasyonuna geçebiliriz.

cp db.local zones/db.14.8.18
Enter fullscreen mode Exit fullscreen mode
### DOSYA ICERIGI ###
;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     testdnsserver.local. root.testdnsserver.local. (
                              2         ; Serial 
                         604800         ; Refresh
                          86400         ; Retry 
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers  
        IN      NS      testdnsserver.testzone.local.
; PTR records
121     IN      PTR     testdnsserver.testzone.local.
120     IN      PTR     testdnsclient.testzone.local.
Enter fullscreen mode Exit fullscreen mode

Server Konfigürasyonu Kontrolleri

named-checkconf ve named-checkzone komutları işe oluşturduğumuz dosyaları kontrol edebiliriz.

  • Eğer hata yoksa named-checkconf komutunda herhangi bir hata ile karşılaşmayız, varsa bize hatanın ne olduğunu ve hangi dosyada olduğunu göstermektedir.
  • named-checkzone komutunu ise named-checkzone <ZONE_ADI> <ZONE_DOSYASI> şeklinde çalıştırdığımızda OK çıktısını almalıyız.

Aşağıdaki örnekte yazdığımız dosyaları öncelikle named-checkconf ile kontrol ettik. Daha sonra named.conf.local dosyasında bir yeri bozup aynı komutla tekrar kontrol ettiğimizde bize hatayı gösteriyor. Daha sonra düzeltip tekrar named-checkconf dediğimizde ise hatayla karşılaşmıyoruz. En son ise iki zone dosyamızı da kontrol ederek OK çıktısını alıyoruz.

1

Kontrolleri sağladıktan sonra bind9 servisimi yeniden başlatarak statusumu kontrol ediyorum.

sudo systemctl restart bind9
sudo systemctl status bind9
Enter fullscreen mode Exit fullscreen mode

2

Client Konfigürasyonu

Client tarafında ise DNS Nameserver'imizi DNS sunucularımızın listesine eklememiz gerekiyor. Bu sunucular sunucumuzun /etc/resolv.conf dosyasında tutulmaktadır ve maksimum 3 adet nameserver verilebilir. Bu dosyayı kendi nameserverimize göre düzenleyelim.

sudo nano /etc/resolv.conf
Enter fullscreen mode Exit fullscreen mode
### DOSYA ICERIGI ###
search testzone.local   
nameserver 14.8.18.121
#Diger (onceden bulunan) nameserverlerimizi buraya yazabiliriz
Enter fullscreen mode Exit fullscreen mode

Daha sonrasında ise nslookup veya nslookup komutlarıyla DNS Serverimizden doğru yanıt alıp alamadığımıza bakıyoruz. Doğru IP ve hostnameler verdiğimizde yanıtı alabiliyoruz fakat yanlış bir IP veya hostname denediğimizde "server can't find" çıktısı alıyoruz.

3

Ayrıca dig komutuyla daha da ayrıntılı çıktı alabiliriz.

4

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