Linux Unix

Linux ile Basit Network Tasarımı GW-NAT-DHCP-DNS

 

Bu makalemde linux sistemler ile temel anlamda Gateway, NAT, DHCP ve DNS gibi temel servislerin kurulmasını anlatacağım. Aşağıdaki resimde de bu yapılandırma için nasıl bir lab kuracağımın detaylarını görebilirsiniz.

Lab ortamında;

 

Router olarak adlandırılan server üzerinde Debian Server 32 bit

Server1 olarak adlandırılan server üzerinde Debian Server 32 bit

Client bilgisayarlarından birisi Windows XP diğeri de Centos 6.5 olarak işletim sistemleri kullanılmıştır.

 

Çizmiş olduğum taslak üzerinde de görüleceği gibi client bilgisayarlar DHCP sunucudan IP bilgilerini alacaklar. Aldıkları bu bilgiler doğrultusunda da Gateway üzerinden internete 192.168.2.0 ağına bağlanarak internete çıkacaklar.

 

 

clip_image002

 

 

Neler yapılacak?

 

router isimli sunucu üzerinde NAT işlemini yapabilmesi için gerekli konfigürasyonlar yapılacak

DHCP-DNS olarak çalışacak server1 isimli sunucu üzerine, sırasıyla DNS ve DHCP kurulumları ve gerekli konfigürasyonları yapılacak.

Client tarafında yapılan testlere göz atılacak.

 

 

1. NAT KURULUMU (router sunucusu)

 

Öncelikle kurulum ve konfigürasyon sırasında vim text editor’u kullanıldı. Uygulama esnasında favori text editorunuz(nano, pico vs…) ile çalışabilirsiniz.

 

# vim /etc/network/interfaces

 

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface

auto eth0

iface eth0 inet dhcp

auto eth1

iface eth1 inet static

address 172.16.16.1

netmask 255.255.255.0

network 172.16.16.0

broadcast 172.16.16.255

 

 

 

“# vim /etc/network/interfaces” komutu ile interfaces dosyasının içeriği yukarıdaki hale getirilmeli.

 

Interfaces dosyası yukarıdaki hale getirildikten sonra

 

# vim /etc/sysctl.conf

net.ipv4.ip_forward=1

 

 

# vim /etc/sysctl.conf  Komutu ile sysctl.conf dosyasında bazı değişikliker yapmak üzere bu dosyayı açıyoruz. Ve “net.ipv4.ip_forward” yazan satırı bularak başındaki diyez(#) işaretini kaldırıyoruz. Yapılan bu değişiklik Linux üzerinde network servisinin yeniden başlatılmasından sonra aktif hale gelecek. Eğer hemen aktif olmasını istiyorsak;

 

# sysctl -w net.ipv4.ip_forward=1

 

Komutunu kullanabiliriz.

 

NAT işlemi için iptables modülünü transparan olarak devreye alacağız. Herhangi bir kesme yapmayacak, sadece ip nat işlemini yapmak üzere konfigure edeceğiz

“rc.local” dosyasına her açılışta iptables’a eklemesi gereken kuralları yazalım;

 

# vim /etc/rc.local

 

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will “exit 0” on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.

iptables -P FORWARD ACCEPT

iptables –table nat -A POSTROUTING -o eth0 -j MASQUERADE

exit 0

 

 

 

rc.local dosyasını yukarıdaki hali ile kaydedip çıkalım.

 

rc.local dosyası kabaca Linux işletim sisteminin boot sırasında hangi komutları çalıştıracağını barındıran bir dosyadır/scripttir. Dolayısı ile bu dosyaya yazdılan komutlar bir dahaki system başlangıcından sonra aktif olacaktır. Sistemi yeniden başlatmadan iptables komutlarını shell’de çalıştıralım;

 

# iptables -P FORWARD ACCEPT

# iptables –table nat -A POSTROUTING -o eth0 -j MASQUERADE

 

 

 

Eğer server1 sunucusu üzerinde 172.16.16.2 olarak static IP’yi tanımladıysanız, server1 üzerinden 192.168.2.0 ağına veya dış bir network’e ping atarak konfigürasyonu kontrol edebilirsiniz.

 

clip_image004

 

Ben de herhangi bir problem görünmediği için 2.adıma yani DNS ve DHCP sunucuların kurulumlarına geçiyorum.

 

 

2.1. Dns kurulumu (server1)

 

Standart olarak network yapılandırması ile başlayalım ve interfaces dosyası üzerinde yapmadıysak gerekli ayarları aşağıdaki adımlar doğrultusunda yapalım.

 

# vim /etc/network/interfaces

 

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

allow-hotplug eth0

iface eth0 inet static

address 172.16.16.2

netmask 255.255.255.0

gateway 172.16.16.1

 

 

 

 

Yukarıdaki gibi network ayarlarını bitirip, # ifconfig komutu ile eth0’ın 172.16.16.2 IP’sini kullandığını görebildiysek DNS kurulumuna geçelim. DNS sunucu olarak BIND server kuracağım.

 

# apt-get update

 

$ORIGIN .

$TTL 604800     ; 1 week

yilmaz.com              IN SOA  server1.yilmezy-updates Release.gpg [836 B]                            100      elease                                     604800     ; refresh (1 week)

; retry (1 day)

lease.gpg                      s)

604800     ;                                                  )

rg.tr wheezy/main i386 Packagesrver1.yilmaz.com.

eezy/main Translation-en6.16.2

$ORIGIN yilmaz.com.

server1 -updates/main Sources [4,057 B]ter          A       172.16.16.1

$es/main i386 Packages/DiffIndexek

16.16.172.in-addr.abian.org wheezy/updates Release16.16.172.in-addr.arpa. root.yilmaz.com.16s/main Translation-en/DiffIndex                         150org wheezy/updates/main Sources                  604800     ; refeezy/updates/main i386 Packages               86400      ; retry (ezy/updates/main Translation-en        2419200    ; ex215 kB/s)eks)

 

 

 

 

Depo bilgilerini güncelledikten sonra kurulum adımına geçelim.

 

# apt-get install bind9 dnsutils

 

Reading package lists… Done

Building dependency tree

Reading state information… Done

dnsutils is already the newest version.

Suggested packages:

bind9-doc resolvconf ufw

The following NEW packages will be installed:

bind9 bind9utils

0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.

Need to get 490 kB of archives.

After this operation, 1,257 kB of additional disk space will be used.

Get:1 http://ftp.linux.org.tr/debian/ wheezy/main bind9utils i386 1:9.8.4.dfsg.P1-6+nmu2+deb7u1 [121 kB]

Get:2 http://ftp.linux.org.tr/debian/ wheezy/main bind9 i386 1:9.8.4.dfsg.P1-6+nmu2+deb7u1 [370 kB]

Fetched 490 kB in 0s (706 kB/s)

Preconfiguring packages …

Selecting previously unselected package bind9utils.

(Reading database … 38893 files and directories currently installed.)

Unpacking bind9utils (from …/bind9utils_1%3a9.8.4.dfsg.P1-6+nmu2+deb7u1_i386.deb) …

Selecting previously unselected package bind9.

Unpacking bind9 (from …/bind9_1%3a9.8.4.dfsg.P1-6+nmu2+deb7u1_i386.deb) …

Processing triggers for man-db …

Setting up bind9utils (1:9.8.4.dfsg.P1-6+nmu2+deb7u1) …

Setting up bind9 (1:9.8.4.dfsg.P1-6+nmu2+deb7u1) …

Adding group `bind’ (GID 107) …

Done.

Adding system user `bind’ (UID 104) …

Adding new user `bind’ (UID 104) with group `bind’ …

Not creating home directory `/var/cache/bind’.

wrote key file “/etc/bind/rndc.key”

#

[ ok ] Starting domain name service…: bind9.

 

 

 

Dns sunucu caching işlemi yapacağı için cache içinde bulunmayan isimleri çözebilmesi için opendns üzerinden sorgu yapması için “/etc/bind/named.conf.options” dosyası içindeki forwarders bölümünü aşağıdaki gibi düzenleyelim;

 

# vim /etc/bind/named.conf.options

 

forwarders {

//      OpenDNS

208.67.222.222 ;

208.67.220.220 ;

};

 

 

 

“/etc/bind/named.conf.local” dosyası içinde LAN için kullanacağımız zone’ları ve PTR için kullanacağımız reverse zone’ları tanımlayalım;

 

# vim /etc/bind/named.conf.local

 

zone “yilmaz.com” {

type master;

file “/var/lib/bind/db.yilmaz.com”;

};

 

zone “16.16.172.in-addr.arpa” {

type master;

file “/var/lib/bind/db.16.16.172”;

};

 

 

 

Zone tanımlama işlemi sırasında farkedildiyse eğer “/var/lib/bind/” klasörü altında bu zone’ların zone’lara ait dosya yolları tanımlandı. Adresleri verilen bu dosyalar zone’lara ait kayıtların ve konfigürasyonun tutulduğu dosyalardır.

 

O dosyaları oluşturup gerekli satırları ekleyelim;

 

# vim /var/lib/bind/db.yilmaz.com

 

$ORIGIN .

$TTL 604800     ; 1 week

yilmaz.com              IN SOA  server1.yilmaz.com. root.yilmaz.com. (

100        ; serial

604800     ; refresh (1 week)

86400      ; retry (1 day)

2419200    ; expire (4 weeks)

604800     ; minimum (1 week)

)

NS      server1.yilmaz.com.

A       172.16.16.2

$ORIGIN yilmaz.com.

server1         A       172.16.16.2

router          A       172.16.16.1

 

 

Db.yilmaz.com dosyasını oluşturduysak PTR kayıtlarını tutan “/var/lib/bind/db.16.16.172” dosyasını oluşturacağız;

 

# vi /var/lib/bind/db.16.16.172

$ORIGIN .

$TTL 604800     ; 1 week

16.16.172.in-addr.arpa  IN SOA  server1.yilmaz.com.16.16.172.in-addr.arpa. root.yilmaz.com.16.16.172.in-addr.arpa. (

150        ; serial

604800     ; refresh (1 week)

86400      ; retry (1 day)

2419200    ; expire (4 weeks)

604800     ; minimum (1 week)

)

NS      server1.

2                       PTR     server1.yilmaz.com.

1                       PTR     router.yilmaz.com

~

 

 

Bahsi geçen zone dosyalarını oluşturduysak “/var/lib/bind” klasörünün grup ve kullanıcı ayarlarını muhakkak bind:bind olarak ayarlamak gerekiyor.

 

# chown bind:bind /var/lib/bind/ -R

 

 

 

Dns kurulumunu ve konfigürasyonunu tamamladık. Şimdi nslookup ile bazı kontroller yapalım.

 

# nslookup

> server 127.0.0.1

> cozumpark.com

Server:                 127.0.0.1

Address:             127.0.0.1#53

 

Non-authoritative answer:

Name:  cozumpark.com

Address: 188.132.200.15

 

 

 

Görüldüğü gibi cozumpark.com alan adını kendi sunucumuz üzerinden çözdük.

 

Yukarıdaki adımlarda herhangi bir yanlışlık yaptığınızı düşünüyorsanız veya dns sunucunuz hata veriyorsa konfigürasyonunuzu ve zone’ları kontrol etmek için şu komutları kullanabilirsiniz;

 

# named-checkconf /etc/bind/<conf_dosyası>

# named-checkzone <hostname> /var/lib/bind/<dosya_adı>

 

 

 

 

2.2. DHCP KURULUMU (server1)

 

Dhcp sunucu olarak isc-dhcp-server kurulumu yapacağız.

 

# apt-get install isc-dhcp-server

Reading package lists… Done

Building dependency tree

Reading state information… Done

Suggested packages:

isc-dhcp-server-ldap

The following NEW packages will be installed:

isc-dhcp-server

0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

Need to get 935 kB of archives.

After this operation, 2,075 kB of additional disk space will be used.

Get:1 http://http.debian.net/debian/ wheezy/main isc-dhcp-server amd64 4.2.2.dfsg.1-5+deb70u6 [935 kB]

Fetched 935 kB in 1s (561 kB/s)

Preconfiguring packages …

Selecting previously unselected package isc-dhcp-server.

(Reading database … 146032 files and directories currently installed.)

Unpacking isc-dhcp-server (from …/isc-dhcp-server_4.2.2.dfsg.1-5+deb70u6_amd64.deb) …

Processing triggers for man-db …

Setting up isc-dhcp-server (4.2.2.dfsg.1-5+deb70u6) …

Generating /etc/default/isc-dhcp-server…

[FAIL] Starting ISC DHCP server: dhcpd[….] check syslog for diagnostics. … failed!

failed!

invoke-rc.d: initscript isc-dhcp-server, action “start” failed.


Yukarıda da görüldüğü gibi dhcp sunucumuz başlama anında hata verdi. Endişe edecek bir şey yok sadece konfigürasyonu toparlamamız gerekecek. “vim /etc/default/isc-dhcp-server” dosyasını açıp, INTERFACES satırını bulacağız ve karşısına Ethernet ara yüzünün adresini gireceğiz. Bu ayarda DHCP sunucu hangi Ethernet ara yüzü üzerinden DHCP sunacak ona karar veriyoruz.

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

 

INTERFACES=”eth0″

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

 

INTERFACES=”eth0″

 

Dhcp sunucusunu yapılandırmak için “/etc/dhcp/dhcpd.conf” dosyası üzerinde düzenlemeler yapıyoruz. Dosyanın içeriğini tamamen silip aşağıdaki konfigürasyon örneğinden yararlanmak konfigürasyon dosyanızı baştan oluşturabilirsiniz.

 

# vi /etc/dhcp/dhcpd.conf

 

ddns-updates on; //dns update acik

ddns-update-style interim; //dns update icin kullanilacak sema

default-lease-time 600;

max-lease-time 7200;

authoritative;

log-facility local7;

ddns-domainname “yilmaz.com”;

ddns-rev-domainname “in-addr.arpa.”;

option domain-name “yilmaz.com”;

option domain-name-servers 172.16.16.2;

option routers 172.16.16.1;

option broadcast-address 172.16.16.255;

subnet 172.16.16.0 netmask 255.255.255.0 {

range 172.16.16.10 172.16.16.25;

zone 16.16.172.in-addr.arpa. {

primary 172.16.16.2;

}

zone yilmaz.com. {

primary 172.16.16.2;

}

}

 

Yukarıdaki dosyada dinamik dns güncellemesi için gerekli ayarları ve dhcp sunucusnun standart ayarlarını yaptık. Son olarak dhcp sunucumuzu başlatıyoruz.

 

# /etc/init.d/isc-dhcp-server start

 

Makalenin başında çizmiş olduğumuz yapıyı yukarıda yapmış olduğumuz işlemler neticesinde gerçeklemiş olduk.

 

Test aşamasına dhcp-dns sunucusu olan server1 üzerinde dhcp lease’leri kontrol ederek başlayalım;

 

# tail /var/lib/dhcp/dhcpd.leases

 

# The format of this file is documented in the dhcpd.leases(5) manual page.

# This lease file was written by isc-dhcp-4.2.2

 

lease 172.16.16.10 {

starts 1 2014/04/21 23:41:16;

ends 1 2014/04/21 23:51:16;

tstp 1 2014/04/21 23:51:16;

cltt 1 2014/04/21 23:41:16;

binding state active;

next binding state free;

rewind binding state free;

hardware ethernet 08:00:27:ef:7d:33;

uid “\001\010\000’\357}3”;

client-hostname “yilmaz-xp”;

}

lease 172.16.16.11 {

starts 1 2014/04/21 23:43:32;

ends 1 2014/04/21 23:53:32;

tstp 1 2014/04/21 23:53:32;

cltt 1 2014/04/21 23:43:32;

binding state active;

next binding state free;

rewind binding state free;

hardware ethernet 08:00:27:10:52:81;

client-hostname “centos.yilmaz.com”;

}

 

Yukarıda görüldüğü gibi client bilgisayarlar sorunsuz IP almışlar.

 

Client tarafındaki testler;

 

Centos client isim çözebiliyor mu?

 

clip_image006

Sorunsuz çözüyor.

 

 

 

XP’nin IP ayarları;

 

clip_image008

 

Sorunsuz bir şekilde kurmuş olduğumuz sistem üzerinden IP alabiliyor.

 

İnternete bağlanalım;

 

clip_image010

 

 

Testlerimizde de sorun yoksa isteklerimizi tam anlamıyla gerçeklemişiz demektir. Linux ile basit bir network ve sistem altyapısı kurmayı hedeflediğim bu makale umarım yararlı olur.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu