Bilgisayar ağlarının günümüzde oldugu kadar yaygın olmadığı dönemlerde makina, sunucu, yazıcı vb. ağ üzerindeki cihazlara ilgili nümerik adresleri ile erişmek kullanıcılar için fazla zor değildi. İnternet'in beklenenden daha hızlı büyümesiyle birlikte artan kullanıcı ve ağ üzerindeki cihazlarla birlikte nümerik isimler yerine alfanümerik hatırlanması kolay bir yapı geliştirildi. Bu yapıya Alan İsimlendirme Sistemi (Domain Name System) adı verilmektedir. Genellikle kısaltılmış şekliyle DNS olarak da kullanılmaktadır.
Alan isimleri verilirken alt isimler (subdomain) genelden özele doğru sıra izler. Örneğin, Türkiye Linux Kullanıcıları Grubu olarak ODTÜ'de yer alan kullanıcıların kullanabileceği alan adı,
metu.linux.org.tr
şeklindedir. Burda alt isim (.) ile birbirinden ayrılmıştır. En alt seviye olan 'metu' ODTÜ'de yer alan Linux kullanıcılarını, 'linux' Linux grubunu, 'org' Linux grubunun ticari kaygılar gütmeyen bir organizasyon olduğunu, 'tr' ise ISO tarafından belirlenen Türkiye'nin ülke kodudur.
En üst düzeydeki bazı alan isimleri asağıda listelenmiştir.
Makinalara ait isimlerin nümerik adresleri yerine alfanümerik
isimlerin kullanılmasıyla birlikte DNS standart bir hale gelmiş
olup İnternet üzerindeki çoğu uygulamalarda doğrudan alan
isimleri kullanılmaktadır. TCP/IP uygulamalarında ise alan isimleri
günlük kullanımda IP (32-bitlik) adreslerinin yerini almış
durumdadır. Örneğin, metu.linux.org.tr
'a telnet bağlantısı
yapabilmek için hem,
$ telnet metu.linux.org.tr
komutu
$ telnet 144.122.199.199
komutu yardımıyla ulaşabilirsiniz. Fakat herhangi bir şekilde
ODTÜ'de yeralan metu.linux.org.tr
sunucusunun IP
adresinde değişiklik olursa yukarıdaki IP adresini kullanarak
erişemezsiniz. Oysa IP adresi yerine metu.linux.org.tr
sunucusuna bağlanırken alan adını kullanırsanız bu ve benzeri
değişiklikler sizi etkilemez.
Şimdi kabaca herhangi bir kullanıcının metu.linux.org.tr
adresine bağlanmak istediğinde gerçeklesen DNS sorgusunun nasıl
işlediğini ve Türkiye'deki yapıyı da anlatacak şekilde
örnekleyelim.
Örneğin, Amerika'da herhangi bir İnternet Servis Sağlayıcısı'ndan (İSS)
bağlantı yapan bir kullanıcı http://www.linux.org.tr
adresine bağlanmak istedi. Kullanıcının bu adresi tarayıcısına
girmesinden itibaren öncelikli olarak kendi alan adı sunucusuna (name
server) bu adrese karşılık gelen IP adresini bulmak için gerekli
sorguyu yollayacaktır. Kendi alan adı sunucusu en üst düzeyde yer
alan .tr
'ı gördüğü andan itibaren bu sorguya kendinin yanıt
veremeyeceğini anlayıp bir üst alan adı sunucusuna ilgili sorguyu
yollacaktır. Türkiye'nin alan adı sunucusunun knidos.cc.metu.edu.tr
olduğu
bilgisini aldığı andan itibaren sorguyu bu kez knidos.cc.metu.edu.tr
sunucusuna gönderecek ve buradan da linux.org.tr
alanına ait bilgilerin metu.linux.org.tr
sunucusunda tutulduğunu öğrenecek. Nihayet son sorgu metu.linux.org.tr
sunucusuna yollanacak ve buradan da www.linux.org.tr
adresine karşılık gelen IP adresini öğrenecek.
BIND, Linux dağıtımlarının hepsi ile gelen ve alan adı sorgularına yanıt veren yazılım paketidir. Açılımı Berkley Internet Domain Name şeklindedir.
Doğrudan Linux kurulu olan bir sunucu üzerindeki BIND konfigürasyonuna geçmeden DNS ile ilgili temel birkaç konudan bahsetmekte fayda var. DNS ile ilgili yazılımları istemci ve sunucu olarak ikiye ayırmak daha doğru olur:
Sunucu, istemciden gelen sorgulara yanıt veren ve sürekli çalışan
bir işlem olup BIND paketinden çıkan named
yazılımı bu işi
görür. İstemcilerse Linux dağıtımlarıyla gelen host
, nslookup
vb. programlar olup sorguyu yapan yazılımlardır. Bununla birlikte BIND
konfigürasyonunda sıklıkla karşımıza çıkacak olan birkaç kavram
aşağıda açıklanmaktadır. Yeri geldikçe diğer kavramlara da
değinilecektir.
O alana ait bütün bilgilerin bulunacağı
sunucu olup bu amaçla konfigüre edilmiş sunucudur. ``primary name server''
bir alan için ancak bir tane olabilir. ``primary name server''
tanımlarken, named.hosts
, named.boot
, named.rev
ve named.cache
gibi dosyalara ihtiyaç vardır.
O alana ait veritabanındaki bilgileri ``primary name server'' dan belirli aralıklarla alan sunucudur. Belirli aralıklarla transfer edilen bu dosyalara zone-file adı verilir. ``primary name server'' dan alınabilecek yanıtların aynısı ``secondary name server'' dan da doğru şekilde alınabilir.
Bu şekilde konfigüre edilen DNS sunucuları yapılan sorguları ``cache'' de tutup bir sonraki sorgu için bir önceki aynı sorguya alınan yanıt kullanılır. Bir çok DNS sunucusu bu şeklide konfigüre ediliyor olmasına rağmen ``caching only'' sunucular her zaman sorgulara doğru yanıt vermeyebilir.
BIND paketi bütün Linux dağıtımları ile gelir. BIND'ın yeni versiyonuna
ihtiyaç duyduğunuzda
ftp.metu.edu.tr adresinden paketi transfer edebilirsiniz.
Gerekli kurulumları yaptığınızda /usr/sbin
dizini altına named
binary dosyasını koyacaktır.
named
konfigürasyonu ile ilgili dosyalar ve işlevleri
aşağıda yeralıyor.
Genel named
parametrelerini ve o alana ait
veritabanı bilgilerinin nerede olacağı belirtilir.
İnternet üzerindeki root domain sunucularının listesini içerir.
loopback adresine ait tanımları içerir.
O domain ait makina isimlerine karşılık gelen IP numaralarının bulunduğu dosya.
IP adresine karşılık gelen isimlerin listesinin tutulduğu dosya.
Yukarıda belirtilen dosya isimlerinden named.boot dışındaki dosya isimleri genelde karşılaşılan isimler olduğu için kullanılmıştır. Bu dosya isimlerini istediğiniz gibi değiştirebilirsiniz.
``named'' konfigürasyonuyla ilgili kullanılan örnek dosyalar
linux.org.tr
alanının alan adı sunuculuğunu yapan metu.linux.org.tr
makinasından alınmıştır (linux.org.tr
ve
metu.linux.org.tr
aynı sunuculardır).
named.boot
dosyası named
programı çalıştığı zaman
baktığı ilk konfigürasyon dosyasıdır ve /etc
dizini
altındadır. named
, bu konfigürasyon dosyası ile diğer
dosyalara veya DNS tanımlarının tutulduğu diğer dosyalara nasıl
ulaşacağını öğrenir. Aşağıda linux.org.tr
sunucusuna ait named.boot
dosyasını göreceksiniz.
; ; boot file for name server ; directory /etc/namedb ;type domain source host/file backup file cache . root.cache primary linux.org.tr named.hosts primary 0.0.127.IN-ADDR.ARPA named.local forwarders 144.122.199.20
named.boot
dosyasında yer alan satırlara kısaca göz atacak
olursak,
named.boot
dosyasında belirtilen diğer dosyaları
hangi dizin altında named
programının arayacağını belirtir.
cache dosyasını belirtir.
primary'den hemen sonra gelen alanın primary name server olduğunu belirtir ve ilgili bilgileri de alan adından hemen sonra verilen dosya içerisinde tutar. Bu satır birden fazla olabilir, bu durumda ise konfigüre edilen sunucu birden fazla alan için primary name server olarak görev yapar.
Sorgularına yanıt veremediği istekleri yönlendireceği sunucuların listelendiği satır.
Yukarıdaki konfigürasyon dosyasında olmayan fakat başka bir yerde karşınıza çıkabilecek olan slave satırı eklendiği zaman name server sorgulara yanıt vermek için sadece ve sadece forwarders satırında belirtilen sunucuları kullanabilir.
linux.org.tr
sunucusu üzerindeki alan adı sunucu sadece
caching only olarak çalışacak olsaydı, yukarıda belirtilen
konfigürasyon satırı aşağıdaki hale gelirdi.
named.boot ----------- ; ; boot file for name server ; ;type domain source host/file backup file cache . root.cache primary 0.0.127.IN-ADDR.ARPA named.local
Bu konfigürasyonla çalışan alan adı sunucusu, named.cache
dosyasında yer
alan root sunucuları kullanarak gelen sorgulara yanıt verip,
sorguların yanıtlarını cache'te tutmaktadır.
Yine linux.org.tr named.boot
dosyasına bakacak olursak,
primary linux.org.tr named.hosts
satırıyla linux.org.tr
makinası linux.org.tr
alanı için
primary sunucu ve bu domain ile ilgili bilgilerin tutulduğu dosya
ise named.hosts
dosyasıdır.
Yukarıdaki satırı named.boot dosyasına yazmamızla aslında işimiz bitmiyor.
linux.org.tr
sunucusu linux.org.tr
alanı için
primary olduğunu, Türkiye için root sunucu olan knidos.cc.metu.edu.tr
sunucusunun da bilmesi gerekiyor. Bunun için de
http://www.metu.edu.tr/~dnsadmin
adresinden gerekli form
doldurup tanımların ODTÜ'deki yöneticiler tarafından yapılması
gerekiyor. Bu form doğrultusunda da knidos.cc.metu.edu.tr
sunucusunda aşağıdaki satırların girilmesi şarttır.
linux.org.tr. IN NS metu.linux.org.tr. metu.linux.org.tr. IN A 144.122.199.199
Şu an bu işlemler zaten yapılmış olup sadece bilginiz olması için bu satırlar yazılmıştır.
primary 0.0.127.IN-ADDR.ARPA named.local
satırıyla linux.org.tr
makinasında 127.0.0.1 IP adresine karşılık
gelen loopback isminin tanımlarının yer alacağı dosya adı
verilmiştir.
Eğer Türkiye Linux Kullanıcıları Grubunun kendine ait bir IP
adres bloğu, örneğin şu an ODTÜ'de kullanılan 144.122.199.0 bloğu
verilmiş ve bu blok kendi alt gruplarına dağıtılmış
olsaydı bu adreslere ait reverse tanımlar yine linux.org.tr
makinasında tutulacaktı. Böyle bir durumda named.boot
dosyasına
aşağıdaki satır benzeri bir satır daha eklemek gerekecekti.
primary 199.122.144.IN-ADDR.ARPA named.144.122.199
Türkiye Linux Kullanıcıları Grubu için kullanılan IP adresine ait
gerekli reverse tanımı ilgili üniversitenin alan adı sunucusunda
girilmiş durumdadır. Örneğin, metu.linux.org.tr
için knidos.cc.metu.edu.tr
sunucusunda aşağıdaki satır tanımlanmıştır.
199.199.122.144 IN PTR metu.linux.org.tr.
Bazı programların reverse tanımlarını kullanıyor olması nedeniyle (örneğin tcpd) bu tür tanımların girilmesi önemlidir. Bir veya daha fazla C sınıfı şeklinde IP adres blokları aldığınız zaman IP adresi aldığınız kurumdan, bu adres aralığının reverse tanımlarını sizin alan adı sunucunuza yönlendirilmesini isteyebilirsiniz. Bir C sınıfından az sayıdaki IP adresleri içinse yine IP adresini aldığınız kurum gerekli reverse tanımları sizin için yapmak zorundadır.
Şu an linux.org.tr
makinası herhangi bir başka primary sunucunun
secondary sunucusu olmadığı için named.boot
dosyasında secondary
geçen bir satıra rastlamadık. Örneğin linux.org.tr
sunucusu linux.org
sunucusunun secondary alan adı sunucusu olduğunu
varsayalım, bu durumda aşağıdaki satırı named.boot
dosyasına
eklemememiz gerekecek.
secondary linux.org 198.182.196.49 SEC.linux.org
Bu satırı eklediğimiz andan itibaren named belirli aralıklarla gidip linux.org sunucusundan DNS dosyalarının bir kopyasını linux.org.tr sunucusuna aktaracak. linux.org alanının secondary sunucusu oldugumuza dair bilginin de ayrıca linux.org alanının primary tanımlarını tutan sunucuda belirtilmesi gerekir.
named konfigürasyon dosyalarında (named.hosts, named.local,
named.cache, named.rev
) karşılaşılan konfigürasyon
parametreleri ve ne anlama geldikleri aşağıda yeralmaktadır.
İlgili dosyanın ne kadar zaman aralıklarında yenilenebileceği gibi bilgileri içerir.
Alan adı sunucusu olduğunu belirtir.
Makina ismini IP adresine çevirir.
IP adresini makina ismine çevirir.
O alana ait mesajları hangi makinanın dağıtacağını belirtir.
Bir makinaya verilen isimler birden fazla ise bu isimleri belirtirken kullanılır.
Belirtilen sunucunun işletim sistemi veya donanımı konusunda bilgi verir.
named.hosts, named.local
vb. dosyalara girilen standart bir DNS
kaydı aşağıdaki yapıda karşımıza çıkar.
[name] [ttl] IN type data
[ ] içerisinde belirtilen değerler isteğe bağlı olup gerekmediği durumlarda yazılmayabilir.
Bu kısma tam domain ismi, makina ismi yazılabilir.
Burada belirtilen süre kadar (bu süre saniye cinsindendir) cache tutulabilecegini belirtir. Eğer herhangi bir süre verilmemiş ise SOA kısmında verilen süre kullanılır.
Girilen kaydın DNS kaydı olduğunu belirtir.
Yukarıda bahsettiğimiz kısaltmalardan ilgili olanı yazılır.
Bu kısma IP adresi yazılır.
Şimdi de bu kısaltmaların bulunduğu named.cache, named.hosts,
named.local
gibi dosyalardan birer kesit alıp içeriklerine göz
atalım.
metu:/etc/namedb# more named.cache ; last update: Nov 8, 1995 ; related version of root zone: 1995110800 ; ; ; formerly NS.INTERNIC.NET ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ;
Yukarıdaki dosya, root name server'ların listesinin yer aldığı
dosyadır. Süregelen değişiklikler doğrultusunda bu dosyada yer
alan kayıtlar da değişebilirler. Sürekli güncel tutmak
amacıyla ftp://nic.ddn.mil/netinfo/root-servers.txt
adresinden
dosyanın yeni halini belirli aralıklarla almakta fayda vardır.
ttl süresi ise olabildiğince büyük verilerek root sunucuların herhangi bir şekilde cache'ten silinmesi önlenmiş olur.
metu:/etc/namedb# more named.local ; ; @(#)named.local 1.1 (Berkeley) 86/01/21 ; $ORIGIN 0.0.127.in-addr.arpa. @ IN SOA metu.linux.org.tr. root.metu.linux.org.tr. ( 1996012201 ; Serial 3600 ; Refresh 300 ; Retry 3600000 ; Expire 14400 ) ; Minimum IN NS metu.linux.org.tr. 1 IN PTR localhost.
IN SOA
ile başlayan satırda metu.linux.org.tr
adresi
ilgili domain konusunda yetkili sunucuyu,
root.metu.linux.org.tr
ise herhangi bir şekilde sorun
olduğunda bağlantı kurulacak e-posta adresini (root@metu.linux.org.tr) belirtir.
Diğer bilgilerse sırayla metu.linux.org.tr
'ın ``primary name server''
olduğunu ve 127.0.0.1 IP adresine localhost isminin karşılık geldiğini
belirtir.
metu:/etc/namedb# more named.hosts ; Authoritative data for Berkeley.EDU (ORIGIN assumed Berkeley.EDU) ; $ORIGIN linux.org.tr. @ IN SOA metu.linux.org.tr. root.metu.linux.org.tr. ( 1997072902 ; Serial 10800 ; Refresh 3 hours 3600 ; Retry 1 hour 3600000 ; Expire 1000 hours 86400 ) ; Minimum 24 hours IN MX 10 metu IN NS metu IN HINFO "i486" "Linux 2.0.27" localhost. IN A 127.1 metu IN A 144.122.199.199 IN A 144.122.199.199 www IN CNAME metu ftp IN CNAME metu gopher IN CNAME metu listproc IN CNAME metu ege IN A 155.223.97.31 www.ege IN CNAME ege
burada diğer named.local
dosyasından farklı olarak makina ismi - IP
adresi eşlemesi yapılmış olup MX
ve CNAME
kavramları kullanılmıştır.
MX tanımın bulunduğu satırda
linux.org.tr
domaini için e-postaları alabilecek sunucu
metu.linux.org.tr
olarak tanımlanmış. 10 rakamı ise
metu.linux.org.tr
'nin linux.org.tr
olarak gelmesi
gereken mesajlardaki önceliğini belirtir. Sayı ne kadar küçük
verilirse önceliği o kadar fazladır.
HINFO tanımının bulunduğu satır metu.linux.org.tr
'ın
donanım, işletim sistemi ve sürüm bilgilerini tutuyor.
CNAME geçen satırlar ise metu.linux.org.tr
makinasının
olması düşünülen diğer isimlerini tanımlamak için kullanıldı. Örneğin,
www.linux.org.tr
ile metu.linux.org.tr
aynı sunucular
olup www.linux.org.tr
, metu.linux.org.tr
'ın bir diğer
adı (alias'ı) olarak gözükmektedir.
Bütün bu konfigürasyon işlemleri bittikten sonra,
metu:/etc/namedb# named
komutunu çalıştırıp nslookup
veya host
gibi programlar
yardımıyla name server'ımızın çalışıp çalışmadığını denemek kalıyor.
Çalıştırdığımızda verilen hata mesajları /usr/adm/mesages
dosyasına yazılır.
host
veya nslookup
programları yardımıyla bind
konfigürasyonumuzun ilgili sunucuda doğru çalışıp çalışmadığını
test edelim.
Örnek olarak, host
komutunu kullanarak linux.org.tr
için
knidos.cc.metu.edu.tr
'da girilmesi gereken tanımların
doğruluğunu kontrol edebiliriz.
$ nslookup Default Server: knidos.cc.metu.edu.tr Address: 144.122.199.20 > linux.org.tr Server: knidos.cc.metu.edu.tr Address: 144.122.199.20 Name: linux.org.tr Address: 144.122.199.199 > exit
Yukarıdaki satırlarda nslookup
yardımıyla öntanımlı DNS sunucusu
olan knidos
makinasına linux.org.tr makinasının IP adresini sorduk.
nslookup
komutunun -t seçeneği yardımıyla bir makina hakkında
daha başka veriler almak da mümkündür.
> server metu.linux.org.tr Default Server: metu.linux.org.tr Address: 144.122.199.199 > ls -t HINFO linux.org.tr [metu.linux.org.tr] linux.org.tr. Linux 2.0.27 >
nslookup
üzerine daha fazla bilgi için komuta ait man sayfasına
gözatın.
host
komutu da nslookup
komutunun bir tamamlayıcısı gibidir.
Aşağıda birkaç örnekle host
komutu anlatılıyor.
$ host linux.org.tr linux.org.tr has address 144.122.199.199 linux.org.tr mail is handled (pri=10) by metu.linux.org.tr $ host www.ege.linux.org.tr www.ege.linux.org.tr is a nickname for ege.linux.org.tr ege.linux.org.tr has address 155.223.97.31
Yukarıda yeralan ilk komut yardımıyla linux.org.tr
makinasının isim-IP
dönüşümü yapılmış ve makinaya karşılık gelen adresin 144.122.199.199
olduğu anlaşılmıştır.
İkinci host
komutuyla da benzer şekilde www.ege.linux.org.tr
adresinin IP numarasını öğrendik. Ayrıca aynı IP numarasına karşılık gelen
ve linux.org.tr domain'ine ait olan iki isim bulunduğu da yukarıdan
kolayca anlaşılıyor.