What is Bind9?

Internet Systems Consortium

   DNS (Domain Name Server), IP adreslerini ve tam nitelikli etki alanı adlarını (FQDN) birbirine eşleyen bir İnternet hizmetidir. Bu şekilde DNS, IP adreslerini hatırlama ihtiyacını azaltır. DNS çalıştıran bilgisayarlara name server (ad sunucuları) denir. Linux'ta bir name server çalıştırmak için kullanılan en yaygın program olan BIND (Berkley Internet Naming Daemon) kullanılır.

   BIND 9 çok esnek ve tam özellikli bir DNS sistemi olacak şekilde geliştirilmiştir. Uygulamanız ne olursa olsun BIND 9 muhtemelen gerekli özelliklere sahiptir. İlk, en eski ve en yaygın kullanılan çözüm olarak BIND 9'a aşina olan ağ mühendislerinin sayısı diğer sistemlerden çok daha fazladır.  BIND 9, MPL 2.0 lisansı altında lisanslanan şeffaf açık kaynaktır.

requirements

  • Ubuntu Server 18.04 LTS - 22.04 LTS (Minimum Kaynak Gereksinimleri (1vCpu, 1GB Ram, 5GB HDD)
  • Sudo yetkilerine sahip bir kullanıcı veya root kullanıcısı
  • Firewall İlgili Portlara İzin Verilmesi (53)
  • Container olarak kullanılacak ise Docker&Docker-Compose kurulu olması gerekmektedir.
  •  Statik IP Adres

Daha fazla bilgi için bakınız:

https://www.isc.org/bind/

Bind9 DNS Install

   BIND kurmak için resmi sitesinde, Ubuntu, CentOS/Fedora için güncellenmiş ISC paketlerimizi ve standart Debian paketini yükleyebilirsiniz. Docker'ı tercih ediyorsanız resmi Docker imajı'da kullanabilirsiniz.

Her zamanki gibi kuruluma başlamadan önce sunucu güncelleme işlemlerini gerçekleştirelim.

sudo apt update && sudo apt upgrade -y && sudo reboot 

İhtiyacımız olan gerekli portlara, güvenlik duvarı üzerinden kalıcı olarak izin verelim. 

sudo ufw allow 53/tcp
sudo ufw allow 53/udp

Ubuntu'nun (17.10+) ve Fedora'nın (33+) modern sürümleri, systemd-resolve varsayılan olarak önbelleğe alma DNS çözümleyicisi uygulamak üzere yapılandırılmıştır. Bu, Bind9'un 53 numaralı portu dinlemesini önleyecektir. Bu yüzden aşağıdaki işlemleri gerçekleştirerek çözümleyici şu şekilde devre dışı bırakılmalıdır.

Eski Ubuntu sürümlerinin (yaklaşık 17.04) kullanıcılarının dnsmasq'ı devre dışı bırakması gerekecektir.

sudo sed -r -i.orig 's/#?DNSStubListener=yes/DNSStubListener=no/g' /etc/systemd/resolved.conf
sudo sh -c 'rm /etc/resolv.conf && ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf'
sudo systemctl restart systemd-resolved 

Şimdi  bind9 ve yardımcı araçların kurulumu yapalım.

sudo apt install -y bind9 bind9utils bind9-doc dnsutils 

Kurulum öncesi ilk olarak bind9 için yapılandırma dosyasını en basit şekliyle düzenleyelim. Yapılandırma dosya yolları aşağıdaki gibidir. 

  • /etc/bind/named.conf.options: Genel DNS sunucu ayarları
  • /etc/bind/named.conf.local: Zone'ların tanımlandığı dosya (A kaydı vb.)
  • /etc/bind/named.conf.default-zones: localhost gibi varsayılan bölgeler, bunun tersi ve kök ipuçları

İlk olarak genel dns sunucu ayarlarını yapmak için yapılandırma dosyasını düzenleyelim.

sudo vi /etc/bind/named.conf.options 

Açılan pencerede her şeyi silin ve aşağıdaki yazanları kopyalayın.

  • listen on port 53 → DNS sunucunun hangi interface cevap vereceğini belirlediğimiz alan.
  • allow-query → DNS sorgulamalarının hangi istemcilere cevap vereceğini belirlediğimiz alan.
  • recursion Hangi zone'lara cevap vereceği alandır. Eğer sistem LAN üzerinde kullanılacak ise yes, WAN üzerinde kullanılacak ise no seçeneğini kullanmalısınız.
  • forwarders → DNS sunucusunun kendi üzerinde tutmadığı diğer domainlerin isim çözümlemesi için başka bir DNS sunucusuna sorma işlemine buradan gerçekleştirir. ISP DNS bilgilerini veya istediğiniz DNS sunucusunu girebilirsiniz.

Kurumsal yerlerde bazen google vb. dns adresi engelli olabilir. Forwarders kısmından kendi dns sunucusunuza yönlendirebilirsiniz.

options {
        directory "/var/cache/bind";
        allow-query { any; };
        recursion yes;
        querylog yes;
        listen-on port 53 { any; };
        allow-recursion { any; };
        dnssec-validation no;
        allow-transfer { none; };
forwarders {
                8.8.8.8;
           };

        listen-on-v6 { any; };
};

Dosyayı kayıt edip çıkınız.

:wq!

Konfigürasyon dosyasında hata olmadığı aşağıdaki komut ile kontrol edin.

named-checkconf 

Son olarak işlemlerin geçerli olması için bind9 servisini yeniden başlatın.

 sudo systemctl restart bind9.service 

Eğer her şey yolunda ise, Client cihazın DNS adresine bind9 sunucunuzun ip adresini yazarsanız internete çıkacaktır.

Master (Primary) Zone Oluşturulması

!!! Dosyaları düzenlerken çok dikkat edilmesi gerekir. Aksi halde DNS hizmeti çalışmayacaktır. Aşağıdaki işlemleri Webmin kurarak bir web tarayıcısından kolay bir şekilde yapabilirsiniz.

Zone oluşturma işlemi iki aşamadan oluşmaktadır. İlk olarak zone oluşturmak. Bunu yapmak için konfigürasyon dosyası bir editör düzenleyici ile açalım.

sudo vi /etc/bind/named.conf.local

Açılan pencerede, aşağıdaki metinleri en son satıra kopyalayın ve example.com yazan yerleri kendi belirlediğiniz zone ismi ile değiştirin. 

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
        }; 

Kayıt edip çıktıktan sonra, zone kayıtlarını oluşturmadan bazı genel bilgileri tazelemekte fayda var.

  • $TTL:  Yaşam Zamanını değerini belirtir. Burada saniye cinsinden belirtilen süre diğer DNS sunuculara bu alanın kayıtlarını ne kadar süreyle önbellege alması gerektiğini söyler.
  • SOA (Start of Authority): Domaine ait global parametrelerin belirtildiği ana kayıttır.
  • @ işareti, alan adının kendisini gösterir.
  • IN, Internet ve sınıf demektir.
  • NS: Name server ismi.
  • MX: Mail Server Bilgisi. Birden fazla eklenildiğinde öncelikte belirtilmelidir. En düşük sayı en yüksek önceliktedir.
  • A: IPv4 Adresinde (32 bits) domaine karşılık gelen IP
  • AAAA: IPv6 adresinde (128 bits) domaine karşılık gelen IP
  • CNAME: Alias olarak kullanılır.
  • PTR: A Kaydının tam tersi gibi çalışır.

Şimdi ikinci aşamada zone ayarları gerçekleştirmek için kurulum sırasında bize hazır örnek dosya verilmiştir. Bu dosyadan bir tane kendi zone adımıza uygun şekilde klonlayalım ve konfigürasyon dosyasını düzenleyelim.

sudo cp /etc/bind/db.example.com /etc/bind/db.mehmet.com
sudo vi /etc/bind/db.mehmet.com

Açılan pencerede example.com yazan yerleri kendi zone ismimiz ile değiştirelim. Define the hosts in this zone kısmına A, MX,NS, CNAME kayıtlarınızı yazabilirsiniz. NS1 A kaydına sunucunun ip adresi yazılması gerekmektedir.

$TTL 86400
@       IN      SOA     ns1.example.com. root.example.com. (
                        2003021833      ;serial
                        3600            ;Refresh
                        1800            ;Retry
                        604800          ;Expire
                        86400 )         ;minimum ttl

;Define the name servers
example.com.        IN      NS      ns1.example.com.


;Define the hosts in this zone
www     IN      A       IP_ADRESI
ns1     IN      A       Bind9_IP_ADRESI 

Aşağıdaki komutu kullanarak sözdizimini tekrar kontrol edelim.

sudo named-checkconf /etc/bind/named.conf.local

Son olarak işlemlerin geçerli olması için bind9 servisini yeniden başlatın.

 sudo systemctl restart bind9.service 

Kayıtları kontrol etmek için aşağıdaki gibi dig aracını kullanabilirsiniz.

dig -t ns mehmet.com @local-ip 

Eğer her şey yolunda ise, Client cihazın DNS zone adreslerini çözdüğünü görebilirsiniz.

Benzer adımları uygulayarak istediğiniz isimlerde farklı zone oluşturabilirsiniz.

Slave (Secondary) Zone Oluşturulması

Buraya kadar aslında Master kurulumu ve test işlemleri tamamlanmıştır. Ancak siz birde read-only olarak slave kurulumu yapmak isterseniz aşağıdaki işlemlere devam edebilirsiniz.

Şimdi bir tane daha farklı bir sunucu kurup statik bir IP adresi verip, yukarıdaki gibi bind9 kurulumu gerçekleştirin. İlk olarak MASTER sunucu üzerinde ufak bir ayar gerçekleştirelim. 

Öncelikle MASTER sunucu üzerinde zone ayarlarını yapacağımız dosyayı açalım.

sudo vi /etc/bind/named.conf.options 

Açılan pencerede, yukarıda oluşturduğumuz zone zaten gözükecektir. Buna ek olarak allow-transfer ve also-notify kısımlarını en son satıra kopyalayın. Akabinde example.com yazan yerleri kendi belirlediğiniz zone ismi ile değiştirin ve  ip adreslerine Slave sunucunun ip adresini yazınız.

//MasterZone 
zone "example.com" {
 type master;
 file "/etc/bind/db.example.com";
//secondary server IP address
 allow-transfer {10.10.10.5;};
 also-notify {10.10.10.5;};
 notify yes;
}; 

Şimdi Slave sunucu üzerinde ilk olarak genel dns sunucu ayarlarını yapmak için yapılandırma dosyasını düzenleyelim.

sudo vi /etc/bind/named.conf.options 

Açılan pencerede her şeyi silin ve aşağıdaki yazanları kopyalayın.

Kurumsal yerlerde bazen google vb. dns adresi engelli olabilir. Forwarders kısmından kendi dns sunucusunuza yönlendirebilirsiniz.

options {
        directory "/var/cache/bind";
        allow-query { any; };
        recursion yes;
        querylog yes;
        listen-on port 53 { any; };
        allow-recursion { any; };
        dnssec-validation no;
        allow-transfer { none; };
forwarders {
                8.8.8.8;
           };

        listen-on-v6 { any; };
}; 

Zone transferi için konfigürasyon dosyası bir editör düzenleyici ile açalım.

sudo vi /etc/bind/named.conf.local

Açılan pencerede, aşağıdaki metinleri en son satıra kopyalayın. Akabinde example.com yazan yerleri kendi belirlediğiniz zone ismi ile değiştirin ve ip adreslerine Master sunucunun ip adresini yazınız.

//SlaveZone 
zone "example.com" {
 type slave;
 //Master zone name
 file "db.example.com";
 //Master server IP address
 masters {10.10.10.6;};
}; 

Aşağıdaki komutu kullanarak sözdizimini tekrar kontrol edelim.

sudo named-checkconf /etc/bind/named.conf.local

Son olarak işlemlerin geçerli olması için bind9 servisini yeniden başlatın.

 sudo systemctl restart bind9.service 

   Zone dosyasının aktarılıp aktarılmadığını kontrol edelim. Genellikle “/var/cache/bind” konumuna aktarılır. İlgili klasörü listeleyip kontrol edelim.

ls /var/cache/bind 

Kayıtları kontrol etmek için aşağıdaki gibi dig aracını kullanabilirsiniz.

dig -t ns mehmet.com @localhost
Blog'a Dön