Ana Sayfa » *nix » DjbDNS ile Caching DNS Server Kurulumu

DjbDNS ile Caching DNS Server Kurulumu


BerbatKötüİdare EderGüzelHarika (Toplam 14 oy. 5 puan üzerinden ortalama 4,79 || Oy vererek siz de katkıda bulunabilirsiniz.)
Loading...

Caching-only server olarak tabir edilen sunucular, üzerlerinde herhangi bir alan adına ait kayıt tutmaksızın, istemcilerden gelen sorguların cevaplarını ilgili name serverlardan alarak istemciye sunmak ve bu query sonuçlarını - kaydının TTL‘i süresince- belleklerinde tutmakla sorumlu sunuculardır. Bu şekilde daha önceden sorgulanarak belleğe alınmış alan adları için tekrar istek gelmesi durumunda, cache sunucusu yanıtı belleğinden verecektir. Böylece istemciler için sorgu süreleri ciddi oranda kısalmış olacaktır.  Ayrıca, bant genişliğinden de tasarruf sağlanacaktır.

Örneğin e-marketing için kullanılan -yani yoğun gönderim yapan posta sunucuları- için networkte bir caching only dns server bulundurmak, posta sunucularının gönderimleri daha süratli yapabilmelerine olanak sağlayacaktır. Yazının devamında üzerinde djbdns ile cache only dns server kurulumundan bahsedeceğim.

 

Normalde, bu tip bir iş için BIND da dahil olmak üzere powerdns-recursor, udns vs. gibi araçlar da kullanılabilir ancak küçük ve güvenli olması açısından ben djbdns’i tercih etmekteyim.

Kurulum


djbdns port ağacında bulunmaktadır. Porttan kurulum djbdns’in gereksinim duyduğu daemontools ve uscpi-tcp paketlerini de sisteme yüklemektedir. Dolayısı ile işleri kolaylaştırmak için kurulumu ports’dan yapıyorum:

Yükleme işlemini default seçeneklerle yapmak yeterli olacaktır.

# cd /usr/ports/dns/djbdns
# make install clean

Kurulum bundan ibaret. Şimdi yapılandırma işlemleri.

Yapılandırma


Öncelikli olarak sistemde dnsusers isimli bir grup, dnscache ve dnslog isimli iki tane kullanıcı açıyoruz:

# pw groupadd dnsusers
# pw useradd dnscache -s /bin/nologin
# pw useradd dnslog -s /bin/nologin
# pw groupmod dnsusers -m dnscache,dnslog

Daha sonra da, dnscache loglarının tutulacağı dizini oluşturuyoruz: (normalde bu dizin dnscache servisinin ana dizininde main isimli bir klasorde tutulur ama formal olması açısından /var/log/ dizinini kullanmak daha iyi bir fikirdir.)

# mkdir /var/log/dnscache

Şimdi, dnscache-conf aracı ile dns cache yapılandırmasını gerçekleştiriyoruz. Bu aşamada sunucuya ait IP adresini belirtmek gerekiyor. Sunucumuzun ip’sini 1.2.3.4 olarak düşünürsek dnscache-conf komutu aşağıdaki gibi olacaktır.

# dnscache-conf dnscache dnslog /var/dnscache 1.2.3.4

Bu şekilde, /var/dnscache dizini altında gerekli yapılandırma dosyaları oluşturulacaktır ve dnscache 1.2.3.4 ip adresine bind edilecektir. Yeri geldiği zaman yapılandırma dosyalarıyla ilgili daha fazla bilgi vereceğim.

Şimdi log’lama işlemlerinde/var/log/dnscache dizininin kullanımlası için /var/dnscache/log/run dosyasını editliyoruz:

# vi /var/dnscache/log/run

Dosyayı aşağıda kırmızı ile de işaretlendiği gibi düzenliyoruz:

#!/bin/sh
exec setuidgid dnslog multilog t /var/log/dnscache

Böylece loglama işlemleri için /var/log/dnscache isimli dizin kullanılacaktır.

Şimdi, networkümüzdeki istemcilerin, sunucuya sorgu gönderebilmeleri için ilgili IP networküne izin vereceğiz. Bu işlem, /var/dnscache/root/ip/ dizini altında izin verilecek IP networkü için boş bir dosya oluşturmaktan ibaret.

Örnek olarak local networkümüzün 192.168.12.0/24 olduğunu varsayarsak ilgili dizin altında oluşturulacak dosyanın adı 192.168.12 olacaktır. Şöyle:

# touch /var/dnscache/root/ip/192.168.12

Bu işlemden sonra, gerekli izinleri veriyoruz.

# chown -R dnscache:dnsusers /var/dnscache
# chown -R dnslog:dnsusers /var/log/dnscache

dnscache servisi svscan altında çalışmaktadır; şimdi servisi up edeceğiz.

Öncelikle svscan service dizinini oluşturalım:

# mkdir /var/service/

Sonra, rc.conf dosyasına svscan_enable satırını ekliyoruz:

# echo 'svscan_enable="YES"' >> /etc/rc.conf

Son olarak dnscache servisini svscan’e gösteriyoruz.

# ln -s /var/dnscache /var/service/dnscache

Artık servisi başlatabiliriz:

# /usr/local/etc/rc.d/svscan start

Normal şartlarda şu an dnscache servisi çalışıyor olmalıdır. Kontrol etmek için svstat komutundan yararlanabiliriz.

# svstat /var/service/dnscache
/var/service/dnscache: up (pid 4558) 157 seconds

Evet, dnscache servisi çalışıyor. Şimdi sunucu üzerinde bir sorgulama yapalım.

# dig @192.168.12.233 google.com

; <<>> DiG 9.4.3-P2 <<>> @192.168.12.233 google.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63209
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
google.com.             217     IN      A       209.85.135.104
google.com.             217     IN      A       209.85.135.99
google.com.             217     IN      A       209.85.135.106
google.com.             217     IN      A       209.85.135.105
google.com.             217     IN      A       209.85.135.103
google.com.             217     IN      A       209.85.135.147

;; Query time: 97 msec
;; SERVER: 192.168.12.233#53(192.168.0.233)
;; WHEN: Mon Apr 12 02:39:28 2010
;; MSG SIZE  rcvd: 124

Ayrıca, dnscache log dosyasını da kontrol edebiliriz. Yukarıdaki sorguyla ilgili çıktılar /var/log/dnscache/current dosyasında aşağıdaki gibi olacaktır.

# tail -f /var/log/dnscache/current
@400000004bc25dba03cb0414 query 2 c0a800e9:d0c7:f6e9 1 google.com.
@400000004bc25dba03d1fd3c tx 0 1 google.com. . c0a80031
@400000004bc25dba097edebc rr c0a80031 217 1 google.com. d1558768
@400000004bc25dba09804a04 rr c0a80031 217 1 google.com. d1558763
@400000004bc25dba098222ac rr c0a80031 217 1 google.com. d155876a
@400000004bc25dba0983053c rr c0a80031 217 1 google.com. d1558769
@400000004bc25dba0983e3e4 rr c0a80031 217 1 google.com. d1558767
@400000004bc25dba0984c28c rr c0a80031 217 1 google.com. d1558793
@400000004bc25dba0986780c stats 2 551 1 0
@400000004bc25dba098ad53c sent 2 124

Aynı sorguyu bir daha yaparsanız bu sefer sonuç cache’den döndürülecek ve log dosyasına aşağıdaki gibi bir ibare düşülecektir.

@400000004bc25ea62d6573cc query 5 c0a800e9:e30c:8fef 1 google.co.uk.
@400000004bc25ea62d6bb55c cached 1 google.co.uk.
@400000004bc25ea62d6bbd2c sent 5 126

Artık bu dns sunucuya gönderilen isteklerin cevapları, ilgili dns sunucularından alınıp cache’leneceklerdir. Daha önceden sorgulanmış alan adlarına ait query’ler için cevaplar bellekten döndürülecektir.

Ancak default dns cache ebatı max 1MB’dir. Dolayısı ile cache size’ı arttırmak mantıklıdır.

Cache Size Değerini Arttırmak

Cache ebatının ne kadar olacağı ile ilgili bilgi, /var/dnscache/env dizininde CACHESIZE ve DATALIMIT dosyalarında tutulur ve bu değer dediğim gibi default 1MB’dir. Örnek olarak cache size’ı 100MB’ye çıkarmak için bahsi geçen dosyaları aşağıdaki gibi yeniden düzenlemek yeterlidir.

Not: Belirlediğiniz değer ramden allocate edilecektir. Bu nedenle bu değeri ram kullanımınıza göre düzenleyin.

# echo 100000000 > /var/service/dnscache/env/CACHESIZE
# echo 104857600 > /var/service/dnscache/env/DATALIMIT

Şimdi değişiklikleri devreye alıyoruz:

# svc -t /var/service/dnscache

Böylece dns cache size değeri 100MB olarak set edildi. Sisteminizin ram kullanımında bu değişimi görebilirsiniz.

Bu yapıda her bir çözümleme işlemi, cache dns sunucunuz tarafından kök ve alt dns sunucularınına istek gönderilerek yapılır. Ancak bu işlem için networkünüzde bulunan diğer bir dns sunucusunu ya da İnternet Servis Sağlayıcınızın kullanımınıza açtığı DNS sunucusunu kullanmak isteyebilirsiniz. Böylece, cache dns sunucunuz tarafından alınan query istekleri, çözümlenmek üzere belirttiğiniz bir başla dns sunucusuna forward edilir ve dönen sonuçlar istemciye iletildikten sonra cache’lenir.

Bu şekilde internete doğru gereksiz trafik oluşturmamış olursunuz ve diğer dns sunucusunun cache’inden yararlanmış olursunuz. Dnscache sunucunuz üzerinde forwardingi etkinleştirmek için aşağıdaki adımları uygulayabilirsiniz.

Forwarding Cache

djbdns’de, kök alan adı sunucularının ip adresleri /var/dnscache/root/servers/@ dosyasında tutulur. Sorgulama işlemleri bu dosyada belirtilen sunuculardan hareketle yapılır. Dolayısı ile bu dosyaya, sorgulama işlemlerinin yönlendirilmesini istediğiniz alan adı sunucusunun ip adresini girebilirsiniz.

Değişikliği yapmadan önce orjinal @ dosyasının bir yedeğini aynı dizine [email protected] ismi ile alalım:

# cp -p /var/dnscache/root/servers/@ /var/dnscache/root/servers/[email protected]

Şimdi de örneğin ISP’imize ait olan 2.2.3.3 ip adresine sahip alan adı sunucusunu girelim:

# echo "2.2.3.3" > /var/dnscache/root/servers/@

Son olarak, cache sunucusunu forward only olarak set ediyoruz.

# echo 1 > /var/dnscache/env/FORWARDONLY

ve FORWARDONLY dosyasının owner’ini dnscache kullanıcısı yapalım.

# chown dnscache /var/dnscache/env/FORWARDONLY

Şimdi değişiklikleri devreye alıyoruz.

# svc -t /var/service/dnscache

Böylece, dns cache sunucusunuza gönderilen tüm istekler için çözümlemeler, 2.2.3.3 ip adresli sunucuda yapılacaktır. Bu durumu netstat ya da ngrep gibi araçlarla kontrol edebilirsiniz.

djbdns ile caching name server uygulaması bundan ibaret. Artık, istemcilerinize dns server olarak bu sisteme ait ip adresini gostererek cache’den yararlanmalarını sağlayabilirsiniz.

Detaylı bilgi için aşağıdaki adresten yararlanabilirsiniz.

http://cr.yp.to/djbdns.html

Kategoriler: *nix |

Bu yazılar da ilginizi çekebilir:


- Bind DNS Server Kurulumu – Master, Slave Replication
- Unbound ile Güvenli Recursive DNS Kurulumu
- CentOS Üzerine MongoDB Kurulumu
- SSH Üzerinden Root Login Girişimlerinde Artış
- CentOS üzerine Rsyslog Kurulumu ve Yapılandırması

Yorumlar


  1. Gokhan | (Haziran 22nd, 2010 5:55 pm)

    Merhaba,
    Centos’da djbdns kurmaya çalışıyorum.En son komut olan
    $make setıp check
    yazdıktan sonra aşağıdaki hatayı alıyorum. Bu sorunu nasıl çözebilirim. Yardımcı olursan çok sevinirim. Şimdiden teşekkürler.

    ./install
    install: fatal: unable to write …/bin/dnscache: text busy
    make: *** [setup] Error 111

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Selamlar,

    Asagidaki linkte yasadiginiz problemle ilgili bir yazisma var. Bir göz atmanizi oneririm.

    http://osdir.com/ml/network.djbdns/2002-04/msg00540.html

    [Cevapla]

    Gokhan tarafından yanıtlandı.

    MErhaba,
    Çok teşekkür ederim. Hallettim.

    iyi günler

    [Cevapla]

Trackbacks

Yorumda bulunun.