DHCP

DHCP’nin avantajları

Disksiz iş istasyonları: Aslında DHCP ilk olarak diske sahip olmayan bilgisayarlara IP bilgilerini sunmak için tasarlanmıştı. Bu tür iş istasyonları üzerinde herhangi bir yedekleme aracı olmadığı için açılış esnasında ağ IP verilerinin aktarılması gerekliydi. Açılış sırasında ilk olarak gereksinim duyulan veri ise, sizin de kolayca bulabileceğiniz gibi, basit bir IP’dir. Bu bilgi alındığı anda (Linux kullanılması durumunda) çekirdek disksiz makineye kolaylıkla transfer edilebilir.
Ağda taşınabilir bilgisayarların varlığı: Bir dizüstü bilgisayarı sıklıkla yanınızda gezdiriyorsanız, bu bilgisayarı her götürdüğünüz yerde ağ bilgilerini değiştirmenin ne kadar can sıkıcı olduğunu biliyorsunuzdur. DHCP’nin kullanıldığı ağlarda, otomatik olarak alınan bu bilgiler her yeni ağa bağlandığınız zaman güncellenir ve elle işlem yaparak zaman kaybetmeniz engellenir.
DNS yönetiminin kolaylaşması: DHCP sayesinde IP adreslerinin statik olarak tanımlanması engellenir. Sabit IP verilmesi halinde çok dikkat isteyen bu işlem, DHCP yardımıyla gereksiz hale gelir.
On bilgisayarlı bir yere sistem kurduğumuzu düşünelim. Kullanıcılar hem kendi aralarında haberleşecekler, hem de internette gezip, e-posta alıp verecekler. Bunun için belli bir IP bloğu tanımlayıp, DHCP üzerinden bilgisayarlara dağıtacağız. İsterseniz şimdi bilgisayarlar için tanımlayacağımız parametreleri bir gözden geçirelim.
1-Her makinenin birbirinden farklı IP adresi olması gereklidir. Hiçbir IP birbiriyle çakışmamalıdır.
2-Her ethernet kartına ait belli bir ağ maskesi bulunmalı ve aynı alt ağ üzerinde bu ağ maskelerinin aynı olması gereklidir.
3-Eğer sistemin İnternete bağlantısı var ise İnternet’e bağlanacak olan bilgisayarların geçit(gateway) IP adresinin bulunması şarttır.
4-Son olarak en az bir, tercihen iki DNS IP adresinin de önceden belirlenmiş olması gereklidir.
Yukarıdaki listeye bakarak geleneksel yöntemler ile (DHCP kullanılmadığı zaman) en az 4 değerin her bilgisayar için girilmesi gerektiğini de hemen söyleyebiliriz. Eğer 20 makinelik bir ağınız var ise, her bilgisayarı teker teker girip toplam 80 numarayı yazmak zorundasınız. Eğer benzeri bir işlemi daha geniş bir ağda (250 bilgisayar) yapmak isterseniz, gerisini siz düşünün.

DHCP discover

Bilgisayar ilk defa açıldığında öncelikle tüm ağa DHCPDISCOVER mesajını yollar.Bu mesajın içeriği “Sistemde herhangi bir DHCP server bulunuyor mu?Eğer var ise bir IP adresi istiyorum” olarak özetlenebilir.
Kuşkusuz ağa gönderilen DHCP istek paketini merak ediyorsunuzdur.İstekte bulunulan IP adresi,MAC adresi ya da paketi gönderen makinenin IP adresi bilinmediğinden,paketin içeriği aşağıdaki şekilde oluşacaktır:
1-Hedef IP adresi (Bilinmiyor): 255.255.255.255 (broadcast)
2-Hedef MAC adresi(Bilinmiyor): FF.FF.FF.FF.FF.FF (broadcast)
3-Kaynak IP Adresi(Bilinmiyor): 0.0.0.0
4-Kaynak MAC Adresi:00-A0-CC-66-73-1F(Kendi kartımızın MAC adresini bilmek kadar doğal bir şey olamaz)

DHCP offer

DHCP istemci tarafından sisteme atılan yayın paketi (broadcast packet) DHCP sunucu tarafından alınır. IP veritabanı sorgulanır,istemciye verilecek IP adresi ve kira süresi belirlenir. Sunucudan çıkan isteğin onaylanması için istemciye bu belirlenen bilgiler geri yollanır.
Sistemde birden fazla DHCP sunucu bulunabilir. Bu durumda istemci ağa bir istek gönderdiği zaman en hızlı DHCP offer mesajı yollayanın IP bilgilerini benimseyecek ve bu tanımlarla ağa bağlanacaktır.
1-Hedef IP adresi (Henüz onaylanmadı): 0.0.0.0
2-Hedef MAC adresi(Biliniyor, istemci makine):00-A0-CC-66-73-1F
3-Kaynak IP Adresi(Biliniyor, DHCP sunucu): 10.0.0.1
4-Kaynak MAC Adresi(Biliniyor, DHCP sunucum):00-A0-C0-B6-12-6F

DHCP request

DHCP OFFER mesajını alan DHCP istemci kendisine tahsis edilmiş IP adresini kiraladığına dair sunucuya bir yayın mesajı yollar, eğer DHCP istemci birden fazla DHCP OFFER mesajı almış ise ikinci bir broadcast mesajı daha yollar ve diğer DHCP sunuculara teşekkür edip artık bir IP adresine sahip olduğunu belirtir.

DHCP acknowledgement

DHCP Request mesajını alana DHCP server artık DHCP istemci için gerekli kayıtları gerçekleştirip ona gerekli olan IP,ağ maskesi,DNS adres veya adreslerini yollayacaktır.
Gelelim kiralama olayına. Bazı programcılar,yarattıkları her şeye istatistikler doğrultusunda eklentiler yapmaya bayılıyorlar. Nitekim DHCP sunucuyu da yaratırken istemcilere verilecek IP adreslerinin kiralanması gerektiğini düşünmüşler,aynen ev sahibi ve kiracılarda olduğu gibi. Belli parametreleri verdikten sonra geri kalan işin tamamını sunucu ile istemci kendi arasında halledecektir.

DHCP ile IP Adresi Verilmesi

Bir Linux makinesi bir DHCP sunucu veya DHCP istemci olarak çalışabilir. Linux’ta öntanımlı olarak gelen servisler arasından sadece DHCP’nin yapılandırma dosyaları yoktur ve elle yaratılmaları gerekmektedir. Üzerinde çalışacağımız iki önemli dosya vardır:
-dhcp.conf: Tüm ayarlamalar bu dosya sayesinde gerçekleşir.
-dhcpd.leases: Kiralanan IP adres verilerini tutmakla yükümlüdür.
Bu dosyaları n touch komutu kullanılabilir. dhcpd.conf dosyası /etc dizininde,dhcpd.leases ise /var/lib/dhcp dizinlerinin altında yaratılmalıdır.
cd /etcpwd/etctouch dhcpd.confcd /var/lib/dhcppwd/var/lib/dhcptouch dhcpd.leases
Burada dikkat edeceğimiz nokta, dhcpd.leases dosyasının hiçbir zaman elle düzenlenmemesi gerektiğidir.
Şimdi aşağıdaki satırları teker teker /etc/dhcpd.conf dosyasına girin. Söz konusu satırlarla ilgili açıklamalar her satırın altında bulunmaktadır. Yapılandırma dosyası içinde okunurluğu artırmak için sekme ve boşluk karakteri kullanılabilir.
ddns-update-style interim;default-lease-time 600;
default-lease-time parametresi, DHCP istemcilere verilecek IP adreslerinin kira süresi belirtir. Bu değer saniye cinsindendir,örnekte 10 dakikalık kiralama süresi verilmiştir. Bu süre aslına bakarsanız oldukça kısa ve sistemde gereksiz trafik yaratabilir.Dilerseniz bu işlem için bu süredaha fazla olabilir.(Örneğin 3 veya 5 günlük gibi).
max-lease-time 7200;
default-lease-time değerindeki süre dahilinde kira yenilenmemiş ise DHCP istemciye max-lease-time değeri boyunce süre tanınır. Eğer yenilenmezse ne olur derseniz,basit:Kendinizi kapı önünde bulursunuz.
option subnet-mask 255.255.255.0;
DHCP istemcilerin dahil olacağı alt ağ maskesi(subnet) belirtilir.
option broadcast-address 192.168.1.255;
DHCP istemcilere dahil oldukları ağın yayın(broadcast) adresini verir.
option routers 192.168.1.254;
Eğer sistemde bir gateway(geçit) veya router(yönlendirici) var ise DHCP istemcilere bunların IP adresleri belirtilir.
option netbios-name-servers 192.168.1.1,192.168.1.2;
Eğer sistemde bir veya birden fazla WINS server var ise DHCP istemcilere bunların IP adresleri belirtilir.
option domain-name-servers 192.168.1.1,192.168.1.2;
DHCP istemcilerin kullanması gereken DNS sunucuların IP adresleri domain-name-servers ile belirtilir. Eğer birden fazla IP adresi verilecekse aralarında virgül bulunmalıdır.
option domain-name “alanim.org” ;
DHCP istemcilerin bulunacağı,dahil olacağı etki alanı belirtilir.
subnet 192.168.1.0 netmask 255.255.255.0 {
DHCP sunucunun hangi IP ağı üzerinden IP adresi dağıtacağı belirtilir. Subnet paramatresinin bulunduğu satırın sonunda, bu IP adresine ait olan diğer parametrelerin belirtilmesi amacıyla parantez açılmıştır. Parantez kapatılana kadar söz konusu IP adresi için DHCP sunucunun diğer parametreleri tanımlanır.
range 192.168.1.10 192.168.1.100;
DHCP sunucunun hangi IP adresi aralığında IP dağıtacağı belirtilir.
}
Yukarıda parantezi kapattık.
DHCP kullandığınız bir sistemde,bazı durumlarda ağda öyle makineler bulunabilir ki bunlara her zaman aynı IP adresleri verilmelidir.Örnek olarak sistemdeki DNS sunucu, web sunucu, veritabanı sunucu için kullanılan makinelerin IP adreslerinin değişmesi halinde her şey karmakarışık olabilir.Zira bu sunucuların kullandığı IP adresleri yanlışlıkla DHCP sunucu ile başka makineler için tanımlanabilir.

Bir Makineye Sabit IP Verilmesi

Ağda öyle makineler vardır ki bunların mutlaka her zaman aynı IP adresine ihtiyaçları olur. Örneğin sistemde DNS sunucu, web sunucu, veritabanı sunucu, hatta başka bir DHCP sunucu varsa bu gibi durumlarda seçebileceğimiz iki seçenek var. Birincisi; bu tip işlevleri olan makinelere IP adreslerini statik girmek, diğeri de aşağıdaki gibi bir yol izlemek.
host argelinux1{hardware ethernet 08:00:2b:4c:59:23 ;# 08:00:2b:4c:59:23 Fixed-address 192.168.1.222;}
Yukarıda verdiğiniz IP, dağıttığınız IP aralığı içinde olsa dahi normal bir bilgisayara kesinlikle verilmez, belirtilen MAC adresine sahip ethernet kartının bulunduğu makine için ayrılır. Yukarıda host ile başlayan satırın hemen sonundaki argelinux1 ismi makinenin tam adını karşılamayabilir. Önemli olan ethernet MAC adresinin tutmasıdır. Peki bu MAC adresini nasıl bulacaksınız?Linux altında "ifconfig" ethernet kartı bilgilerinin yanında MAC adresini de veriyordu.
DHCP sunucuyu çalıştırmak için isterseniz /etc/init.d dizinine geçip ./dhcpd start komutunu verebilir veya herhangi bir dizindeyken aşağıdaki satırı uygulayabilirsiniz.
service dhcpd start
Unutmadan,her açılışta DHCP sunucunun çalışmasını istiyorsanız ntsysv komutunu çalıştırıp DHCP kutucuğunu işaretlemeniz yeterli olacaktır.Ya da /etc/init.d dizinindeki rc.local dosyası sonuna /etc/init.d/dhcpd start satırını ekleyerek de bu işlem gerçekleştirilebilir.İlk yöntem standart yöntemlerin dışına çıkılmaması açısından daha uygundur.

Birden Fazla Ethernet Kartı İle Çalışmak

DHCP kurulu bir Linux sistemde, eğer birden fazla ethernet kartı varsa, sadece tek bir ethernet kartının IP dağıtımı yapmasını istediğiniz durumlar olabilir.özellikle aynı makinede birden fazla sevis çalıştıran firmalarda tek Linux sunucuya squid proxy,güvenlik duvarı,e-posta sunucusu,DHCP sunucusu vb. aktarıldığı zaman bu durum ortaya çıkar.Zira genellikle çalışan iki ethernet kartı vardır,ancak sadece birisinin etkin olması istenir.
Bu durumda işimizi kolaylaştıran bir parametre bizim için Dhcpd programına eth0 parametresini eklerseniz sadece eth0 üzerinden gelen istekler dinlenecektir. Benzer şekilde eth0 yerine eth1 yazmanız durumunda dinlenecek ethernet kartı eth1 olacaktır.
Öyleyse dhcp programını çalıştıran /etc başlangıç betiklerini değiştirmemiz gereklidir. /etc/init.d/dhcp dosyasının bir kısmını inceleyelim:
start(){
echo –n $”Starting dhcpd: ”
daemon /usr/sbin/dhcpd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/dhcpd
return $RETVAL}
Yapılması gereken işlem,  “ daemon /usr/sbin/dhcpd” satırını “ daemon /usr/dhcpd eth0” olarak değiştirmek.DHCP servisinin yeniden başlatmanız halinde artık sadece eth0 üzerinden gelen istekler cevaplanacaktır.