6.05.2010

Ubuntu Server üzerinde BIND DNS hizmetini çalıştırmak

BIND, Internet Service Consortium'un sitesine göre, internet üzerinde en çok kullanılan DNS sunucu yazılımıdır. En popüler linux dağıtımı olan Ubuntu üzerine bind9'u kurup ayarlarını yaparken şu aldımları izledim (kaynak ubuntuforums.org):
  1. Öncelikle bind9 hizmetinin kurulacağı sunucunun statik bir IP adresinin olması gerek. Bunun için ağdaki diğer makinelerle aynı subnette bir IP adresi ataması yaptım.
  2. Ardından repository'lerden bind9'u kurdum.
    sudo apt-get install bind9
  3. Sonra root yetkileriyle /etc/bind/named.conf.local dosyasını açıp içine zone'larımı ekledim (zone, DNS sunucuların alan adı bilgilerini tuttuğu veri yapılarıdır). Örnek olarak example.com alan adını DNS sunucuma eklemek için önce forward lookup zone'u ekledim:
    zone "example.com" {
         type master;
         file "/etc/bind/zones/example.com.db";
    };
    Ardından da bir reverse lookup zone ekledim (örnek IP segmenti olarak 192.68.0.x kullandım). Reverse zone için ağ ID'sinin oktetleri ters sırada yazılmalı ve sonuna in-addr.arpa eklenmeli.
    zone "0.168.192.in-addr.arpa" {
         type master;
         file "/etc/bind/zones/rev.0.168.192.in-addr.arpa";
    };
  4. DNS sunucum sadece içerideki example.com alan adından sorumlu olacak. Ona başka alan adı sorguları gelirse bunu kendisi çözümlemeyecek, başka bir DNS server'a soracak. Bu yapıyı /etc/bind/named.conf.options dosyasına forwarder ekleyerek sağladım.

    forwarders { 195.175.39.40; };
  5. Şimdi sıra geldi 1. adımda belirttiğimiz zone'ların dosyalarını yaratmaya. Zone dosyası, bir bilgisayarın host adıyla IP adresi ilişkisini, zone'ların transfer bilgilerini vs. tutar. Bunun için /etc/bind/zones/example.com.db dosyasını yaratarak (/etc/bind/db.local kopyalanarak da düzenlenebilir) şu satırları girdim (eğer /etc/bind/zones klasörü yoksa bunu da yaratarak). Bu tanım dosyasında geçen, ama neredeyse hiç bir yerde açıklanmayan bir ayrıntı da IN belirteci. Şu kaynağa göre IN, internetin kısaltması ve adres sınıfını belirtiyor. Bunun dışında CS (CSNET), CH (CHAOS) ve HS (Hesiod) sınıfları da var ama artık kullanımda değiller. BIND dosyalarında adres sınıfı belirtilmesi zorunlu değil, yazılmazsa varsayılanımız IN.

    example.com.      IN      SOA     ns1.example.com. admin.example.com. (
                                                            2006081401
                                                            28800
                                                            3600
                                                            604800
                                                            38400
     )
    
    example.com.      IN      NS              ns1.example.com.
    example.com.      IN      MX     10       mta.example.com.
    
    www              IN      A       192.168.0.2
    mta              IN      A       192.168.0.3
    ns1              IN      A       192.168.0.1
    
    Benzer şekilde reverse lookup zone dosyasını da /etc/bind/zones/rev.0.168.192.in-addr.arpa olarak yarattım.

    @ IN SOA ns1.example.com. admin.example.com. (
                            2006081401;
                            28800; 
                            604800;
                            604800;
                            86400 
    )
                         IN    NS     ns1.example.com.
    1                    IN    PTR    example.com 
  6. Şimdi bind9 servisini tekrar başlatarak bu ayarların geçerlilik kazanmasını sağlayabiliriz.

    sudo /etc/init.d/bind9 restart 
    Eğer bu aşamada

    * Starting domain name service... bind9 [fail]

    hatasıyla karşılaşırsanız /var/log/daemon.log kayıtlarına bakarak hatanın kaynağını bulabilirsiniz. Genellikle bu kayıtlarda '}' expected gibi bir hata ile karşılaşılır ki bu durumlarda 2. adımdaki named.conf.local dosyasına gidip eksik } parantezini koymak gerekir.
  7. DNS sunucumuz çalışıyor. Peki bizim sorgularımız kurulumunu yaptığımız sunucu üzerinden mi yapılıyor? Henüz değil. Bunun için de /etc/resolv.conf dosyasına herhangi bir DNS sunucunun IP adresini değil, kurulumunu yaptığığımız sunucun IP numarasını yazacağız.

    search example.com
    nameserver 192.168.0.1
    
Bu adımlardan sonra nslookup veya dig ile yeni yarattığımız DNS sunucumuzu test edebiliriz:
dig example.com
veya
nslookup example.com 
Bu konuyu araştırırken birşey daha öğrendim. DNS hizmetinin normalde 53 UDP üzerinden çalıştığını biliyordum. Bazen 53 TCP'yi de kullandığını okuduğum oluyordu. Ama hiç TCP'nin DNS tarafından niye kullanıldığını (zone transferi hariç) bilmiyordum. UbuntuGeek.com sitesindeki yazıya göre, DNS sunucuya yapılan sorgunun cevabı 1024 byte'ı geçerse, sunucu UDP üzerinden kısmi bir cevap gönderirmiş. Eğer sorguyu yapan taraf tam cevabı öğrenmek isterse TCP kullanarak sorguyu tekrarlarmış. 1024 byte'ın üzerinde bir sorgu ne zaman gerekir bilmiyorum ama bunu öğrendiğim de iyi oldu.

http://www.ntchosting.com/dns/server-setup.html
http://www.ubuntugeek.com/dns-server-setup-using-bind-in-ubuntu.html

Hiç yorum yok: