Hlavní navigace

Nejen o pruhovaném zvířectvu II

Johanka Spoustová

Od nahého počítače po brutální dynamický router :). Jak jsem slíbila minule, dnes si povíme, jak rozchodit v provinční síti zebru, na co si dát pozor apod. A když už jsme u toho, tak si teda povíme, jak rozchodit i téměř všechno ostatní :)

Mějme přiměřený nahý počítač. Bez újmy na obecnosti (BÚNO, též WLG) řekněme, že v něm máme dvě wifikarty wlan0 a wlan1 (obě coby klienty někam) a jednu ethernetku (eth0) domů. Tuto vzorovou konfiguraci jsem samozřejmě zvolila proto, že se shoduje s tou, co mám doma ;). Nedávno jsem router vyměňovala, takže mám vše dosud v živé paměti. Prvních pár odstavců můžete přeskočit, máte-li již nějak funkční router a akorát nemáte zebru.

[pro bezroutrovce]

Na nahý počítač nainstalujeme distribuci dle vlastního výběru. Já preferují Red Hat (momentálně verze 9, je nejnovější a rozumná), protože ho máme v práci :). Samozřejmě už při čisté instalaci se tam snažíme preventivně narvat všechno, co budeme potřebovat, takže namátkou zdroják kernelu, zebru a případné další démonky. Po nainstalování v případě RH zatepla zaregistrujeme na up2date (Johanka doporučujewww­.linux.cz/curren­t, ten pocit sucha a ochrany se nedá srovnávat, ale hlavně je to rychlejší a bez průzkumu veřejného mínění :)), v horším případě stáhneme a zupdatujeme alespoň kernel + kernel sources, protože jinak budeme muset po jeho výměně zase překompilovávat hostap, a komu by se chtělo :). Je fajn se podívat, jestli má kernel zapnutou podporu Wireless extensions (RH distribuční jádro je OK).

Stáhneme si nejnovější release hostap a Wireless Tools (obojí nutné), dále klasiku Wavemon a fenomenální Símův Wifimon (ty jsou už jen na ozdobu :)). Nic zatím nelámeme přes koleno (rozuměj přes CVS, zaručené CZFree patche apod.), nejdřív uvidíme, jak nám to chodí takhle. Já mám hostap release 0.0.3 a wireless_tools.26 a chodí to dobře. Zebru máme buď v distribuci (ta z RH9 mi nezlobí), nebo si ji, jsme-li fetišisti, taky stáhneme odněkud. Hostap netradične zkompilujeme a nainstalujeme pomoci make pci a make install_pci, wireless tools a wavemon už to mají normální, akorát wireless tools možná budou decentně konfliktit s tím, co máte v distribuci; wifimon je obyč skriptík (nééé Símo, nebij mě, pomóóc), který nakopírujete kamkoli.

Do /root/bin (nebo kamkoliv jinam) nasázíme skripty na nahození mikrovlnek a spustíme je pro jednoduchost přímo z /etc/rc.local (nebo odjinud). Moje rc.local spouští následující:

/root/bin/rpfilteroff
/root/bin/wifi_start
/root/bin/wifi_jablonecka
/root/bin/wifi_orgj

Skripty jsou si můžete prohlédnout: wifi_start nahazuje kernel modul, wifi_jablonecká nahazuje klientské spojení na wlan0 a wifi_orgj analogicky pro wlan1. 10.33.2­.138 nahraďte svým IP, které dostáváte od AP, essid nahraďte essidem AP, netmasku vám poví provozovatel AP a broadcast si můžete spočítat pomocí příkazu ipcalc (v tomto případě ipcalc -b 10.33.2.138 255­.255.255.192). Pro případ hryzu karty se hodí i wifi_stop, po kteréhož spuštění zase spustíte všechna startovadla a ono to většinou pomůže.

No, takže pokud máte všude správné parametry, připojené antény, míří na správná místa, všechno jste zkompilovali apod., tak by vám teď měl chodit router a wifi spojení. Akorát vám to nebude routovat ;), budou zatím chodit pouze přímá spojení na IP fyzických interfaců protějších AP.

[/pro bezroutrovce]

[pro routrovce]

Jistě jste si všimli, že jsem výše nerozebrala položku rpfilteroff. Skript vypadá nasledujícně:

#!/bin/bash
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "0" > i; done
echo "1" > /proc/sys/net/ipv4/conf/lo/rp_filter

Je potřeba při dynamickém routování a zařídí, že jádru nebude vadit, když odpověď na paket přijde jinou cestou, než byl onen paket odeslán. Takže na tohle nezapomeňte, jinak vám to bude zlobit.

A teď hurá na tu zebru. Je zřejmé, že nemá cenu se zaobírat zebrou a OSPFd, pokud obojí neběží na nějakém počítači v sousedství (předpokládejme, že běží). Na nainstalování není třeba žádných zvláštních dovedností, zvlášť pokud ji máte v distribuci, každopádně i ze zdrojákůse to dělá úplně normálně, ten pravý požitek spočívá v konfiguraci, resp. v hledání chyb :). Aby se nám zebra i ospfd spouštěly pokaždé, napíšeme po nainstalování

chkconfig --level 35 zebra on
chkconfig --level 35 ospfd on

Konfiguráky se v defaultním případě nacházejí v /etc/zebra/* (a nebo taky v /usr/local/etc/), jsou to zebra.conf a ospfd.conf a nejsou čitelné pro normální lidí (kvůli heslům). Při jejich změně je třeba obě služby restartovat, přičemž jako první je třeba restartovat zebru a až poté ospfd.

Vzorové (moje :)) konfiguráky, rozebereme si je dále: zebra.conf * ospfd.conf

Pár slov k logování. Zebra i OSPF jsou děsná prasata a chrlí na disk mega a mega logů. V případě malého disku se tento brzo zaplní, v případě velkého, jehož správce se vykašle na rotování, protože ho místo nedrásá, zase zebra po vychrlení dvou gig pro jistotu spadne. Takže vřele doporučuji buď rotovat velmi často, nebo (lépe) logování zcela vypnout, což zařídíte tak, že v konfigurácích zebra.conf a ospfd.conf na začátku zakomentujete (vykřičníkem) dva řádky začínající slůvkem log, viz vzorové konfiguráky.

Dalšími věcmi, které měníme v obou konfigurácích, jsou na začátku hostname (napište si tam, co chcete, je to spíš na ozdobu) a dále položky password a enable password, následované nezakryptěnými hesly, kterážto vám umožní nahlížení do routovacích tabulek či přímo ovládání služeb zvenku (pomocí telnet muj.uzasny.router 2601 (zebra), resp. 2604 (ospfd)). Password hlídá r/o přístup a daemon se vás na něj zeptá při natelnetění, pokud poté zadáte příkaz „en“, budete vyzváni k zadání hesla z řádky „enable password“ a získáte tím r/w přístup. Zakomentujete-li řádku password, nebude možné danou službu zvenku ovládat vůbec (natelnetíte se, ale hned vás to vyfsckuje), zakomentujete-li enable password (a password necháte odkomentovaný), dostanete se rovnou do r/w. Necháte-li odkomentovane obě řádky, můžete tam dát buď stejná hesla (typisch), nebo ke každé úrovni přístupu jiné. Každopádně pokud se vám nelíbí, že vám takto může kdekdo lézt do zebry/ospfd zvenku, vězte, že řádky „access-list term“ na dně obou konfiguráků v našem případě povolují loupání perníčku pouze z localhostu.

Dále se už budeme vrtat pouze v ospfd.conf.

[kecy]

Ideologická vsuvka, povíme si něco o interfacech, zejména těch tupých (dummy), síťoví drsoňové mohou přeskočit. Každé malé matfyzáče ví, že počítač má loopback interface (lo) 127.0.0.1, což je prostě on, localhost, no a případně je připojený do sítě, čímžto má ještě (typicky na eth0) nějakou další IP adresu, buď veřejnou, internetovou, nebo neveřejnou, z privátní sítě. To je tedy onen omezený pohled malého matfyzáčete, případně BFUčka „tam venku“. Ale my, ostřílení hoši a pochlapené ženy z provinčních sítí jsme si již zvykli na rozpolcenou (až roz-n-těnou) osobnost našich počítačů :).

Každý interface, který někam vede (síťovka, WiFina…) má své vlastní právě jedno IPčko. U sítě, kde není bordel, je například takováto IP adresová hierarchie:
10.0.0.0/8 (tzn. 10.cokoliv.co­koliv.cokoliv) celá síť (CZFree)
10.33.0.0/16 (10.33.cokoliv­.cokoliv) provinční kus sítě (nás Prosek)
10.33.38.0/24 úsek IP, která patří jednomu APčku (tj. patří do něj jednak IP přímo vysílacího interfacu AP, jednak IP klientů, kteří se připojují přímo na toto AP). Možná vám už na tomto místě pomůže obrázek provinční sítě níže (velké kolečko celý router, malé kolečko interface).

Tzn. když se připojuju jako klient, nafasuju pro svůj klientský wlan interface nějaké IP (buď pevné, nebo přes DHCP) z rozsahu AP, na které jsem připojena. Pokud mám více karet – klientů na různá místa, má každá jiné IP z jiného rozsahu. Mám-li jednu kartu a připojuji se střídavě na různá APčka, dostávám střídavě různá IP ze dvou různých rozsahů. Mám-li na jedné WiFi kartě své vlastní AP, mám tam IP zase z jiného rozsahu (svého). Každopádně všechna tato IP jsou IP mého počítače, vedou na něj (pokud dané spojení zrovna běží). A samozřejmě se mohou měnit, pokud některý z mých připojovatelů změní adresovou politiku

A malý Pepíček už možná tuší, co je tady špatně. Když chci vědět, jestli nějaký konkrétní počítač žije, nebo ne, tak se to taky nemusím dozvědět, protože netuším, co mám pingnout, kudy je připojen a jaké má tedy IP, o nakonfigurování routování a zanesení do DNS nemluvě.

A právě k tomuhle se hodí dummy interface. Tento interface je tupý, čili nedělá nic, akorát na svých bedrech nese IP adresu. Takovou, která je nezávislá na fyzickém interfacu, tedy i na „poskytovateli“ (AP) apod., prostě akorát patří konkrétnímu počítači, typický routeru. OSPF ji vypropaguje ven a když já budu chtít vědět, jestli támhle Kozel na druhém konci Proseka žije (nebo se na něj budu chtít přímo nějakým protokolem připojit), vím, že má pořád stejné dummy IP, ať už se pojí přes kohokoli a kamkoli. U nás jsme zvolili inteligentní adresovací politiku :), prostě má-li router svůj adresní rozsah 10.33.X.0/24, dostane k tomu dummy IP 10.33.0.X (pro ty pomalejší: můj domácí router dostal rozsah 10.33.38.cokoliv a má tedy dummy IP 10.33.0.38). Zapamatovat si 10 podobných čísel pro 10 routerů pro případ testování sítě je samozřejmě jednodušší, než si pamatovat celou stále se měnící topologii sítě a tisíc interfaců.

Můj výklad byl velmi zjednodušený a jsou samozřejmě důležitější věci než nedokonalost paměti (ale pokořila jsem Forstovo lemma! Prý si člověk nezapamatuje více než 20 IP adres, já jsem jich napočítala 30 a to určitě nebyly všechny :)). Strategické je zejména to, že v případě dummy interfacu je počítač už dokonale abstraktní a OSPF skutečně zvolí nejlepší (případně jedinou funkční) cestu k němu, kdežto v případě použití IP adresy fyzického interfacu, na který máme přímé spojení, posílá traffic vždy přímo na něj, byť je třeba dole a jiná obchvatná linka běží.

[kecy]

Obšírný úvod byl nutný pro pochopení ospfd.conf :). Nejprve zařídíme nahození dummy interfacu pomocí skriptu, který si vytvoříme. Bude to (RH) /etc/sysconfig/net­work-scripts/ifcfg-dummy0 a obsah bude následující:

DEVICE=dummy0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.33.0.38
NETMASK=255.255.255.255
BROADCAST=10.33.0.38

10.33.0.38 nahraďte IPckem, které jste dostali nebo si sami přidělili :) pro svůj dummy interface.

A teď hurá na ospfd.conf. Podotýkám, že moje interní domácí síť je za maškarádou a žádné AP tu neprovozuju, proto nemusím kromě konfigurace routeru žádná další IP ani vnitřní síť propagovat ven, stačí mi jen se zmínit o tom, že mám nějaký eth0 interface a že je „blízko“ (cost 10).

Začátek konfiguráku už jsme probrali :). Následuje rozbor jednotlivých interfaců. Název interfacu je jasný, description je asi taky na ozdobu, cost určuje váhu hrany v orientovaném grafu, tedy linky. Jak už jsem uvedla minule, čím nižší číslo, tím preferovanější linka. Na mém případě tedy vidíte, že cost do vnitřní sítě je maličký (10), tzn. pokud by do vnitřní sítě vedla nějaká oklika, nemá šanci. Dále linka na wlan1 je poněkud preferována před wlan0 (protože chci – je stabilnější a s lepším signálem, což ospfd samo o sobě nepozná, takže mu to musím vysvětlit takhle).

Celkové je to samozřejmě o mnoho složitější, nejlepší je držet se hodnot doporučených v tabulce na pilot.org.ua/ze­bra/ospf.html, které se odvozují od tloušťky linky, ale mnohde (třeba u nás :)) toto kritérium nestačí – některé linky a routery mají problémy, tak jim chceme ulehčit, v každém případě je nutné stanovit OSPF politiku pro celou oblast najednou, aby tam někdo nenasázel nepořádek (například když já se budu snažit vysvětlit svému OSPFd, že to fakt má posílat na wlan1 a ne na wlan0, udělám to tak, že wlan0 dám velikánský číslo – tím ovšem zvýším celkový součet linky orgj-johanka-jablonecká nad kritickou mez a budou-li si pak chtít orgj a jablonecká mezi sebou povídat, docela dobře se může stát, že OSPF jim zvolí cestu oklikou třeba přes Jarov nebo Kobylisy (Motol…), protože její celkový součet je nižší. A může za to jen jedna blbá johanka, která si hrála s OSPF. Takže zápalky a ospfd.conf malým dětem do rukou nepatří! :)

Význam položky „priority“ je (nejen) mně nejasný. Kdo chce lízátko? :)

Neméně důležitou (a na chyby náchylnou!) částí konfiguráku je následující sekce „router ospf“. Do chlívku „ospf router-id“ patří IP vašeho dummy interfacu. Řádky network 10.33.2.128/26 area 0a network 10.33.7.0/26 area 0 označují podsíťky provinční sítě, do kterých jste přímo fyzicky připojeni, v tomto případě pomocí wlan0 a wlan1. Opovažte se tam cpát ještě něco dalšího! Zakomentovaná řádka ! network 10.33.38.0/24 area 0 je for future use, protože to je IP rozsah, který patří mému routeru a ještě jsem ho nevyužila vůbec na nic :) (domácí síť je za maškarádou s vlastním privátním rozsahem 192.168.38.0/24, zvídavý čtenář si jistě všiml, že se v OSPFd nikterak nezveřejňuje, proč by to taky dělala; ještě zvídavější čtenář si všiml už dávno, že číslo 38 je opravdu moje úchylka, něco jako Dan). Ještě poslední network řádka network 10.33.0.38/32 area 0 obsahuje jen dummy IP routeru, jakože je opravdu moje.

Pokud jste pochopili networks, jedeme dál :). Následuje seznam sousedů, OSPF routerů sedících na jedné ze sítí vyjmenovaných výše (můžou sedět i na více z nich, např. router kasik stejně jako já visí na orgjovi i jablonecké, viz obrázek 2-souvislého grafu minule a schémátko níže, musí se mnou tedy sousedit obě jeho IP). Celé si to pro jistotu osvětlíme na příkladu naší předimenzivané provinční sítě :). Síma má mísu, chci říct router (routerem míníme OSPF router) jablonecka. Jablonecka vede (via eth0) do Símovy domácí sítě, kde je další router jaja, klientí se (wlan0) na router Jarov, na jejím jihozápadním AP (wlan1) visí routery yenik, kasik a johanka a na severovýchodním AP (wlan2) router Maska. K tomu N BFUnesních klientů, které ignorujeme (takže jejich IP nikam nepíšeme!).

Takže neigbors routeru jablonecka jsou jaja, jarov, orgj, yenik, kasik, johanka, maska. To je ještě docela logické, protože všechny mají přímé propojení s jabloneckou. Ale teď to začne :). Johanka má doma klienta na routery orgj (wlan1) a na jablonecka (wlan0). Že orgj a jablonecka jsou její sousedi, to je celkem jasné. Ale pozor, mými sousedy jsou ještě yenik a kasik, ne však už maska, jaja ani jarov. Je to jasné, nebo ještě ne :)? Yenik a kasik se chytají na stejné AP (míněno interface, nikoli počítač), jsou tedy na stejném subnetu (10.33.2.128/26) a jsou mými sousedy. Maska se připojuje sice na stejnou jabloneckou, ale na jinou anténu, jinou wifikartu, a tedy na jiný subnet – 10.33.2.192/26. Takže to není můj soused.

schéma

Snad pomůže názorný obrázek :). Jak už jsem psala výše, velké kolečko značí celý router, malé kolečko interface, přičemž plné malé kolečko dané barvy je AP a malé šrafované značí klienty (klientské interfacy). Malé černé kolečko představuje dummy interface coby virtuální střed počítače. Z konfrontace obrázku, vzorového ospfd.conf a mých keců názorně vidíme, že do networks musíme dát všechny sítě, od jejichž barvičky něco v sobě máme, a do neighbors musíme dát routery, které mají alespoň jeden (ne-dummy) interface obarvený stejnou barvičkou jako náš alespoň jeden interface :) (a musíme tam dát právě jen to jejich „barevné“ IP, na kasikovi a johance vidíme, že johanka musí mít v neighbors obě kasikova barevná IP, stejně tak kasik obě johančina). Pro jednoduchost jsem zakreslila jen routery a interfacy zmíněné výše, ono je to ve skutečnosti daleko složitější :).

Omlouvám se, že z vás, svých věřících, tady dělám blbce, ale než jsem to pochopila z těch konfiguráků (přece nebudu prohledávat connected fórum nebo manuály, že…) :). Access řádky už jsme probrali, takže zbývá akorát prozradit si, co musíte pustit přes firewall, máte-li jej, aby vám OSPF chodilo. Výtažek z mých iptables pravidel:

iptables -A INPUT -p tcp --destination-port 2601 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 2604 -j ACCEPT
iptables -A INPUT -d 224.0.0.5/32 -j ACCEPT
iptables -A INPUT -d 224.0.0.6/32 -j ACCEPT
iptables -A INPUT -d 224.0.0.9/32 -j ACCEPT

První dvě dovolí vzdálený přístup za účelem ovládání zebry a OSPFd (to tam snad ani mít nemusíte, zvlášť pokud jste vzdálené ovládání výše zakázali :)), ta další tři tam mít musíte, protože to jsou multicastové adresy, na kterých si routery vyměňují drby.

To už by snad mohlo stačit :)

Užitečné testovací příkazy: route -n, tcpdump -n -i <iface> :)
Informace: pilot.org.ua/ze­bra
Extra special thanx to: Fyzik

Našli jste v článku chybu?

28. 4. 2004 0:58

Dalibor Straka (neregistrovaný)

Zda se mi, ze v obrazku maji johanka i kasik stejne ip 10.33.7.3, je to dost zasadni chyba. A podle konfiguraku ospfd.conf soudim, ze 10.33.7.3 ma mit kasik.

Myslel jsem, ze tento clanek ma fungovat obracenym smerem...



5. 8. 2003 8:32

Monty (neregistrovaný)

Zdar, měl bych jeden věcný dotaz - jak je to s default routem je mi jasné, že jde použít toto do ospfd.conf

ip add route default gateway 127.0.0.1 no-install
ip-router policy redistribute from-proto static to-proto ospf network default

ale jak je to v případě, že chci stanovit default route pevnou, jenom aby se přehazovala dle aktuální cesty (v síti může být více serverů, a více defaultních bran)






Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Nestlé vyvinulo nový typ „netloustnoucího“ cukru

Nestlé vyvinulo nový typ „netloustnoucího“ cukru

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo