Sedlo
V současné době umí quagga řídit jen jednu default routu a to je
dostatečné jen v případě, že v oblasti je jediný poskytovatel internetu (iGW).
Lze samozřejmě použít "tunelování" ale to by museli iGW toto umožnit/znát/ovládnout.
Praxe je taková že se tunelování nepoužívá. A tak se nabízí možnost
nezávislá na iGW která spočívá ve více routovacích tabulkách na routerech.
Proč použít sedlo?
Potřebujeme tedy směrovat provoz z různých ip adres na různé iGW a tak je
nutné vytvořit pravidla a postranní tabulky, které konkrétní provoz směrují
nezávisle na hlavní defaut routě v hlavní routovací tabulce.
Jde o skript, který vytvoří postanní tabulky a pravidla dynamicky podle
aktuálního stavu hlavní routovací tabulky. Ovlivní to jen vyjmenované IP a rozsahy
a vše ostatní se bude řídit podle hlavní routovací tabulky routeru.
Filosoficko-ekonomické aspekty použití
Zavede to konkurenci mezi bránami a zjednoduší to konfiguraci adminům routerů.
sedlo ruší monopol jediné internetové brány danou ospf protokolem,
kdy "vyhrála" vždy jen jedna internetová brána. K použití sedla není třeba nic
nastavovat na internetové bráně a systém sedla není na internetových branách závislý.
sedlo nemusí běžet na všech routerech v oblasti a dokonce v dané oblasti můžou
existovat skupiny routerů se svým hlavním konfigem odlišným od většinového.
Samozřejmě je lepší když routery spolupracují a mají ten samý konfig.
sedlo nasměruje defaut provoz na bránu a ta už si s ním poradí podle svých
pravidel jako kdyby pakety přitekly po klasické default routě.
Minimální podmínky pro smysluplnost instalace
Zjednodušeně řečeno tak pro dosažení alternativní inet brány
stačí aby nakonfigurované sedlo bylo instalováno alespoň na routerech
na přímé cestě od klienta k bráně. Jaké routery to mají být se dá
zjistit například příkazem tracert (winďou$) a nebo traceroute (linux)
V případě že v síti jsou smyčky (v naší oblasti je máme) tak je dobré
sedlo nainstalovat i na ostatní routery. V případě výpadku obvyklé cesty
sedlo přenastaví (pokud je spouštěno pravidelně) cestu podle dynamické
routovací tabulky a data tečou sice jinudy ale správně.
Potřebné funkce
OK - vytvořit postranní tabulky
OK - naplnit je routama
OK - načíst lokální konfiguraci
OK - načíst konfiguraci z centra
~ - striktní kontrola konfigurace
- úprava konfigurace dle aktuálního stavu (nedostupnost igw)
OK - vytvořit pravidla pro jednotlivé IP adresy a zapsat je do systému
- generování statistik na web
- update při vzniku nové verze
Možné problémy
- nutnost instalace na každý router v oblasti
- při velkém počtu IP adres asi vzroste zátěž routeru
- bezpečnost? (čert nikdy nespí)
Případná vylepšení
- přepsat sedlo jako zásuvný modul zebry/quaggy
- do rozhodování o použití igw zahrnout i funkčnost dané igw
stává se totiž že igw se propaguje ale nelze se skrz ní dostat do inetu
v současné době stačí že v routovací tabulce
- napsat skript jako spouštěný s init.d
Konfigurace
Uvnitř skriptu sedlo je možno určit adresáře pro umístění
konfiguračních souborů. Klasika je /etc/sedlo.conf pro lokální a /var/cache/sedlo
pro uložení hlavního konfigu a kompilování aktuálního konfigu.
sedlo si při každém spuštění (pokud to nezakážeme volbou -nogetcfg) stáhne
hlavní konfig a sloučí ho s lokálním konfigem.
Ve většině případů bude v lokálním konfigu /etc/sedlo.conf
jen parametr mcnf pro určení hlavního konfigu.
Hlavní konfig si umístěte na nějaký dobře dostupný router na ftp nebo web server.
Ke stažení se používá wget takže ftp a web zvládne. Případně si můžete
přepsat funkci s_getcfg podle svých potřeb.
Parametr igw umožňuje specifikovat internetovou gateway
její ip adresou a nebo rozsahem kde se nachází a jejím jménem. Pro každou
igw bude vytvořena postranní tabulka a ta bude naplněna routama směrujícíma
default provoz na ní. Jako default provoz se bere cokoliv mimo síť specifikovanou
proměnnou sl_ipnodef ve skriptu sedlo. Defaultně je to nastavené na 10.0.0.0/8
protože to je rozsah používaný v síti CZFree.Net, kvůli kterému jsem sedlo
napsal.
Parametr ip umožňuje specifikovat konkrétní IP adresu a nebo celý
rozsah IP adres pro který si přejeme směrování default provozu na konkrétní
bránu specifikovanou parametrem igw.
Jedinou IP adresu parametru igw a ip zadáváme bez masky /32 ale IP rozsahy adres
je třeba vložit i s počtem bitů masky.
Formát konfiguračních souborů:
---sedlo.conf---
# umístění centrálního konfiguračního souboru
mcnf --bind-address 10.33.6.1 http://sedlo.prosek.czf/sedlo.conf
# seznam iGW v oblasti. Na pořadí záleží. iGW se budou defaultně vybírat
# v tomto pořadí
# formát je : igw ip_adresa_routeru_iGW jméno_iGW
igw 10.33.0.11 cerneho
igw 10.32.1.1 djdodo
igw 10.33.0.14 jtop
igw 10.24.0.0/16 jarov
igw 10.55.0.0/16 connection
# seznam iGW na ROUTERU
# formát je : myigw ip_adresa_iGW jméno_iGW
# tento parametr je obsloužen JEN pokud je uvedený v LOKÁLNÍM konfigu sedlo.conf
myigw 10.33.6.7 adsl_router
myigw 10.32.6.8 kabelovka_router
# seznam ip rozsahů a určení na jaké iGW má být směrován jejich default provoz
# formát je : ip ip_rozsah jméno_ip_rozsahu preferovaná_iGW_č.1 preferovaná_iGW_č.2 ... preferovaná_iGW_č.3
ip 10.33.15.2 jenickuv_desktop connection
ip 10.33.15.128/26 jenicek_street_ips jtop djdodo
ip 10.33.1.2 kozluv_desktop connection
ip 10.33.1.128/26 kozel_street_ips djdodo
---sedlo.conf---
Bugs&Features
- pokud sedlo neflushne pravidla tak nereaguje na zmenu dostupnosti iGW
- sedlo umi menit pravidla pro jednotlive ip jen hromadnym flushnutim
- pokud zmizi routa na gw tak sedlo nic neudela a melo by spravne
smaznout tabulku pro tuto gw a spustit pravidla tak aby se pouzila pripadna
dalsi gw
- pokud v konfigu neni igw tak ji nepouzit pro ipecka
Historie
dnes poslední verze připravuje se přidání mysnat do konfigu, tak
aby sedlo dovedlo maškarádovat ip adresy jdoucí na myigw
19.5.2005 verze 0.0.3pre9 doplněna obsluha myigw
sedlo obslouží myigw která má statickou ip adresu a je připojená přímo na router
za mcnf je možné uvést tři parametry které se postoupí programu wget a lze
tedy například specifikovat adresu kterou sedlo použije pro svůj dotaz na centrální
konfig
18.5.2005 verze 0.0.3pre7
14.2.2005 verze 0.0.3pre6 doplněna obsluha equal cost multipath
2.11.2004 verze 0.0.3pre4 odladěné na více routerech včetně igw
sedlo přes okolní routery na igw dovede pakety ale přímo na igw
nenastavuje pravidla - to je ponechané na skriptech obsluhujících
nastavení igw - je to vhodné při dynamické změně ip adresy interface
který slouží jako brána do inetu.
29.8.2004 verze 0.0.2 umí naplnit postranní tabulky a vytvořit pravidla - je to funkční
24.8.2004 verze 0.0.1 umí stáhnout konfig a vytvořit postranní tabulky
19.8.2004 založena tato stránka a sedlo je ve stádiu specifikace vlastností
a není tedy k dispozici ani řádka kódu (nehledejte download).
Název "sedlo" byl zvolen protože jde o "osedlání" zebry/quaggy
tak aby se nám jelo pohodlněji.
Licence
OBECNÁ VEŘEJNÁ LICENCE GNU pro Českou republiku
kopie z 19.6.2004 licence.txt
Instalace
stáhnout skript sedlo a umístit do /usr/local/bin
cd /usr/local/bin
wget http://www.simandl.cz/stranky/linux/sedlo/soubory/sedlo
#nastavit práva ke spuštění
chmod a+x sedlo
#vytvořit lokální konfigurační soubor
#musí v něm být alespoň řádek s "mcnf" parametrem aby se vědělo kde je hlavní konfig
echo "mcnf ftp://10.33.0.2/sedlo/sedlo.conf" > /etc/sedlo.conf
vi /etc/sedlo.conf
#vytvořit odkládací adresář
mkdir /var/cache/sedlo
#spustit skript
sedlo -vv (-vv použijte aby jste viděli výpis toho co sedlo dělá)
# a nebo ho dát do cronu aby se spouštěl automaticky každých 5 minut
*/5 * * * * /usr/local/bin/sedlo
Soubory
sedlo
sedlo.cgi
sedlo.conf
sedlo.conf.local
sedlo.cron
sedlo_install
Příklad
Následující tři výpisy ukazují jak to funguje pro moje ip simlin.jablonka.prosek.czf
10.33.6.12
Jednoduše si v hlavním konfigu změním bránu a je to. K tomu abych si mohl
vybrat ze tří cest do internetu stačí aby sedlo jelo na routerech jablonecka,
jablonka, r-man, jtop a sntop. Router jablonka sousedí s bránou djdodo www.cznet.cz ,
router sntop sousedí s bránou cerneho www.supernetwork.cz a router jtop sousedí s
jarovem, kde mají default směrovaný na router puma který sousedí opět
s bránou www.supernetwork.cz
Pozorný čtenář si jistě všimnul, že v cestě konektivity na jarov je i router
maska na který jsem neuvedl v seznamu routerů jedoucích se sedlem. router maska
opravdu sedlo nejede a funkční je to pouze proto, že na tomto routeru je defaut
routa směrem k r-manovi kde už zase sedlo běží.
Pokud by tomu tak nebylo tak bych měl tímto směrem smůlu, protože by mi maska
házel pakety zpět.
Velmi pravděpodobně lidé z routeru r-man nebudou moci mít inet z djdodo protože
je právě router maska blokuje jedinou default routou.
Řešením je na routeru maska rozjet sedlo také.
Doposud jsme se starali jak dostat naše pakety k bráně.
Samozřejmě je také důležité aby daná brána moje pakety propustila.
djdodo a supernetwork dávají
"určitou" konektivitu zdarma ale pomocí peněz je možné oba subjekty přimět i k
lepšímu zacházení s našimi pakety :) To je ale o něčem jiném než o routování.
inet přes jarov
igw 10.24.0.0/16 jarov
ip 10.33.6.12 simlin jarov
mtr nix2.gin.cz
Packets Pings
Hostname %Loss Rcv Snt Last Best Avg Worst
1. jablonecka.jablonka.prosek.czf 0% 48 48 0 0 0 2
2. maska.jablonecka.prosek.czf 0% 48 48 2 1 10 134
3. r-man.sntop.prosek.czf 7% 44 47 7 4 15 61
4. ap.jtop.prosek.czf 11% 42 47 69 10 173 726
5. 10.24.1.1 5% 45 47 20 11 138 635
6. 10.24.1.130 11% 42 47 23 13 131 527
7. fe-prg-sitel-stim.supernetwork.cz 15% 40 47 21 13 80 391
8. fx-prg-sitel-core1.supernetwork.cz 11% 41 47 91 15 94 535
9. fe-sitel1-cecom.supernetwork.cz 22% 36 47 5325 897 4583 9706
10. nix2.gin.cz 27% 34 47 6289 640 4219 9296
inet přes djdodo
igw 10.32.1.0/26 djdodo
ip 10.33.6.12 simlin djdodo
Packets Pings
Hostname %Loss Rcv Snt Last Best Avg Worst
1. jablonecka.jablonka.prosek.czf 0% 7 7 0 0 0 0
2. lan.jablonka.prosek.czf 0% 6 6 31 0 24 50
3. 10.32.15.2 0% 6 6 81 3 28 81
4. 10.32.1.200 0% 6 6 35 6 30 95
5. 33.74.142.82.ip.knetint.cz 0% 6 6 51 10 31 67
6. 250.74.142.82.ip.knetint.cz 0% 6 6 126 13 43 126
7. 80.95.120.246 0% 6 6 101 23 60 102
8. nix2.gin.cz 0% 6 6 45 20 51 102
inet přes cerneho
igw 10.33.0.11 cerneho
ip 10.33.6.12 simlin cerneho
Packets Pings
Hostname %Loss Rcv Snt Last Best Avg Worst
1. jablonecka.jablonka.prosek.czf 0% 12 12 0 0 0 0
2. apj.sntop.prosek.czf 0% 12 12 6 2 3 6
3. lan.cerneho.prosek.czf 0% 12 12 3 2 4 8
4. fe-prg-oring2-cernehp.supernetwork.cz 9% 11 12 8 8 10 12
5. fe-prg-blah-olsa.supernetwork.cz 0% 11 11 9 8 11 16
6. fx-prg-sitel-core1.supernetwork.cz 0% 11 11 9 8 12 17
7. fe-sitel1-cecom.supernetwork.cz 28% 8 11 3594 630 2212 4019
8. nix2.gin.cz 0% 11 11 100 100 993 2635