Gereksinimler
DNS, servis olarak kritik olmasından dolayı devamlılığın garanti edilmesi edilmesi gereken en temel servislerdendir. DNS servisinde yaşanan herhangi bir problemde bu DNS altyapısını kullanan diğer tüm servisleri doğrudan etkileyecektir. DNS servisinde kesinti ihtimalini minimum düzeye indirmek için en az iki sunuculu bir yapınızın olması gerekmektedir. Bu yazımda bir tane Master bir tane de Slave olmak üzere iki sunuculu bir DNS yapısının kurulumundan bahsedeceğim. Master sunucu üzerinde oluşturulan her alan adı kaydı (zone) slave sunucusuna replike edilecek. Böylelikle sunuculardan birinin down olması durumunda servis kesintisi yaşamamış olacak.
Master DNS Server
dns01.ndsr.local
1.1.1.5
Slave DNS Server
dns02.ndsr.local
1.1.1.6
Kurulum öncesi sunucuların güncel olması için yum update -y ile tüm güncelemeleri yükleyelim.
Firewall Ayarı
Sunucu üzerindeki firewall'ı kullanmayacaksanız bu adımı geçebilirsiniz. Ancak firewall kullanılacaksa dns sorgularının geçebilmesi için tcp ve udp 53 portuna izin vermemiz gerekmektedir.
FW ayarı için her iki sunucuda /ect/sysconfig/iptables dosyasını açık aşağıdaki satırları eklememiz gerekiyor.
vi /etc/sysconfig/iptables
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
Satırları ekledikten sonra iptables içeriği aşağıdaki gibi olacaktır.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Parametreleri ekledikten sonra iptables servisini aşağıdaki şekilde yeniden başlatarak yeni kuralları okumasını sağlıyoruz.
service iptables restart
Kurulum
Her iki sunucu üzerinde gerekli paketlerin kurulumuna başlayabiliriz.
yum install bind bind-utils bind-chroot -y
Yum üzerinden bind ve bind'in chroot ortamında çalıştırılmasını sağlayan bind-chroot paketlerini de kurduk.
Not: Chroot Nedir
Chroot, sunucu servisleri ve uygulamalar için yeni bir kök (/) dizini tanımlar. Kısaca çalıştırılacak olan servis ya da uygulama için gerekli kütüphaneler, yapılandırma dosyaları, sürücü dosyaları (device file) bu servis için belirlenen kök dizinde bulunan ilgili yollara (path) kopyalanır ve sunucu yazılımları belirlenen kök dizini altında çalıştırılır.
Yapılandırma
Bind'ın ana yapılandırma dosyası /etc/named.conf dur. Yapılandırma dosyalarıda /var/named altında bulunur.
Master DNS Sunucusunun Kurulumu
Master'da temel olarak bind'in hangi ip adresi üzerinden hizmet vereceği, hangi ip yada ip'lere zone transfer izni vereceğini belirteceğiz.
vi /etc/named.conf # konfigürasyon dosyasını açıyoruz. Dosyayı açtıktan sonra işaretlediğim yerleri kendi sisteminize göre düzenlemeniz gerekiyor.
acl recurseallow { 1.1.1.0/24; }; # Recursive query'lere izin vereceğimiz network'ü belirtiyoruz.
options {
listen-on port 53 { 127.0.0.1; 1.1.1.5; }; #53 portunun hangi ip'ler üzerinden dinleneceğini belirtiyoruz.
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; #DNS sorgularının nereden yapılacağına izin veriyoruz.
allow-recursion { recurseallow; }; #En üstte tanımladığımız ACL'ye ekliyoruz. ACL'de belirttiğimiz networkten gelen sorguların hepsi için çözümleme yapıp geri dönecektir.
allow-transfer { localhost; 1.1.1.6; }; # hangi ip'lerin zone transfer izni olduğunu belirtiyoruz.
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
-----------------
Zone tanımlama
Yine /etc/named.conf dosyasını açarak en altta bulunan include satırının üzerine zone tanımlarınız ekleyin.
zone "ndsr.local" IN { #alan adının ne olduğunu tanımlıyoruz.
type master; #alan adına ait zone'un master olduğunu belirtiyoruz.
file "ndsr.local.zone"; #ilgili alan adına ait zone dosyasının adını belirtiyoruz. default olarak /var/named/ndsr.local konumunda bulunacaktır.
allow-update { none; }; # master zone üzerinde dinamik update'e izin vermediğimizi belirtiyoruz.
};
Tanımlamalarımızı bitirdikten sonra /var/named/ altında zone dosyamızı olurturalım.
vi /var/named/ndsr.local
$TTL 86400
@ IN SOA dns01.ndsr.local. root.ndsr.local. (
2016072301 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
; NS sunucularini belirtiyoruz:
IN NS dns01.ndsr.local.
IN NS dns02.ndsr.local.
; NS'lere ait kayitlar. (bu domain ayni zamanda ana zone oldugundan ns1 ve ns2'yi de tanimliyoruz.):
dns01 IN A 1.1.1.5
dns02 IN A 1.1.1.6
; ve diger tum kayitlar.
node01 IN A 1.1.1.11
node02 IN A 1.1.1.12
www IN CNAME @
deneme IN A 1.1.1.100
$TTL 86400: Default TTL değeridir. buradaki değer saniye cinsinden diğer dns sunucularının bizim dns sunucumuza yapıp aldığı cevabı cacheleme süresidir.
@ IN SOA dns01.ndsr.local. root.ndsr.local: Alan adı için SOA (Start of Authority) kaydını tarif eder. Domaine ait global parametrelerin belirtildiği ana kayıttır. Her Zone için bir adet SOA kaydı bulunmalıdır. @ işareti alan adının kendine işaret eder. IN kaydın class'ını. SOA rr'ını (recource record). dns01.ndsr.local alan adının master nameserver'ını, root.ndsr.local ilgili alan adından sorumlu kişinin mail adresini belirtir. Bu mail adresinde "@" yerine "." kullanılır.
2016072301 ;Serial: Kayıda ait seri numarasıdır. Zone üzerinde yaptığınız her değişiklikte bu rakamı arttırmak gerekiyor. Slave sunucu master üzerinde herhangi bir değişiklik olup olmadığını bu numaraya bakarak belirler.
3600 ;Refresh: Slave sunucunun master sunucuyu hangi sıklıkla (saniye) değişiklik kontrolü yapacağını belirtir.
1800 ;Retry: Slave sunucunun replikasyon sırasında master sunucuya bağlanamaması durumunda ne kadar süre sonra tekrar deneyeceğini belirtir.
604800 ;Expire: Slave’in update işlemi için master’a toplam olarak ne kadar süre ile bağlanamaması durumunda kaydı expire edip bu alan adı ile ilgili sorgulara cevap vermemesini burada belirliyoruz. Buradaki örnekte slave 7 gün boyunca master’a bağlanamazsa bu zone’u iptal edecek ve bu alan adı ile ilgili sorgulara cevap vermeyecektir.
86400 ;Minimum TTL: Default TTL’den hariç olmak üzere negative (NXDOMAIN – non-existent domain) cevapları için TTL süresini belirlemektedir.
Tanımlamalarımız Master tarafı için tamamlandı. Şimdi bind servislerini startup'a ekleyelim ki sunucu reboot olduğunda servis otomatik olarak çalışmasını sağlayalım.
chkconfig named on && service named start
Master DNS in çalışıp çalışmadığını kontrol etmek için dig komutunu kullanabilirsiniz.
dig www.ndsr.local @1.1.1.5
Slave DNS Sunucusunun Kurulumu
vi /etc/named.conf # işaretli olan yerleri master sunucuda yaptığımız gibi kendinize göre düzenlemeniz gerekmektedir.
acl recurseallow { 1.1.1.0/24; };
options {
listen-on port 53 { 127.0.0.1; 1.1.1.6; }; #slave sunucunuzun hangi ip üzerinden 53 portunu dinleyeceğini belirtiyoruz.
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
allow-recursion { recurseallow; };
# recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
Zone Tanımlamaları
Slave tarafında named.conf dosyasına master sunucu ve zone bilgisini akliyoruz. kendi sisteminize göre düzenlemeniz gerekmektedir. /etc/named.conf dosyasındaki INCLUDE ifadesinin üstüne ekliyoruz.
zone "ndsr.local" IN {
type slave;
file "slaves/ndsr.local.zone";
masters { 1.1.1.5; };
};
Dosyayı kaydedip çıktıktan sonra servisimizi startup'a ekliyoruz.
chkconfig named on && service named start
Dns servisinin çalışabilirliğini kontrol etmek için yine dig komutunu kullanabilirsiniz.
dig www.ndsr.local @1.1.1.6
Master sunucu üzerinde herhangi bir değişiklik yaptığınızda ilk olarak seri numarasını değiştirmeyi unutmayın. Seri numarayı değiştirip gerekli eklemeleri yaptıktan sonra replikasyonu elle tetiklemek için aşağıdaki komutu kullanabilirsiniz.
rndc reload
Yeni bir Zone ekledikten sonrada aşağıdaki komutu çalıştırmanız gerekmektedir.
rndc reconfig
NOT: DNS yapınızda herhangi bir nedenle sorunla karşılaşırsanız, problem tespiti için named-checkconfig ve named-checkzone komutlarını kullanabilirsiniz.
named-checkconf /etc/named.conf
named-checkzone ndsr.local /var/named/ndsr.local.zone
Hiç yorum yok:
Yorum Gönder