Debian Gnu/Linux ile DjbDns Kurulumu ve Yapılandırılması

Debian Türkiye sitesinden

Melen (Mesaj | katkılar) tarafından oluşturulmuş 12:32, 14 Mayıs 2008 tarihli sürüm (Yeni sayfa: Debian Gnu/Linux ile DjbDns Kurulumu ve Yapılandırılması örnek konfigurasyonlarla izah edilmeye çalışılmıştır. Ayrıca yerel ağınızda kendi dns sunucusunu nasıl oluştura...)

(fark) ← Önceki hâli | en güncel halini göster (fark) | Sonraki hâli → (fark)

Debian Gnu/Linux ile DjbDns Kurulumu ve Yapılandırılması örnek konfigurasyonlarla izah edilmeye çalışılmıştır. Ayrıca yerel ağınızda kendi dns sunucusunu nasıl oluşturabileceğiniz konusunda bilgiler içerir. Yazan : Serdar Aytekin - serdar~aytekin.web.tr Versiyon : 1.0.0 Son Güncellenme Tarihi : 21-11-2004

Giriş :

Belgede yazılanların uygulanıp uygulanmaması tamamen uygulayan kişinin sorumluluğundadır. Belgede bahsedilenlerin uygulanması sonucu ortaya çıkabilecek hertürlü zarardan yazar sorumlu tutulamaz. Belge GNU Özgür Belgeleme Lisansının http://www.gnu.org/copyleft/fdl.html adresinde yer alan -son sürümdeki- lisans içeriğine bağlı kalmak koşulu ile aynen yada kısmen dağıtılabilir, yayınlanabilir.

Bu belgenin son sürümüne;

http://www.serdaraytekin.com/docs/os/debian/debian-djbdns.html adresinden ulaşabilirsiniz.

Belgede tinydns ve dnscache kurulumu, yapılandırılması ana hatlarıyla debian'a özel izah edilmeye çalışılacaktır. Djbdns hakkında çok detaylı ve djbdns ile ilgili tüm konuları ele alan bilgi içermez (en azından şu anki sürümü itibari ile). Detaylı bilgilerin bulunduğu adresler belgenin sonunda verilmiştir.

Daemontools Kurulumu :

   * apt-get install daemontools-installer

ile daemontools paketinin kaynak kodları sisteme indirilir.

   * build-daemontools

Enter a directory where you would like to do this [/tmp/daemontools]

ve

Which format would you like to use? [fD]

sorularını "enter" ile geçiniz.

Bunlardan sonra herhangibir yama uygulayacaksak yapmamız gerekeni belirtip bekliyor olacak. If you want me to apply any patches, please make sure that they are located in /usr/src/daemontools-installer/patches/.

Press ENTER to continue...

İlave bir yama uygulamayacağımız için son kısımıda enter ile geçip derleme işlemine başlamasını sağlıyoruz.

It seems that all went ok

Do you want to remove all files in /tmp/daemontools, except daemontools_0.76-9_i386.deb now? [Yn]

Yukarıdakine benzer ifadelere ulaşmışsanız (özelliklede "It seems that all went ok" demişse) şu ana kadarki işlemler başarılı demektir. Bu kısımda /tm/demontools altında derleme sırasında oluşan ve "build-daemontools" ile indirdiğimiz kaynak kodlarından artık ihtiyaçımız olmayanları temizlemek isteyip istemediğimizi soruyor. Evet dersek yeni oluşan daemontools_0.76-9_i386.deb (sizde farklı bir sürüm bulunabilir) paketi hariç diğer gereksizleri temizleyecek.

Enter ile temizlemesini söylüyor ve devam ediyoruz. Şimdi ; Do you want to install daemontools_0.76-9_i386.deb now? [Yn]

Oluşmuş olan daemontools_0.76-9_i386.deb paketini kurmak isteyip istemediğimizi soruyor, burada enter ile kurmasını isteyip devam ediyoruz. Selecting previously deselected package daemontools. (Reading database ... 49015 files and directories currently installed.) Unpacking daemontools (from daemontools_0.76-9_i386.deb) ... Setting up daemontools (0.76-9) ... Adding svscanboot to inittab... init should start svscan now.


Do you want to purge daemontools-installer now? [yN]

Sorusuna "Evet" dersek yukarıdaki "daemontools" paketini sisteme yükleyebilmemizi sağlayan, bir nevi aracılık yapan "daemontools-installer" paketini sistemden temizler. Bu kısmı "enter" ile "hayır" diyerekde geçebilirsiniz. Her iki seçimde sistemin çalışmasına etki etmez.

Djbndns Kurulumu :

Djbdns içinde benzer işlemleri yapacağız.

   * apt-get install djbdns-installer

get-djbdns Trying to download djbdns... download succeeded!

To build djbdns binary package, you have to run

build-djbdns

   * build-djbdns

Binary package djbdns will be compiled now This can take long time, depending on your machine

Press ENTER to continue...

Enter ile devam ediyoruz, derleme işlemi bitince "It seems that all went ok" görmüşseniz derleme işi tamam demektir. Do you want to install djbdns_1.05-11_i386.deb now? [Yn]

sorusuna da "enter" ile onay vererek devam ediniz. "djbdns has been installed." ifadesini görmüşşeniz kurulum işleminiz başarılı demektir. Do you want to purge djbdns-installer now? [yN]

Sorusuna "enter" ile yanıt verebileceğiniz gibi "evet" diyede yanıt verebilirsiniz. Evet derseniz djbdns'in kurulumasında aracılık eden "djbdns-installer" paketini sistemden kaldırmış olacak. Her iki durumda sistemin düzgün çalışmasına engel değil.

Djbdns'in Yapılandırılması :

Bu kısımda en önemli nokta, tinydns'in hangi arabirimi (hangi ip adresini) dinlemesini istiyorsak o ip adresini dinlemesini sağlayacak şekilde aşağıdaki gibi yapılandırıyoruz.

   * tinydns-conf tinydns dnslog /etc/tinydns <ip adresi>

Sizin sisteminizdeki ip dışarıya bakan ip adresiniz a.b.c.d olsun. Bu durumda yukarıdaki yapılandırma

   * tinydns-conf tinydns dnslog /etc/tinydns a.b.c.d

şeklinde olacaktır. Burada a.b.c.d ip adresinin 53/udp portunun tinydns tarafından dinlenmesini sağlamış olduk.

   * ln -s /etc/tinydns/ /service

ile /service için bağlantı yapıyoruz.

   * svc -t /service/tinydns

ilede tinydns'i restart edebiliriz.

Dnscache'in Yapılandırılması :

Burada da internal dnscache ve external dnscache diye iki farklı yapı söz konusu. Öncelikle dnscache ile genel olarak ifade eden yapıyı izah etmeye çalışalım. Dnscache istediğimiz adresin ip'sine ulaşmamızı sağlayan bir çözümleyicidir (recursive resolver). Daha açık bir ifade ile /etc/resolv.conf da nameserver olarak bizim dns sunuzumuzu kullanabilmemizi sağlar.

Internal dnscache, dns'in sadece kendi makinemizin sorgularına cevap vermesi yani /etc/resolv.conf içerisinde 127.0.0.1 ipsini belirterek dns sorgularının bizim dns sunucumuz üzerinden yapılmasını sağlamaktır.

External dnscache ise farklı makinelerin bizim dns sunucumuzu kullanarak ip çözümlemesi yapabilmesine izin vermemizi sağlar.

Internal Dnscache :

Şayet bir ağınız var ve o ağdaki tüm makinelerin sizin dns sunucunuzu kullanarak sorgulama yapmasını istiyorsanız, external dnscache kısmına göz atın. Sadece kendi yerel makinenizin bu hizmetden faydalanmasını istiyorsanız bu kısımdan devam edin.

   * dnscache-conf dnscache dnslog /etc/dnscache 127.0.0.1

ile 127.0.0.1 nolu arabirimin (lo) 53/udp portunun dnscache tarafından dinlenmesi sağlandı.

Burada ip adresini belirtmesekde olur zaten varsayılan olarak 127.0.0.1'dir.

   * ln -s /etc/dnscache /service
   * svc -t /service/dnscache

Hemen bir test yapalım.

   * apt-get install dnsutils (nslookup için)
  1. nslookup

Note: nslookup is deprecated and may be removed from future releases. Consider using the `dig' or `host' programs instead. Run nslookup with the `-sil[ent]' option to prevent this message from appearing. > server 127.0.0.1 Default server: 127.0.0.1 Address: 127.0.0.1#53 > www.google.com Server: 127.0.0.1 Address: 127.0.0.1#53

Non-authoritative answer: www.google.com canonical name = www.google.akadns.net. Name: www.google.akadns.net Address: 66.102.11.99 Name: www.google.akadns.net Address: 66.102.11.104

Yukarıdaki testimizde" nslookup" komutunu çalıştırıp, "nameserver 127.0.0.1" ifadesi ile sorguları bizim makinemizdeki dns sunucudan yapmasını istedik. www.google.com sorgusu için "Non-authoritative answer" ile sonuçları döndürdü. "Non-authoritative answer" ifadesi kısaca, sorguladığımız adresin kendi dns sunucumuzda değilde başka bir dns sunucusunda olduğunu (kaydının başka bir dns sunucusunda olduğunu) belirtir diyebiliriz.

Evet, yukarıdaki işlemler başarılı ise artık sorgulamalar için /etc/resolv.conf içerisinde; nameserver 127.0.0.1

ifadesini kullanabiliriz.

/etc/resolv.conf içerisinde yukarıdaki şekilde kaydı girdikten sonra nsloolup yerine dig ilede sorgulama yapabiliriz;

  1. dig www.google.com
<<>> DiG 9.2.4rc5 <<>> www.google.com
global options
printcmd
Got answer
->>HEADER<<- opcode
QUERY, status: NOERROR, id: 2162
flags
qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
QUESTION SECTION
www.google.com. IN A
ANSWER SECTION

www.google.com. 900 IN CNAME www.google.akadns.net. www.google.akadns.net. 300 IN A 216.239.59.104 www.google.akadns.net. 300 IN A 216.239.59.99

Query time
353 msec
SERVER
127.0.0.1#53(127.0.0.1)
WHEN
Fri Nov 19 23:28:30 2004
MSG SIZE rcvd
99

External Dnscache :

Diyelimki bir ağımız var, ve o ağdaki makinelerin hepsinin bizim dns sunucumuzu kullanarak sorgulama yapmalarını istiyoruz. Bu durumda ihtiyacımız olan şey external dnscache.

   * dnscache-conf dnscache dnslog /etc/dnscachex 192.168.0.1
   * ln -s /etc/dnscachex /service
   * svc -t /service/dnscachex

Burada 192.168.0.1 nolu ip adresinin 53/udp portunun dnscache tarafından dinlenmesini sağladık. Burada kullanacağımız ip adresinin yukarıdaki yapılandırmalarda kullanılmamış olmasına dikkat ediniz. Her biri farklı ip adreslerini dinleyecek şekilde ayarlanmalıdır. /etc/dnscachex ifadesindeki "x" 'i externalı temsil etmesi açısından kullandık.

Şayet makinenizde kullanabileceğiniz yeterli ip adresi olmazsa "ip aliasing" yöntemi ile arabiriminizin ip adresini çoğaltabilirsiniz.

   * ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0

gibi ip-aliasing yapmak mümkün olur. Bu durumda eth0 arabirimine ilave olarak ikinci bir ip daha verilmiş olacaktır.

External dnscache deki önemli noktalardan biriside dns sunucumuzdan sorgulama yapabilmesini istediğimiz ip adresi veya ip adreslerini (belirli bir aralık da olabilir) belirtmemizin gerekliliğidir. Şayet herhangibir ip adresi belirtmezsek varsayılan olarak tüm ip adresleri dns sunucumuzdan hizmet alamayacak şekilde ayarlıdır.

192.168.0.x 'li ağımızın bu dns sunucudan hizmet alabilmesini sağlayalım.

   * touch /etc/dnscachex/root/ip/192.168.0
   * svc -t /service/dnscachex

NOT : Şayet yukarıda internal dnscache kurmuş ve daha sonra bunu external dnscache'e çevirmek istiyorsanız, yukarıdaki konfigurasyon üzerinden devam edebilirsiniz. Bunun için;

   * nano /etc/dnscache/env/IP

ile daha önce bu dosyada 127.0.0.1 olarak belirtmiş olduğunuz ip adresini 192.168.0.1 gibi (bu dns sunucuya ulaşılmasını sağlayacak ip adresidir. Diğer bir deyişle, ağdaki makinelerin dns ayarlarında belirtmesini istediğiniz ip budur. Bu ip sizin herhangibir arabiriminizde olmalıdır.) bir ip adresine çevirebilirsiniz. Bu durumda,

   * touch /etc/dnscache/root/ip/192.168.0
   * svc -t /service/dnscache

ile işlemleri tamamlayabilirsiniz. Bu durumda /etc/resolv.conf içerisinde de "/etc/dnscache/env/IP" dosyasında belirttiğiniz ip adresini kullanmanız gerekecek. Test için yine yukarıdakine benzer şekilde nslookup veya dig'i kullanabilirsiniz.

Tinydns Yapılandırılması :

Bu kısımda da dns sunucumuzda kaydını bulunduracağımız domainlerin kayıtlarının nasıl girilmesi gerektiğine bakacağız. Domain kayıtları "/etc/tinydns/root/" içerisindeki "data" dosyasında yer alır. Domain kayıtlarını elle bu dosyaya uygun formatta girmek mümkün olduğu gibi, add-ns , add-host, add-mx gibi hazır betikler ile kayıtların düzgün olarak girilebilmesini sağlamak mümkün.

Djbdns'deki en önemli özelliklerden birisi, konfigurasyon dosyasının (/etc/tinydns/root/data) çok katı kurallarının olmaksızın, mümkün olduğunca esnek bir yapıda oluşturulabilmesinin sağlanmış olması. Aşağıdaki örneklerle bunu daha net izah etmeye çalışalım.

/etc/tinydns/root/data dosyası örnekleri :

Örneklerdeki ns1.domain.com ilgili domainin nameserver adını, a.b.c.d de ise ip adresini, e.f.g.h ise domainin barındırlacağı ve mail, ftp sunucularının yer alacağı makinenin ip adresini işaret eder.

   * example.com domainin dns kaydı :

.example.com:a.b.c.d:ns1.domain.com:86400 +example.com:e.f.g.h:86400 @example.com:a:example.com:86400 +www.example.com:e.f.g.h:86400 +mail.example.com:e.f.g.h:86400 +ftp.example.com:e.f.g.h:86400

Yukarıdaki örnekte example.com, www.example.com, mail.example.com ve ftp.example.com için ilgili kayıtlar girilmiş ayrıca example.com domainin mail alabilmesi için gerekli MX kaydıda (@example.com:a:example.com:86400) girilmiştir.

   * example.com için yukarıdakinin aynı özelliklere sahip farklı tarzda girilmiş bir kayıt örneği.

Zexample.com:ns1.domain.com::20041120:10000:3600:604800::86400:: .example.com::ns1.domain.com:86400 +example.com:e.f.g.h:86400 @example.com:a:example.com:86400 +www.example.com:e.f.g.h:86400 +mail.example.com:e.f.g.h:86400 +ftp.example.com:e.f.g.h:86400

Yukarıdaki örneklerde 86400 değeri, ttl değeridir. Yani verilerin ne kadar süre cache'de tutulacağını belirtir. 86400 değeri 1 güne (60*60*24 = 86400 sn) tekabül eder.

son örnekdeki ;

   * Zexample.com:ns1.domain.com::20041120:10000:3600:604800::86400::

satırındaki rakamlar kafanızı karıştırmasın. Bu satırın da formatı şu şekilde :

   * Zfqdn:mname:rname:ser:ref:ret:exp:min:ttl:timestamp:lo

mname : birincil nameserver (ns1.domain.com)

rname : ikinci nameserver (bizdeki kayıtda boş)

ser : serial değeri (20041120 gibi , o günün tarihini verebiliriz)

ref : tazeleme (refresh) süresi (10000)

ret : yeniden deneme (retry) süresi (3600 = 1 saat)

exp : yok olma (expire) süresi (604800 = 1 hafta)

min : minimum süre (bizdeki kayıtda boş)

ttl : cache süresi (86400)

timestamp : kayıtda değişiklik yapınca, değiiklik yapılan zamanı belirtebileceğimiz alan (bizdeki kayıtda boş).

lo : IN veya EX değerlerini içerir. Yönlendirme amaçlı kullanılır (bizdeki kayıtda boş).

Bu satır komple formatı içermek yerine sadece şu şekilde de olabilir;

   * Zexample.com:ns1.domain.com:

Yani yukarıdaki formatda yazmak istemediğiz alanları boş geçebilirsiniz.

example.com için yine farklı bir kayıt örneği:

a.b.c.d nameserver'ın ip adresini, e.f.g.h ise domainin barındırılacağı makinenin ip adresini işaret eder. Bu sefer cache süresi 3 gün olarak belirtilmiştir (259200). Yalnız önemli bir noktaya dikkat çekmekte fayda var,

@example.com:a:example.com:259200

satırında, example.com için maillerin yine example.com makinesine gönderilmesini istiyoruz, bu satırın hemen üstündeki kayıtda,

+example.com:e.f.g.h:259200

ile example.com domainin e.f.g.h adresine sahip olduğunu belirtmiştik. Bu durumda example.com için göndereceğimiz mailler e.f.g.h adresine gidecektir. Bu durumda e.f.g.h adresinde example.com için gelen mailleri alan bir mail sunucu olmalı tabiki. Aynı şekilde ftp sunucusunda e.f.g.h adresinde olduğunu belirttik. .example.com:a.b.c.d:a:259200 +example.com:e.f.g.h:259200 @example.com:a:example.com:259200 =www.example.com:e.f.g.h:259200 +mail.example.com:e.f.g.h:259200 +ftp.example.com:e.f.g.h:259200

yukarıdaki örnekleri, yapının ne kadar esnek ve kullanışlı oldunu göstermek için verdim. Şayet kafa karıştırıcı olmuş ise son olarak biraz daha somut (gerçi ip adresi olarak 192.168. li adreslerden örnek vereceğim ama) bir örnekle bu kısımdaki ayarları noktalayalım.

Senaryo :

Yine example.com domaini için dns kayıtlarını gireceğiz. İsim sunucu (nameserver) ip adresi 192.168.0.1 (dns kaydının tutulduğu makinenin ip adreside denilebilir) olsun. www.example.com, mail.example.com ve ftp.example.com 192.168.0.2 ip adresine sahip makinede barındırılacak olsun ve son olarakda example.com için mail sunucu görevini yapacak makinede 192.168.0.3 ip adresine sahip olsun. Bu durumda aşağıdakine benzer şekilde kaydın girilmesi uygun olur.

   * cd /etc/tinydns/root/
   * ./add-ns example.com 192.168.0.1
   * ./add-ns 1.168.192.in-addr.arpa 192.168.0.1
   * ./add-host www.example.com 192.168.0.2
   * ./add-alias mail.example.com 192.168.0.2
   * ./add-alias ftp.example.com 192.168.0.2
   * ./add-mx example.com 192.168.0.3
   * make (işlemlerin aktif olabilmesi gerekli)

Bu işlemler sonucunda /etc/tinydns/root/data dosyası aşağıdaki şekilde olacaktır. Dilerseniz yukarıdaki işlemleri yapmaksızın bu kaydı data dosyasına siz ellede girebilirsiniz. .example.com:192.168.0.1:a:259200 .1.168.192.in-addr.arpa:192.168.0.1:a:259200 =www.example.com:192.168.0.2:86400 +mail.example.com:192.168.0.2:86400 +ftp.example.com:192.168.0.2:86400 @example.com:192.168.0.3:a::86400

Önemli Not :

Tekrar hatırlatmakta fayda var, gerekli kayıtları girip, data dosyasını kaydettikden sonra değişikliklerin aktif olabilmesi için;

   * cd /etc/tinydns/root/
   * make

Girdiğiniz kayıtların çalışıp çalışmadığını test etmek için "dnsq" komutunu kullanabilirsiniz. www.example.com kaydı için dns sunucudan sorguya cevap dönüp dönmediğini kontrol etmek için;

   * dnsq A www.domain.com a.b.c.d (a.b.c.d = kayıtlardaki namerserver ip'sini işaret eder)

Djbdns ile ilgili daha detaylı bilgilere aşağıdaki belgelerden ulaşabilirsiniz.

  1. http://www.belgeler.org/howto/djbdns-kurulumu-nasil.html (Türkçe kapsamlı djbdns belgesi)
  2. http://cr.yp.to/djbdns.html
  3. http://www.fefe.de/djbdns/
  4. http://www.fbunet.de/djbdns.shtml