magmalinux-bind

2  BIND

BIND (Berkeley Internet Name Domain), en meşhur ve en çok kullanılan alan adı sunucusudur. Biz de bu belge boyunca, alan adlarımızı yönetmek için BIND yazılımını kullanacağız.
BIND yazılımı üç bileşen olarak gelir. Birincisi alan adı sorgularına cevap veren named servisi, ikincisi named servisinin bilmediği alan adlarının IP adreslerini bulmak için çözücü (resolver), üçüncüsü bileşeni ise DNS yönetimini kolaylaştıran dig gibi çeşitli araçlardır.

2.1  BIND kurulumu

BIND için aşağıdaki paketlere ihtiyacımız var:

  • bind9: named servisini sağlayan paket.
  • dnsutils: dig, nslookup, host… gibi araçları sağlayan paket.

Debian türevi Linux dağıtımı kullanıyorsanız, grafiksel arayüzde Synaptic aracını kullanarak kurabileceğiniz gibi, kabukta

# aptitude install bind9 dnsutils

komutuyla da BIND ve araçlarını kurabilirsiniz.
Debian türevi Linux dağıtımlarında BIND kurulduktan hemen sonra otomatik olarak çalıştırılır. Daha sonradan elle çalıştırmak isterseniz:

# /etc/init.d/bind9 start

komutunu çalıştırın. BIND’ın çalışıp çalışmadığını test etmek için “rndc status” komutunu kullanın:

# rndc status

number of zones: 14
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

Yukarıdaki gibi “server is up and running” yanıtı alıyorsanız. Herşey yolunda demektir.

2.2  DNS Sorguları için Yerelde çalışan BIND’ı Kullanmak

İnternet tarayıcısı, e-posta okuyucusu gibi uygulamalar internete erişirken /etc/resolv.conf dosyasında yazılı DNS sunucularını kullanır. BIND DNS sunucusunu kurduğumuz bilgisayarın internete erişirirken kurmuş olduğumuz DNS sunucusunu kullanmasını istiyorsak, /etc/resolv.conf dosyasında yerel IP adresimiz 127.0.0.1’i DNS sunucumuz olarak göstermeliyiz (Bu dosyanın içinin boş olması ya da silinmesi durumunda, internete erişirken yine yerel DNS sunucusu kullanılacaktır. Bu dosyayı değiştirmek yerine silmeyi de tercih edebilirsiniz. Ayrıntılı bilgi için “man resolv.conf”). Örnek bir resolv.conf dosyası:

nameserver 127.0.0.1

2.3  named servisi

Alan adları sistemi içerisinde, bizim alan adlarımızla ilgili bilgiyi sunan servistir. Bir DNS sorgusu geldiğinde bu sorguyu karşılar. Bir named sunucusu birden fazla alan adı için hizmet verebilir (Örneğin, magmalinux.com, magmalinux.net ve cerenbilgisayar.com.tr gibi). Bu alan adlarından bazıları için birincil DNS sunucusu bazıları için ikincil DNS sunucusu olabilir.

2.4  magmalinux.com Alan Adı için DNS Sunucusu Yapılandırması

Bu bölümde magmalinux.com alan adı için DNS ayarları yapılacaktır. İlk olarak named.conf.local dosyamızda magmalinux.com bölgesini tanımlamalıyız.

2.4.1  named.conf dosyası

Alan adlarımızla ilgili temel bilgilerin bulunduğu dosyadır. Bu dosya içerisinde her alan adımıza karşılık bir bölge tanımlamalıyız. Tanımladığımız bu bölge içerisinde named servisinin bu bölge için nasıl çalışacağı ile ilgili birtakım ayarları ve bölge dosyası yolunu (zone files) belirtmeliyiz. Bölge dosyası, belirli bir alan adı ile ilgili (örneğin magmalinux.com) ayrıntılı bilginin girildiği dosyadır (Örneğin www.magmalinux.com, mail.magmalinux.com gibi alt alan adlarının IP adresleri, Mail Exchanger ve Nameserver kayıtları).

Debian tabanlı sistemlerde named.conf dosyası içeriği /etc/bind/named.conf.options, /etc/bind/named.conf ve /etc/bind/named.conf.local olmak üzere üç ayrı dosyaya paylaştırılmıştır. Düzen açısından kendi bölge tanımlarımızı /etc/bind/named.conf.local dosyası içerisinde yapmalıyız. magmalinux.com bölgesi alan adı tanımlamaları için /etc/bind/named.conf.local dosyasını herhangi bir editör ile açıyoruz ve dosyaya aşağıdaki bölge bilgilerini ekliyoruz:

zone "magmalinux.com" {
        type master;
        file "magmalinux.com.conf";
};

type master satırı, bu DNS sunucusunun magmalinux.com bölgesi için birincil DNS sunucusu olduğunu belirtir. file "magmalinux.com.conf" satırı ise, magmalinux.com bölgesi için bölge dosyasının adını belirtir (Mutlak ya da göreceli yol belirtilebilir. Göreceli yol belirtildiğinde, varsayılan dizin olarak named.conf.options dosyasında belirtilen dizin seçilir (Debian türevi sistemlerde varsayılan dizin /var/cache/bind/ dır)).
Eğer birden fazla alan adına aynı DNS sunucusu üzerinden hizmet veriyorsak named.conf.local dosyası içerisinde bu alan adı için de bölge tanımlayıp, bu tanımladığımız bölgenin, bölge dosyasını yazmalıyız.

2.4.2  Bölge dosyası

magmalinux.com alan adı ile ilgili bilginin büyük bir kısmının bulunduğu dosyadır (belli bir ada karşılık gelen IP adresi, nameserver, mail exchange kayıtları, ikincil DNS sunucusunun birincil DNS sunucusundan DNS bilgilerini transfer etmesiyle ilgili ayarlar … gibi). named.conf.local de belirttiğiniz bölge dosyalarını sıfırdan yazmanız gerekir. magmalinux.com bölgesi için bölge dosyamız /var/cache/bind/ dizini altında magmalinux.com.conf isminde ve aşağıdaki biçimde olmalıdır:

$TTL 1d

@ IN SOA ns0.magmalinux.com. root.magmalinux.com. (
        2008063005 ;serial
        7h ;refresh
        3h ;retry
        1w ;expiry
        86400 ;minimum TTL
)

@ IN NS ns0.magmalinux.com.
@ IN NS ns1.magmalinux.com.
@ IN MX 10 mail.magmalinux.com.

magmalinux.com. IN      A       78.188.112.56
www             IN      A       78.188.112.56
ns0             IN      A       78.188.112.56
ns1             IN      A       78.188.112.60
mail            IN      A       78.188.112.56
ftp             IN      A       78.188.112.56
posta           IN      CNAME   mail
smtp            IN      CNAME   mail

magmalinux.com. IN      TXT     "v=spf1 a mx ip4:85.105.52.182 include:aspmx.googlemail.com ?all"


Bu dosyayı satır satır inceleyelim:

İlk satır “$TTL 1d” Time to Live değeridir. Bu bölge için yapılan sorgunun istemcinin ön belleğinde ne kadar süre için tutacağını belirler (1 gün ideal bir seçim).

 

İkinci satır bir SOA (Start of Authority) kaydıdır. Satır başındaki @ işareti alan adı (bölge adı) için bir kısayoldur. “magmalinux.com.” yazmak yerine @ işareti tercih edilebilir.

SOA kaydındaki @ işaretinden sonra gelen kısım, bu SOA kaydının IN (internet) sınıfı kaydı olduğunu belirtir. IN dışında başka sınıflar olsa da bu belgede bunlara değinilmeyecektir.

SOA kaydındaki IN belirtecinden sonra gelen kısım, bunun ne tip bir kayıt olduğunu belirtir (SOA kaydı). Bir SOA kaydı bölge için global seçenekleri belirler ve her bölge için yalnızca bir SOA kaydı bulunabilir.

SOA kaydının sonraki sütununda, magmalinux.com alan adı için yetkili DNS sunucusu adresi belirtildi. Bu adresin sonundaki “.” noktaya dikkat. Bu alan adının sonundaki nokta, alan adının tam olarak yazıldığını belirtir. Böylece DNS sunucumuz bu alan adı sonuna, tekrardan alan adı eklemeyecektir. Bundan sonraki buna benzer bir kayıt olan “root.magmalinux.com.” kaydının ilk nokta karakteri @ ile değişerek alan adından sorumlu kişinin e-posta adresini belirtir. SOA kaydındaki parantez içi değerleri inceleyelim:

İlk değer (serial) bizim seri numaramızı belirler. İkincil DNS sunucusu bu değeri kontrol ederek, Birincil DNS sunucusunda değişiklik olup olmadığını anlar. Buna göre Birincil DNS sunucusundaki bölge bilgilerini transfer edip etmeyeceğine karar verir. Bu değer, bölge dosyasında her değişiklik yaptığımızda bizim tarafımızdan değiştirilmesi gerekir. Seri numarası verilirken genel yaklaşım, YYYYAAGG şeklindeki tarihi ve gün içerisinde olası birden fazla değişiklik için bu tarihin sonuna eklenmiş iki basamaklı sayıyı birleştirmek şeklindedir. Bu şekilde, bir sonraki tarihin her zaman bir öncekinden daha büyük olması sağlanmıştır. Seri numarası satırının sonundaki ; karakteri satır sonu karakteri değil, yorum başlangıcı karakteridir. Bu karakteri kullanarak satırla ilgili açıklamalar yapabilirsiniz.

Refresh değeri, İkincil DNS sunucusunun değişiklikler için Birincil DNS sunucusunu ne kadar sıklıkla kontrol edeceğini belirler. Bizim örneğimizdeki değer 7 saattir (7h). ’h’ gibi bir son ek verilmeden yazılan değerler, saniye cinsinden kabul edilecektir (Kullanabileceğiniz diğer son ekler, dakika için ’m’, gün için ’d’, hafta için ’w’).

Retry değeri, İkincil DNS sunucusu, Birincil DNS sunucusuna herhangi bir sebeple bağlanamadığı durumda, bir sonraki denemenin ne zaman olacağını belirler. Bizim örneğimizde bu değer 3 saat.

Expiry değeri, İkincil DNS sunucusunun Birincil DNS sunucusuna ulaşamadığı durumlarda, kendisindeki bilgilerin ne kadar süre için geçerli olacağını belirler. Bizim örneğimizde bu değer 1 hafta. 1 hafta sonunda, İkincil DNS sunucusu bu bölge ilgili sorgu geldiğinde, sorguyu yanıtlamayacaktır.

Minimum TTL, değeri daha önceden açıklanan $TTL değeriyle benzer anlamı vardır. Fakat minimum TTL değeri, hata veren sorguların ön bellekte ne kadar tutulacağını belirler.

 


SOA kayıtlarından sonraki iki kayıt NS (Name Server – Ad Sunucusu) kaydıdır. NS kayıtları genel bir alışkanlıktan ötürü SOA kayıtlarından hemen sonra tanımlansalarda böyle bir zorunluluk yoktur.

MX (Mail eXchanger) kayıtları, magmalinux.com a gelen e-postaları hangi sunucuya gönderileceğini belirler. Örnek kayıttaki 10 değeri, birden fazla MX kaydı belirtildiğinde, hangi MX kaydının öncelikli olduğunu belirler (Düşük değerler daha önceliklidir. Birden fazla MX kaydına aynı öncelik verilerek yük dengeleme yapılabilir).

A (Address) kayıtları, bilgisayar ya da alan adlarına karşılık gelen IP adreslerinin belirtildiği kayıtlardır. NS ve MX kayıtlarında bilgisayar adları belirtilmesine karşın, bunların IP adresleri belirtilmemiştir. Alan adının IP adresi araştırması sonucunun tamamlanabilmesi için A kayıtlarına ihtiyaç vardır. Bu yüzden bölge dosyamızdaki en önemli kayıt tipidir diyebiliriz.

A kayıtlarına şöyle bir bakacak olursak:

magmalinux.com. IN      A       78.188.112.56
www             IN      A       78.188.112.56
ns0             IN      A       78.188.112.56
ns1             IN      A       78.188.112.60
mail            IN      A       78.188.112.56
ftp             IN      A       78.188.112.56

magmalinux.com. adında sondaki ’.’ karakterine dikkat. Bu alan adının tam yazılmış olduğunu belirtir. Sonunda nokta olmayan kayıtlar bilgisayar adı kabul edilip, sonuna alan adı bilgisi eklenir. Örneğin, bu örnekteki www, www.magmalinux.com. ile aynıdır.

Örnek A kayıtlarından görüldüğü gibi değişik bilgisayar adları tek bir IP adresine eşleştirileceği gibi, tek bir bilgisayar adı birden fazla IP adresi ile de eşleştirilebilir. Bu sayede yük dengelemesi yapabilirsiniz.
CNAME (Canonical NAME) kayıtları, A kayıtları için birer takma addır (alias). Örneğin:

posta           IN      CNAME   mail
smtp            IN      CNAME   mail

posta.magmalinux.com ile mail.magmalinux.com aynı bilgisayarı göstermektedir.

CNAME kayıtları ile ilgili dikkat etmeniz gerekenler; Bir CNAME kayıdı başka bir CNAME kaydına işaret edebildiği halde, CNAME’in performansa kötü etkisinden dolayı, CNAME kayıtları genelde A kayıtlarına işaret eder. Ayrıca MX ve NS kayıtlarında bir CNAME ismi çalışabilse de, bu izin verilmiş birşey değildir. Bu yüzden belirttiğiniz bilgisayar adının bir A kaydı bulunmak zorundadır.

CNAME kullanımının faydalı olacağı yer, birden fazla A kaydının aynı IP adresine işaret ettiği durumlar olabilir. Aynı IP adresi için farklı farklı A kayıtları tutmak yerine, bir tane A kaydı ve bu A kaydını gösteren CNAME kullanırsanız, daha sonradan IP adresiniz değiştiğinde birden değiştirmeniz gereken tek bir kayıt olur.

 

magmalinux.com. IN      TXT     "v=spf1 a mx include:aspmx.googlemail.com ?all"

TXT kayıtları bölgeye metin ekleme de kullanılır. Bu kayıtların en çok kullanıldığı yer SPF (Sender Policy Framework) tanımlarıdır. SPF kayıtları MTA (e-posta gönderim acentesi) yazılımları tarafından gelen e-postanın spam olup olmadığını kontrol etme de kullanılır. MTA yazılımı gelen e-postadaki, gönderici alan adının SPF kayıtlarını inceleyip e-postanın spam olup olmadığına karar verir.

SPF kaydındaki v=spf1, SPF version 1 olduğunu belirtir.

a mx, bölge tanımı içerisindeki A ve MX kayıtlarının e-posta gönderebileceğini belirtir.

ip4:85.105.52.182, ise 85.105.52.182 IP adresinden gelen e-postalara izin verildiğini belirtir.

include:aspmx.googlemail.com , aspmx.googlemail.com SPF kayıtlarının da bu bölge için geçerli olmasını sağlar.

?all, gelen e-posta yukarıdaki hiçbir koşul ile eşleşmez ise, bu alan adı, e-posta'nın kabul edilmeyeceği konusunda tarafsızdır (?all başındaki ? (Neutral) yerine, reddetmek için – işareti, kabul etmek için + işareti, geçici olarak kabul etmemek için ~ işaretini kullanabilirsiniz. Bu işareti all dışındaki belirteçler ile de kullanabilirsiniz. Örneğin +a +mx -ip4:85.105.52.182 gibi).


 

Bu ayarları yaptıktan sonra BIND’ı yeniden başlatalım:

# /etc/init.d/bind9 restart

Bundan sonra yapacağınız değişikler için; eğer yaptığınız değişikler sadece bölge dosyaları içerisinde ise, BIND’ı yeniden başlatmanız gerekmiyor. Değişikliklerin etkin olması için rndc reload bolge_ismi komutunu çalıştırabilirsiniz. Örneğin:

# rndc reload magmalinux.com

2.4.3  magmalinux.com Alan Adını Test Etmek

Yaptığımız bu değişikliklerden sonra dnsutils paketi ile gelen dig aracı ile magmalinux.com alana adını test edelim. dig ile bu alan adını sorgulayalım:

# dig @127.0.0.1 magmalinux.com

; <<>> DiG 9.3.4-P1.1 <<>> magmalinux.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38281
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;magmalinux.com.                        IN      A

;; ANSWER SECTION:
magmalinux.com.         86400   IN      A       78.188.112.56

;; AUTHORITY SECTION:
magmalinux.com.         86400   IN      NS      ns0.magmalinux.com.
magmalinux.com.         86400   IN      NS      ns1.magmalinux.com.

;; ADDITIONAL SECTION:
ns0.magmalinux.com.     86400   IN      A       78.188.112.56
ns1.magmalinux.com.     86400   IN      A       78.188.112.60

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jul 21 13:06:33 2008
;; MSG SIZE  rcvd: 116

Örnekte görüldüğü üzere, magmalinux.com için IP adreslerimiz, ad sunucularımız ayarladığımız gibi. dig uygulamasına verdiğimiz @127.0.0.1 parametresi sorgulanacak DNS sunucusunun IP adresini belirtir. Eğer bu parametre belirtilmemiş ise, /etc/resolv.conf dosyasında belirtilen DNS sunucuları kullanılır.

2.4.4  Ters Bölge Dosyası

Şu ana kadar incelediğimiz DNS sisteminde sadece alan adlarına göre oluşturulmuş bir ağaç gördük. Bahsettiğimiz bu ağaç üzerinde IP adreslerinin hiyerarşik bir yapısı olmadığı için, IP adresinin alan adı karşılığını bulmak istediğimiz zaman, DNS ağacınının bütün uçlarını tek tek gezip IP adresini aramak gerekir (ki bu imkansızdır). Bu yüzden, günümüzdeki DNS sisteminde, .arpa TLD (üst düzey alan adı) altında oluşturulmuş IP adreslerin hiyerarşik yapısı vardır.

Alan adı sağdan sola doğru genel adresten (com), özele giderken (magmalinux.com), IP adresinde durum tam tersidir. Bu yüzden IP adreslerini DNS sistemi içerisinde ifade ederken ters yazarız (örneğin 78.188.112.56 yerine 56.112.188.78 şeklinde yazarız. Bu bize DNS sistemi içerisinde bir IP adresini ararken, alan adı için kullandığımız yöntemin aynısını kullanmamızı sağlar). Bu yüzden böyle bir ağaçta IP adresinin alan adı karşılığını bulmak, alan adının IP adresi karşılığını bulmaktan farksızdır. Sadece .arpa adında özel bir TLD miz ve bu TLD nin altında, IP adresleri için “in-addr” isminde ikinci seviye alan adımız (Second-Level Domain) var. Buna göre 78.188.112.56 IP adresinin DNS sistemi içerisindeki karşılığı 56.112.188.78.in-addr.arpa olur.


Ters bölge dosyamızı oluşturmadan önce ters bölgemizi, named.conf dosyasında belirtelim. Yine bunun için named.conf yerine kendi düzenlemelerimiz için oluşturulmuş named.conf.local dosyasını açıp aşağıdaki şekilde değiştirelim:

zone "magmalinux.com" {
        type master;
        file "magmalinux.com";
};

// magmalinux.com icin, ters bolge tanimi
zone "112.188.78.in-addr.arpa" {
        type master;
        file "magmalinux.com.rev";
};

Yeni eklediğimiz bölge adına dikkat edin. Ters bölge dosyamızda IP adresinin son basamağına karşılık gelen alan adlarını yazacağımız için, bölge adına IP adresinin son kısmı olan 56’yı yazmadık.

named.conf.local dosyasındaki bu değişiklikten sonra /var/cache/bind/ dizini altında “magmalinux.com.rev” dosyasını aşağıdaki şekilde oluşturmalıyız:


$TTL 1d

@ IN SOA ns0.magmalinux.com. root.magmalinux.com. (
        2008071610 ;serial
                7h ;refresh
                3h ;retry
                1w ;expiry
             86400 ;minimum TTL
)

@ IN NS ns0.magmalinux.com.
@ IN NS ns1.magmalinux.com.

56      IN      PTR     mail.magmalinux.com.
60      IN      PTR     ns1.magmalinux.com.

Gördüğünüz üzere, ters bölge dosyaları PTR kayıtlarına kadar normal bölge dosyalarıyla aynı içeriğe sahip. PTR kayıtlarının tek görevi ise IP adresinin son basamağına karşılık gelen alan adlarını belirtmektir. Bir de girdiğimiz alan adlarının tam belirtilmiş alan adları olduğuna dikkat edin (magmalinux.com bölge dosyasındaki ns1, mail gibi bilgisayar isimleri yerine, ns1.magmalinux.com. tam isim şeklinde giriyoruz ve bir kez daha alan adlarının sonundaki noktalara dikkat. Eğer noktasız biçimde girersek, bunlar bilgisayar adları zannedilip sonuna magmalinux.com eklenmek yerine bölge ismi olan 112.188.78.in-addr.arpa eklenecek. Ayrıntılı bilgi için http://en.wikipedia.org/wiki/FQDN).

Dikkat etmeniz gereken bir başka şey; bölge dosyalarında, bir IP adresine birden fazla isim verebildiğiniz halde, ters bölge dosyalarında bir IP adresini yalnızca bir kere tanımlayabilirsiniz. Yani ters bölge dosyanızda 56 IN PTR mail.magmalinux.com. ve 56 IN PTR magmalinux.com. şeklinde iki kayıt olamaz. Bu durumda ikisinden birini seçmeniz gerekir ki, e-posta gönderip alma sırasında spamlere karşı korunma sebebiyle ters bölge sorgulaması yapıldığı için, mail.magmalinux.com. adresini seçmeniz daha uygun olur.

Ters bölge ayarlarımızı test etmek amacıyla dig aracı ile IP adresine karşılık alan adını bulmak için:

# dig -x 78.188.112.56

komutunu kullanabilirsiniz.

2.4.5  İkincil DNS Sunucusu Yapılandırması

İlk olarak İkincil DNS sunucumuza BIND kuralım. Ardından yapmamız gereken tek şey /etc/bind/named.conf.local dosyasını açıp bölgemizi tanımlamak ve bölge transferi yapılacak Birincil DNS Sunucuların IP adreslerini belirtmek:

zone "magmalinux.com" {
        type slave;
        file "magmalinux.com.slave";
        masters { 78.188.112.56; };
};

type slave satırı, DNS sunucusunun bu bölge için ikincil DNS sunucusu olduğunu belirtir. masters parametresi ise bölge transferi yapılacak birincil DNS sunucularını belirler.

Şimdi İkincil sunucumuzdaki BIND’ı yeniden başlatalım:

# /etc/init.d/bind9 restart

Tüm yapmamız gereken bu kadar. magmalinux.com.slave bölge dosyasını yazmadığımıza dikkat edin. Bu bölge dosyası Birincil DNS sunucusundan transfer edileceği için elle oluşturmadık. DNS sunucunuzu yeniden başlattıktan sonra /var/cache/bind dizinindeki magmalinux.com.slave dosyasının oluşturulup oluşturulmadığını kontrol edebilirsiniz.

Eğer İkincil DNS sunucusu dışındaki sunucuların Birincil DNS sunucusundan bölge transferi yapmasını engellemek istiyorsanız, Birincil DNS sunucunuzun named.conf.local dosyasının magmalinux.com bölge ayarlarını aşağıdaki gibi yapmanız gerekiyor:

zone "magmalinux.com" {
        type master;
        file "magmalinux.com";
        allow-transfer { 78.188.112.60; };
};

allow-transfer parametresi, bu bölgenin transferini yapabilecek IP adreslerini tanımlar. Belirtilmediği taktirde DNS sunucusu herkesin bölge transferi yapmasına izin verir. allow-transfer parametresini named.conf.options dosyasında bütün bölgeleri etkileyecek şekilde de ayarlayabilirsiniz.

2.5  DNS Sunucusunu İkinci Bir Alan Adı İçin Yapılandırmak

İkinci ekleyeceğimiz alan adımız diyelim ki magmalinux.net olsun. Bu alan adına hizmet vermek için öncelikle named.conf.local dosyası içerisinde bölge tanımlaması yapmalıyız:

zone "magmalinux.net" {
        type master;
        file "magmalinux.net";
};

Şimdi ise bölge tanımında belirttiğimiz magmalinux.net bölge dosyasını /var/cache/bind/ dizini altında oluşturalım. magmalinux.net bölgesi için örnek bir bölge dosyası şu şekilde olabilir:

$TTL 1d

@ IN SOA ns0.magmalinux.net. root.magmalinux.net. (
        2008063000 ;serial
        7h ;refresh
        3h ;retry
        1w ;expiry
        86400 ;minimum TTL
)

@ IN NS ns0.magmalinux.net.
@ IN NS ns1.magmalinux.net.
@ IN MX 10 mail.magmalinux.net.

magmalinux.net. IN      A       78.188.112.65
www             IN      A       78.188.112.65
ns0             IN      A       78.188.112.56
ns1             IN      A       78.188.112.60
mail            IN      A       78.188.112.65

Ters bölge kaydı için named.conf.local dosyasında bir değişikliğe gerek yok. 112.188.78.in-addr.arpa bölgesini zaten oluşturduğumuz için, yapmamız gereken tek şey, /var/cache/bind/magmalinux.com.rev dosyasına magmalinux.net için ilgili ters kayıtları girmek. Yukarıdaki magmalinux.net bölge dosyasına göre, magmalinux.com.rev dosyamız şu şekilde olmalıdır:

$TTL 1d

@ IN SOA ns0.magmalinux.com. root.magmalinux.com. (
        2008071610 ;serial
                7h ;refresh
                3h ;retry
                1w ;expiry
             86400 ;minimum TTL
)

@ IN NS ns0.magmalinux.com.
@ IN NS ns1.magmalinux.com.

56      IN      PTR     mail.magmalinux.com.
60      IN      PTR     ns1.magmalinux.com.
65      IN      PTR     mail.magmalinux.net.

2.6  Alt Alan Adını Vekalet Verme

Diyelim ki debian.org alan adını yönetiyorsunuz ve tr.debian.org, en.debian.org gibi alt alan adlarının yönetimini ilgili ülkedeki başka bir DNS sunucusuna devretmek istiyorsunuz (ilgili alt alan adlarının sistem yöneticileri bu alt alan altında başka alan açmak (ftp.tr.debian.org gibi) ya da yük dengeleme yapmak isteyebilirler (ftp.tr.debian.org için birden fazla IP adresi tanımlamak gibi)). İlk örneğimizden beri magmalinux.com alan adı ile çalıştığımızdan, bu senaryodaki debian.org alan adını magmalinux.com ile değiştirip yolumuza devam edelim.

Öncelikle /var/cache/bind/magmalinux.com dosyamızı açıp ilgili alt domain tanımlarımızı yapalım:

$TTL 1d

@ IN SOA ns0.magmalinux.com. root.magmalinux.com. (
        2008063005 ;serial
        7h ;refresh
        3h ;retry
        1w ;expiry
        86400 ;minimum TTL
)

@ IN NS ns0.magmalinux.com.
@ IN NS ns1.magmalinux.com.
@ IN MX 10 mail.magmalinux.com.

magmalinux.com. IN      A       78.188.112.56
www             IN      A       78.188.112.56
ns0             IN      A       78.188.112.56
ns1             IN      A       78.188.112.60
mail            IN      A       78.188.112.56
ftp             IN      A       78.188.112.56
posta           IN      CNAME   mail
smtp            IN      CNAME   mail

; alt alan adi tanimlari
tr.magmalinux.com. IN   NS      ns0.tr.magmalinux.com.
tr.magmalinux.com. IN   NS      ns0.magmalinux.com.

ns0.tr.magmalinux.com. IN A     80.250.41.61

en.magmalinux.com. IN   NS      ns0.en.magmalinux.com.
en.magmalinux.com. IN   NS      ns0 .magmalinux.com.

ns0.en.magmalinux.com. IN A     128.100.241.213

“tr” alt alan adı ve “en” alan adları için bu alt alanlarının DNS sunucularını tanımladık (ikincil DNS sunucusu olarak magmalinux.com’un birincil DNS sunucusunu belirledik). “tr” ve “en” alt alan adlarının DNS sunucularının da IP adresini girmek zorundayız. Çünkü tr.magmalinux.com alan adının IP adresi istendiği zaman cevap olarak ns0.tr.magmalinux.com dönecek, ki bu alan adının IP sini bulabilmek için önce tr.magmalinux.com sunucusuna erişilmesi gerekir. Sonuç olarak, sonsuz bir döngüye girilmiş olur. Bu yüzden tr alan adı için belirtilen DNS sunucusunun IP adresi girilmesi gerekir (Bu tip kayıtlara “glue record” denir).

Bu dosyada tekrar eden tr.magmalinux.com. ve en.magmalinux.com. yazımları sizi rahatsız ediyorsa $ORIGIN talimatını kullanarak @ işaretinin değerini değiştirebilirsiniz. Şöyle ki:

// ... bolge dosyasinin bas kismi

; alt alan adi tanimlari

$ORIGIN tr.magmalinux.com.

@            IN   NS      ns0.tr.magmalinux.com.
@            IN   NS      ns0.magmalinux.com.

ns0          IN   A     80.250.41.61

$ORIGIN en.magmalinux.com.

@            IN   NS      ns0.en.magmalinux.com.
@            IN   NS      ns0.magmalinux.com.

ns0          IN   A     128.100.241.213


Gelecekte eklenecek birçok alt alan adını vekalet verme durumu için, bu tanımlar düzen açısından bir başka dosya içerisinde yapılıp, magmalinux.com bölge dosyası içerisine $INCLUDE talimatını kullanarak eklenebilir. Örneğin bu tanımları /var/cache/bind/magmalinux.com.sub dosyası içerisinde yapalım:

$ORIGIN tr.magmalinux.com.

@            IN   NS      ns0.tr.magmalinux.com.
@            IN   NS      ns0.magmalinux.com.

ns0          IN   A     80.250.41.61

$ORIGIN en.magmalinux.com.

@            IN   NS      ns0.en.magmalinux.com.
@            IN   NS      ns0.magmalinux.com.

ns0          IN   A     128.100.241.213


Sonrasında bu magmalinux.com.sub dosyasını magmalinux.com bölge dosyası içerisine dahil edelim. magmalinux.com bölge dosyamız son haliyle şu şekilde olacaktır:

$TTL 1d

@ IN SOA ns0.magmalinux.com. root.magmalinux.com. (
        2008063005 ;serial
        7h ;refresh
        3h ;retry
        1w ;expiry
        86400 ;minimum TTL
)

@ IN NS ns0.magmalinux.com.
@ IN NS ns1.magmalinux.com.
@ IN MX 10 mail.magmalinux.com.

magmalinux.com. IN      A       78.188.112.56
www             IN      A       78.188.112.56
ns0             IN      A       78.188.112.56
ns1             IN      A       78.188.112.60
mail            IN      A       78.188.112.56
ftp             IN      A       78.188.112.56
posta           IN      CNAME   mail
smtp            IN      CNAME   mail

$INCLUDE magmalinux.com.sub

magmalinux.com DNS sunucusunda yaptığımız bu değişikliklerden sonra, “tr” alt alan adı DNS sunucusu named.conf.local dosyasında “tr.magmalinux.com” bölgesini tanımlayıp, bölge dosyasını oluşturmalıyız (Aynı işlemi “en” alt alan adı DNS sunucusu için de yapmalıyız). En son magmalinux.com.sub dosyasında belirttiğimiz bu alt alan adlarının ikincil DNS sunucusu olan magmalinux.com DNS sunucusunun named.conf.local dosyasında ikincil bölge tanımlarını yapmalıyız. Bu işlemlerin nasıl yapılacağı belge de anlatıldığı için, bu değişiklikleri yapmak size bırakıldı.
 

2.7  /etc/bind/named.conf.options

named.conf.options dosyası, named servisinin nasıl çalışacağı ile ilgili seçenekleri belirler (named servisinin process id’sinin tutulduğu dosyanın yolu, bölge dosyalarının tutulduğu dizin gibi)
Örnek bir named.conf.options dosyası:

options {
        directory "/var/cache/bind";

        // query-source address * port 53;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };

        version none;
        allow-transfer { none; };
        allow-query { any; };
        allow-recursion { any; };
        recursion yes;
        querylog yes;
};

directory: Bu satırdan sonra belirtilecek tüm göreceli yollar için, başlangıç yolu.

query-source: DNS sunusucusundan dışarıya yapılacak sorgular için kullanılacak IP adresi ve port numarası.

listen-on-v6: BIND’ın IPv6 sorguları dinlemesini sağlar. Bu seçenek tanımlanmamışsa, BIND hiçbir IPv6 trafiğini dinlemeyecektir.

version: BIND’ın sürümünü öğrenmek isteyen sorgulara ne cevap verileceğini belirler ("none" değeri bu sorgulara cevap verilmeyeceğini belirtir. Bu seçeneğe kötü niyetli kişileri yanıltmak için başka bir sürüm numarası da yazabilirsiniz).

allow-query: Alan adı sunucunuza kimlerin sorgu yapabileceğini belirler. Internet’e açılan bir alan adı sunucusu ise herkesin sizin alan adı sunucunuza erişebilmesini isteyeceğinizden bu parametre any olmalı ya da hiç tanımlamalısınız (varsayılan değer any).

allow-transfer: Kimlerin, bu alan adı sunucusundaki tüm bölge bilgilerini transfer edebileceğini belirler. İkincil DNS sunucunuz varsa, bu seçeneğe ikincil DNS sunucunuzun IP adresini belirtmelisiniz. (Varsayılan değer any, yani herkes bölge bilgilerini transfer edebilir).

allow-recursion: Kimlerin özyinelemeli sorgu yapabileceğini belirler (varsayılan değer any).

recursion: DNS sunucusunun özyinelemeli sorguları destekleyip desteklemeyeceğini belirler. Eğer sorgulanan alan adı ön bellekte varsa bu değişkene bakılmaksızın sorguya cevap verilir.

querylog: DNS sunucusu testleri sırasında yapılan sorguların loglarının tutulup tutulmayacağını belirler. Loglar /var/log/syslog a yazılır.

Bu dosyada değişiklik yaptıktan sonra BIND’ı yeniden başlatmalısınız:

# /etc/init.d/bind9 restart

2.8  /etc/bind/named.conf

En genel bölge tanımlarının bulunduğu dosyadır. Eğer bölge tanımlaması yapılacaksa (Debian türevi sistemlerde) named.conf yerine named.conf.local tercih edilmelidir. BIND, named.conf dosyasını okurken, named.conf.options ve named.conf.local dosyasının içeriğini named.conf dosyasına dahil eder (aşağıda named.conf dosyasında, bu işi yapan satırlar görülüyor).

include "/etc/bind/named.conf.options";
// ...
include "/etc/bind/named.conf.local";

Örnek bir /etc/bind/named.conf dosyası içeriği:

include "/etc/bind/named.conf.options";

zone "." {
        type hint;
        file "/etc/bind/db.root";
};

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

include "/etc/bind/named.conf.local";

named.conf dosyamızdaki ilk bölge tanımımız kök sunucuları için. DNS sunucumuza, kendi sunucumuzda tanımlı olmayan bir bölge (alan adı) sorulduğunda, sorguyu yanıtlayabilmesi için bu bölgeyi belirtmek zorundayız (“.” bölgesi; named.conf dosyasında bulunmayan herhangi bir bölge için anlamına gelir).

named.conf dosyamızdaki ikinci bölgemizin adı localhost. Hemen ardından localhost için ters bölge tanımı bulunuyor.

DNS sunucumuzun doğru şekilde çalışabilmesi için named.conf dosyasındaki bu 3 bölge gereklidir.

2.9  view

Belirli IP adresleri için ya da belirli IP adresi aralığı için DNS sunucunuzun davranışını özelleştirmek istiyorsanız ilgili IP adresleri için view tanımlamalısınız. Diyelim ki, yerel ağımızdan DNS sunucumuza bağlanan IP adreslerinin özyinelemeli sorgu yapmalarına izin verirken, dışardaki IP adreslerinin sadece tanımladığımız bölgeler için sorgu yapmalarına izin vermek istiyoruz. Bunu gerçekleştirmek için named.conf.local dosyamıza view’ler ekleyelim (named.conf dosyası içerisinde de view tanımlayabilirdik, fakat Debian türevi Linux dağıtımlarında değişikliğin named.conf.local de yapılması istenir):

view "yerelag" {
        match-clients { 10.1.0.0/24; 127.0.0.0/31; };
        recursion yes;
        allow-recursion { any; };
};

view "yabanci" {
        match-clients { any; };
        recursion no;
        allow-recursion { none; };
};

“yerelag” view’i icerisindeki match-clients parametresi, bu view’in hangi IP adresleri (ya da IP aralıkları) için tanımlandığını belirtir. Bizim örneğimizde yerelag view’ı 10.1.0.0/24 ve 127.0.0.0/31 IP aralığı için tanımlanmış (10.1.0.0/24 IP aralığı 10.1.0.0-255 aralığını, 127.0.0.0/31 ise 127.0.0.0-1 aralığını kapsar. Ayrıntılı bilgi için http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). Bu aralık dışındaki herkes “yabanci” view’indedir.

view’ler içerisinde bölge’de tanımlayabilir ya da aynı bölgeleri farklı viewler içinde farklı davranacak şekilde tanımlayabilirsiniz. Örneğin aynı bölge için farklı bölge dosyası kullanabilirsiniz:

view "yerelag" {
        match-clients { 10.1.0.0/24; 127.0.0.0/31; };
        recursion yes;
        allow-recursion { any; };

        zone "magmalinux.com" {
                type master;
                file "magmalinux.com.yerelag";
        };
};

view "yabanci" {
        match-clients { any; };
        recursion no;
        allow-recursion { none; };

        zone "magmalinux.com" {
                type master;
                file "magmalinux.com.yabanci";
        };
};

view içerisindeki herhangi bir bölge bilgilerini BIND'ı yeniden başlatmadan geçerli kılmak istiyorsanız rndc aracını aşağıdaki gibi kullanmalısınız:

# rndc reload magmalinux.com in yabanci