Bu yazının ilk sürümü Can
Kavaklıoğlu
tarafından, Vasfi Uysal'ın debian-user-tr listesine attığı epostaya
cevap olarak yazılmıştır.
Bu yazının ikinci sürümü Pozitif Pc
dergisinin teşviki üzerine, derginin ikinci sayısında yayınlanmak
üzere,
düzeltmeler (başlıca ipmasq kısmı üzerinde) yapılarak yazılmıştır.
Yazıdaki hataları, önerileri, soruları ve/veya yazının oluşturduğu
tepkileri
yukarıdaki bağlantıdan ulaşabileceğiniz eposta adresine yollarsanız pek
de güzel olur.
Herzamanki gibi bu yazıda yazanlar etkisinde kalarak yaptığınız
hareketlerden yazar sorumlu değildir.
2.0 Giriş
Yerel Ağ | Yönlendirici | | Diğer Ağ Adsl
Kurmak istediğimiz ağın elemanları şunlar:
dış tarafta: diğer bir ağ ve adsl hattıyla ulaştığımız ağ
iç tarafta: yerel ağımız
arada: yerel ağımızı dışarıdaki iki ağa bağlayacak bir
yönlendirici bilgisayar.
Bu yazının amacı "Debian kullanarak böyle bir
yönlendiriciyi nasıl oluşturabiliriz?" sorusuna cevap
önermek.
Notlar:
Adsl hattına ethernet kartı yoluyla ulaşıldığı varsayılmıştır.
ipmasq bölümündeki sorunlara dikkat etmek gereklidir.
3.0 Yönlendirici Kurulumu
3.1 Donanım
Yazının geri kalanında kullanılacak ağ kartlarının isimlendirilmesi ve
bağlanacakları ağlar:
eth0 - diğer ağa bağlanan ethernet kartı.
eth1 - yerel ağımıza bağlanan ethernet kartı.
eth2 - adsl hattına bağlanan ethernet kartı.
Not. Sistem yöneticisinin kafasındaki kart numaralandırması ile
sistemin numaralandırılması uymalıdır. Aksi taktirde, yanlış karta
yanlış ağ kablosu takılırsa ve bunun farkına varılmazsa, bilgisayar
başında kabuslar yaşanabilir. Sistemin numaralandırması genelde şu
şekildedir: en düşük numaralı kart, işlemciye en yakın
olandır.
3.2 IP adreslendirmesi
Hangi ağın hangi IP ye sahip olduğunu en baştan belirlemek de bir
sürü karmaşayı önleyecektir. Şimdiden belirtelim:
eth0 - 192.168.200.15
eth1 - 192.168.222.200
eth2 - 20.30.8.8
eth0 in adresi diğer ağ tarafından yönlendiricimize verilen adres,
değişken
yada sabit olabilir.
eth1 nin adresi önemli, bu adres üzerinden ayarlamalar
yapacağız.
eth2 (adsl) adresi uydurmadır, herhangi bir adres olabilir.
Dikkat edilmesi gereken nokta, IP
sınıflandırmasına uymaktır, uyulmazsa sıkıntılar doğacaktır.
3.3 /etc/network/interfaces
dosyası
Debian sisteminde bu dosya, sistemin ağ elemanlarının (ifup, ifdown,
ifconfig), hangi ağ donanımına, hangi ayarı yapacaklarını belirleyen
dosyadır. Sistemimiz için şöyle bir dosya uygun olacaktır.
(Not. # ile başlayan satırlar komut belirtmezler, açıklama
getirirler, sistem de bunu böyle algılayacaktır.)
Birkaç genel komut açıklaması:
auto "ağ arayüzü"
ile belirtilen arayüzler (ör. ethernet kartları), sistem
açılışında yüklenir.
iface
"interface" (arayüz) kelimesinden gelmektedir, bir
arayüzü tanıtan satırı belirtir.
#Bulunduğunuz bilgisayarda (yönlendirici), sistemin kendi
#kendine TCP/IP iletişimi kurabilmesini sağlar. Bu güne kadar
#herhangi bir sorun yarattığını görmedim, her eve lazımdır.
#Zaman zaman işe yarayabilir.
auto lo
iface lo inet loopback
#Diğer ağda bir DHCP sunucusu olduğunu varsaymak
#yanlış olmasa gerek.
auto eth0
iface eth0 inet dhcp
#Diğer ağda DHCP sunucusu yoksa, illaki sabit adres belirtmemiz
#gerekiyorsa, şöyle belirtebiliriz, ancak dikkat edin, ya
yukardaki
#satırlar yada aşağıdaki satırlar geçerli olmalıdır. Bir arayüz için
#iki tanım olmaz. Yukarıda dediğimiz gibi geçerli olmasını
#istediğiniz satırların başında # bulunmadığından emin olun.
#
#Buradaki değerler şöyle açıklanabilir:
#
#netmask, ağımızda kullandığımız ağ ve sunucu bölümlerini
belirtir.
#Detaylar için aşağıdaki IP sınıflandırması
bölümüne bakabilirsiniz.
#
#broadcast, ağımızda herkesin duyması için yapılan yayılan
sinyallerin
#hangi IP üzerinden yapılacağını belirtir. Genelde her ağın 255
numaralı
#IP si bu iş için saklanır ve ağdaki hiçbir bilgisayara verilmez.
#
#gateway, yönlendiricimizin IP si.
#
#network, ağımızın adresini belirtir, adresin sunucu kısımları 0
#olmalıdır. Detaylar için aşağıdaki IP sınıflandırması
bölümüne
#bakabilirsiniz.
Sistemin en temel taşlarından birisi DHCP' dir. DHCP sistemini
kullanarak, sabit yada değişken bir şekilde, yerel ağımızdaki
bilgisayarlara
IP dağıtabiliriz. DHCP sunucusunu yönlendiricimize yüklemek
için:
aptitude install dhcp
Başarılı yükleme sonunda bazı ayarlar yapmamız gereklidir.
3.4.1 /etc/default/dhcp
Bu ayar dosyasında hangi ethernet kartı üzerinde DHCP sunucusunu
çalıştıracağımızı belirtmemiz gerekiyor. Bizim durumumuzda bu
eth2:
INTERFACES="eth1"
Bu değerin doğru girilmesi gereklidir, aksi taktirde başka ağlarda
sıkıntı yaratabiliriz; çünkü her ağda bir DHCP
sunucusu vardır, biz onun yerine geçersek, o anda IP isteyen bir
bilgisayarın yanlış ayarlanmasına sebep olabiliriz.
3.4.2 /etc/dhcpd.conf
Bu ayar dosyasından yerel ağımız için ayar yapmamız gereklidir:
#/etc/dhcpd.conf ######################
#
#
#DNS sunucularımızı belirtmemiz gerekli. Burada seçilebilecek iki
#yol var, birincisi yerel bir DNS önbelleği oluşturmak, ikinci yol
ise
#diğer ağdaki, yada adsl ile bağlandığımız ağındaki DNS
#sunucularını kullanmak. Herhangi bir yönteme ait birden fazla
#DNS sunucusu belirtmek de uygun olabilir.
#
#Belgenin tamamlığı adına yerel bir DNS önbelleği oluşturmayı
#seçerek eth2 nin IP sini yazıyorum.
option domain-name-servers 192.168.222.1;
#Verilen IP lerin saniye cinsinden geçerlilik süresi
default-lease-time 60000;
#Sunucuların isteyebileceği en uzun IP geçerlilik süresi (saniye)
#range satırı ile ilgili bir not: eğer diğer ağ ile aynı alt ağı
#(şuanki alt ağımız 192.168.222.X detaylar için aşağıdaki
#IP sınıflandırması bölümüne bakabilirsiniz)
#kullanmak gibi bir niyetimiz varsa, diğer ağda bulunabilecek
#IP adreslerini kendi ağımıza dağıtmamak için, bir şekilde
#diğer ağın yöneticisi ile anlaşarak, diğer ağda bulunmayacak
#farklı bir aralık belirtmemiz gereklidir.
#
#/etc/dhcpd.conf ######################
3.4.3 DHCP sunucusunu yeniden
başlatmak
İstediğimiz ayarları yaptıktan sonra, root kullanıcısı olarak, DHCP
sunucumuzu yeniden başlatmak gereklidir:
/etc/init.d/dhcp restart
Eğer DHCP sunucusu hata vermeden başlarsa, ve ayarlarımız doğru ise
çalışan bir DHCP sunucumuz var demektir.
3.5 ipmasq
ipmasq paketi diğer ağlar ile yerel ağımız arasında IP paketlerini
aktarabilmemizi sağlayan ayarları standart haliyle yapacaktır. Bu
işlemde kullanılan temel sistem iptables dır. iptables ' ı elle de
ayarlamak mümkündür, ancak bunun için araştırma,
bilgi ve deneyim gereklidir. Öğrenmek isteyenler için, ağ yönetimi
konusuna
çok iyi bir başlangıçtır, ancak işlerin nispeten
çabuk ve yine nispeten düzgün olması için
ipmasq paketini kullanmanızı öneririm.
aptitude install ipmasq
Yükleme sırasında birkaç soru gelecek. Bunlardan ilki ppp hakkında,
"her
ppp bağlantısı yapıldığında iptables tablolarını yeniden yapılandırayım
mı?", bu sorunun cevabı, önceden tanımlanmış olan "evet" olması
doğru olacaktır. İkinci soru iptables tablolarının ne zaman ayarlanması
gerektiğini soruyor, buna da önceden tanımlı olan "ağ
arayüzleri etkinleştirildikten sonra" doğru olacaktır.
Buradaki bir nokta, ağda bir değişiklik olduğu zaman ipmasq ın yeniden
başlatılması gerektiğini unutmamaktır; çünkü ağda
birşeyler değiştiği zaman (mesela diğer ağların bize verdiği IP
adresi), ipmasq ın iptables tablolarını yeniden hazırlması gereklidir.
Bu işlem yapılana kadar, eski tablolardaki kurallar geçerli
olduğu için, tablolar yeniden hesaplanana kadar, ilgili ağ ile
bağlantı kurulamayacaktır.
ipmasq paketini iki dış bağlantı ile kullanmak biraz sorunlu olabilir.
Daha önce hiç kullanmadığım bu sistem için birkaç test yaptım,
gördüklerim dahilinde bu belgede anlatılan sistem için şunları
söyleyebilirim:
Internet üzerindeki herhangi bir adrese bağlanırken her zaman en büyük
numaralı ağ kartı kullanılıyor. Yani bu belge içinde eth2. Adsl hattı
eth2 ye bağlı olduğu için istediğimiz sistemi elde edebiliyoruz.
Diğer ağ üzerindeki IP adreslerine, diğer ağa bağlı ağ kartı üzerinden
(anlatılan sistemde eth0) üzerinden erişebiliyoruz.
Denemelerimde bu sistem çalışıyor gibi gözüktü. Ancak arada sırada
ortaya çıkan bazı hata mesajları bana bu sistemin fazla sağlıklı
olmadığını hissettirdi. Aldığım hatalardan en rahatsız edicisi şu idi:
MASQUERADE: Route sent us somewhere else.
(Maskeleme: yöneltici bizi başka bir yere yönlendirdi.)
Tavsiyem bu tip iki dış ağa bağlanan bir sistem yerine, sadece bir dış
ağ kullanılan sistemden yana olacaktır. Aksi taktirde sağlıklı çalışan
bir sistem için ya ipmasq paketinin seçeneklerini kullanarak ayarlamak
yada iptables ve route sistemlerini elle ayarlamak gerekecektir.
3.6 dnsmasq
DHCP yi ayarlarken bahsettiğimiz gibi, dnsmasq programı aynı ipmasq
gibi DNS sunucusu şeklinde çalışır. dnsmasq kullanarak, yerel
ağdaki DNS sorgularına (mesela bir Internet sayfasına girilmek
istendiğinde, sayfanın ismine denk gelen IP yi bulmak için DNS
sunucusuna sorgu gönderdiğinizde) daha hızlı cevap verebilirsiniz.
Yüklemek için:
aptitude install dnsmasq
Bugüne kadar dnsmasq paketi ile herhangi bir ayar yapmaya gerek
duymadım. Ancak ipmasq gibi, ağda değişiklikler olduğu zaman yeniden
başlatmak işe yarayabilir.
3.7 bwm
bwm, "bandwidth monitor" (bant genişliği
denetleyici) anlamına gelen bir kısaltmadır. Bu paket, konsolda
çalışır ve ağ arayüzlerinizdeki (eth0..2) hareketleri
görmenizi sağlar, neler olduğunu anlamak için gerekli
olabilir:
aptitude install bwm
4.0 Yerel Ağdaki Bilgisayarlar
Yönlendiriciye eth2 üzerinden bağlı bilgisayarların hepsi bir
DHCP istemcisiyle (herhangi bir işletim sisteminden) IP alarak
bağlanabilirler. Eğer ayarlarımız doğruysa, eth2 den bağlanan
bilgisayarların tümü, yönlendiricimiz üzerinden,
eth0 (adsl->Internet) ve eth1 (başka ağ) den bağlandığımız ağlardaki
bilgisayarlara ulaşabilmeleri lazım.
5.0 Diğer Ağlardaki Bilgisayalar
Yönlendiricimizdeki ipmasq programının uyguladığı standart ayarlar
dahilinde, diğer ağlardaki bilgisayarların yerel ağdaki bilgisayarlara
bağlanabilmesi mümkün değildir. Ancak yerel ağımızdan bir
istek üzerine gelen cevaplar yerel ağa aktarılır. Bu durum
tabiki belli bir derece güvenlik getirir. Internet'in yapısı
istekler üzerine oluşan cevaplardan oluştuğu için,
günlük işlemlerde bu durumun bir sorun yaratmaması lazımdır.
Eğer sorunlar yaşanmaya başlanırsa, her türlü sorun, ipmasq
programının ayarlarından, yada direk elle iptables ayarları yapılarak
giderilebilir.
6.0 Ekler
6.1 IP sınıflandırması
6.1.1 IP sınıflandırılması
nedir?
TCP/IP protokolünün ilk kurallarından birisi ağdaki
(Internetteki) her sunucunun kendine özel bir IP adresi olmasıdır.
Ancak şu an genel olarak kullanılan IPv4 protokolünde bildiğimiz
üzere XXX.XXX.XXX.XXX şeklinde yazılabilen numaralar, en fazla
(yaklaşık olarak) 4.2 milyar adrese izin veriyor. 4.2 milyar IP
adresinin tek elden yönetilmesinin imkansızlığı bir kenarda
dursun, 4.2 milyar sayısı dünyanın IP adresi ihtiyacını da
karşılamaya yeterli olmamaktadır. Özellikle yakın gelecekte cep
telefonları gibi taşınabilir sistemlerin de Internette bolca
dolaşacağını düşünürsek, bu sayının
küçüklüğü iyice ortaya çıkacaktır.
Yukarıda bahsedilen sıkıntıya bir çözüm IP
sınıflandırılmasıdır. Bu belgede anlatıldığı gibi yönlendirici
sistemler
kullanarak, başka ağların altında, alt ağlar oluşturulabilir,
böylece
Internet üzerinde her bilgisayarın özel bir IP adresi
verilmiş
olunabilir. Yerel ağın dışındaki sunucular için yerel ağın
tümü, içinde kaç bilgisayar olursa olsun, bir IP
den ibarettir. Yönlendirici paketleri doğru şekilde dağıttığı
sürece bu durum ne yerel ağdaki, ne de yerel ağın dışındaki
bilgisayarlar için bir sorun yaratmayacaktır. Sonuçta 4.2
milyar adresin her birisi yüzlerce bilgisayarı temsil edebildiği
için (ve tabiki bu yüz bilgisayarın herbirisi 100 er tane daha
bilgisayarı temsil edebilir...), IP adresi sayısı sıkıntısı
aşılabilmiştir.
IP sayısı sıkıntısına bir diğer çözüm de IPV6
protokolünün geliştirilmesidir. Diğer bir çok
özelliğinin yanında (güvenlik, kalite, kısacası var olan
sistemlerin geliştirilmesi), daha uzun bir harfler ve numaralar dizisi
kullanarak, kullanılabilecek IP sayısı 3.4 × 1038 çıkarılmıştır.
6.1.2 IP sınıflandırılması
nasıl çalışır?
IP ler şu şekilde bölümlere ayrılmıştır.
Tip IP Adresi
A Ağ.Sunucu.Sunucu.Sunucu
B Ağ.Ağ.Sunucu.Sunucu
C Ağ.Ağ.Ağ.Sunucu
Ağ, sunucuların bulunduğu ağın numarasını temsil eden kısmı belirtir.
Sunucu, ağdaki tek bir sunucuyu temsil eder.
Yani A sınıfı bir IP de üç haneli bir ağ numarası,
arkasından 255*255*255 olasılık arasından birisi olan sunucu numarası
yer alır. Mesela 100.123.211.2 IP si, 100 numaralı ağdaki, 123.211.1
numaralı
sunucuya işaret etmektedir.
Diğer yandan 256 sayısını ikili ("binary") sistemde ifade etmek
için 8 bit gereklidir. Buradan yola çıkarak, aşağıdaki
gibi bir gösterim sistemi ortaya çıkmıştır.
Yukarıda verdiğimiz A sınıfı IP deki bütün sunucuları
kastetmek istersek, bunu şöyle yazabiliriz: 100.123.211.2/8 .
Buradaki 8 sayısı, ilk 8 ikiliyi ("bit") (ondalık sistemde ilk 1-256
arasındaki sayıyı) yani 100 'ü kastetmektedir. Eğer B sınıfı bir
IP kullanıyor olsaydık, o zaman 200.123.211.2/16 dememiz gerekirdi zira
B sınıfı IP lerde, ağı belirtmek için 16 bit, yani 2 tane 1-256
arası sayı gereklidir. Eğer 200.123.211.2 yerine 200.12.211.2
kullansaydık, 200.12.211.2/12 kullanmamız gerekirdi,
çünkü 200 için 8, 12 için 4 ikili
gereklidir. 8+4 = 12.
Dikkat ettiyseniz, B sınıfı bir örnek vermek için 100
yerine 200 ile başlayan bir IP kullandım, bunun sebebi, IP sınıflarının
numaralarının da belirlenmiş olmasıdır:
TiP ARALIK
A 1.0.0.0 - 126.0.0.0
B 128.1.0.0 - 191.254.0.0
C 192.0.1.0 - 223.255.254.0
Bunun yanında yerel ağlar için ayrılmış adresler vardır. RFC 1918 den
öğrenebileceğimiz gibi aşağıdaki adresler yerel adresler olarak
kullanılabilir.
Başka adresler kullanmak isterseniz sizi kimse engellemeyecektir, ancak
bu adreslerin dışında bir adres aralığı kullandığımızda, yukarıda
bahsettiğimiz TCP/IP nin ilk kurallarından birisini olan "her sunucunun
kendine özel IP adresi olmalıdır" ı unutmuş oluruz. Sonuçta
da seçtiğimiz başka adres, muhtemelen dünyanın bir yerinde
kullanılan bir sunucunun adresi olur ve eğer varsa o sunucunun sunduğu
servislere (http, ftp vb..) ulaşamayız.
7.0 Belgeler
man interfaces
man dhcpd.conf
man ipmasq
man dnsmasq