What is Bind9?

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:
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.
- Ubuntu için: https://ubuntu.com/server/docs/service-domain-name-service-dns
- Docker için: https://hub.docker.com/r/internetsystemsconsortium/bind9
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