Ana sayfa » Debian Sistemlerde DHCP Server Kurulumu
Linux

Debian Sistemlerde DHCP Server Kurulumu

DHCP Server Kurulumu

Bundan bir önceki yazımda DHCP protokolünün ne olduğundan ve nasıl kullanıldığından bahsetmiştim. Hatta DHCP nedir? adlı bu linkten yazıya ulaşabilirsiniz. Bu yazıda ise, bir networkte DHCP hizmeti veren bir sistemin nasıl kurulacağını anlatmaya çalışacağım. DHCP server olarak Debian 9.0 kullanacağım. Bu sebepten dolayı bu içerikte yapılacak konfigürasyonlar Debian tabanlı tüm sistemler için geçerlidir. Fakat RedHat, CentOS, Suse gibi işletim sistemlerinde bu işlemler ufak tefek farklılıklar gösterebilir. Ayrıca bu işlemleri VirtualBox üzerinden sanal olarak gerçekleştireceğim. Sizler de buradaki adımları uygulayarak kendi sanal networklerinizi oluşturabilir ve denemeler yapabilirsiniz. İsterseniz konumuza gerekli olan VirtualBox ayarlarını yaparak başlayalım.

VirtualBox İle Gerekli Networkün Kurulumu

Öncelikle DHCP sunucusunu kurabilmek için doğal olarak bir networke ihtiyacımız var. Peki elimizde fiziksel olarak bir network kurma imkanı yoksa? İşte böylesi durumlarda sanal networkler bizim işimizi görmektedir. Sanal network oluşturabilmek için bir sanallaştırma yazılımı kullanmanız gerekmektedir. Ben burada VirtualBox kullanacağım, fakat buna alternatif olarak sizler VMware adlı yazılımı da kullanabilirsiniz. Kısaca VirtualBox’ın bize sağladığı network tiplerine değinecek olursak, bunlar 5 başlık altında incelenebilir. Şimdi bu 5 başlığı maddeler halinde kısaca bir inceleyelim.

  • NAT: Bu network tipinde veya topolojisinde her bir guest(yani sanal makina) internete host(yani sizin fiziksel cihazınız) vasıtası ile çıkmaktadır. Guest makinaların kendine ait bir subneti olur ve ortak bir IP adresine sahiptirler. Guest makinalar kendileri arasında haberleşemezler. Fakat host ile iletişim kurabilirler.
  • NAT Network: İnternete çıkma kapsamında NAT ile aynıdır. Fakat burada guest makinalar kendi aralarında da haberleşebilmektedirler. NAT ile temel farkı budur.
  • Internal: Burada sadece guest makinalar arasında iletişim vardır. Guest cihazlar internete çıkamazlar ve host ile iletişim kuramazlar.
  • Bridged: Bu network tipinde guest makinalar aynı host gibi, hostun bağlı olduğu networke bağlanırlar. Yani host cihazınızın bağlı olduğu Network ID’si 192.168.1.0 ve default gateway 192.168.1.1 ise, guest makinanız içinde bu değerler geçerlidir ve IP adresi edinirken 192.168.1.0 networkü için tanımlı olan DHCP sunucusundan IP alırlar.
  • Host only: Bugünki örnekte bu tipi kullanacağız. Prensip olarak, hostunuz için sanal bir interface tanımlar. Hostunuz bu interface üzerinden guestler ile haberleşir. Host internete çıkabilir, fakat guestler internete çıkamazlar. Ayrıca bu network tipinde guestler kendi aralarında da iletişim kurabilirler.

Host only yapısını görsel bir şekilde ifade etmek gerekirse;

host only network

Şimdi bu yapıyı kurabilmek için VirtualBox uygulamamızı açıyoruz ve aşağıdaki yolu izliyoruz.

 File>Preferences>Network>Host-Only>Add new host

Bu işlemi yaptıktan sonra ekranda da gördüğünüz gibi sanal bir interfacemiz oluşacak. Bundan sonra yapmamız gereken bir işlem daha var o da; bu networkte clientlerin otomatik olarak IP almasını engellemek. Bunu yapmak için VirtualBox tarafından ayarlanan DHCP sunucusunu kapatacağız. Bunun için yukarıdaki görseldeki tornavida şeklindeki ayar butonuna basıyoruz ve DHCP Server sekmesinden “Enable DHCP” kısmındaki ticki kaldırıyoruz.

Bu işlemlerden sonra artık elimize internete çıkmayan ve hali hazırda DHCP sunucusu olmayan bir network kalıyor. Şimdi bu network içinde bir DHCP sunucusu kurarak clientlere IP dağıtma işlemini gerçekleştireceğiz. Öncelikle Debian sanal makinamı bu networke bağlamam gerekiyor. Bunun için Debian sanal makinama tıklayıp, üstteki ayar butonuna basıyorum ve açılan ekrandan sonra aşığıdaki yolu takip ediyorum.

 Network>Host-Only Adapter

Artık tüm bu işlemlerden sonra işletim sistemimizi başlatabiliriz.

DHCP Server’ın Kurulumu

Artık elimizde internete çıkmayan ve kendileri arasında haberleşebilen clientler için bir network var. Şimdi yapmamız gereken Debian sistemimizi DHCP server olarak ayarlamak. Tabi bunu yapabilmek için öncelikle bu sistemimize statik olarak ip ataması yapmamız gerekmektedir. Neden statik yapıyoruz diye soracak olursanız, daha önceden DHCP sunucusunu Host-only network için kapattığımızı size hatırlatmak isterim. Artık aksiyona DHCP sunucumuza statik IP adresi atıyarak başlayabiliriz.

DHCP Server’a Statik Olarak IP Adresi Atamak

İşletim sistemimizi açtıktan sonra statik olarak IP adresi ataması yapmak için aşağıdaki ayar dosyasını herhangi bir text editör ile açıyoruz. Ben vim kullanıyorum, bu sebepten dolayı aşağıdaki komutum şu şekilde;

sudo vim /etc/network/interfaces

Daha sonra bu dosyamızı aşağıdaki gibi düzenliyoruz.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
#IPv4 //Bizim için önemli olan kısım
auto enp0s3
iface enp0s3 inet static
address 192.168.2.2
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 192.168.2.1
#IPv6
iface enp0s3 inet6 static
address 2001:db8::c0ca:1eaf
netmask 64
gateway 2001:db8::1ead:ed:beef
#DNS
dns-nameservers 8.8.8.8
dns-nameservers 8.8.4.4

Burada #IPv4 ile başlayan kısımdan #DNS dahil olan kısma kadar kendimiz yazıyoruz. Kısaca özetleyecek olursak;

  • iface <your_interface> inet static = interfacemize ip atamasının statik mi dinamik olacağının kuralını burada yazıyoruz.
  • adress = Cihazımıza vermek istediğimiz IP adresi. Bu IP adresi o networkün subneti ile uyumlu olmalıdır.
  • netmask = Cihazınızın bağlanacağı networkün netmask adresi
  • network = Bu kısım bağlanılacak olan networkün ID’sini belirtir.
  • broadcast = Adından da anlaşılacağı üzer broadcast IP adresi
  • gateway = Bu kısımda bu cihaz için default gateway adresini tanımlıyoruz.

Dns kısımları ise zaten gayet açık bir şekilde belli oluyor. Bizim networkümüzde DNS sunucusu olmadığı için google’ın DNS sunucularını burada statik olarak bu bilgisayara dns-nameservers kuralı ile tanıttık. Bu işlemlerden sonra dosyayı kaydedip çıkıyoruz. Daha sonra DNS sunucularını ayrıca resolv.conf adlı bir dosyanın içine de yazmamız gerekmektedir. Bunun için öncelikle resolvconf adlı uygulamayı kuruyoruz ve daha sonra gerekli ayarları yapmak için aşağıdaki dosyaya giriyoruz.

sudo apt-get install resolvconf
sudo vim /etc/resolv.conf

Bu kısımda yapacağım ayar aşağıdaki gibi;

nameserver	8.8.8.8 
nameserver	8.8.4.4

bu işlemlerden sonra da bu dosyayı kaydedip çıkıyoruz. En son olarak cihazımıza bir isim vermek için aşağıdaki komutumuzu yazıyoruz.

echo "serverDHCP.example.com" > /etc/hostname

Artık statik olarak IP konfigurasyonu yaptık. Şimdi ise gerekli ayarların geçerli olabilmesi için network ile ilgili processlerin ve  hizmetlerin yeniden başlatılması gerekmektedir. Bunun için aşağıdaki komutu kullanabilirsiniz.

sudo /etc/init.d/networking restart

Eğer ayarlarınız geçerli olmaz ise sisteminizi reboot etmeniz gerekebilir. Hatta ben yaparken sistemi reboot etmek zorunda kaldım ayarların aktif hale gelebilmesi için.

Burada kullanılan komutlar Debian tabanlı sistemler için geçerlidir. Başka sistemlerde bu işlemler farklılık gösterebilir.

Tüm bu işlemlerden sonra terminalde ifconfig yazdığınız vakit interfacinizin karşısında IP adresi ve gerekli bilgilerin olması gerekmektedir. Hatta bendeki çıktı şu şekilde;

ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.2.2  netmask 255.255.255.0  broadcast 192.168.2.255
inet6 fe80::a00:27ff:fe0a:d396  prefixlen 64  scopeid 0x20<link>
inet6 2001:db8::c0ca:1eaf  prefixlen 64  scopeid 0x0<global>
ether 08:00:27:0a:d3:96  txqueuelen 1000  (Ethernet)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 30  bytes 4219 (4.1 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 1  (Local Loopback)
RX packets 108  bytes 8796 (8.5 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 108  bytes 8796 (8.5 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Artık sistemimizin bir IP adresi var. Şimdi bu sistemin bir DHCP server olarak hizmet vermesi için gerekli olan ayarları yapalım.

DHCP Ayarlarının Yapılması

Aslında asıl konumuzun başladığı yer burası. Buraya kadar bize lazım olan yapmak zorunda olduğumuz kısımları yaptık. Bundan sonraki süreç biraz daha rahat ve kısa olacak. Dolayısıyla rahat olabilirsiniz.

O zaman başlayalım. İlk yapmamız gereken DHCP server programımızı indirmek ve kurmak. Bunun için isc-dhcp-server uygulamamızı aşağıdaki şekilde kuruyoruz.

sudo apt-get install isc-dhcp-server

Kurma işlemi tamamlandıktan sonra aşağıdaki şekilde dhcpd.conf dosyasını açıyoruz.

sudo vim /etc/dhcp/dhcpd.conf

Ben burada kendi ayar dosyamı iki parça halinde paylaşacağım ve daha sonra bu parçalar üzerinden ayarların nasıl yapılacağını hep beraber inceleriz.

# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "pioneerhfy.lan";
option domain-name-servers ns1.pioneerhfy.lan, ns2.pioneerhfy.lan;
default-lease-time 3600;
max-lease-time 7200;
authoritative;
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

İlk kısım olan burada, option ile yapacağım ayarları belirtiyorum. Mesela burada domain-name kısmını “pioneerhfy.lan” olarak yapmışım ve sonuna “;” noktalı virgül koyarak kuralı sonlandırmışım. Burada domain-name ve domain-name-server kısımlarını sanalda kullandığımız için kafadan yazdım. Fakat gerçek networklerde bu değerli doğru yazmalısınız. Aslında, bizim için önemli olan son 3 kısımdır. Bunlar da sırasıyla aşağıdaki gibidir;

  • default-lease-time 3600 = İşte bu kısım gerçekten önemli, buradaki değerin anlamı şu; bir istemciye IP adresi verilirken, daha doğrusu kiralanırken burada belirtilen değer süresince kiralama işlemi yapılır. Yani istemciye IP adresi 3600 saniye süresince kiralanır. Bu süre dolunca sunucumuz ilişkilendirmiş olduğu IP adresini boşa alır ve bir başka istemci IP istediği vakit bu IP adresini ona kiralayabilir. Şayet cihazımız bu süre dolmadan önce yeniden bu adresi kiralarsa işler değişir. Kısaca amacı budur. Bu değerin sistem yöneticileri tarafından networkteki client sayısına göre etkili bir şekilde ayarlanması gerekmektedir.
  • max-lease-time 7200 = Burada bir istemciye IP adresinin en fazla kaç saniye boyunca kiralanacağı değeri girilir.
  • authoritative = Bu kısım, sunucumuza bir istemciden geçersiz bir IP isteği geldiği vakit nasıl davranacağına dair kuralı tanımlar. Eğer bu kısım bu örnektede olduğu gibi authoritative ise sunucumuz geçersiz IP isteklerine karşı DHCPNack mesajı yollayacaktır. Aksi taktirde hiç bir mesaj yollamayıp, paketi değerlendirmeye almayacaktı.

Şimdi aynı dhcpd.conf dosyasının ikinci kısmına bakacak olursak, o ise şu şekilde;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
#log-facility local7;
# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.3 192.168.2.10;
option routers 192.168.2.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.2.255;
option domain-search "pioneerhfy.lan";
option domain-name-servers 192.168.2.4;
}
# This is a very basic subnet declaration.

Bundan sonraki kısım herkes te aynı ve “#” işareti ile inaktif durumdadır. Şimdi bu kısımda aslında bir DHCP sunucusunun DHCP ACK mesajı içinde göndereceği parametrelerin neler olacağını belirtiyoruz. Yani network ile ilgili asıl ayarların tanımlı olduğu kısım burası. Gördüğünüz gibi subnet 192.168.2.0 netmask 255.255.255.0 {} şeklinde bir tanımı var. Buradan da anlayacağınız üzere 192.168.2.0 networkü için gerekli ayarları yazıyorum. Range kısmı ile istemcilere atanabilecek IP aralığını, option routers ile o networkün default gateway adresini, subnet-mask ile subnet maskesini, broadcast-adress ile broadcast adresini belirtiyorum. Daha sonra DNS adresini de belirtip parantezi kapatıp, ayarlarımı sonlandırıyorum.

Bundan sonra son olarak isc-dhcp-server ayar dosyasında DHCP serverın dinleme yapacağı interfaci tanımlayıp sistemi reboot edeceğiz. Bunun için aşağıdaki şekilde gerekli ayar dosyamızı açıyoruz.

sudo vim /etc/default/isc-dhcp-server

Bu ayar dosyamızın içeriği bende aşağıdaki şekilde;

# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid
# Additional options to start dhcpd with.
#	Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#	Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp0s3" //Değiştirmek isteyebileceğiniz kısım burası
INTERFACESv6=""

Ben değiştirmedim olduğu gibi bıraktım. Şimdi sistemimizde aşağıdaki komutlar vasıtası ile gerekli servisleri restart ediyoruz.

sudo systemctl start isc-dhcp-server.service
sudo systemctl enable isc-dhcp-server.service
--
sudo service isc-dhcp-server.service start
sudo service isc-dhcp-server.service enable

Bu işlemlerden sonra sunucumuzun aktif hale gelmesi gerekmektedir. Eğer gelmez ise sisteminizi yeniden kapatıp açın.

Sunucumuzun aktif hale geldiğini anlamak için, sanal makinaya 2. bir makina kurun. Daha sonra bu makinanın network ayarları için, aynı sunucu da yaptığımız gibi host-only adapter seçeneğini seçin ve sistemi başlatın. Bu işlemleri yaparak sistemimizi DHCP serverın bulunduğu networke dahil ettik. Sistem açıldığında sunucumuzdan otomatik olarak IP adresi alması gerekmektedir. Ben Lubuntu adlı 2. bir işletim sistemi(istemci) açıp, daha sonra sunucumuz(debian) üzerinden wireshark adlı programı açıp trafiği buraya aktardım. Aşağıdaki DHCP trafiğinden DHCP Serverımızın düzgün bir şekilde hizmet verdiğini görebiliriz.

dhcp-trafigi

İlk başta istemcimiz geçersiz bir istekte bulunuyor ve buna karşılık sunucumuz DHCP NAK mesajı ile istemciyi bilgilendiriyor. Daha sonra ikinci kısımda sağlıklı bir şekilde istemciye IP adresi veriliyor. DHCP server ile ilgili değineceklerim bu kadar. Bir sonraki yazımda görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Ağ güvenliği başta olmak üzere çeşitli siber güvenlik konularında çalışmalar yapan ve bu yaptığı çalışmalardan elde ettiği tecrübeleri blog yazısı olarak takipçileri ile paylaşan Sakarya Üniversitesi öğrencisi, siber güvenlik meraklısı bir vatandaş.

4 Comments

Yorum Yazmak İçin Tıkla

        • Öncelikle ayar yaptığınız networkün default gateway adresini ve subnetini öğrenmeniz gerekmekte. Ben bu işlemleri sanalda yaptığım için kendim değerler atadım. Burada internete çıkabilmeniz için bağlı olduğunuz networkteki “gateway 192.168.2.1” kısmını “gateway ve daha sonra aşağıdaki kısımları değiştirmelisiniz. Ayrıca not olarak belirteyim. Ben bu işlemleri yaptığımda da internete sanal cihazlar çıkmıyordu, çünkü sanal makinaların networkünü ona göre ayarlamıştım. Bu içerikteki amaç sadece iç networkte cihazlara IP adresi atamak.

          address 192.168.2.2
          netmask 255.255.255.0
          network 192.168.2.0
          broadcast 192.168.2.255