DNS NASIL Nicolai Langfeldt janl@math.uio.no v1.1, 30 June 1996 Türkçesi: Onur Volkan HATEM volkan@compclup.ceng.metu.edu.tr hatem@ceng.metu.edu.tr Yasal Açıklamalar: (C)opyright 1995 Nicolai Langfeldt. Tescil ile uyuşmayan değişiklikler yapmaktan kaçınnız, tescil yazısı ıle birlikte olması şartıyla serbestçe dağıtabilirsiniz. Legal stuff: (C)opyright 1995 Nicolai Langfeldt. Do not modify without amending copyright, distribute freely but retain copyright message. The author wishes to thank Arnt Gulbrandsen who read the drafts to this work countless times and provided many useful suggestions. Nasıl (en kısa sürede) DNS yöneticisi olunur: Anahtar sözcükler: DNS, bind, named, dialup, ppp, slip, İnternet, domain (alan), name (ad), hosts (...), resolving (çözümleme) 1. Giriş: Nedir, ne değildir? DNS (alan adı sistemi), ağ yöneticiliğinin en az anlaşılan alanlarından biridir. Bu "NASIL" bazı şeyleri biraz daha açık hale getirecek. Bu döküman basit bir DNS ad sunucusunun nasıl kurulacağını anlatmaktadır. Daha karmaşık kurulumlar için "Gerçek Dökümanlar"ı okumanız gerekiyor. "Gerçek Dökümanlar"ın neler içerdiğini son kısımda anlatacağım. Bu dökümanı okumaya başlamadan önce bilgisayarınızın ağ yapılandirmasının (network configuration) tamamlanmış olması gerekmektedir. Yani bilgisayarınızdan dışarıya, dışarıdan bilgisayarınıza her türlü ağ bağlantısının yapılabiliyor olması gerekiyor. Özellikle 127.0.0.1 adresine telnet bağlantısı kurdugunuzda kendi bilgisayarınıza bağlanabiliyor olmalısınız. Buna ek olarak, başlarken, /etc/host.conf /etc/resolv.conf ve /etc/hosts dosyalarının iyi bir şekilde yapılandırılmış olmaları gerekiyor. Bu dosyaların ne yaptıkları ve nasıl yapılandırıldıkları bu dökümanda anlatılmamaktadır. Eger az önce saydığım kurulumlar tamam değilse "NET-2 HOWTO" dökümanını okumanız gerekecek. Eger SLIP veya PPP kullanıyorsanız onların da calışır durumda olmaları gerekmektedir (Bkz. NASIL PPP). "Makineniz" dediğimde uzerine DNS kurmaya çalıştığınız bilgisayarı kastediyor olacağım. Ağ yapılandırmanızla ilgili olan diğer bilgisayar(lar)ınızı değil. "Ad sorguları"nı (name queries) engelleyen bir "firewall" un arkasında olmadığınızı varsayıyorum. Eger bu tür bir yapılandırmanın ardındaysanız "firewall ve diğer özel kurulumlar" bölümünü okumanız gerekiyor. Ad sunuculugu UNIX'te "named" adı verilen bir programla yapılır. "Named", eşgüdümü İnternet Yazılım Konsorsiyumu için Paul Vixie tarafından yapılan "bind" pakedinin bir parçasıdır. "Named" bir çok Linux dağıtımına dahil edilir ve genellikle "/usr/bin/named" olarak kurulur. Eger "named" niz varsa muhtemelen kullanabiliyor olacaksınız; yoksa derlenmiş "named"yi bir Linux ftp sunucusundan (ftp.metu.edu.tr:/pub/sunsite) ya da kaynak kodunun son sürümünü "ftp.vix.com:/pub/bind" dan alabilirsiniz. DNS İnternet üzerinde dağıtık bir veri tabanıdır. Nasıl kurduğunuza dikkat edin. Yapacağınız yanlış bir hareket diğer insanları da etkileyecektir. DNS iniz tutarlı ve düzgün olduğu sürece iyi bir hizmet alırsınız. Bu dökümanda bazı şeyleri basite indirgemek için birtakım varsayımlar yaptım (yarı gerçekler de diyebiliriz). Söylediklerime inanırsanız çalısır durumda bir sisteminiz olacak. İpucu: Değiştirmenizi isteyeceğim (eger varsa) tüm dosyaların yedeğini alın ki birseyler ters giderse sisteminizi eski, çalışır haline geri getirebilesiniz. 2."caching only" Ad sunucusu: DNS yapılandırmasında ilk deneme olan bu kısım dialup kullanıcılar için çok kullanışlıdır. "Cache only" ad sunucusu ad sorgularınızın cevabını bulacak ve bir daha ihtiyacınız olduğunda cevabı hatırlayacaktır. Oncelikle /etc/named.boot adlı dosyaya ihtiyacınız olacak. "Named" ilk çalıştığında bu dosyayı okur. Şimdilik sadece şunları kapsaması yeterli olacak: ; nicholais caching ad sunucusu için açılış dosyası ; directory /var/named ; ; type domain kaynak dosya ya da host cache . root.cache primary 0.0.127.in-addr.arpa pz/127.0.0 "directory" (dizin) satırı named'ye dosyalar için nereye bakması gerektiğini söyler. Gerekli diğer dosyaların yerleşimleri bu dizinin altında olacaktır. Linux Dosya-sistemi Standart'ına göre bu dizin "/var/named" dir. Bence "/local/named" daha uygun bir dizindir ama standartlara uymakta yarar var. Bu kurulumda cache dosyası olan /var/named/root.cache şunları kapsamalıdır: . 518400 NS D.ROOT-SERVERS.NET. . 518400 NS E.ROOT-SERVERS.NET. . 518400 NS I.ROOT-SERVERS.NET. . 518400 NS F.ROOT-SERVERS.NET. . 518400 NS G.ROOT-SERVERS.NET. . 518400 NS A.ROOT-SERVERS.NET. . 518400 NS H.ROOT-SERVERS.NET. . 518400 NS B.ROOT-SERVERS.NET. . 518400 NS C.ROOT-SERVERS.NET. ; D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 Bu dosya dünyadaki "root sunucular"ı listeler. Bu liste zamanla degişmektedir ve yeniden düzenlenmesi gerekecektir. Bu dosyayı güncel tutmak için "bakım bölümu"ne bakiniz. "named.boot" dosyasındaki ikinci satır 'primary' satırıdır. Nasıl kullanıldigini bir sonraki bölümde anlatacagim. Simdilik bu dosyayı "127.0.0" adiyla "pz" altdizinine yerleştirin: ; /var/named/pz/127.0.0 @ IN SOA linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost. Bir sonraki adımda aşağıdakine benzeyen bir /etc/resolv.conf dosyası gerekecek: search alt-alan.sizin-alan.edu sizin-alan.edu nameserver 127.0.0.1 "search" (ara) satırı bağlanmak isteyeceğiniz adlar için hangi alanlara bakılması gerektigini belirtir. "nameserver" (ad sunucusu) bilgisayarınızın ad sunucusuna ulaşabileceği adresi gösterir. Şu anda bu adres kendi bilgisayarınıza işaret etmektedir. (Not: named bu dosyayı hiçbir zaman okumaz, sadece resolver (çözümleyici) için gereklidir) Bu dosyanın ne yaptığını göstermek için: Eger bir istemci "foo" adina bakacak olursa adres bulunana kadar sirasıyla "foo.alt-alan.sizin-alan.edu" "foo.sizin-alan.edu" "foo" adları denenecektir. İstemci"sunsite.unc.edu" adresini arayacak olursa ilk olarak "sunsite.unc.edu.alt-alan.sizin-alan.edu" "sunsite.unc.edu.sizin-alan.edu" "sunsite.unc.edu" denenecektir. Arama suresini uzatacagindan "search" satırına cok sayida alan adi koymak istemeyebilirsiniz. Asağidaki ornek "alt-alan.sizin-alan.edu" alanına ait olduğunuzu varsayar. Bu durumda bilgisayarınızın adresi "bilgisayarınız.alt-alan.sizin-alan.edu" olacaktır. "search" satırı en üst alan adını kapsamamalıdır (bu durumda TLD -en üst alan- "edu" dur). Eğer başka bir alana ait bilgisayarlara cok sık erişme gereksinimi duyuyorsanız aşagıdaki gibi bir arama satırını /etc/resolv.conf dosyasına ekleyebilirsiniz. search alt-alan.sizin-alan.edu. sizin-alan.edu. diğer-alan.com. Daha sonra "libc" nizin sürümüne bağlı olarak /etc/nsswitch.conf ya da /etc/host.conf dosyasını düzeltmeniz gerekecektir. /etc/nsswitch.conf Değişik veri türlerini hangi dosya ya da veri tabanlarından alacağinizi gösteren uzun bir dosyadır. Genellikle baş kısmında kullanışlı notlar içerir. "hosts:" ile başlayan satırı bulun, ilgili satır şu şekilde olmalı: hosts: files dns Eğer "hosts:" ile başlayan bir satır yoksa ekleyin. Bu satır öncelikle /etc/hosts dosyasına daha sonra dns e bakılması gerektiğini söyler. /etc/host.conf Muhtemelen sadece birkaç satır içeriyor olacaktır. "order" ile başlayan satırı bulun ve aşağıdaki gibi olacak şekilde değiştirin: order hosts,bind Eger "order" satırı yoksa ekleyin. Bu satır ad çözümleyen yordamlara öncelikle /etc/hosts dosyasına bakılmasını, basarisiz olunmasi halinde ad sunucusuna (sizin resolv.conf dosyanızda 127.0.0.1 olan) bakılmasını soyler. Adi gecen dosyalar resolv(8) man dosyasında anlatilmaktadır (bu dosyayı gormek için "man 8 resolv" komutunu verin) Named yi çalıştırmak. "Named"yi çalıştırma zamanı geldi. Eger dialup bağlantı kullanıyorsanız önce bağlantıyı kurun. Daha sonra "ndc start" yazın. Çalışmayacak olursa "/usr/sbin/ndc start" ı deneyin. Şimdi kurulumunuzu test edebilirsiniz. "tail -f /var/adm/messağes" komutunu verdiğinizde (syslog mesaj dosyasına halen yazılmakta olan mesajları gösterir) aşağıdakilere benzer satırlar görmelisiniz: Jun 30 21:50:55 roke named[2258]: starting. named 4.9.4-REL Sun Jun 30 21:29:0 3 MET DST 1996 janl@roke.slip.ifi.uio.no:/var/tmp/bind/named Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0) Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1) Eğer bir hata mesajı görecek olursanız mesajın içinde ilgili dosyanın adını arayın (umarım named.boot ya da named.cache dosyalarından biridir :-) "Named"yi öldürün (kill pid) ve ilgili dosyayı yeniden gözden geçirin. $ nslookup Default Server: localhost Address: 127.0.0.1 > "nslookup" i çalıştırdiktan sonra gordukleriniz yukaridakiler gibiyse hersey yolunda demektir. Baska birsey görecek olursanız su ana kadar yaptıklarınızi gozden gecirmeniz gerekecek. "named.boot" dosyanızı her degistirdiginizde named yi "ndc restart" komutuyla yeniden çalıştırmanız gerekecektir. Şimdi bir sorgu denemesi yapabilirsiniz. Yakınınızdaki bir bilgisayara bakmayı deneyin. > eel.cc.metu.edu.tr Server: localhost Address: 127.0.0.1 Name: eel.cc.metu.edu.tr Address: 144.122.202.113 nslookup "named" nin eel.cc.metu.edu.tr adresini aramasını ıstedi, daha sonra "root.cache" dosyanızdaki root sunuculardan birine bağlandı ve nereye bakmasi gerektiğini sordu. Sonucu almak için /etc/resolv.conf dosyanızda sıralamış olduğunuz tum alanların taranması gerekeceğinden biraz beklemeniz gerekebilir. Tekrar deneyecek oursanız: > eel.cc.metu.edu.tr Server: localhost Address: 127.0.0.1 Non-authoritative answer: Name: eel.cc.metu.edu.tr Address: 144.122.202.113 Bu defa "Non-authoritative answer:" (yetkisiz cevap) uyarısını aldık. Bu, named nin bu defa dışarıdaki ad sunucularına sormak yerine kendi cep (cache) ine bakıp cevabı burada bulduğu anlamına geliyor. Ancak buradaki bilgi gecerliliğini yitirmiş (eskimiş) olabilir. Bu küçük tehlikeyi hatirlatmak amacıyla yukaridaki uyari mesajini alırız. nslookup tan çıkmak için "exit" komutunu verin. Eger dialup kullanıcısı ıseniz (ppp, slip) lütfen "dialup bağlantılar üzerine" adlı bölümü okuyun. Burada birtakım öneriler bulacaksınız. caching named yi nasıl kuracağınızı öğrendiniz, kutlama için bira, süt ya da her neyi seviyorsanız alabilirsiniz :). 3. Basit bir alan Kendi alanınızi nasıl kurarsınız? Bu bölüme başlamadan önce DNS'in nasıl çalıştıgına dair bir miktar teorik bilgi vereceğim. Okumanızı öneririm. Eger istemiyorsanız en azından hızlıca bir göz gezdirin. "named.boot" dosyasının neler içermesi gerektiğinden bahsetmeye başladigimda durun. DNS hiyerarşik bir sistemdir. En üst basamak "." şeklinde yazılır ve "root" denir. "." un altında birkaç TLD (en ust alan) vardır. En ünlüleri ORG, COM, EDU ve NET tir. prep.ai.mit.edu nün adresini bulmak istediğinizde ad sunucunuz EDU alanına hizmet veren bir sunucuya ulaşmak zorunda. Once root.cache dosyasına bakar, "." sunucu EDU alanının ad sunucu listesini verir. Şöyle ki: $ nslookup Default Server: localhost Address: 127.0.0.1 Bir root sunucunun adresini soralım. > server c.root-servers.net. Default Server: c.root-servers.net Address: 192.33.4.12 Sorgu tipini NS (ad sunucusu) yapalım. > set q=ns EDU alanını sorgulayalım. > edu. EDU nun ardındaki "." cok önemlidir. Sunucuya root'un (".") hemen altındaki EDU alanını sorguladığımızı söyler ki bu da arama alanını daraltır. edu nameserver = A.ROOT-SERVERS.NET edu nameserver = H.ROOT-SERVERS.NET edu nameserver = B.ROOT-SERVERS.NET edu nameserver = C.ROOT-SERVERS.NET edu nameserver = D.ROOT-SERVERS.NET edu nameserver = E.ROOT-SERVERS.NET edu nameserver = I.ROOT-SERVERS.NET edu nameserver = F.ROOT-SERVERS.NET edu nameserver = G.ROOT-SERVERS.NET A.ROOT-SERVERS.NET internet address = 198.41.0.4 H.ROOT-SERVERS.NET internet address = 128.63.2.53 B.ROOT-SERVERS.NET internet address = 128.9.0.107 C.ROOT-SERVERS.NET internet address = 192.33.4.12 D.ROOT-SERVERS.NET internet address = 128.8.10.90 E.ROOT-SERVERS.NET internet address = 192.203.230.10 I.ROOT-SERVERS.NET internet address = 192.36.148.17 F.ROOT-SERVERS.NET internet address = 192.5.5.241 G.ROOT-SERVERS.NET internet address = 192.112.36.4 Bu bize *.root-servers.net sunucularının EDU alanına hizmet verdiğini gösterir. Simdi mit.edu alanına kimin hizmet verdiğine bakalım: >mit.edu Server: c.root-servers.net Address: 192.33.4.12 Non-authoritative answer: mit.edu nameserver = STRAWB.mit.edu mit.edu nameserver = W20NS.mit.edu mit.edu nameserver = BITSY.mit.edu Authoritative answers can be found from: STRAWB.mit.edu internet address = 18.71.0.151 W20NS.mit.edu internet address = 18.70.0.160 BITSY.mit.edu internet address = 18.72.0.3 steawb, w20ns ve bitsy sunucuları mit.edu alanına hizmet veriyorlar. Bunlardan w20ns i ai.mit.edu için sorgulayalım: > server W20NS.mit.edu. Host adlarında küçük/büyük harf ayırımı yokturğ ama bunları yazmak için faremi kullandıgımdan nslookup ın verdiği çıktının aynısını yazıyorum. Server: W20NS.mit.edu Address: 18.70.0.160 > ai.mit.edu. Server: W20NS.mit.edu Address: 18.70.0.160 Non-authoritative answer: ai.mit.edu nameserver = WHEATIES.AI.MIT.EDU ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU ai.mit.edu nameserver = TRIX.AI.MIT.EDU ai.mit.edu nameserver = MUESLI.AI.MIT.EDU Authoritative answers can be found from: AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDU AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU WHEATIES.AI.MIT.EDU internet address = 128.52.32.13 WHEATIES.AI.MIT.EDU internet address = 128.52.35.13 ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5 ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5 GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4 GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4 TRIX.AI.MIT.EDU internet address = 128.52.32.6 TRIX.AI.MIT.EDU internet address = 128.52.38.6 MUESLI.AI.MIT.EDU internet address = 128.52.32.7 MUESLI.AI.MIT.EDU internet address = 128.52.39.7 Yukarida goruldugu gibi ai.mit.edu alanının sunucusu weaties.ai.mit.edu dur. > server WHEATIES.AI.MIT.EDU. Default Server: WHEATIES.AI.MIT.EDU Addresses: 128.52.32.13, 128.52.35.13 Simdi sorgu tipini degiştiriyorum. Ihtiyacımız olan sunucunun adını bulduk. Bakalım wheaties prep.ai.mit.edu hakkında ne biliyor? > set q=any > prep.ai.mit.edu. Server: WHEATIES.AI.MIT.EDU Addresses: 128.52.32.13, 128.52.35.13 prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix prep.ai.mit.edu inet address = 18.159.0.42, protocol = tcp #21 #23 #25 #79 prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu prep.ai.mit.edu internet address = 18.159.0.42 ai.mit.edu nameserver = alpha-bits.ai.mit.edu ai.mit.edu nameserver = wheaties.ai.mit.edu ai.mit.edu nameserver = grape-nuts.ai.mit.edu ai.mit.edu nameserver = mini-wheats.ai.mit.edu ai.mit.edu nameserver = trix.ai.mit.edu ai.mit.edu nameserver = muesli.ai.mit.edu ai.mit.edu nameserver = count-chocula.ai.mit.edu ai.mit.edu nameserver = life.ai.mit.edu ai.mit.edu nameserver = mintaka.lcs.mit.edu life.ai.mit.edu internet address = 128.52.32.80 alpha-bits.ai.mit.edu internet address = 128.52.32.5 wheaties.ai.mit.edu internet address = 128.52.35.13 wheaties.ai.mit.edu internet address = 128.52.32.13 grape-nuts.ai.mit.edu internet address = 128.52.36.4 grape-nuts.ai.mit.edu internet address = 128.52.32.4 mini-wheats.ai.mit.edu internet address = 128.52.32.11 mini-wheats.ai.mit.edu internet address = 128.52.54.11 mintaka.lcs.mit.edu internet address = 18.26.0.36 "." tan başlayarak bir alt düzeydeki alanların ad sunucularını bulduk. Kendi DNS sunucunuzu kullanmış olsaydınız, named niz bütün bu bilgileri saklayacak ve bir süre için bu sorguları yeniden yapmaya gerek duymayacaktı. Çok az bahsettigimiz fakat en az diğerleri kadar önemli bir alan daha var: "in-addr.arpa". O da diğer alanlar gibi hiyerarşik bir yapıya sahiptir. Bu alan "internet adresi"nden "ad"a ulaşmamızı sağlar. Önemli bir nokta: in-addr.arpa alanında ip'ler tersten yazılırlar. 192.128.52.43 gibi bir adresin adını öğrenmek istediğinizde named prep.ai.mit.edu örneğinde olduğu gibi davranır: arpa. sunucularını bul in-addr.arpa. sunucularını bul 192.in-addr.arpa. sunucularını bul 128.192.in-addr.arpa. sunucularını bul 52.128.192.in-addr.arpa. sunucularını bul 43.52.128.192.in-addr.arpa. kayıtlarını bul Zekice di mi? ("evet" deyin). Yalan söyledim. DNS böyle çalışmaz. Ama neredeyse bu şekilde.. Kendi alanımız. Şimdi kendi alanımızı tanımlayacagız. Adı linux.bogus olacak ve içinde bu alana ait bilgisayarların tanımları olacak. Tamamen -hayali- bir ad verdim ki diğer insanları rahatsiz etmeyelim. Bu bölüme named.boot dosyasına aşağıdaki satırı yazarak başlıyoruz: primary 0.0.127.in-addr.arpa pz/127.0.0 Bu dosyada alan adlarının sonunda "." olmadıgına lütfen dikkat edelim. İlk satır pz/127.0.0 dosyasını 0.0.127.in-addr.arpa. yı tanımlayan dosya olarak gösterir. Bir önceki kurulumda bu dosyayı hazırlamıştık: @ IN SOA linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost. Bu dosyada named.boot dosyasındakinin aksine alan adlarının sonlarındaki "." ların olmasına lütfen dikkat edelim. Bazıları her alan (zone) dosyasını $ORIGIN direktifiyle başlatmaktan yanadırlar ki bence gereksiz birşeydir. Alan dosyasının orijini (DNS hiyerarsisinde ait oldugu yer) named.boot dosyasının "domain" sütununda yeralır. Bu durumda: 0.0.127.IN-ADDR.ARPA. IN SOA ... NS "Name server RR" (ad sunucusu kaynak kaydı) dır. DNS e alanın ad sunucusunu söyler. Son olarak PTR kaydı 1 in (1.0.0.127 ye denk gelir) localhost olduğunu söyler. SOA (yetki başlangıcı) kaydı tüm alan dosyaları ıçin başlıktır ve her alan dosyasındaki ilk kayıt olmalıdır. Alanın nereden kaynaklandığını (linux.bogus adlı bilgisayar), kayıtlardan kimin sorumlu olduğunu (hostmaster@linux.bogus), sürüm numarasını (serial: 1), ve caching only ile ikincil ad sunucusuyla ilgili diğer bilgileri tutar. Geri kalan değerler refresh (yenile), retry (yeniden dene), expire (bitis) ve minimum (en az) için bu NASIL daki sayıları kullanabilirsiniz. NS kaydı 0.0.127.in-addr.arpa alanına hangi sunucunun hizmet verdiğini gösterir (ns.linux.bogus). PTR kaydi 1.0.0.127.in-addr.arpa nın (127.0.0.1) localhost olduğunu gösterir. Şimdi named yi yeniden çalıştırın (ndc restart) ve test etmek için nslookup ı kullanın: $ nslookup Default Server: localhost Address: 127.0.0.1 > 127.0.0.1 Server: localhost Address: 127.0.0.1 Name: localhost Address: 127.0.0.1 localhost un adresini 127.0.0.1 den alabiliyor, iyi. Zorlamayın. Simdi asıl işimiz olan linux.bogus alan tanımı ıçin named.boot a bir "primary" satırı ekleyelim : primary linux.bogus pz/linux.bogus !!!!!!!! linux.bogus un sonunda "." olmadigina dikkat edin linux.bogus alan dosyasına tamamen -hayali- veri yerleştirelim: ; ; Zone file for linux.bogus ; ; Mandatory minimum for a working domain ; @ IN SOA linux.bogus. hostmaster.linux.bogus. ( 199511301 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 3600000 ; expire, seconds 86400 ) ; minimum, seconds NS ns.linux.bogus. NS ns.friend.bogus. MX 10 mail.linux.bogus ; Primary mail Exchanger MX 20 mail.friend.bogus. ; Secondary mail Exchanger localhost A 127.0.0.1 ns A 127.0.0.2 mail A 127.0.0.4 Bu dosyada yeni bir RR tipiyle karsilasiyoruz: MX. Ya da "mail exchanger" (posta ..........). Posta sistemlerine birisi@linux.bogus adina posta gonderildiginde postanın hangi bilgisayara verilmesi gerektiğini söylerler. Adresten önceki sayi "öncelik" (priority) değeridir. Sayı ne kadar küçük olursa adres o derece önceliklidir. Yani posta, mail.linux.bogus a verilemezse mail.friend.bogus denenir Named yi yeniden başlatın ve nslookup la test edin: $ nslookup > set q=any > linux.bogus Server: localhost Address: 127.0.0.1 linux.bogus origin = linux.bogus mail addr = hostmaster.linux.bogus serial = 199511301 refresh = 28800 (8 hours) retry = 7200 (2 hours) expire = 604800 (7 days) minimum ttl = 86400 (1 day) linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus linux.bogus preference = 20, mail exchanger = mail.friend.bogus linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus ns.linux.bogus internet address = 127.0.0.2 mail.linux.bogus internet address = 127.0.0.4 Biraz dikkatli inceleyecek olursanız bir hata olduğunu farkedeceksiniz. linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus yanlış, doğrusu şöyle olmalı: linux.bogus preference = 10, mail exchanger = mail.linux.bogus Kasten bir yanlış yaptım ki öğrenebilesiniz :). Alan dosyasına baktığımızda görürüz ki: MX 10 mail.linux.bogus ; Primary mail Exchanger en sonda olması gereken "." yazılmamıştır. Dogrusu ya @ MX 10 mail.linux.bogus. ; Primary mail Exchanger ya da @ MX 10 mail ; Primary mail Exchanger şeklinde olmalıdır. Daha kolay yazıldıgından ikincisini tercih ediyorum. Alan dosyasında alan adi ya "." ile bitirilerek yazılmalı ya da hiç yazılmamalıdır. Tekrar uyarıyorum, named.boot dosyasında alan adlarının sonunda "." olmamalıdır. Bu hatanın kaç defa sorun çıkarmış olduğunu tahmin bile edemezsiniz. Yeni alan dosyasındaki uyarıdan sonra bazı ek bilgilerle son hali: ; ; Zone file f r linux.bogus ; ; Mandatory minimum for a working domain ; @ IN SOA linux.bogus. hostmaster.linux.bogus. ( 199511301 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 604800 ; expire, seconds 86400 ) ; minimum, seconds NS ns ; Inet Address of name server NS ns.friend.bogus. MX 10 mail ; Primary mail Exchanger MX 20 mail.friend.bogus. ; Secondary mail Exchanger localhost A 127.0.0.1 ns A 127.0.0.2 mail A 127.0.0.4 ; ; Extras ; @ TXT "Linux.Bogus, your DNS consultants" ns MX 10 mail MX 20 mail.friend.bogus. HINFO "Pentium" "Linux 1.2" TXT "RMS" richard CNAME ns www CNAME ns donald A 127.0.0.3 MX 10 mail MX 20 mail.friend.bogus. HINFO "i486" "Linux 1.2" TXT "DEK" mail MX 10 mail MX 20 mail.friend.bogus. HINFO "386sx" "Linux 1.0.9" ftp A 127.0.0.5 MX 10 mail MX 20 mail.friend.bogus. HINFO "P6" "Linux 1.3.59" İlk üç "A" kaydını ilgili kayıtların yanına koymak isteyebilirsiniz. Bu dosyada birkaç yeni RR var: HINFO (Host INFOrmation) nun iki bölümden oluşmakta. Birinci bölüm makinenin üstündeki donanım ya da MIB ile ilgili ikinci bölüm de yazılım ya da isletim sistemi ile ilgilidir. "ns" in MIBi pentium, işletim sistemi de Linux 1.2 dir. TXT kaydı serbest bir kayıttır. İstediginiz herhangi bir şey için kullanabilirsiniz. CNAME (Canonical NAME) ayni makineye birden fazla ad verebilmek için kullanılır. "www" ve "richard" "ns" için birer lakaptır. Onemli not: A, MX, CNAME ve SOA kayıtları HİÇBİR ZAMAN CNAME kaydına işaret etmemelidir. Sadece A tipi kayıtlara işaret etmelidirler. Yani: foobar CNAME richard ; NO! yanlıştır, doğrusu: foobar CNAME ns ; Yes! olmalıdır. Dikkat edilmesi gereken başka bir nokta ise CNAME in e-posta adresi olamayacağıdır: webmaster@www.linux.bogus geçersiz bir adrestir. E-posta adresi olarak geçerli olabilmesi için A kaydı olması gerekmektedir: www A 127.0.0.2 Paul Vixie, CNAME kullanımını tavsiye etmiyor. Bunu kullanmamayı ciddi bir şekilde düşünün. Yeni veritabanını "ndc reload" komutuyla yeniden yükleyin. $ nslookup Default Server: localhost Address: 127.0.0.1 > ls -d linux.bogus Tüm kayıtları listele. [localhost] linux.bogus. SOA linux.bogus hostmaster.linux.bogus. (1995 11301 28800 7200 604800 86400) linux.bogus. NS ns.linux.bogus linux.bogus. NS ns.friend.bogus linux.bogus. MX 10 mail.linux.bogus linux.bogus. MX 20 mail.friend.bogus linux.bogus. TXT "Linux.Bogus, your DNS consultants" localhost A 127.0.0.1 mail A 127.0.0.4 mail MX 10 mail.linux.bogus mail MX 20 mail.friend.bogus mail HINFO 386sx Linux 1.0.9 donald A 127.0.0.3 donald MX 10 mail.linux.bogus donald MX 20 mail.friend.bogus donald HINFO i486 Linux 1.2 donald TXT "DEK" www CNAME ns.linux.bogus richard CNAME ns.linux.bogus ftp A 127.0.0.5 ftp MX 10 mail.linux.bogus ftp MX 20 mail.friend.bogus ftp HINFO P6 Linux 1.3.59 ns A 127.0.0.2 ns MX 10 mail.linux.bogus ns MX 20 mail.friend.bogus ns HINFO Pentium Linux 1.2 ns TXT "RMS" linux.bogus. SOA linux.bogus hostmaster.linux.bogus. (1995 11301 28800 7200 604800 86400) Yeterince iyi, bakalim sadece "www" için ne diyecek. > set q=any > www.linux.bogus. Server: localhost Address: 127.0.0.1 www.linux.bogus canonical name = ns.linux.bogus ns.linux.bogus linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus ns.linux.bogus internet address = 127.0.0.2 ve ns.linux.bogus un adresi 127.0.0.2 , iyi görünüyor. Aşağıya Doğru Elbette bu alan tamamiyle --hayali--, tüm adresler de öyle. Gerçek bir alan için asıl alan adlarını ve internet adreslerini kullanın. Bunu tamamladıktan sonra bir reverse lookup alan dosyası gerekiyor. 127.0.0 dosyasına benzeyen bu dosya her makine için bir PTR RR içerecek. 127.0.0.2 PTR ns.linux.bogus. 127.0.0.3 PTR donald.linux.bogus. 127.0.0.4 PTR mail.linux.bogus. 127.0.0.5 PTR ftp.linux.bogus. (SOA RR yi unutmayın) Dosya adı 127.0.0 0.0.127.in-addr.arpa örneğinde olduğu gibi tersine çevrilmeli. linux.bogus alanıyla oynamayı bitirdikten sonra named.boot dosyanızdan çıkarmayı unutmayın. 4. Firewall ve diğer özel durumlar Soru: Firewall un ardından nasıl DNS kullanırım. Cevap: Birkaç ipucu: "forwarders", "slave" ve bu NASIL ın sonundaki referanslara bakın. Soru: DNS in her defasında geçerli adreslerden diğerini göndermesini nasıl sağlarım?(www.busy.site için 127.0.0.[2-5] ten biri) Cevap:www.busy.site için birkaç A kaydı tanımlayın ve bind 4.9.3 veya daha yenisini kullanın. Daha eski sürümlerde çalışmayacaktır. 5. Bakım Çalısır durumda tutmak. root.cache dosyasını güncel tuttuğunuz sürece sorun cıkmayacaktır."dig" programını çalıştırdıgınızda kendi sunucunuz için gerekli root.cache dosyasını oluşturacak çıktıyı verecektir. "dig"i tekrar bu root sunuculardan birinin adresiyle çalıştırın ve yeni cache dosyanızı oluşturun. (dig .@e.root-servers.net > root.cache.yeni) cache dosyasını yeniledikten sonra "ndc restart" demeyi unutmayın. named.cache i otomatik olarak güncellemek için aşağıdaki scripti de kullanabilirsiniz. Crontab'a koyun ve unutun. Aşagidaki script posta sisteminizin çalıştığını ve hostmaster aliasının olduğunu varsayar. #!/bin/sh # # Update the nameserver cache information file once per month. # This is run automatically by a cron entry. # ( echo "To: hostmaster " echo "From: system " echo "Subject: Automatic update of the named.boot file" echo export PATH=/sbin:/usr/sbin:/bin:/usr/bin: cd /var/named dig . @rs.internic.net >named.cache.new echo "The named.boot file has been updated to contain the following information:" echo cat named.boot.new chown root.root named.cache.new chmod 444 named.cache.new rm -f named.cache.old mv named.cache named.cache.old mv named.cache.new named.cache ndc restart echo echo "The nameserver has been restarted to ensure that the update is complete. " echo "The previous named.cache file is now called /var/named/named.cache.old." ) 2>&1 | /usr/lib/sendmail -t exit 0 6. Dialup bağlantılar için otomatik kurulum Bu bölüm herşeyi otomatikleştirmek için ne yaptığımı anlatıyor. Benim seçtiğim yol size hiç uymayabilir de. Ama bir fikir vermeli. Dialup için ppp kullanıyorum. Fakat slip in dip i de yaptığım şeylerin pek çoğunu yapabilmeli. Normalde ağa bağlı olmadığımda resolv.conf dosyam sadece domain uio.no satırını içerir. Bu çözümleme yordamlarının bir ad sunucusuna bağlanmaya çalısıp beni bekletmelerini engeller. Fakat ağa bağlandığımda gerçek bir resolv.conf dosyasına ihtiyaç duyarım, bu nedenle de iki tane hazır dosya bulunduruyorum: resolv.conf.yerel ve resolv.conf.bağlı . İkincisi dökümanda anlattıgım resolv.conf dosyasına benziyor. Ağa bağlanmak için küçük bir script im var: "ppp-on" #!/bin/sh echo calling... pppd pppd nin nasıl bağlanacağını gösteren bir dosyası vardır. bağlantı sağlanır sağlanmaz pppd "ip-up" adli scripti çalıştırır: #!/bin/sh interface="$1" device="$2" speed="$3" myip="$4" upip="$5" ... cp -v /etc/resolv.conf.connected /etc/resolv.conf ... /usr/sbin/named Named yi burada çalıştırıyorum. pppd bağlantıyı kestiğinde pppd "ip-down" adli scripti çalıştırır. #!/bin/sh cp /etc/resolv.conf.local /etc/resolv.conf read namedpid /var/run/named.pid kill $namedpid irc ve talk gibi programlar cok sayıda varsayımda bulunarak çalışırlar. Bu tür programlar için hosts dosyasını düzeltmeniz gerekmekte. Bunun için de: cp /etc/hosts.ppp /etc/hosts echo $myip roke >>/etc/hosts satırlarını ip-up a ekliyorum. hosts.ppp: 127.0.0.1 localhost echo satırı da bilgisayarım için verilen ip yi yazıyor. Ağa bağlı olmadığınızda named çalıştırmak pek zekice bir davranış değil bence. Her defasında ağa sorgular gonderip bekleyecek olan named sizi iyice yavaşlatacaktir. Eger dialup kullanıyorsanız bağlantıyı her kapatışınızda named yi öldürmeniz gerekmektedir. Bazıları yavaş bağlantılarda "forwarders" kullanmayı tercih ediyorlar. Eger internet servis sağlayıcınızın 1.2.3.4 ve 1.2.3.5 adreslerinde ad sunucuları varsa named.boot dosyasına aşağıdaki satırı ekleyebilirsiniz: forwarders 1.2.3.4 1.2.3.5 Bu sırada named.cache dosyanız da boş olabilir. Bu bilgisayarınızdan kaynaklanacak olan ip trafiğini azaltacaktır. Özellikle geçirdiğiniz trafik üzerinden ödeme yaptığınız zaman önem kazanmaktadır. 7. Daha geniş bilgi Dökümanlar ve araçlar. DNS & BIND, O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. TCP/IP Network Administration, by Craig Hunt from O'Reilly..., ISBN 0-937175-82-X. DNS ve diğer pek çok sey için yararlı başka bir kitap: Zen ve motorsiklet bakım sanatı. Online dökümanlar: http://www.dns.net/dnsrd/ http://www.vix.com/isc/bind.html RFC'ler: RFC 1918 Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996. RFC 1912 D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996. RFC 1713 A. Romao, Tools for DNS debugging, 11/03/1994. RFC 1712 C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994. RFC 1183 R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990. RFC 1035 P. Mockapetris, Domain names - implementation and specification, 11/01/1987. RFC 1034 P. Mockapetris, Domain names - concepts and facilities, 11/01/1987. RFC 1033 M. Lottor, Domain administrators operations guide, 11/01/1987. RFC 1032 M. Stahl, Domain administrators guide, 11/01/1987. RFC 974 C. Partridge, Mail routing and the domain system, 01/01/1986.