17 Mayıs 2008 Cumartesi

Yerel DNS Belleği

Ön Bilgi

Internette ya da IP tabanlı herhengi bir ağda, ağa bağlı cihazlar birbirlerine IP adresleri üzerinden erişirler. IP adresleri 192.168.23.54 şeklinde 4 tane 8 bitlik (yani 0-255 arası) sayıdan oluşur. Bu sayılar ile adreslere erişmek insanlara göre mantıklı olmadığı için, isimler ile IP adreslerini eşleyen bir sistem kurulmuştur. www.google.com gibi karakter tabanlı adresler, DNS yani Domain Name Server adı verilen sunucular aracılığı ile IP adreslerine çevrilir.

DNS'lerin adresleri ağ yapılandırması otomatik olan ağlarda otomatik olarak sunulur. Internet hizmeti aldığınız servis sağlayıcıların (Telekom, X-Online gibi) neredeyse hepsi size bir DNS sağlar. Bir çok ADSL modem ve ağlardaki yönlendiricilerin bir çoğu bu DNS adreslerini hizmet sağlayıcıdan alarak sizin bilgisayarınıza gönderirler.

Cihazınızdan www.google.com gibi bir adrese erişmeye çalıştığınızda, DNS'e belirtilen isim için bir sorgu gönderilir ve geri dönen IP adresi ile istenen bağlantı kurulur.

Cihazınızdan yaptığınız her sorgulama için DNS'e bağlanılır. Bu da hem vakit kaybına neden olur (bir sorgu ortalama 100ms sürer) hem de ağı işgal eder. Karakter bazlı alan adlarına eşdeğer IP adreslerini kendi bilgisayarınızda da bellekleyebilirsiniz. Böylece daha önceden yapmış olduğunuz alan adı sorguları belirli bir süre bellekte tutulur ve bu süre içerisinde yinelenen sorgularda DNS'e bağlanmanıza gerek kalmaz.

DNS hakkında http://tr.wikipedia.org/wiki/Dns adresinden daha fazla bilgi alabilirsiniz.

Şimdi DNS belleklemesini Ubuntu bilgisayarınızda nasıl yapacağınıza bakalım.

Paketimizi Kuralım

Ubuntu'nun Universe kaynakları arasında dnsmasq adlı bir paket bulunmaktadır. Bu paket ile ubuntu cihazımıza DNS önbellekleyici, DHCP ve TFTP sunucu kurabiliriz. Şu anda burada yalnızca DNS kısmından bahsedeceğim. Universe depoların açık olduğundan emin olduktan sonra;

$ sudo apt-get dnsmasq 


komutunu kullanarak paketi yükleyebiliriz. Çıkan mesajlardan da gördüğünüz gibi DNS ve DHCP sunucunuz kurulmuş ve kullanıma hazır biçimde çalışmaktadır.

dnsmasq'ı Ayarlayalım

Şu anda kullanıma hazır olmasına rağmen bir kaç ufak ayarlama yaparak dnsmasq'ı daha iyi hale getirebiliriz.

ubuntu içinde Alt+F2 tuşlarına basarak komut çalıştırma penceresini açın ve

$ gksudo gedit /etc/resolv.conf


komutunu verin. Dosyayı değiştirmek için yönetici (root) izinleri gerektiği için gksudo ile çalıştırmamız gerekli. Ne yaptığınızı biliyorsanız ayar dosyalarınu değiştirmek için istediğiniz metin düzenleyiciyi (vim, nano vb.) kullanabilirsiniz.

Açıklama: Dosya içinde # (diyez) ile başlayan satırlar yorum satırlarıdır. Dosyayı hazırlayanlar ve/veya programı yazanlar yapılacak değişiklikler konusunda bizi bilgilendirmek için açıklmaları bu şekilde yazarlar. Aynı zamanda bazı ayarlar da yorum haline getirilerek etkisizleştirilir.

Şimdi değişikliklerimizi yaparak dosyayı aşağıdakine benzer hale getirelim. Şunu belirtmem gerekir ki aşağıya dosyanın bütününü yazmıyorum. Yalnızca yapmanızı tavsiye ettiğim değişiklikleri anlayabileceğiniz kadarını yazıyorum. Zaten anlarsınız ;-)

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv


Böylece gereksiz sorgulamaları önlemiş olduk.

# Change this line if you want dns to get its upstream servers from# somewhere other that /etc/resolv.conf
resolv-file=/etc/resolv-dnsmasq.conf


Bu ayarı değiştirmediğiniz takdirde önbellekleme hizmet sağlayıcınızın belirttiği ya da ağınızdaki DNS'in üzerinden yapılacaktır. Eğer ağınızda çalışan özel DNS'ler yoksa (örneğin şirketlerde olabilir) bu ayarı değiştirmenizi ve DNS olarak openDNS'i kullanmanızı öneririm. Böylece hem güvenilir bir DNS üzerinden sorgulama yaparsınız hem de Türkiye'deki DNS'lerin uymak zoruda oldukları kısıtlamalardan kurtulursunuz.

Bu noktada iki açıklama yapmam gerekiyor:

  • Güvenilir DNS demek yazdığınız adresin doğru IP'ye gideceğinden emin olduğunuz adres demektir. Örneğin otomatik olarak DNS ayarı yapılan ağlarda kötü niyetli kişiler banka web siteleri gibi sayfaların alan adlarını kendi bilgisayarlarına yönlendirebilir ve gerçek web sitesine benzer bir arayüz ile bilgilerinizi çalabilirler. Özellikle notebook ve benzeri dolaşarak kullanılabilen araçlarda DNS adreslerini kendinizin belirtmesi daha güvenilirdir.
  • Mahkemelerce erişimi engellenen sitelere bir şekilde girmek yasal mıdır bilmiyorum. Şunun farkında olunmalı ki sansürlenen siteler, girilmesi uğraştırsın diye değil girilmesi kanunlara aykırı olduğu için engellenmektedir. Yani uzun yollardan da olsa bu sitelere girmek kanunsuz olaBİLİR, fakat emin değilim. Kendi yolumuzu bulmanın dışında konuyla ilgili bir şeyler yapmak için: http://www.sansurehayir.org/
Ayarlarımıza geri dönelim. resolv-file olarak belirttiğimiz dosya sürekli olarak kullanmak istediğimiz alan adı sunucularının adreslerini içerecektir. Bu dosyayı birazdan oluşturacağız.

Eğer DNS önbelleklemeyi yalnızca bu bilgisayarda kullanacaksanız karışıklığa sebebiyet vermemek için:

listen-address=127.0.0.1 


ayarını da düzeltmelisiniz.

Evet, bu dosya içinde yapacağımız değişiklikler bu kadar. Kaydet diyerek kaydedebilirsiniz.

DNS Sunucularımızı Ekleyelim

dnsmasq'in ayarlarını yaparken, bilmediği alan adlarını soracağı dosya olarak resolv-dnsmasq.conf belirtmiştik. Şimdi bu dosyayı oluşturarak içine DNS adreslerini yazalım. ALT + F2 ile çalıştırıcıyı açıyoruz:

gksudo gedit /etc/resolv-dnsmasq.conf


komutunu vererek dosyamızı açıyoruz. Ve içine aşağıdaki iki satırı yazıyoruz.

nameserver 208.67.222.222
nameserver 208.67.220.220


Böylece dnsmasq'ın bilmediği adresleri OpenDNS'e sormasını söylüyoruz.

Son olarak yaptığımız değişikliklerin etkin hale gelebilmesi için Uçbirim'de;

$ sudo /etc/init.d/dnsmasq restart


komutunu vererek dnsmasq'i yeniden başlatıyoruz.

Sunucumuzu Test Edelim

GNU/Linux içinde bulunan dig komutu ile alan adı sorgusu yapabiliriz. Bir uçbirim ekranı açıp aşağıdaki komutu verelim:

$ dig www.google.com


Bu komut ile www.google.com adresi için sorgulama yaptık. Çıkan bilgilerin en altında
;; Query time: 129 msec
;; SERVER: 192.168.54.12#53(127.0.0.1)
;; WHEN: Sun May 18 02:05:09 2008
;; MSG SIZE rcvd: 77


gibi bir bilgi verilir. Burada Query Time yapılan sorgunun ne kadar sürede yapıldığını ve SERVER da hangi sunucu (şu anda öntanımlı olan) kullanarak yapıldığını belirtir.

$ dig @127.0.0.1 www.google.com


komunutu verdiğimiz zaman 127.0.0.1 adresindeki, yani kendi bilgisayarımızdaki sunucuyu kullanarak bir sorgulama yaptırırız. Bu komutu ilk verdiğimizde Query Time pek fazla değişmeyecek hatta belki de yükselecektir. Çünkü sorgulama ilk defa yapılmakta ve belleklenmektedir. Komutu tekrar verdiğimizde sorgu zamanının 0 ya da 1 mili saniyeye düştüğünü göreceksiniz. Kurduğumuz sunucu çalışmaktadır.


Yeni Sunucumuzu Kullanalım

Ayarları yaptıktan sonra ubuntu'ya bundan sonra kendi sunucumuzu kullanması gerektiğiniz söyleyeceğiz. Bunu yapmak için ALT+F2 ile

gksudo gedit /etc/dhcp3/dhclient.conf


komutunu veriyoruz. Bu dosya içerisindeki ayarlar bilgisayarınız otomatik ağ yapılandırması yaparkenki seçenekleri belirtir. Bu dosya içinde aşağıdaki ayarı etkin hale getiriyoruz:

prepend domain-name-servers 127.0.0.1;


Böylece, bilgisayarımıza otomatik olarak sağlanan DNS'lerin başına 127.0.0.1'i her seferinde yerleştirmiş oluyoruz.

Eğer DNS'lerin otomatik olarak bilgisayarınıza gelmesini istemiyorsanız, request komutu içerisindeki domain-name-servers, kısmını kaldırabilirsiniz. Tabi bu sırada bunu yedeklemenizi tavsiye ederim. Yani bu satırın komutun son hali;

request subnet-mask, broadcast-address, time-offset, routers,
domain-name, host-name, netbios-name-servers, netbios-scope;
# requestten cikardim: domain-name-servers,


olarak değiştirilebilir.

Bundan sonra ağa bağlandığınızda dnsmasq üzerinden sorgu yapılacaktır. Fakat şu anda kullandığımı DNS'i de değiştirmemiz gerekir. Bunu yapmak için

  • Sistem -> Yönetim -> Ağ 'ı açıyoruz.
  • Aşağıdaki Kilidi Aç düğmesine basıp, parolamızı giriyoruz.
  • Yukarıdan DNS sekmesine gelip en üstteki IP adresine çift tıklayarak 127.0.0.1 yapıp Enter'a basıyoruz.
  • Diğer DNS adreslerini siliyoruz.
  • Kapatıyoruz.
Böylece yeni sunucumuzu kullanmaya başlayabiliriz. Dig ile sorgu zamanı testleri yapabiliriz. Farkı hissedeceksiniz.

Ek not: Bazı sebeplerden dolayı dnsmasq'ın yerel önbelleğini temizlemek isterseniz Uçbirim'den aşağıdaki komutu vermelisiniz:

$ sudo killall -1 dnsmasq


daha fazla bilgi için: http://ubuntu.wordpress.com/2006/08/02/local-dns-cache-for-faster-browsing/

Hayırlı olsun...


Hiç yorum yok: