Ubuntu Dapper 6.06 Altinda Bind 9 DNS Server Kurulumu

From Lapis Wiki

Jump to: navigation, search
Bu makale NASIL bölümü serisinin bir parçasıdır
MasaÜstü Donanım Dağıtımlar
Tarayıcılar Programlama Linux ve Oyunlar

Konu başlıkları

Giriş

Bu ufak yazıda size Ubuntu altında Bind9 DNS sunucusunun kurulumu anlatacağım. Aslında zapmak istediğim çok basit bir işlem, kendi DNS sunucumu kurmak ile, LAN daki bilgisayarların internette gezinmeleri oldukca hızlanıyor. Eğer kendi ağınızda 1 den fazla bilgisayar varsa, kesinlikle kendi DNS sunucunuzu kurmanızı tavsiye edeceğim.


DNS nedir, ne işe yarar gibi ön fasılı hemen geçip, hemen kurulum, kullanım ve diğer ayarları anlatmaya başlayacağım. Bu anlatıların hepsi Ubuntu Dapper 6.06 test edilmiştir.


Gerekli Olanlar ve Önhazırlık

  • Yerel ağda kullanacağımız bir Domain ismi. Ben mesela erkan.ev olarak kullanmaya karar verdim/seçtim.
  • Bir makina, Ubuntu kurulu bir makina.
  • Bind9 paketi kurulu ( # aptitude install bind9 )


Evde kullandığım ağ yapısı kısaca şöyle:


                                             +----------------+
                                     -----> | Laptop Client1 |
                                     |       +----------------+
                                     |
                                     |
                                     |
DSL                                  |
/             +---------------------------+                 
Internet----> |  Router/WLAN(192.168.0.1) |
              +---------------------------+ 
                 |
                 |
                 |
                 |
                 |      +--------+                     +---------------------------+
                  ----->| Switch |------ ------------> | Linux Makina(192.168.0.3) | 
                        +--------+                     +---------------------------+
                         ||||||||
                         ||||||||
                         ||||||||
                         ||||||||
                +-----------------------------------+
                |        192.168.0.xxx              |
                +-----------------------------------+
                 |                |                |
                 |                |                |
           +----------+      +----------+     +----------+    
           | Client 1 |      | Client 2 |     | Client 3 |  
           +----------+      +----------+     +----------+


Detayları ile şöyle:

  • acer 192.168.0.3 SERVER (Ubuntu/Gentoo makina)
  • p600 192.168.0.4 Client1 (SuSE Makina)
  • laptop 192.168.0.5 Client2 (Gentoo Makina)
  • hpvectra 192.168.0.99 Client4 (Gentoo Makina)
  • ms2003 192.168.0.100 Client3 (Ms2003 Server)

Zone Nedir

Zone, bir domain ağacının küçük bir bölümüdür ve bu bölümde bir DNS sunucusu için gerekli olan autoritative bilgileri içerir. Bir zone enaz bir Primary Nameserver tarafından yönetilir. Herhangi bir ihtimale karşı, secondary nameserver kurulması kesinlikle tavsiye edilir. Prmary Nameserver',in çalışmaması halinde, o domaine ait secondary nameserverler bu görevi üstlenebilirler.

Bir Zone'ye ait bilgiler, zone-dosyası adi verilen dosyalarda tutulur. Her zone-dosyasında DNS Resource Records kayıtları tutulur.

Bir Zone'ye ait bütün bilgiler Primary Nameserver de tutulur. Bu bilgiler düzenli aralıklar ile Secondary Nameserver'lere aktarılır. Bu işleme Zonentransfer adı verilir. Genelde Primary DNS Sunucusuna yapılan bir ayar ile, her restart işleminde bu bilgilerin aktarılması sağlabilir veya düzenli aralıklar ile secondary dns sunucularını sorması sağlanabilir.

DNS Resource Records

Bir ZONE'nin çalışabilmesi için belirli bazı verilerin mevcut olması gerekiyor. Fazla derine dalmadan, kısaca Resource Records türlerini açıklayalım:

SOA-Records

SOA = Start of Authority

SOA-Records kayıtlarında teknik olarak bu işten kimin sorumlu olduğuna dair bilgileri tutar.


Örnek bir SOA-Records kaydı:

      @       IN      SOA     ns1.erkan.ev.   postmaster.erkan.ev. (
                               20060410003      ;      Serial
                               8H               ;       Refresh
                               2H               ;       Retry
                               4W               ;       Expire
                               1D )             ;       Negative Cache TTL


İlk baştaki 1. satırımız, kendi DNS sunucumuzu, yani Primary DNS Sunucumuzun ismi ( ns1.erkan.ev. ). Sonraki veri ise email adresi (postmaster.erkan.ev.) Yani bu Zone için sorumlu olan kişinin posta adresini tanımlıyor.


; (noktalı virgül) olan yerlerden sonraki yazılanlar yorum (comment) olarak algılanır.

Kullanılan kısaltmalar:

H
Saati tanımlar
W
Haftayı tanımlar
D
Günü tanımlar

Bütün bunları saniye olarakda verebilirsiniz. Mesela 1H yerine 3600 gibi yazılabilir


Serial
Serial numarası aslında kafadan uydurulabilecek bir sayı ile başlar ve sonra artırılarak gider. Bu sayı çok önemlidir. Özellikle aynı anda secondary dns sunucusu kullanıyorsanız, bu sayıyı her değiliklinten sonra +1 artırmanız gerekir. Çünkü slave dns suncuları bu rakamın değiştigini gördüklerinde kendilerini güncelliyorlar. Yani primary de değişiklik olduğu zaman +1 artırın ve dolayısı ile secondary dns sunucularıda bunları algılasınlar (20060410003 => sene:2006, 04. ay, 10 nisan ve 3 den başattım). Bu numara Slave sunucusuna aktarılır. Eşleşme yapabilmesi için, Master serial numarası slave serial numarasından büyük olması gerekir.
Refresh
Bir Slave sunucusunun hangi sıklıkta/aralıkta Master sunucusuna sorgulama göndermesi gerektiğini tanımlar. Bu sorgulamada sadece Serial numarasına bakılır. Değişiklik varsa eşleşme yapılır. Serial numarada değişiklik yoksa işlem yapılmaz.
Retry
Olası bir hatada, Slave sunucusunun hangi aralıkta Zonentransfer olayını tekrarlaması gerektiğini tanımlar.
Expire
Diyelimki Master sunucu herhangi bir nedenden dolayı çalışamaz durumda. Buraya girilen değer dahili içinde, Slave sunucusundaki bütün veriler geçerliliğini sürdürür. Süre bitiminden sonra Master sunucusunun çalışıyor olması gerekir. Aksi taktirde Slave sunucundaki bilgiler bütün güncelliğini yitirir.
Negative Cache TTL
Time to live: Cache deki Zone dosyasının yaşam süresini tanımlar.

NS-Records

Her zone de en azından, bu zone'nin salahiyetinin (ne güzel arapca bir kelime) kendisinde olduğunu söyleyen bir Nameserver olması gerekir. Yani o Zonedeki Nameserver sunucusu, o zone'nin temsilcisi olduğunu belirtir (güzel bir türkçe oldu sanırım).

Eğer ağda Slave Nameserver var ise, Master Nameserverde bunlar belirtilmesi/tanımlanması gerekir.


Örnek bir NS-Records kaydı:

IN			NS		ns1.erkan.ev.
IN			NS		ns2.erkan.ev.

A-Records

A-Records kayıtları Domain isimlerini IP adresine bağlar. Yani tanımlanan domain ismi ile tanımlanan IP arasındaki köprüyü kurar.

Örnek bir A-Record kaydı:

laptop     IN  A    192.168.0.5

PTR-Records

PTR= Pointer Resource Records

PTR-Records kayıtları, IP adreslerini tersinde domain isimlerine yönlendirir.

Örnek bir PTR-Records kaydı:


5.0.168.192.in-addr.arpa.   IN  PTR  laptop.erkan.ev.

veya, kayıt yapılacak olan dosyanın isminin 'db.192.168.0' olduğunu farz edersek, yapılacak kayıt aşağıdaki gibide olabilir. Yani IP adresinin sadece son numarası girilebilir.

5   IN  PTR  laptop.erkan.ev.

CNAME-Records

CNAME-Records tanımlamarı birer alias dır. Genelde FTP,WWW ve Mail sunucularının kısa alias'larında kullanılır fakat başka kısaltmalar içinde tanımlanabilir.

Örnek bir CNAME-Records tanımlası:


acer            IN      A       192.168.0.3
p600            IN      A       192.168.0.4
....
....
ftp			 IN     CNAME   p600
mail			 IN     CNAME   acer
mail2			 IN     CNAME   p600

MX-Records

Eğer bu domain de birde Mail sunucusu varsa, mail sunucusunun kayıtları MX-Records ile zone ye ilave edilir.


IN	 MX     10     mail.domain.com.
IN	 MX     20     mail2.domain.com.

Dikkat ederseniz bu örnekte 2 tane domain.com kaydı var. Ve başlarında numaralar var (10 ve 20). Aynı domaine gelen maillerde ilk öncelik dvamlı numarası düşük olan sunucuya yönlendirilir. Eğer bu yönlendirme başarılı olursa ve mail yerine ulaşırsa işlem sona erer. Yok gelen mail yerine ulaşamaz ise, yani öncelik numarası 10 ile tanımlanan sunucuya erişemz ise, bu sefer sıradaki önceki numarasına (yanı 20 20 numaralı posta sunucusuna) gönderilir.


Eğer MX-Records tanımlaması yapılmaz ise, gelen mail local olarak gönderilmeye çalışılır. Yani A-Records tanımlamaları basis alınır.

TXT-Records

DNS sunucusundaki meta bilgilerin aktarılmasındaki kullanılır.

Ayarlar ve Ayar Dosyaları

Aslında ayarlarımızı yaparken bizim için 3 dosya önemli. Bunlar sırası ile şöyle:

  • /etc/bind/named.conf.local (zone tanımlarının yapıldığı dosya)
  • /etc/bind/db.192.168.0 (PTR-Records tanımlarının bulunduğu dosya)
  • /etc/bind/erkan.ev.db (A-Records tanımlarımın yapıldığı dosya)


/etc/bind/db.192.168.0 dosyasını bu şekilde tanımlarsanız, bu dosya içine gireceğiniz IP adreslerini kısaltabilirsiniz.


/etc/network/interfaces

DNS Sunucusunun sabit bir IP si var.

# The loopback network interface
auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
# The primary network interface
auto eth0
iface eth0 inet static
#
dns-nameservers 127.0.0.1
address 192.168.0.3
netmask 255.255.255.0
gateway 192.168.0.1


/etc/resolv.conf

Bu dosya içine erkan.ev satırını ekliyorum. Bu sayede laptop.erkan.ev yerine sadece laptop yazarak erişim sağlıyorum.

search erkan.ev
nameserver 127.0.0.1

/etc/bind/named.conf

Bu dosya içinde hiçbir değişiklik yapmanıza gerek yok. Aynen orjinal olduğu gibi kalabilir. Sadece

include "/etc/bind/named.conf.local";

satırının başında yorum OLMAMASINA dikkat edin. Yani açık olması gerekli.


// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
//
include "/etc/bind/named.conf.options";
//
// prime the server with knowledge of the root servers
zone "." {
       type hint;
       file "/etc/bind/db.root";
};
//
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
//
zone "localhost" {
       type master;
       file "/etc/bind/db.local";
};
//
zone "127.in-addr.arpa" {
       type master;
       file "/etc/bind/db.127";
};
//
zone "0.in-addr.arpa" {
       type master;
       file "/etc/bind/db.0";
};
//
zone "255.in-addr.arpa" {
       type master;
       file "/etc/bind/db.255";
};
//
// zone "com" { type delegation-only; };
// zone "net" { type delegation-only; };
//
// From the release notes:
//  Because many of our users are uncomfortable receiving undelegated answers
//  from root or top level domains, other than a few for whom that behaviour
//  has been trusted and expected for quite some length of time, we have now
//  introduced the "root-delegations-only" feature which applies delegation-only
//  logic to all top level domains, and to the root domain.  An exception list
//  should be specified, including "MUSEUM" and "DE", and any other top level
//  domains from whom undelegated responses are expected and trusted.
// root-delegation-only exclude { "DE"; "MUSEUM"; };
//
include "/etc/bind/named.conf.local";

/etc/bind/named.conf.local

Bizim için önemli olan dosya. Yani erkan.ev domainini zone dosyası. type master; satırı primary dns sunusucu olduğu tanımlar. Slave sunucularda ise type slave; şeklinde tanımlanır.

// Sadece aşağıdaki IP aralığından gelen istekleri kabul eder.
acl locals { 127.0.0.1; 192.168.0.0/24;};
//
//
// A-Records Kayıtları
zone "erkan.ev" {
       type master;
       file "/etc/bind/erkan.ev.db";
       allow-query { locals; } ;
};
//
// PTR-Records
zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/bind/db.192.168.0";
       allow-query { locals; } ;
};

/etc/bind/erkan.ev.db

A-Records kayıtlarının bulunduğu dosyadır.

$TTL 86400
@       IN      SOA     ns1.erkan.ev.   postmaster.erkan.ev. (
                               2006041003       ;      Serial
                               8H                      ;       Refresh
                               2H                      ;       Retry
                               4W                      ;       Expire
                               1D )                    ;       Negative Cache TTL
;
@       IN      NS      ns1.erkan.ev.
;
ns1             IN      A       192.168.0.3
acer            IN      A       192.168.0.3
p600            IN      A       192.168.0.4
laptop          IN      A       192.168.0.5
hpvectra        IN      A       192.168.0.99
ms2003          IN      A       192.168.0.100

/etc/bind/db.192.168.0

PTR-Records kayıtlarının bulunduğu dosyadır.

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@               IN      SOA             erkan.ev.               root.erkan.ev. (
               2006041003      ; Serial
                604800         ; Refresh
                 86400         ; Retry
               2419200         ; Expire
                604800 )               ; Negative Cache TTL
;
@               IN      NS              ns1.erkan.ev.
;
3               IN      PTR             ns1.erkan.ev
3               IN      PTR             acer.erkan.ev.
4               IN      PTR             pc600.erkan.ev.
5               IN      PTR             laptop.erkan.ev.
99              IN      PTR             hpvectra.erkan.ev.
100             IN      PTR             ms2003.erkan.ev.

Bind9 Demonunu Başlatma

Nihayet bütün işlemler bitti. Bu kısım işin en kolay yanı. Şimdi 2 tane Shell penceresi açıyoruz. Birisinde LOG dosyasını live olarak takip edeceğiz, diğerinde ise bind9 demonunu çalıştıracağız. (2 shell penceresi açın)


1. Pencerede aşağıdaki komutu verin ve öyle bırakın:

# tail -f /var/log/daemon.log

2. Pencerede ise bind9 demonunun başlatın.

# /etc/init.d/bind9 restart
* Stopping domain name service...                                                                       [ ok ]
* Starting domain name service...                                                                       [ ok ]


Şimdi 1. pencereye geri dönün ve bir hata olup olmadığına dikkat edin. Eğer bir hata varsa orda gösterir. HAta yoksa aşağıdaki gibi bir çıktı görebilmeniz lazım.

Apr 11 12:47:05 localhost named[6836]: shutting down: flushing changes
Apr 11 12:47:05 localhost named[6836]: stopping command channel on 127.0.0.1#953
Apr 11 12:47:05 localhost named[6836]: stopping command channel on ::1#953
Apr 11 12:47:05 localhost named[6836]: no longer listening on 127.0.0.1#53
Apr 11 12:47:05 localhost named[6836]: no longer listening on 192.168.0.3#53
Apr 11 12:47:05 localhost named[6836]: exiting
Apr 11 12:47:07 localhost named[6877]: starting BIND 9.3.2 -u bind
Apr 11 12:47:07 localhost named[6877]: found 2 CPUs, using 2 worker threads
Apr 11 12:47:07 localhost named[6877]: loading configuration from '/etc/bind/named.conf'
Apr 11 12:47:07 localhost named[6877]: listening on IPv4 interface lo, 127.0.0.1#53
Apr 11 12:47:07 localhost named[6877]: listening on IPv4 interface eth0, 192.168.0.3#53
Apr 11 12:47:07 localhost named[6877]: command channel listening on 127.0.0.1#953
Apr 11 12:47:07 localhost named[6877]: command channel listening on ::1#953
Apr 11 12:47:07 localhost named[6877]: zone 0.in-addr.arpa/IN: loaded serial 1
Apr 11 12:47:07 localhost named[6877]: zone 127.in-addr.arpa/IN: loaded serial 1
Apr 11 12:47:07 localhost named[6877]: zone 0.168.192.in-addr.arpa/IN: loaded serial 2006041003
Apr 11 12:47:07 localhost named[6877]: zone 255.in-addr.arpa/IN: loaded serial 1
Apr 11 12:47:07 localhost named[6877]: zone erkan.ev/IN: loaded serial 2006041003
Apr 11 12:47:07 localhost named[6877]: zone localhost/IN: loaded serial 1
Apr 11 12:47:07 localhost named[6877]: running
Apr 11 12:47:07 localhost named[6877]: zone 0.168.192.in-addr.arpa/IN: sending notifies (serial 2006041003)
Apr 11 12:47:07 localhost named[6877]: client 192.168.0.3#32812: received notify for zone '0.168.192.in-addr.arpa'

Kontrol Araçları/Komutları

# nslookup ns1.erkan.ev.
Server:         127.0.0.1
Address:        127.0.0.1#53
;
Name:   ns1.erkan.ev
Address: 192.168.0.3
# nslookup
> server laptop               (kendiniz girin)
Default server: laptop
Address: 192.168.0.5#53
> server ms2003                (kendiniz girin)
Default server: ms2003
Address: 192.168.0.100#53
> server hpvectra             (kendiniz girin)
Default server: hpvectra
Address: 192.168.0.99#53
>                                


# dig @ns1.erkan.ev . ns
; <<>> DiG 9.3.2 <<>> @ns1.erkan.ev . ns
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41115
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUESTION SECTION:
;.                              IN      NS
 ;; ANSWER SECTION:
.                       515729  IN      NS      M.ROOT-SERVERS.NET.
.                       515729  IN      NS      A.ROOT-SERVERS.NET.
.                       515729  IN      NS      B.ROOT-SERVERS.NET.
.                       515729  IN      NS      C.ROOT-SERVERS.NET.
.                       515729  IN      NS      D.ROOT-SERVERS.NET.
.                       515729  IN      NS      E.ROOT-SERVERS.NET.
.                       515729  IN      NS      F.ROOT-SERVERS.NET.
.                       515729  IN      NS      G.ROOT-SERVERS.NET.
.                       515729  IN      NS      H.ROOT-SERVERS.NET.
.                       515729  IN      NS      I.ROOT-SERVERS.NET.
.                       515729  IN      NS      J.ROOT-SERVERS.NET.
.                       515729  IN      NS      K.ROOT-SERVERS.NET.
.                       515729  IN      NS      L.ROOT-SERVERS.NET.
;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET.     602129  IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     602129  IN      A       192.228.79.201
C.ROOT-SERVERS.NET.     602129  IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     602129  IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     602129  IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     602129  IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     602129  IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     602129  IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     602129  IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     602129  IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     602129  IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     602129  IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     602129  IN      A       202.12.27.33
;; Query time: 1 msec
;; SERVER: 192.168.0.3#53(192.168.0.3)
;; WHEN: Tue Apr 11 13:32:16 2006
;; MSG SIZE  rcvd: 436


# nslookup -class=CHAOS -query=txt  version.bind
Server:         127.0.0.1
Address:        127.0.0.1#53
;
version.bind    text = "9.3.2"

Client Ayarları

Client bilgisayarlarda fazla birşey yapmanıza gerek yok. Sadece /etc/resolv.conf dosyasının içine SEARCH ve NAMESERVER tanımlamalarını yapmanız yeterli.

Örnek, laptop daki /etc/resolv.conf dosyası:


search erkan.ev          # kullandığım domain ismim
nameserver 192.168.0.3   # dns sunucusunun Ip adresi

DHCPD ve DNS İletişimi (DDNS = Dinamik DNS)

Evet, yukarıdaki bütün işlemleri yaptıysanız DNS sunucunuz çalışıyor olmalı. Şimdi biraz daha komplex bir konuya giriş yapalım.

LAN içinde 2-3 bilgisayar olunca insana fazla bir yük binmiyor. Fakat LAN içinde yüzlerce bilgisayar olunca insan ister istemez DHCPD olayının içine giriyor. Bizim bu bölümde yapacağımız ise, DHCP de DNS arasında bir iletişim sağlamak ve dhcp sunucusundan IP olan bir clientin nasıl DNS sunucusuna otomatikman kayıt yapabileceği, gene kopyala/yapıştır yöntemi ile kısaca değinelim.


Gerekli Paketlerin Kurulması

DHCP Sunucusu için aşağıdaki komutun verilmesi yeterli.

# aptitude install dhcp3-server

Anahtar Üretmek

DHCP ve DNS sunucularının birbiri ile iletişimini sağlayacak bir anahtar üretmemiz gerekecek. Yani "shared secret key" denilen olay fakat bu parolayı biz kendimiz üretmeyecegiz, aksine dnssec-keygen adındaki program üretecek ve üretilen parolayı hem DNS hemde DHCP sunucusu kullanacak. Yapacaklarımız kısaca şöyle:

#  cd /etc
#  dnssec-keygen -a HMAC-MD5 -b 128 -n USER mykey

Bu komuttan sonra /etc/ dizini altında yeni 2 dosya olusacaktır (.key ve .private dosyaları):

#  ls -l  /etc/Kmykey*
-rw------- 1 root root 47 2006-04-11 16:10 Kmykey.+157+36639.key
-rw------- 1 root root 81 2006-04-11 16:10 Kmykey.+157+36639.private

Görüldüğü gibi bu dosyalar sadece ROOT kullanıcısı tarafından okunabilir. Çünkü bu dosya içinde kullanılan parola kayıtlıdır. Özellikle .private dosyası çok önemli bir dosyadır ve parolayı ihtiva eder(içerir). Aşağıdaki komut ile dosyanın içeriğini gözden geçirebilirsiniz.

# cat Kmykey.+157+36639.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: bsFG/L92mdVZYLDL+ueDDg==

Bizim için önemli olan Key satırıdır. Çünkü iletişimde kullanılacak olan şifre odur.

Bütün işlemler bittikten sonra .key ve .private dosyalarını silebilirsiniz. Ya da güvenli başka bir dizine taşıyabilirsiniz.

Ayarlar ve Ayar Dosyaları

DDNS için fazla bir ayara gerek yok. Sadece aşağıdaki dosyaları değiştirmemiz yeterli olacak.

/etc/dhcp3/dhcpd.conf

  • 192.168.0.1 = Router/Wlan IP numarası
  • 192.168.0.3 = Acer sunucu (Linux Ubuntu makina ve üstünde DHCP ve DNS server çalışıyor.

DHCPD üzerinden IP almak isteyen herkese 10-150 arasında IP verilecek şekilde, aşağıdaki ayarları yapıyoruz.


allow unknown-clients;
ddns-update-style interim;
authoritative;
#
key MYKEY {
 algorithm hmac-md5;
 secret "bsFG/L92mdVZYLDL+ueDDg==";
};
#
zone 0.168.192.in-addr.arpa {
 primary 192.168.0.3;
 key MYKEY;
}
#
zone erkan.ev {
 primary 192.168.0.3;
 key MYKEY;
}
#
# Set parameters for the 192.168.0.0/24 subnet.
 subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.10 192.168.0.150;
 option subnet-mask 255.255.255.0;
 option domain-name-servers 192.168.0.3;
 option domain-name "erkan.ev";
 option routers 192.168.0.1;
 # option smtp-server 192.168.0.1;
 option netbios-name-servers 192.168.0.3;
}
#
# Başka Subnet varsa ilave edilebilir
#
# subnet 192.168.1.0 netmask 255.255.255.0 {
# }

/etc/bind/named.conf.local

Daha önceden mevcut olan dosyamızı aşağıdaki şekilde değiştiriyoruz.

acl locals { 127.0.0.1; 192.168.0.0/24;};
key MYKEY {
algorithm hmac-md5;
secret "bsFG/L92mdVZYLDL+ueDDg==";
};
zone "erkan.ev" {
       type master;
       file "/etc/bind/erkan.ev.db";
       allow-transfer    { locals;    } ;
       allow-update      { key MYKEY; } ;
       allow-query       { locals;    } ;
}; 
zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/bind/db.192.168.0";
       allow-query  { locals;    } ;
       allow-update { key MYKEY; } ;
};


/etc/bind/db.192.168.0

Daha önceden manuel olarak tanımladığımız isimleri kaldırmamız yeterli. Cünkü dhcp sunucusundan otomatikman IP almaya başladıklarında dinamik olarak gerekli olan dosyalar oluşturulacak.


; BIND reverse data file for local loopback interface
;
$TTL    604800 
@               IN      SOA             erkan.ev.               root.erkan.ev. (
               2006041003      ; Serial
                604800         ; Refresh
                 86400         ; Retry
               2419200         ; Expire
                604800 )               ; Negative Cache TTL
;
@               IN      NS              ns1.erkan.ev.


/etc/bind/erkan.ev.db

Aynen bu dosyada da manuel olarak yaptığımız girişleri kaldırıyoruz.


$TTL 86400
@       IN      SOA     ns1.erkan.ev.   postmaster.erkan.ev. (
                               2006041003       ;      Serial
                               8H                      ;       Refresh
                               2H                      ;       Retry
                               4W                      ;       Expire
                               1D )                    ;       Negative Cache TTL
;
@       IN      NS      ns1.erkan.ev.

Servislerin Tekrar Başlatılması

DHCP demonunu başlatmak için

# /etc/init.d/dhcp3-server restart

DNS demonunu başlatmak için

# /etc/init.d/bind9  restart


Yukardaki komutları vermeden önce 2. bir pencere açıp "tail -f /var/log/daemon.log" komutunu verin ve olası hataları anında yakalayın. Bu hata mesajlarını incelerseniz hatalarınızı kolayca bulabilirsiniz.

Herhangi bir Client IP isteminde bulunduğu zaman, log dosyaları şunları yazmaya başlayacaktır:

Apr 11 17:46:15 localhost named[9697]: client 192.168.0.3#32854: updating zone 'erkan.ev/IN': deleting an RR
Apr 11 17:46:15 localhost dhcpd: if laptop.erkan.ev IN TXT "319194aa93033f0eb672fff19a9e052a5a" rrset exists and laptop.erkan.ev IN A 192.168.0.150 rrset exists delete laptop.erkan.ev IN A 192.168.0.150: success.
Apr 11 17:46:15 localhost named[9697]: client 192.168.0.3#32854: updating zone 'erkan.ev/IN': deleting an RR
Apr 11 17:46:15 localhost dhcpd: if laptop.erkan.ev IN A rrset doesn't exist delete laptop.erkan.ev IN TXT "319194aa93033f0eb672fff19a9e052a5a": success.
Apr 11 17:46:15 localhost named[9697]: client 192.168.0.3#32854: updating zone '0.168.192.in-addr.arpa/IN': deleting rrset at '150.0.168.192.in-addr.arpa' PTR
Apr 11 17:46:15 localhost named[9697]: zone 0.168.192.in-addr.arpa/IN: sending notifies (serial 2006041005)
Apr 11 17:46:15 localhost dhcpd: removed reverse map on 150.0.168.192.in-addr.arpa.
Apr 11 17:46:15 localhost dhcpd: DHCPRELEASE of 192.168.0.150 from 00:08:0d:45:25:03 (laptop) via eth0 (found)
Apr 11 17:46:18 localhost dhcpd: DHCPDISCOVER from 00:08:0d:45:25:03 via eth0
Apr 11 17:46:19 localhost dhcpd: DHCPOFFER on 192.168.0.150 to 00:08:0d:45:25:03 (laptop) via eth0
Apr 11 17:46:19 localhost named[9697]: client 192.168.0.3#32854: updating zone 'erkan.ev/IN': adding an RR at 'laptop.erkan.ev' A
Apr 11 17:46:19 localhost named[9697]: client 192.168.0.3#32854: updating zone 'erkan.ev/IN': adding an RR at 'laptop.erkan.ev' TXT
Apr 11 17:46:19 localhost dhcpd: Added new forward map from laptop.erkan.ev to 192.168.0.150
Apr 11 17:46:19 localhost named[9697]: client 192.168.0.3#32854: updating zone '0.168.192.in-addr.arpa/IN': deleting rrset at '150.0.168.192.in-addr.arpa' PTR
Apr 11 17:46:19 localhost named[9697]: client 192.168.0.3#32854: updating zone '0.168.192.in-addr.arpa/IN': adding an RR at '150.0.168.192.in-addr.arpa' PTR
Apr 11 17:46:19 localhost named[9697]: zone 0.168.192.in-addr.arpa/IN: sending notifies (serial 2006041006)
Apr 11 17:46:19 localhost dhcpd: added reverse map from 150.0.168.192.in-addr.arpa. to laptop.erkan.ev
Apr 11 17:46:19 localhost dhcpd: DHCPREQUEST for 192.168.0.150 (192.168.0.3) from 00:08:0d:45:25:03  (laptop) via eth0
Apr 11 17:46:19 localhost dhcpd: DHCPACK on 192.168.0.150 to 00:08:0d:45:25:03 (laptop) via eth0


Eğer herşey yolunda gittiyse, aynı yukardaki gibi bir log dosyanız olması gerekir.

DDNS Çalışırlık Testi

Efet bu son kontrolmüz. Dinamik olarak IP alan bir Client DNS veribankasına ilave edilmesi gerekiyor. Bunun kontrolünü yapmak çok basit. Bunun için /etc/bind/erkan.ev.db ve /etc/bind/db.192.168.0 dosyasını açıp bakmanız yeterli:

# cat  db.192.168.0
.......
.......
$TTL 43200      ; 12 hours
150                     PTR     laptop.erkan.ev.
# cat erkan.ev.db 
.....
.....
laptop                  A       192.168.0.150
                       TXT     "319194aa93033f0eb672fff19a9e052a5a"

Görüldüğü gibi hem A-Records hemde PTR-Records kayıtları otomatik olarak yapılmış. Artık rahat bir nefes alabilirsiniz.


Anahtar Hatası

Bazen bind9 restart olurken Log dosyasında KEY hatası görebilirsiniz. Bunun sebebi default KEY kullanılması. Bunun için /etc/bind/rdnc.key dosyasını ürettiğiniz KEY e göre değiştiriniz:

key "rndc-key" {
       algorithm hmac-md5;
       secret "bsFG/L92mdVZYLDL+ueDDg==";
};

Artık bundan sonra sorunsuzca üretilen KEY kullanılacaktır.


Anahtarı yukardaki şekilde düzelttikten ve bütün servisleri tekrar başlattıktan sonra hala aynı hatayı vermeye devam etti. Bilgisayarı kapatıp açtıktan sonra bu hata kendiliğinden kayboldu. Sanırım bir yerlerde hala cache olarak kalıyor. Sizde aynı hatayı alırsanız, kapatın ve tekrar açıp deneyin. Tahminen düzelecektir.

Secondary Nameserver

Eğer Master Nameserver başarılı bir şekilde çalışıyor, Secondary Nameserver kurulumunu tamamlamak gerçekten çok basit. Çünkü çalışan Master Nameserver'e ait bütün dosyaları alıp Secondary Nameserver de kullanabiliriz. Sadece 2-3 yerini değiştirmemiz gerekli.


Ayarlar ve Ayar Dosyaları

Secondary Nameserver de sadece aşağıdaki dosyayı değiştirmemiz ve Master Nameserver IP adresini tanımlamamız yeterli olacaktır. Diğer ayarlar aynen kalabilir:

/etc/bind/named.conf.local

Bu dosya içinde sadece TYPE ve MASTERS değişkenlerini değiştirmeniz yeterli olacaktır.


acl locals { 127.0.0.1; 192.168.0.0/24;};
key MYKEY {
algorithm hmac-md5;
secret "bsFG/L92mdVZYLDL+ueDDg==";
};
zone "erkan.ev" {
      type slave;
       masters {192.168.0.3; };
      file "/etc/bind/erkan.ev.db";
      allow-transfer    { locals;    } ;
      allow-update      { key MYKEY; } ;
      allow-query       { locals;    } ;
}; 
zone "0.168.192.in-addr.arpa" {
      type slave;
       masters {192.168.0.3; };
      file "/etc/bind/db.192.168.0";
      allow-query  { locals;    } ;
      allow-update { key MYKEY; } ;
};

Master ve Slave Eşleştirmesi

Hem Master hemde Slave makinadan aşağıdaki gibi bir çıktı aldığınızdad bütün Zonetransfer işlemi gerçekleşmiş olacaktır.


# dnswalk erkan.ev.
Checking erkan.ev.
Getting zone transfer of erkan.ev. from ns1.erkan.ev...done.
SOA=ns1.erkan.ev        contact=postmaster.erkan.ev
0 failures, 0 warnings, 0 errors.


DNSWALK extra bir pakettir. Kurmanız gerekli. Öntanımlı olarak kurulu gelmez.

Güvenlik için ufak öneriler

TODOOOO

İndirme

Bütün ayar dosyalarını aşağıdaki adresden indirebilirsiniz. Ayar dosyaları en güncel halidir. Yukarda anlatılankların haricinde birkaç ilave satırlar içerebilir.



Master Nameserver+DHCP ayar dosyaları

http://erkan.linux-sevenler.org/dhcp_bind9.tar.gz


Slave Nameserver ayar dosyaları

http://erkan.linux-sevenler.org/slave_bind9.tar.gz

Son Söz

Konu ile ilgili yorumlarinizi asagidaki adrese yapabilirsiniz

http://forum.linux-sevenler.org/index.php/topic,4194.msg20780/topicseen.html#msg20780