Linux Policy Routing Structures
Policy routing nedir ?
Kısaca Policy Routing router, üzerinden geçen paketlerin belirli kriterlere göre sınıflandırılarak nereden gideceğini ve önceliklerinin belirlenmesi işlemidir .
Linux policy routing’in üç elementi :
- Adress : Servisin olduğu lokasyonu tanımlar
- Route : Adresin lokasyonunu tanımlar
- Rule : Route un olduğu lokasyonu tanımlar.
Şİmdi sanırım bir örnek versek iyi olacak :
[alper@doshiba ~]$ ip route show
10.70.20.0/24 dev wlan0 proto kernel scope link src 10.70.20.2
default via 10.70.20.1 dev wlan0
[alper@doshiba ~]$
www.google.com.tr adresinin bir ip’sine ulaşmak için örneğin :
[alper@doshiba ~]$ ip route get 74.125.79.103
74.125.79.103 via 10.70.20.1 dev wlan0 src 10.70.20.2
cache mtu 1500 advmss 1460 hoplimit 64
[alper@doshiba ~]$
şeklinde routing imizi aldık şimdi burada ;
src 10.70.20.2 ve 74.125.79.103 adreslerimiz oluyor,
via 10.70.20.1 adresin lokasyonu yani 10.70.20.1 in arkasında Route
sözkonusu route u sağlayan rule ise default via 10.70.20.1 dev wlan0
Türkçe meali :
Adress : source ve destination adresleri
Route : gittiği yol
Rule : yolu belirlemesine sebep veren kural
(Multiple Routing Tables : ( Çoklu Routing tabloları )
Kullanmış olduğumuz hemen hemen tüm router ve işletim sistemlerinde tek bir routing tablosu olur, Söz konusu routing tablosundan bir işlem geçtiğinde işleme en iyi uyan kural bulunur ve uygulanır.
Farklı bir senaryo düşünelim 3 tane internet bağlantımız var, istemcilerimizim ihtiyaçlarına göre bunlardan gerekli olanı kullanmasını istiyoruz. Normal şartlar altında Routing tablomuz içerisinde bunları ayrı ayı belirtmek zorundaydık. Linux Multiple Routing tables ( Çoklu/Katmanlı routing tabloları ) sayesinde, bunları ayrı routing tabloları içerisinde tanımlayabiliyoruz. Routing kurallarımıza anlaşılabilirlik ve yönetilebilirlik kazandırıyor.
RPDB - The Linux Policy Routing Implementation ( Linux Policy Routing Uygulaması )
RPDB nedir ? : Routing policy database route ların, routing tablolarının , ve rule ların oluşturduğu set dir. RPDB sayesinde Linux Routing Policy ve multiple tables ( çoklu routing tabloları ) kullanılabilir hale gelmiştir.
RPDB linux 2.1 ve üzeri kernellerde tamamen yeniden yazılarak oluşturulmuştur. 255 routing tablosu ve 2^32 rule destekler, Bu da ipv4 protokollünde kullanabileceğimiz her ip için bir rule yapar. ( 4 milyar civarı )
İnternette kullanılan klasik routing algoritmaları , routing kararlarını destination ( hedef ) adres e göre veya teoride TOS ( type of service ) a göre yaparlar. bazı durumlarda routing düzenlemerini farklı verilere göre örneğin : paket alanına , kaynak adresine, ip protokolüne , transport protokolü portuna hatta paket yüklerine göre yapılması gerekebilir. Bu işlemlere Policy Routing denir.
Geleneksel hedefe dayalı routing tabloları, Bir çok anahtar ve doğaya sahip olup doğal bir sıralamaya (network yöneticisi tarafından zorlanmadıkça) sahip değillerdir. Gelen pakete, kurallar içinden en çok uyan ( en uzun ) kuralın belirttiği routing i alarak RPDB’de değiştirir.
Linux RPDB’sinde kurallar numerik öncelik ( priority ) değeri ile linear olarak llistelenmiştirler.
Linux RPDB aşağıdaki şartlara göre kural yazmamıza izin verir.
- Paketin Kaynak adresi ( Source Address)
- Paketin Hedef adresi ( Destination Address )
- TOS ( Type Of Service )
- Paketin geldiği interface ( eth0 gibi meta datadır )
- FWMARK ( Netfilter entegrasyonu için )
Sanırım burada FWMARK nedir? kısaca değinsek iyi olacak, FWMARK : networkculerin package tag diye bildikleri , iki nokta yada iki proğram arasında paket alışverişi olduğunda karşı tarafın anlayamayacağı veya karşı tarafa iletilemiyecek bilgileri belirtmek için kullanılan etiketlerdir. örneğin. desktop linux umuzda çalışan alper UID i ile çalışan bir proğramı router da anlaşılması imkansızdır. alper uid’i ile çalışan proğramın paketini etiketleyerek router’a göndermiş olsaydık, router gelen paketteki alper etiketini okuyarak sınıflandıracak, ve paket için ekstra kurallar oluşturmamıza olanak sağlayacaktı. FWMARK birbirinden farklı lokasyonlarda çalışan iptables/netfilter’ın birbiriyle veya aynı host üzerinde çalışan iproute2 gibi farklı proğramlarla haberleşmesini sağlar.
RPDB nin çalışma şekli firewall lardaki ilk giren kural ikinci kuralı ezer mantığına benzer. bir paket geldiğinde routing kurallarını öncelik en düşükten başlayıp artarak tarar. herhangi bir kural ile paket eşleştiğinde, kuralın göstermiş olduğu routing uygulanarak RPDB taramayı keser. uygulanan kuralın başarılı veya başarısız olması önemsizdir. multiple routing tables okumayı ve yönetmeyi kolaylaştırmakla beraber bu sıralamayı etkilemez.
Linux boot ederken kernel 3 adet RPDB kuralı yapılandırır. bunlar :
bash-3.2# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
bash-3.2#
1. 255 table local
bash-3.2# ip route show table local
broadcast 10.70.20.255 dev wlan0 proto kernel scope link src 10.70.20.2
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 10.70.20.0 dev wlan0 proto kernel scope link src 10.70.20.2
local 10.70.20.2 dev wlan0 proto kernel scope host src 10.70.20.2
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
bash-3.2#
Yukarda görüldüğü üzere table local içeriği local host ve broadcast adresleri içerir priority 0 dir silinemez ve değiştirilemez.
2. 254 table main
bash-3.2# ip -s route show table main
10.70.20.0/24 dev wlan0 proto kernel scope link src 10.70.20.2
default via 10.70.20.1 dev wlan0
bash-3.2#
Burada da görüldüğü üzere 254 table main policy olmayan ağ geçidi gibi klasik routing bilgileri içerir, bu kurallar silinebilir ve değiştirilebilirler. Priority 32766 dir.
3. 253 table
bash-3.2# ip -s route show table default
bash-3.2#
Görüldüğü üzere bu tablo boştur priority si 32767 olan bu table son işlem içn ayrılmıştır. daha önce belirlenen hiç bir kural a uymayan paket burda işlem görür. bu tabloya bir paketin gelmesi için default gateway bilgisinin 254 table main içerisinde olmaması gerekir.
RPDB kuralları aşağıdaki tipleri destekler :
unicast: host dan host a routing diğer bir hosta yani ip adresine direk olarak routing bilgisini içerir
blackhole : paketi sessizce düşürür, bir nevi paketi /dev/null a göndermek gibidir.
unreachable : bu kurala denk gelen pakete network ulaşılamaz mesajı dönülür. ( network unreachable )
prohibit : bu kurala denk gelen pakete Cominication is Administratively Prohibited mesajı dönülür ( Haberleşme Yönetimce engellendi )
nat : kaynak başka bir değere değiştirilir ( Network Adress Transilation )
Linux RPDB tamamen geriye dönük uyumludur. sisteminizde hala ifconfig ve route gibi utilityleri kullanabilirsiniz. bir pakete RPDB de birden çok rule denk gelebilir ( birden çok kuralla eşleşebilir ) . Klasik utilty’lerin tersine iproute2 bu durumu imkansız hale getirmektedir. yinede klasik utilty kullanıp bu şekilde bir durum meydana geldiğinde RPDB en iyisini seşmek için aşağıdaki sıralamayı kullanır.
- En uzun uyan paket prefix i seçilir. tüm kısa olanlar droplanır.
- Eğer en uzun uyan birden çok rule kaldıysa, farkı olan TOS ( type of service ) içeren rule lar droplanır.
- Hiçbir TOS uyumu bulunmazsa ve TOS=0 mevcut ise, gerikalan tüm route lar droplanır, aksi takdirde route fail olur.
- İlk 3 basamak uygulandığında hala birden fazla rule kaldı ise, en iyi refranslı route değeri seçilir.
- Hala birden fazla route kaldıysa, ilk route kuralı uygulanır.
Geleneksel linux routing tablosu malesef 5 inci duruma izin verir, default gateway ( ağ geçidi ) tanımlamasının olduğu durumda bu durum söz konusu değildir.
Linux un desteklediği routing kuralları yukarda belirttiğimiz policy routindekiler hariç klasik routing methodlarıyla beraber aşağıdakileri de kapsar :
local : destination address ( hedef adres) router’ın direk olarak üstündedir. paketler loopback olur ve local olarak alınırlar.
broadcast : destination address broadcast adresidir. link in bağlı olduğu boradcast adreslerine yollanır.
throw : policy route ile kullanılan özel bir kuraldır. route bilgisi isteyen host a net unreachable icmp code ( 3 0 ) dönülür.
anycast : henüz linux RPDB sine eklenmemiştir. kullanımı local e benzer, ama söz konusu host kaynak adresi olarak kullanılamaz.
multicast : multicast router yapılandırmasında kullanılır. normal routing tablolarında yer almaz.
Sanırım Bukadar söz etmek yeterli. Geri kalan ayrıntılar diğer yazılarımda vereceğim örneklerle daha iyi anlaşılacaktır.
Comments
Comment from alper
Time 07/11/2009 at 9:55 am
bire bir map kullansan daha iyi olur, hatta routing le yap ipleri linux a aldırma iptables yazısı bittikten sonra bunları yazmayı düşünüyorum ama işlerim dolayısıyla uzun zamandır yazamıyorum sanırım bu ay içerisinde bitirir örnek yaparım benzeri bir yapı benim evimde de var, yinede soruların için irc.linux.org #bsd-tr kanalında beni bulabilirsin
Comment from Ayberk
Time 07/10/2009 at 5:34 pm
merhaba;
Ben uydunetten 16 adet ip aldım.Evde 2 adet sunucu tutmam gerekiyor.İlk öncelikle oluşturduğum yapıyı anlatayım.Öncelikle Debian 5.0 kullanıyorum.Sunucuda 2 adet ethernet kartı mevcut.Biri dış bacak biri iç bacak şeklinde ayarladım.Dış bacağa direk kablo modemimi iç bacağa switchimi taktım daha sonra dhcpd yi kurdum ve ip aralığını aldığım 16 adet ipnin 15 tanesini atadım.Daha sonra iptablesten maskeleme yaparak iç bacakla dış bacağı (yani eth0 la eth1) haberleşmesini sağladım ip_forwardı düzenledim.Normal şartlarda internete çıkabiliyorum ama dışarıdan bu iplere erişemiyorum.iç bacaktaki iplere dışarıdan nasıl erişim sağlayabilirim.Anlatabilirseniz sevinirim.
Şimdiden teşekkür ederim…