From: skoylu@gizemcafe.net
Date: Wed 14 Jan 2004 - 08:02:56 EST
Selamlar..
Bu konuda bir seyler yazmak zamani geldi gorundugu kadariyla. Ama benim
HOWTO yazacak vaktim yok maalesef, kabaca cerceveyi toparlayabilirim
belki.
Simdi olay sudur. Siz iki default gw verirseniz, genel olarak dengeli bir
sekilde her ikisi bir tur round-robin mekanizmasi ile kapasiteleri
oraninda kullanilirlar. Bu su demektir. Iki internet baglantisini da aktif
hale getirmek.
Ama biz genelde bu tur bir durumda daha fazlasini isteriz, tipki sizler
gibi. Mesela, bantgenisligi kullanimi. Atiyorum, SSH gibi interactive
trafige oncelik vermek vs. Bir grup kullanicinin bant genisligini
garantilemek veya limitlemek vs. vs. Diger cok rastlanan istekler ise, bu
sekilde cesitli kurallara gore istenen baglanti uzerinden cikilabilmesini
saglamak olacaktir genelde.
Biz bu ikinciye policy routing deriz. Routing isinde Linux kerneli
birtakim routing tablolari kullanir. Paketi gondermeden once bu tablolara
bakar. Siz, paketlerin cesitli ozelliklerini goz onune alarak bu paket
icin hangi tabloya bakilacagini belirtebilirsiniz.
Varsayilan olarak 3 tane tablonuz var:
0 local -> Yerel yonlendirme ihtiyaclariniz.
252 main -> Genel yonlendirme ihtiyaclariniz
253 default -> varsayilan diger yonlendirme tablonuz.
Bu listeye 255 taneye kadar yeni tablo ekleyebilirsiniz. Su sekilde de bu
tablolarin icinde ne var ne yok gorebilirsiniz:
# ip route ls table local
[ayse@ayse ayse]$ /sbin/ip route ls table local
local 10.1.5.76 dev eth0 proto kernel scope host src 10.1.5.76
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 10.1.0.0 dev eth0 proto kernel scope link src 10.1.5.76
broadcast 10.1.255.255 dev eth0 proto kernel scope link src 10.1.5.76
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
[ayse@ayse ayse]$
Bunlar sizin local networkunuz ve hostunuz icin gerekli olan routing
bilgileri.Dilerseniz digerlerine de bakabilirsiniz.. route komutu size
sadece main tablosu hakkinda bilgi verecektir.
Policy, yani yonlendirme kurallari ise ayri bir dizide tutulur. Bu dizi
0..32767 arasi bir listedir. Bu listenin en basindan (0) sirayla
yonlendirilecek paketin hangi kurala uyduguna bakilip o kuralin yaninda
yazilan tablodaki girdiler uzerinden routing islemi yapilir:
[ayse@ayse ayse]$ /sbin/ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup 253
[ayse@ayse ayse]$
Simdi bu listeye bakarsak, "all" icin once local tablosuna bakilacak. Eger
bu tabloda uygun bir girdi bulunursa routing edilecek. Bulunamazsa main
tablosuna (siradaki tablo) bakilacak vs. boyle devam edip gidecek..
Iste sizin aradiginiz sey burasidir. Oncelikle ozel muamele istediginiz
tabloyu olusturmalisiniz. Simdi diyelim ki bizim ozel islemimiz paketlerin
a.b.c.d interface'i (karsi router a.b.c.e) uzerinden yollanmasi. Su banka
meselesi icin mesela..
# ip route add default via a.b.c.e table 10
Simdi biz 10 numarali tabloya bir varsayilan aggecidi ekledik. Eger bir
kural yazarda paketleri bu 10 numarali tabloya yollarsak o zaman bu
paketler bu gw uzerinden internete gideceklerdir.
# ip rule add to banka.adresi.com table 10
Iste bu lazim demekki. "ip rule add" yeni kural ekle, "to adres" kural,
"table 10" da bu tabloya ekle demek.
Diger yontemler:
IP="ip rule add "
$IP from ab.cd.ef.gh table n
ab.cd.ef.gh adresinden gelenleri bu tablodan bak.
$IP fwmark x table n
iptables ile x olarak isaretlenmis olanlari bu (n) tablodan bak..
Bunlarin disinda, dev, tos gibi bir kac tane daha specifier olacakti ama
pek kullanisli degillerdir.
Eger tablo numarasi yerine isim kullanmak isterseniz,
/etc/iproute2/rt_tables icersine bu tablonun adini ekleyin:
# echo "10 dsl-hat" >> /etc/iproute2/rt_tables
# echo "20 musteriler" >> /etc/iproute2/rt_tables
gibi..
En kullanisli olani iptables ile bu isi yapmaktir:
iptables -t mangle -A PREROUTING -s 1.2.3.4 -j MARK --set-mark 0x5
(1.2.3.4'ten gelenleri 5 olarak isaretle)
iptables -t mangle -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j MARK
--set-mark 0x10
(1.2.3.4'un 80/tcp (http) portuna gidenleri 16 olarak isaretle)
ip rule add fwmark 0x5 table dsl-hat
ip rule add fwmark 0x10 table musteriler
Dikkat edeceginiz hususlardan biri su 0x meselesidir. Bu sayinin 16'li
(hexadecimal) oldugunu gosterir. Eger belirtmezseniz, iptables bunlari 10
lu sistemde isaretler, ip rule ise 16'li olarak. Bu durumda ornegin
iptables ... -j MARK --set-mark 20
ip rule add fwmark 14 table ....
gibi kafa karistirici durum olusacaktir.
Diger taraftan, bu sekilde zorlanmis bir tablo sonrasinda MASQUERADING
calismayabilir. Bunun yerine SNAT kullanmalisiniz:
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to 1.2.3.4
Zor olan, interface'in her up oldugunda bu satirin eklenmesi ve her down
oldugunda da bu satirin silinmesi geregidir. Bu daha cok ADSL uzerinde
sorun olur. /etc/ppp/ip-up.local ve ip-down.local scritpleri size faydali
olacaktir.
Sizin canli orneginize bakalim. Siz bankaya gidecek olanlari mutlaka SDSL
uzerinden yollamak istiyorsunuz. SDSL icin gw gw.sdsl adresi, ADSL icin gw
ise gw.adsl olsun..
# echo "10 sdsl" >> /etc/iproute2/rt_tables
# echo "20 adsl" >> /etc/iproute2/rt_tables
# ip route add default via gw.sdsl table 10
# ip route add default via gw.adsl table 20
# ip rule add fwmark 0x10 table sdsl
# ip rule add fwmark 0x20 table adsl
# iptables -t mangle -A PREROUTING -d banka.com -j MARK --set-mark 0x10
Size bu kadari yeterli olacaktir. banka.com'a giden paketler 0x10 olarak
isaretlecek, kural listesinden bunun 10 nolu tablodan bakilacagi
bulunacak, 10 nolu tablodaki gw tanimida onu sdsl uzerinden yollayacaktir.
Dilerseniz, main tablosuna sdsl'i de gw olarak ekleyebilirsiniz. Boylece
her sey her iki hatta da dagitilirken, ayrica sadece banka.com'a gidenler
her zaman sdsl uzerinden gideceklerdir.
Sanirim bu aciklamalar mevzuyu bulanikliktan cikarmistir biraz olsun.
Detay mevzulari sorarsaniz, bu bir tur mail-seminer gibi uzayabilir
(Sevgili Murat KOC'un kulaklari cinlasin, onun icadidir bu mevzu)..
Netekim meshurdur bizde 4 saatlik seminerler :)) Kisacasi cevaplamaktan
kacmayiz saniyorum..
Saygi ve sevgiler..
----- Original Message -----
From: "R. Tolga KORKUNCKAYA" <tolga@mavibilgisayar.com>
To: <linux-network@liste.linux.org.tr>
Sent: Friday, January 09, 2004 8:11 PM
Subject: [linux-network] Re: 2 internet erisimi hakkżnda!
>
> aklima ilk gelen default gateway ne olursa olsun
> bankalar icin routing'e host
> tanimlamasi yapmak olabilir
>
> route add -host 128.193.0.3 gw 192.168.1.0 gibi.
>
> Ancak daha guzel bir cozul iki isp'deki hatti tum networkden
> gelecek istekleri load balancing ile iki gw'ye dagitmak olur.
> Bunun icin iptables'da state-established-related kurallari eklemek
> gerekir, ayrica marking yapilmali. Yine bankalar icin ise yukari
> daki route -host tanimlari isinizi gorecektir.
>
> ihtiyac duyarsaniz kendi yazsigim multiroute scriptini gonderebilirim
> ayni anda adsl ve sdsl iki hat kullaniliyor. ve uzaktaki makinalara
> ulasabilmemiz icin karsi tarafin kurallarindan dolayi, sdsl uzerinden
> cikmamiz gerekiyor, zira adsl hala statik ip vermediler...
>
> selamlar.
>
> --
> r.tolga
>
> On Fri, 9 Jan 2004, AHMET PEHLIVAN wrote:
>
>