| 
       | 
  
    |  | 
  
    |  | 
  
    | BIND, the Buggy Internet Name Daemon is like 
      Microsoft Windows. The damn thing doesn't work. Every version has 
      been brimming with bugs.    
                                   
      --D.J.Bernstein ( http://cr.yp.to/djbdns/ad/unbind.html 
      )
   Bu dökumanda şu an Unix dünyasında bulunan en güvenli dns sunucusu olan 
      djbDNS ve kurulumu anlatılacaktır.DjbDNS D.J.Bernstein tarafından 
      yazılmıştır.  Kendisi aynı zamanda qmail,tcpserver,publicfile,daemontools 
      gibi çeşitli sistem yazılımları yazmıştır. Sanırım üssteki ifadeye 
      katılmamak mümkün değil.DjbDNS gerek üniversite gerekse ticari şirketler 
      tarafından rahatça kullanılabilir. Bind tek başına SPOI (Single Point of 
      InSecuritness ) lakabını yeterince hakketmektedir. Ayrıca djbdns dns 
      sistemi için yeni client libraryleride sunmaktadır. http://cr.yp.to/djbdns/ad/library.html 
      adresinden gerekli bilgiler edinebilir. 
 
 OpenBSD üzerine kurulacak 
      basit bir makinada djbdns 2-3 sene kesintisiz hizmet verebilir. OpenBSD'yi 
      merak ediyorsanız http://www.enderunix.org/docs/openbsd_installation.html 
      adresinde TÜRKÇE kurulum klavuzundan yaralanarak bu işletim sistemine bir 
      giriş yapabilirsiniz.   Bilindiği üzere şu anda dünya üzerinde en çok kullanılan dns server 
      yazılımı olan Bind paketinde bir çok vulnerability bulunmaktadır.
      Bunların 
      ortaya çıkması sadece zaman meselesidir. Nitekim şu an kullanılan bind 
      sürümünde bile birkaç vulnerability'nin var olduğu ve bunun internette 
      trade yapıldığı konuşulmaktadır. Söylenti bile olsa bind'i kullanmak 
      zorunda olan sistem yöneticileri ne demek istediğimi 
      anlayacaklardır. Securityfocus.com adresinde de djbdns kurulumu 
      anlatılmaktadır. Zaten djbdns ile biz böyle tanıştık. Sendmailden Qmail'e 
      çekilen zorlukları bind'tan djbdns'e geçerken yaşamayacaksınız. Bu yazının sonunda bind ve 
      djbdns karşılaştırmasının adresi de verilecektir. | 
  
    |  | 
  
    | Bu dokumanin en guncel hali; http://www.enderunix.org/docs/djbdns_installation.html 
      adresindedir. Aksi belirtilmedigi takdirde bu kabil dokumanlarin 
      hakları  yazan yazarlarda saklidir. Bu dokuman da, parca parca ya da 
      tamamen herhangi bir sekilde, yazarinin izni dahilinde 
      dagitilabilir. Yazar, bu dokumani okuyanlarin ugrayacaklari 
      herhangi bir zarardan oturu sorumluluk kabul etmez. Use-at- your-own-risk! Eger, herhangi bir konuda yardima ihtiyaciniz 
      olursa, roots@enderunix.org  
      adresine mail atabilirsiniz.!   | 
  
    |  | 
  
    | DNS 
    Nedir? | 
  
    | Domain Name System [DNS] dagıtık 
      yapıda bir databasedir. Bu sistem hostnameleri IPv4(yada ipv6) yada IPv4 
      adresleri hostnamelere çevirmeye yarar. Ayrıca bir domain için gerekli mail 
      sunucusunun adreslerini yada domain name serverlarının hangi IP'de 
      bulunduğunu daha teknik bir ifade ile RR(Resource Records)'ları tutar.DNS 
      yapısı gereği hızlı olmalıdır. Bu yüzden yapılan sorgulamalar eğer 512 
      byte'tan küçük ise yada master dns server ile slave dns server arası zone 
      transferi değlise UDP üzerinden yapılacaktır. DNS sisteminin yazaları dns 
      için gerekli  bilgileri diğer internet araçlarında olduğu gibi 
      RFC'lerde tanımlamışlardır. (RFC 1034 ve 1035) Bu dökumanlara bakarsanız 
      içinde birkaç kod ve zone file'larının nasıl yazılacağını
      bulursunuz.
   BIND 
      (Berkeley Internet Name Daemon)da yazılırken bu kriterler dikkate 
      alınmıştır. Fakat bu sistemde gereksiz karmaşıklıkta code'lar ve bunun 
      getirdiği güvenlik problemleri vardır. Fakat djbdns bu karmaşadan uzak ve 
      güvenli bir yazılımdır. Bunun sonucu olarakta two-thumbs-up bir daemon 
      olmayı bizce hak kazanmıştır. Hatta bizce bind 9.1.X ve ileriki 
      surumlerinde kullanılan Dns-sec sistemi bile  bind için bir çözüm 
      olmaktan çok uzaktır. Sonuçta temel yani daemon internetin ilk 
      zamanlarından kalmıştır. Şu an ipv4'te yaşanılan güvenlik sorunlarda aynı 
      sebepten oluşmaktadır.  Bu yüzden köklü bir değişim olması gerekliliği 
      savunulmuş ve ipv6 ortaya atılmıştır. Bind içinde benzer model söz konusu 
      olmadıkçca djbdns popüleritesini sürdürecektir. (Haklı bir popülerite
      !!!).   Genel olarak dns yazılımlarının yaptığı iki vazife vardır. Bind 
      kullananlar eğer çok profesyenel değillerse yada bu konu ile alakalı kitap 
      okunmamışsa bu iki olguyu karıştırabilmektedirler. Bunlar:
 1)  
      Resolving: Aranılan bir kaydı bulma işlemi.Mesela http://www.yildiz.edu.tr/ adresine 
      karşılık gelen ipv4 adresinin 193.140.1.1 olmasının bulunması. Resolving 
      yapan yazılımlar iki çeşit resolving yaparlar; recursive resolving yada 
      non-recursive resolving. Querylerde gönderilen RD (recursion required) 
      bitlerine göre querynin tipi belirlenir. Non-recursive querylere cevap 
      veren serverlar cevap olarak recursive name servları 
      verirler.
 
 Sonuç olarak yapılan bir query recursive ise http://www.yildiz.edu.tr/ için direk 
      193.140.1.1 IP'si yada host bulunamadı cevabı verilebilir. Fakat 
      non-recursive bir query'de cevabı bulmak için başka bir name server ip'si 
      verebilir. Non-recursive query'ler aynı anda iterative query'ler olarakta 
      bilinirler.
 
 2)  Authoritive Nameserving: Bir domain hakkında 
      bilgi bulunduran daemondur. Mesela yildiz.edu.tr domainin MX,NS,A (Bunlar 
      Resource Record olarak bilinir) recordlarının yada kayıtlarının tutulduğu 
      name serverdır.
     
        
          | CANLI BIR ÖRNEK: Bir query nasıl yapılır.
            Mesela http://www.yildiz.edu.tr/ adresinin 
      ipv4 karşılığı nedir? Bunun için resolver yada sizin bilgisayarınız 
      internette birkaç authoritive name serveları gezmek zorundadır. İlk başta " 
      . " serverlarından  tr. TLD'si için authoritive name server IP'si
            bulunur. Bunun IP'si (ki bu ip'nin hostname'i ülkemiz için ns1.metu.edu.tr 
      yada ns2.metu.edu.tr'dir) alındıktan sonra bu authoritive nameserver'a 
      "edu.tr." i barındıran authoritive nameserver ip'si sorulacak ve bu işlem 
      böylece devam edecektir ve sonuç olarak 193.140.1.1 adresini sizin 
      makinanız yada /etc/resolv.conf'unuzda bulunan resolver'ınız 
      yildiz.edu.tr'in authoritive nameserver'ından aldığı bilgilere göre 
      cache'inde belli bir müddet tutacaktır. Bu süreye TTL (time to live) süresi
            denir. Bu süre boyunca resolver gerekli bilgileri hafızasında 
      cacheleyecektir. DjbDNS için aksi belirtilmezse bu süre 42 
      dakikadır. Implemente edilecek sisteme göre bu sure 5 saniyede 
      yapılabilir. (Nitekim birden fazla www serverımız var ve bunlar arasında 
      round-robin kullanarak load balancing yapmak istersek bu  saniye 
      değeri kullanılacaktır).
 |  
 
 
 | 
  
    |  | 
  
    | Önceden 
      Kurulması Gerekli Yazılımlar | 
  
    | DjbDNS'i kullanmak için önceden 
      kurulması gereken birkaç yazılım vardır. Bunlar yine D.J. Bernstein 
      tarafından yazılmışlardır. Bunlar kullanılması istenen sisteme göre 
      değişir. Genel olarak sistem eğer sadece master server olacaksa daemontools 
      kurulması yeterli olacaktır. Daemontools sisteminizde çalışan daemonları 
      yada servisleri gözetleyen bir yazılımdır. Fakat sadece gözetlemekle kalmaz 
      eğer konfigurasyon dizininde bulunan daemaon çalışmıyor ise bunları tekrar 
      başlatır. Bu yazılım ile benzer vazifeleri yapan birkaç yazılım daha 
      vardır. Mesela "mon" örnek verilebilir. 
 Kurulumu:$ wget daemontools-0.70.tar.gz
 $ 
      tar zxvf daemontools-0.70.tar.gz
 $ cd daemontools-0.70
 # make setup 
      check
 # mkdir /service
 #svscan /service &
 
 Bundan sonra asıl 
      yazılımımız olan djbdns sisteme kurulur.
 $ wget djbdns-1.05.tar.gz
 $ 
      tar zxvf djbdns-1.05.tar.gz
 $ cd djbdns-1.05
 # make setup 
      check
 
 Eğer kurulacak olan sistemde ikinci bir slave server olacaksa 
      zone transferi gerekecektir. Bunun için gerekli olan yazılımlar. Ucspi 
      (tcpserver ) ve axfrdns olacaktır. Bu yazılımlarda üstte anlatıldığı 
      şekilde kurulabilir.
 | 
  
    | Dnscache 
      Programının Kurulması | 
  
    | Dnscache yukarıda anlatılan 
      yazılımlardan resolver kısmına girmektedir. Yani /etc/resolv.conf'a 
      yazılacak IP şimdi kuracağımız yazılımın koştuğu bir bir server'a ait 
      olmalıdır. Burada kuracağımız dnscache aslında dnscache'in kurulması olası 
      iki çeşidinden birisi olacaktır. Bunlar "external dnscache" ve "internal 
      dnscache" olarak adlandırılır. Biz burada internette yada ağımızda bulunan 
      başka bir bilgisayarın querylerini işleyecek yetisine sahip olan external 
      dnscache kuracağız. Eğer evinizden dial-up bağlanan bir kullanıcı iseniz 
      sisteminizde internal bir dnscache kuracabilir ve /etc/resolv.conf'a 
      127.0.0.1 ip'sini yazabilirsiniz. İnternal denmesinin sebebi 127.0.0.1 
      interface'ine kurulması ve dnscache'in kendini o ip'nin 53. portuna bind 
      etmesidir. Externalda ise fark sadece dnscache'in 127.0.0.1 den farklı ve 
      diğer bilgisayarların ulaşabileceği bir IP olmasıdır. 
 Ek olarak 
      dnscache kurulmadan önce hangi user olarak koşacağı ve hangi user olarak 
      logların tutulacağı belirtilmelidir. Genel olarak sisteminize login olması 
      ihtimali olmayan (shelli /non-existant olan) iki kullanıcı ekleyin.
      Bunlardan biri "dnscache" diğeride logları tutacak account olan 
      "dnslog" olabilir. Birde programımızın koşacağı dizinde
      belirlenmelidir. Genel olarak   /etc/dnscachex (x = external) 
      kullanılmaktadır. Şimdi yazılımı kurabiliriz.
 
 
 External 
      dnscache:
 #dnscache-conf dnscache dnslog /etc/dnscachex 
      192.168.1.1            
      { dnscache-conf user loguser dizin ip}
 #ln -s 
      /etc/dnscachex /service               
      {bu işlem ile daemontools yazılımımızı  
      saniye içinde başlatacaktır}
 # echo "192.168.1.1" > 
      /etc/resolv.conf
 
 Internal dnscache:
 #dnscache-conf dnscache 
      dnslog /etc/dnscache        {Dikkat ederseniz IP belirtmedik.Default
      127.0.0.1'dir }
 #ln -s /etc/dnscache /service
 #echo "127.0.0.1" 
      > /etc/resolv.conf
 # touch /etc/dnscachex/root/ip/193.140.1             
      {***Default olarak dnscache bütün queryleri deny eder.Bu 193.140.1 dosyası 
      ile ağ içine dnsquery yapması için izin verelim.}
 
 Cache'imizin 
      çalışıp çalışmadığını sorgulamak için "dnsqr " komutu 
      kullanılabilir. Yapılan querylerde önemli olan satır  "answer" 
      satırıdır.
 
 
        
          | # dnsqr a yildiz.edu.tr 1 yildiz.edu.tr:
 166 bytes, 1+1+3+3 
      records, response, noerror
 query: 1 yildiz.edu.tr
 answer: 
      yildiz.edu.tr 30218 A 193.140.1.1      {answer ile başlayan kısım bizim 
      aradığımız cevaptır.}
 authority: yildiz.edu.tr 86391 NS 
      ana.cc.yildiz.edu.tr
 authority: yildiz.edu.tr 86391 NS 
      ns.ulak.net.tr
 authority: yildiz.edu.tr 86391 NS 
      vm4381.ce.yildiz.edu.tr
 additional: ana.cc.yildiz.edu.tr 86391 A 
      193.140.1.1
 additional: ns.ulak.net.tr 62760 A 
      193.140.83.251
 additional: vm4381.ce.yildiz.edu.tr 86391 A 
      193.140.2.1
 |  
 
 
 Artık elimizde çalışan 
      bir resolver var. Ek olarak istersek CACHE büyüklüğünü 100mb ram harcayacak 
      şekilde ayarlayabiliriz. Bunun için:
 #echo 100000000 > 
      /etc/dnscachex/env/CACHESIZE
 #echo 104857600 > 
      /etc/dnscachex/env/DATALIMIT yapılması gerekir. Tabi bundan sonra "svc -t 
      /service/dnscache "  ile programımızı yeniden başlatmak 
      gerekecektir.
 Şimdi sıra domanimiz için authoritive nameserver olacak olan  " 
      tiny-dns " programını kurmaya geldi. | 
  
    |  | 
  
    | Tiny-dns 
      Kurulumu | 
  
    | Tiny-dns yukarıda da anlatıldığı 
      üzere bizim domanimiz için authoritive nameserverimiz olacak. (aynı zamanda 
      authoritive reverse name servermiz olacak ipv4-->hostname.. ) Önce 
      sistemimize tiny-dns user'ını(tinydns) ekleyelim ayrıca sistem logları 
      için dnslog da eğer daha önce dnscache kurulmadıysa 
      eklenmelidir.
 ÖNEMLI NOT : Dikkat edilmesi gereken bir nokta olarak 
      dnscache ile tinydns aynı ip'yi dinleyemez. Bu yüzden tiny-dns'i 
      192.168.1.2'nin 53. portuna bind edeceğiz.(IP-ALIASING artık bütün 
      *NIX'lerde vardır). Eğer elinizde sadece bir real ip varsa bu gerçek ip'yi 
      tiny-dns için kullanın ve 192.168.1.1 ip'sinide dnscache için kullanın.
 Tiny-dns:#tinydns-conf tinydns dnslog /etc/tinydns 192.168.1.2             
      {yada gerçek bir IP }
 #ln -s /etc/tinydns /service                                                     
      { 5 saniye sonra 
      daemon up olacak }
 Sıra tinydns'e hostname ve reverse kayıtlarının girilmesine
      girilimesinde. Bu aşamada iki seçeneğiniz var.Ya "data" dosyasını manuel 
      olarak düzenleyeceksiniz ya da /etc/tinydns/root dizini altında bulunan 
      add* scriptlerini kullanacaksiniz. Burada bizim tavsiyemiz data dosyasına 
      girdilerin add* scriptleri ile girilmesi yönünde olacaktir. Böylece her ne 
      kadar data dosyasının konfigurasyonu bind'a göre son derece kolay ve
      anlaşılır olsada ufak hatalar yapılabilme olasılığının olmasıdır.
      Fakat 
      add* scriptleri ile bu baş ağrıtıcı hataların oluşturduğu problemlerden 
      kurtulmuş olursunuz. Sırasıyla yildiz.edu.tr için dns kayıtlarını girelim ve authoritive 
      name servermizi kuralım. 
        
          | #cd /etc/tinydns/root #./add-ns yildiz.edu.tr 193.140.1.1                  { 
      *.yildiz.edu.tr için authoritive nameserver 193.140.1.1 olacak; SOA}
 #./add-ns 1.140.193.in-addr-arpa 193.140.1.1  {reverse 
      authoritive nameserver 193.140.1.1 olacak}
 #./add-host 
      ogis.yildiz.edu.tr 193.140.1.3        { Sanırım baya zor anlasılacak birsey :) 
      }
 #./add-alias www2.yildiz.edu.tr 193.140.1.3     {DAHA ÖNCEDEN TANIMLANMIŞ 
      bir ip'ye hostname alias ekliyoruz}
 #./add-mx yildiz.edu.tr 193.140.1.1                 
      {bir numaralı mx olarak 193.140..1.1 ekleniyor}
 #./add-mx yildiz.edu.tr 
      193.140.1.5                
            {ikinci sırada gelen yildiz.edu.tr mx 
      serveri}
 #./add-childdns ece.yildiz.edu.tr
            193.140.1.15  { subdomainler için namserver }
 # make                                                       
            {tindns-data komutu çalıştırılır }
 |  
 Bu noktada önemli birşey var. add-ns ve add-mx scriptlerini kullanırken 
      dikkat ederseniz ns serverların hostname'ini vermedik. Bu iki script 
      default olarak a.ns ... b.ns hostnamlerini atarlar. Eğer internic'te yada 
      daha doğru ifadesiyle registrar'ınızda nameserver hostname'i olarak farklı 
      bir isim olabilir. İşte bu noktada iki hostname'de aynı olmalıdır. add-ns 
      ve add-mx yine aynı dizinde ( /etc/tinydns/root/) dizini altinda bulunan 
      "data" dosyasını düzenler. Burada favori editörünüzle bu dosyayı açıp 
      gerekli değişiklikleri yapmalısınız. Örnek olarak ulak.net.tr'de 
      yildiz.edu.tr nameserverinin hostname'i ana.cc.yildiz.edu.tr olarak 
      tanımlıdır. "data" dosyasında bu değişiklik yapılmalıdır.
 
 Sıra geldi data dosyasındaki bilgileri data.cdb 
      olarak yani tinydns'in konfigurasyon dosyası olarak kaydetmeye. Yine ayni 
      dizinde dikkat ederseniz bir Makefile vardir. Yapılması gereken tekşey bu 
      dizinde "make" komutunu çalıştırmaktır. Make komutunun yazılması ile 
      birlikte tiny-dns hizmet vermeye hazir olacaktır. Make komutu Makefile 
      dosyasındanda anlaşılacağı üzere "tinydns-data" programını kullanarak 
      data.cdb'yi oluşturur. Kısacası tinydns-data data dosyasını okur ve 
      tinydnsin hızlı bir şekilde ulaşabileceği data.cdb dosyasını 
      yaratır. Ayrıca tinydns-data otamatik olarak data.cdb'yi günceller. Böylece 
      data dosyasında yapılan bir değişiklik tinydns'i bir daha başlatmadan 
      direk data.cdb dosyasını günceller. Eğer bu data.cdb update edilirken 
      sistem çökse bile sistem yeniden başladığında sistem data.cdb dosyasında 
      bir problem yaşamaz. Tam bir all-or-nothing mantığıyla yada transaction 
      mantığı ile çalışır.
     Aşağıda data file'ın içeriği 
      verilmiştir. Bu dosyayı üstte add-* scriptleri ile yapabileceğiniz gibi 
      manuel olarakta yapabilirsiniz.
 
        
          | .yildiz.edu.tr:193.140.1.1:a:259200                 
            {yildiz.edu.tr için  authoritive nameserver notka ile 
      başlıyor.} .1.140.193.in-addr.arpa:193.140.1.1:a:259200
 =www.yildiz.edu.tr:193.140.1.1:86400            
            {www.yildiz.edu.tr için host 
      kaydı}
 .1.140.193.in-addr.arpa:193.140.1.1:a:259200  {*.1.140.193 
      için authoritive nameserver 
      }
 =ogis.yildiz.edu.tr:193.140.1.3:86400             
            {ogis.yildiz.edu.tr 
      için host kaydı }
 +www2.yildiz.edu.tr:193.140.1.3:86400          
            { Bir 
      alias kaydı.Alias kayıtları + ile başlar}
 @yildiz.edu.tr:193.140.1.3:a::86400               
            { yildiz.edu.tr için 
      mx kaydı.Prioritysi harflerle ifade ediliyor. 
      }
 @yildiz.edu.tr:193.140.1.5:b::86400               
            { yildiz.edu.tr 
      için ikinci mx kaydı. @ ile başlıyor. }
 &ece.yildiz.edu.tr:193.140.1.15:86400            
            {ece.yildiz.edu.tr için gelen queryleri 193.140.1.15 ip'sine
            yönlendir}
 |       Bu arada istenirse daemontools ile gelen svstat ile 
      tinydns çalışıyormu çalışmıyormu kontrol edilebilir.#svstat
      /service/tinydns.
 Yada log filelara bakabiliriz.
 #tail 
      -f /service/tinydns/log/current ile gerçek zamanlı olarak işlemler 
      gözlenebilir.
 
 Birde tinydns'in datasını kontrol edelim. Bunun için 
      dnscache'i için kullandığımız komuta benzer bir komut olan "dnsq" komutunu 
      kullanacağız.
 #dnsq a yildiz.edu.tr 193.140.1.11 
      yildiz.edu.tr:
 127 bytes, 1+1+2+2 records, response, authoritative, 
      weird ra, noerror
 query: 1 yildiz.edu.tr
 answer: yildiz.edu.tr 86400 
      A 193.140.1.1              
      {Önemli olan kısım 
      burası }
 authority: yildiz.edu.tr 86400 NS 
      smurf.cc.yildiz.edu.tr
 authority: yildiz.edu.tr 86400 NS 
      bigblue.ce.yildiz.edu.tr
 additional: smurf.cc.yildiz.edu.tr 86400 A 
      193.140.1.1
 additional: bigblue.ce.yildiz.edu.tr 86400 A 
      193.140.2.1
 
 
 NOT: Tinydns'i sorgulamak için dnsq dnscache'i 
      sorgulamak için dnsqr kullanılır.
   | 
  
    |  | 
  
    | /service/tinydns/root/data
      dosyası formatı: | 
  
    | Yukarıda da belirtildiği gibi "data" dosyasından
      tinydns'in okuyabileceği formata (data.cdb) dönüştürülür.Peki
      "data" dosyasının formatı ne şekildedir: 
 .fqdn:ip:x:ttl:timestamp:lo
 
 Teker teker yukarıdaki ifadenin ne anlamalara geldiğini açıklayayım.1) .fqdn kısmı sizin entry'nizi simgeler. Bu entry
      authoritive bir nameserver'in başlangıçı (SOA = Start Of Authority) si
      olabilir. Nitekim data dosyasinda "." ile başlayanlar SOA
      kaydini belirtir. Üstteki örneğimize bakarsak en üst
      iki satir "." ile başlamaktadir. Bunlar SOA'ları oluşturur.
      "." dan başka karakterler vardır:
 
        
          | a)
            . ile başlayanlar SOA'yı belirtir.Mutlaka olmalıdır. b) @ ile başlayan satır
            bunun bir mx entry'si olduğunu gösterir.
 c) = ifadesi A record'lar için
            kullanilir. Ayni zamanda tinydns-data reverse record kayitlarindan
            olan PTR entry'sini   girer.
 d) + ifadesi add-alias
            script'i ile oluşturulur. Yine bu işaret tinydns-data'ya A record
            yaratmasını soyler fakat PTR kaydi girilmez. Eğer aynı IP için
            iki tane = kullanırsanız hata alırsınız ( data dosyasini elle değiştirerek
            yada add-host ile ).
 e) & simgesi ile başlayan
            satırlar child-dns girmek icindir. Mesela elek.yildiz.edu.tr 'nin
            kendi dns server'ının olmasını istiyorsunuz. Bunun için
            add-childdns komutunu kullanırız.
 |  2) ip kısımı girdisi yapılacak fqdn'nin resolve
      edilecegi ip'yi belirler.Mesela:
 &ece.yildiz.edu.tr:193.140.1.15:86400  ifadesindeki
      ikinci sekmen  ip dir ve kendisinden önce gelen
      ifadenin   (&ece.yildiz.edu.tr) 
      ip'sini belirler.
 3) x kısmı mx ve ns kayıtlarında işe yaramaktadır.
      Bu
      önceliği belirlemek için kullanılır ve query'lere  buna göre
      verilir. Şöyleki eğer buraya "a" yada "b" girerseniz
      dnsq ile size dönecek cevap eğer ns kaydi sözkonusu ise
      a.ns.yildiz.edu.tr olur.Eğer girilen değer b ise bu ikincil nameserver'ı
      (authoritive)  gösterir ve b.ns.yildiz.edu.tr olarak gösterilir.
      Yine
      mx kayıtları içinde a.mx.yildiz.edu.tr ve b.mx.yildiz.edu.tr kullanılır.
      Eğer
      bu tarz gösterim yapmak istemiyorsanız. Bu kısma direk
      "dns1.yildiz.edu.tr" yada "dns2.yildiz.edu.tr"
      girebilirsiniz. Ya da aynı şekilde "mx1.yildiz.edu.tr" ve
      de  "mx2.yildiz.edu.tr".
 **Aklınıza şu soru gelebilir. Eğer bu kısma ben kendi hostname'lerimi
      girersem öncelik sırası ne olacak. Burada first-come-first-served ilkesi
      esas alinir. Yani dosyada hangisi üstte ise o öncelliğe sahiptir.
 4)ttl kısmı ise kurduğumuz authoritive nameserver'ı
      sorgulayan cache'lerin cache'lerinde bu entry'i kaç saniye(**) tutacağını
      belirler. ns  ve mx server lar için burada default deger 3 gün (259200 saniye)
      iken diğer entry'ler için 1 gündür (86400 saniye). 5)timestamp Adındanda anlaşılacağı üzere dosyanın
      ne zaman değiştirildiğini gösterir. " add-* " scriptleri bu kısma
      dokunmazlar.
 6) lo Bu kısım aşağıda da anlatıldığı
      üzere "Değişik istemcileri değişik cluster'lara nasıl 
      yönlendirebilirim? " sorusunun cevabı olmaktadır.
 
 
 
        
          | EK: 3
            kısımda anlatılanları somutlaştırmak için  örnek bir
            data dosyasından alıntı yapayım: 
 .yildiz.edu.tr:193.140.1.1:dns1.yildiz.edu.tr:259200
 Böyle bir entry'de tinydns-data komutu iki şey
            yapar. Ilk başta dns1.yildiz.edu.tr için 193.140.1.1 'i gösteren
            A record yaratılır. Daha sonra  bunun SOA olduğunu belirtilen
            kısım data.cdb'ye yazılır
 @yildiz.edu.tr:193.140.1.3:mx1.yildiz.edu.tr::86400
 
 Bu örnekte ise ilk başta A record sonrada mx
            kaydi yaratılır.
 |  
   | 
  
    | Zone
      Transferi: | 
  
    | Zone Transferi Nedir? 
 Master 
      yada primary dns serverınızda yaptığınız değişiklikleri secondary yada 
      slave serverlara kopyalamanız gerekmektedir. Aslında bunun için bir çok 
      değişik araçlar mevcuttur. Bunun için default shelli ssh olan rsync bile 
      kullanılabilir. Böylece dosyanının tamamının kopyalanması yerine artan 
      dosyaların sondaki ekleri kopyalanabilir. Yada isterseniz direk data.cdb 
      dosyasını manuel kopyalayabilirsiniz.
 
 Fakat bu iş için en aklı 
      başında çözüm axfrdns kullanılabilir. Bunun için öncellikle:
 
 1)DNS server 
      account name'i: "axfrdns". Diğer bütün djbdns programlarında olduğu gibi 
      program kendini bu account name adı altında belirtilen dizine chroot 
      eder. İşte bu djbdns programını güvenli kılan en önemli etkenlerden 
      biridir2)DNS log accountu: dnslog.
 3)axfrdns'in çalışacağı dizin 
      /etc/axfrdns
 4)tinydns dizini: /etc/tinydns
 
 Sonra 
      sırasıyla:
 
 
 
        
          | #axfrdns-conf axfrdns dnslog /etc/axfrdns /etc/tinydns 
      193.140.1.1                                 {Bu ip tinydns ip'si ile aynı olabilir.Çünkü axfrdns zone 
      transferi için 512 bytetan büyük dosyları transfer eder bu yüzden tcp 
      kullanılır fakat tinydns udp kullanır.} #cd /etc/axfrdns#echo 
      "193.140.1.:allow,AXFR="yildiz.edu.tr/1.140.193.in-addr.arpa" > 
      /etc/axfrdns/tcp     {193.140.1'deki makinalara reverse ve normal zone'larının 
      transferine izin ver }
 #make
 #ln -s /etc/axfrnds /service                                                                                         
      {axfrdns'i çalıştıralım}
   |      | 
  
    |  | 
  
    | axfr-get 
      {zone xfer istemcisi } | 
  
    | Eğer master olarak bir BIND server kullanacaksanız ve slave 
      (ya da secondary) name server olarak axfr-get programını 
      kullanmalısınız. Ya da diğer bir master tinydns serverdan zone transferinde 
      bulunmak için kullanılabilir. Eğer iki serverda (master ve slave) tinydns 
      ise scp yada rsync ile direk ana servardan data.cdb'yi slave server'ın 
      /etc/tinydns/root/ dizinine kopyalayabilirsiniz. Eğer rsync hususunda bir 
      bilgi almak isterseniz http://www.freebsddiary.org/ 
      adresini size tavsiye edebilirim.   Axfrdns-get kısaca şöyle çalışır:#tcpclient authoritive_name_server_ipsi  53 axfr-get yildiz.edu.tr fn 
      fn.tmp
 
 Burada eğer axfr-get ana çeşitli queryleri yaparak domain için 
      primary serverı bulacak ve eğer ana serverda zone transferi için 
      axfr-get komutunun çalıştığı servera izin verilmişse ana serverdan 
      (master) çektiği yildiz.edu.tr hakkındaki bilgileri fn.tmp olarak 
      yazacaktır. Eğer zone transfer işlemi başarı ile tamamlanırsa dosya adı 
      otamatik olarak fn olarak değiştirilecektir.Bu fn dosyası da   
      tinydns-data formatında olacaktır. Yani daha önce gördüğümüz data dosyası 
      ile aynı formatta olacaktır.Genel olarak axfr-get programının 
      getirdiği dosyalarda aynı kayıda ait birden fazla girdi olacaktır.
      Dosyayı 
      "sort -u" komutu ile dosyayı filtreleyebilirsiniz.
   NOT: axfr-get için daha önceden tcpclient programını kurmuş olmanız
      gerekmektedir. Zaten sisteminiz tcpserver  kurulu ise tcpclient 
      otamatik gelecektir. | 
  
    | DjbDns 
      komutları | 
  
    | Şu an kadar anlatılanlar neyin nasıl yapılacağı hususunda 
      genel bir bilgi vermek içindi. Bu bölümde anlatılacak olanlar djbdns ile 
      gelen programların (hepsinin) teker teker kısaca bir açıklaması olacak.
      DjbDns ile 
      gelen bir çok komut var. Bunların aklınızda biraz daha kolay yer etmesi ve 
      bu dökumanın bir referans kabul alınması için bu tarz bir uygulama 
      yapıyorum. 
   
        
          | dnscache  : Kısaca resolver olarak kullanılmaktadır.Çözülen
      her istekleri aynı zamanda cacheleyerek cevap verme süresinin azalmasını
      sağlar.Ağ ortamından gelen isteklere cevap verecek şekilde
      ayarlanabileceği gibi local resolver olarakta kullanılabilir.
 tinydns : 
      Authoritive bir nameserver'dır.UDP altında çalışır.Örnek vermek
      gerekirse yildiz.edu.tr domaini için gelebilecek tüm querylere cevap
      verecek şekilde ayarlanabilir.512 byte ve üzeri isteklere cevap
      vermez.Bunun sebebi sadece udp altında çalışması ve dns
      implementationun bu şekilde olmasıdır.
 
 walldns : WallDNS
      reverse bir dns walldır.Yani sisteminiz gerisindeki real ip'ye sahip
      hostların isimlerini saklamakta kullanılabilir.Firewall mantığı ile
      örtüşür.Bazı ftp serverlar kendine gelen requestleri kabul etmek için
      mutlaka reverse kaydının o host için tanımlı olmasını isterler.Bu
      durumlar için walldns kullanılabilir.
 dnsq     :  tinydns gibi
      authoritive namserverları sorgulamak için kullanılır.#dnsq type
      FQDN server
 #dnsq MX yildiz.edu.tr 193.140.1.1
 193.140.1.1 serverına
      yildiz.edu.tr için kayıtlı mx kayıdını sorar.
 
 dnsqr   
      : Bu komut dnsq'ya benzer fakat authoritive nameserver sorgulaması yerine
      dnscache gibi cacheleri sorgulamaya yarar.
 #dnqr ns http://www.yildiz.edu.tr/
 Cache'e
      yildiz.edu.tr nin ns kaydını sorar.
 dnsfilter  : Bu komut dnsname gibidir fakat aynı anda çoklu
      query yapabilir.dnsname sadece bulduğu ilk entry'i listeler.#dnsfilter
 193.140.1.1                                    
      {Bizim girdimiz }
 193.140.1.1=smurf.cc.yildiz.edu.tr
 193.140.1.3                                     
      {Bizim girdimiz }
 193.140.1.3=ogis.cc.yildiz.edu.tr
 
 
 axfrdns  : Zone transferi için kullanılır.Çeşitli 
      slave nameserverlar için zone transfer server olarak vazife yapar.Tinydns'in
      çalıştığı IP'de çalışabilir.TCP kullanır.
 dnstrace : Belirtilen root
      nameserver'dan başlayarak ( r ) bir domain altinda ( fqdn ) 
      istenenen tipte ( t ) queryleri bulur ve ilişki kurduğu bütün
      serverları stdout'a yazar.Fakat karmaşık bir formatta.1) #dnstrace t fqdn r
 2) #dnstrace any www.yildiz.edu.tr 
      a.root-servers.net > yildiz &
 
 dnstracesort : dnstrace komutunun ciktisini okuyabilieceğimiz
      şekilde listeler
 # dnstracesort < yildiz | less
 
 **Yada direk: dnstrace any www.yildiz.edu.tr 
      a.root-servers.net | dnstracesort | less
 
 axfr-get :
      Slave servlarda kullanılmak üzere tasarlanmıştır.Master serverdan
      zone transferinde kullanılmak için kullanılır.
 
 Ayrıca birkaç scripting amaçlı komutlar(dnsmx,dnsip,dnsname)
 
   |  | 
  
    | Yardımcı 
      Bilgiler | 
  
    | Bu bölümde  sahsımın ilgisini çeken birkaç noktayı 
      anlatacağım: 1) Aynı data'yı içeren 5 web server için Load Balancing nasıl 
      yaparım?
       Aslında dns tabanlı load-balancing'e tam manasıyla sıcak 
      bakmasamda djbdns ile load balancing yapılabiliyor. Eğer Linux altında 
      gerçek bir Load Balancing ya da High Availability arıyorsanız http://www.linux-vs.org/ yada http://www.linux-ha.org/ adresine 
      bakın derim. Neyse biz konumuza dönelim.Amacımıza ulaşmak için TTL ile 
      oynayacağız.Her bir www serverimizin entrysi için 5 saniye bir TTL 
      tanımlayacağız. Böylece karşı tarafta cachelenen querylerinin yaşam süresi 
      5 saniye olacak. Gelen her bir request için djbdns'te round-robin yaparak 
      bu 5 server arasında tercihini yaparak karşı taraftaki resolvera 
      bildirecektir.  /etc/tinydns/root/data 
      dosyasına
 
 +www.yildiz.edu.tr:193.140.1.1:5
 +www.yildiz.edu.tr:193.140.1.2:5
 +www.yildiz.edu.tr:193.140.1.1:5
 ......
 yazılır.
      /etc/tinydns/root/ 
      dizininde "make" komutu çalıştırarak tinydns-data komutunun data 
      dosyasındaki bilgileri data.cdb gibi cdb formatında saklaması 
      sağlanır.
 
 
 
 2)Değişik istemcileri değişik cluster'lara nasıl 
      yönlendirebilirim?
 Diyelimki üniversiteniz yada şirketiniz içinden 
      gelen querylere yani intranet'inizden gelen querylere http://www.yildiz.edu.tr/ için 
      193.140.1.1 internetten gelen http://www.yildiz.edu.tr/ queryleri 
      için 192.193.140.1.2...5 arası cevapların verilmesini istiyorsunuz.
      Bunun 
      için /etc/tinydns/root/data dosyasına farklı iki location tanımlarız.
      IN ve 
      EX gibi 1 yada 2 byte uzunluğunda (maximum  2 byte uzunluğunda) 
      tanımlamalar 
      yaparız. Şöyleki:
 
 %IN:193.140.1
 %EX
 +www.yildiz.edu.tr:193.140.1.1:5::IN
 +www.yildiz.edu.tr:193.140.1.2:5::EX
 +www.yildiz.edu.tr:193.140.1.3:5::EX
 ...
 
 3)Diğer bir problem ise aynı ağda bulunun bir dnscache'in 
      o ağ için tanımlı authoritive nameserveri nasıl bulacağıdır.
      Normalde 
      aşağıdaki bir düzenleme yapılmazsa local olarak bulunabilecek bir cevap 
      için bütün interneti gezmesi gerekecektir. Bu durumu önlemek için:
       #cd /etc/dnscachex/root/servers#echo "193.140.1.1" 
      > yildiz.edu.tr
 # echo "193.140.1.1" > 
      1.140.193.in-addr.arpa
 ile bu sorunu çözebilirsiniz.   4)Bu kısım çok önemli (!!!). Diyelimki djbdns'i
      kurdunuz ve herşeyin tam olarak çalışıp çalışmadığından emin
      olmak için sisteminizi yeniden başlattınız. Fakat o ne.Djbdns çalışmadı
      ve şu şekil bir hata veriyor : svscan: warning: unable to start supervise dnscache: file does not exist Burada
      bulunamayan ve svscanin dnscache'i çalışmamasını sağlayan
      /usr/local/bin altındaki daemontools komutlarının bulunmaması.
      Buradaki
      çözüm: /usr/local/etc/rc.d/djbdns.sh gibi bir dosya yaratıp, chmod 755
      djbdns.sh ile çalıştırılabilir hale getirip şu satırları
      djbdns.sh'a eklemektir.  
       ---------------burdan başlıyor------------#!/bin/sh
 export PATH="$PATH:/usr/local/bin"
 svscan /service &
 ------------burada bitiyor--------------
 
 
 
 
 | 
  
    |  | 
  
    |  | 
  
    | Kaynaklar: | 
  
    | DJBDNS SOURCE: http://cr.yp.to/
 DJBDNS HOMEPAGE:http://www.djbdns.org/
 http://djbdns.enderunix.org/ 
      (Official Olarak djbdns.org'un mirrorunu tutmaktayız.)
 
 Ayrıca bu 
      sayfalarda djbdns için yapılmış birkac patch bulabilirsiniz. Örnek olarak 
      bir cache'in dnscache ile birden çok ip'ye bind edilmesi 
      verilebilir.
 
 DJBDNS FAQ:
 http://cr.yp.to/djbdns/faq/
 
 DjbDNS 
      ve BIND Implemantation Comparison:
 http://cr.yp.to/djbdns/ad/easeofuse.html
 Bu dokümana official djb sitesi vasıtasıylada ulaşabilirsinizhttp://www.djbdns.org
 DjbDNS'in tinydns paketini webten yönetmek için python ile yazılmış
      bir araç:http://www.linuxis.net/twa
 
 Gerrit Pape'in yazdığı djbdns manuel sayfaları: (Djbdns ile manual
      page gelmemektedir)
 ftp://ftp.innominate.org/gpa/djb/
 
 dnscache için round-robin yamasi:  (Bu patch dnscache içindir.tinydns
      icin round-robin desteği paketle gelmektedir)
 http://www.legend.co.uk/djb/dns/round-robin.patch
   
 
 
 |