Distribuce OpenWrt prakticky

Úvod

Zhruba před rokem jsem si domů na hraní opatřil malou linuxovou mašinku - Wifi access point a router wl500gx od Asusu. Router beží na operačním systému Linux a navíc může celé zařízení komunikovat se světem i přes dva USB 2.0 porty. Původní firmware od Asusu je přístupný pouze přes internetový prohlížeč, ale dostupné zdrojové kódy dovolují firmware upravit a vytvořit si v routeru vlastní prostředí.

Ilustrace

Radost z každé hračky

Zřejmě nejblíže má k firmwaru "opravdovému od Asusa" Olegův firware. Nastavení zůstává téměř stejné, přibylo jen několik vylepšení. Olegův systém bude vyhovovat především lidem, kteří chtějí používat router v takové podobě, která se co nejvíce blíží původnímu záměru výrobce. Z mého hlediska však přinesl Oleg do routeru jednu z nejpodstatnějších věcí: povelovou řádku.

Jakmile jsem se dovedl k routeru připojit pomocí telnetu či ssh, začal jsem experimentovat s linuxem v routeru trochu více. Nicméně mě Olegův software nijak neuchvátil, protože jeho orientace na zpětnou kompatibilitu s původním Asus firware a s orientací na webové nastavení je velmi omezující. Dalším omezením Olegova firmware je nepřepisovatelný souborový systém squashfs. Připojil jsem tedy k routeru disk přes USB a zkusil nainstalovat nějakou normálnější distribuci - Gentoo. Po pár dnech hračičkování jsem Gentoo vzdal a odložil router k ledu. Až poměrně nedávno jsem narazil na systém OpenWrt a zajásal jsem: tohle je přesně ono - systém, který se snaží tvářit jako systém a ne jako soubor utilit na nastavování jednoho konkrétního kusu hardware.

Moje nadšení z distribuce OpenWrt pramení možná z toho, že jsem občas postaven před požadavek zajistit někde mimo civilizaci jednoduchý systém pro sběr dat - wl500 & OpenWrt mi nabízí lacinou a spolehlivou alternativu k obvyklému PC či k čistě hardwarovému řešení (8051).

Odkazy

http://oleg.wl500g.info/
Olegův firware je vhodný pro všechny, kteří chtějí mnohem více, než co routery od Asusu standardně nabízejí, ale nechtějí si příliš lámat hlavu s linuxem samotným. Olegův firware je vytvořen zcela v původním duchu Asusu.
http://www.openwrt.org/
Systém OpenWrt je minimalistický Linux pro bezdrátové routery. Narozdíl od Olegova firmware přichází OpenWrt s minimem přídavných funkcí, ale balíčkovací systém dovoluje doinstalovat další programy, případně odinstalovat programy, které jsou v základní distribuci, ale nechcete je používat. OpenWrt se tak více podobá bežným distribucím Linuxu na PC.
http://wl500g.info/
Diskusní forum o routeru wl500 a jeho příbuzných. I když se většina otázek týká softwarového vybavení, lze zde najít odpovědi i na dotazy typu "Jak rozšroubovat router?" nebo "Jak rozšířit router o RS232?"
http://www.macsat.com/
Stránky orientované na wl500 a OpenWrt a Olegův firmware. Na stránkách je poměrně přehledná základní dokumentace. I když je na tomto webu informací méně, než na stránkách OpenWrt, jsou zde informace podané z trochu jiného úhlu pohledu a rozhodně stojí za to prostudovat i tento web.

Systém OpenWrt

Firmware v každém podobném zařízení předkládá uživateli hotovou sestavu funkcí, které lze jen těžko rozšiřovat nebo nahradit nepoužívané funkce jinými požadovanými vlastnostmi. OpenWrt se svými vlastnostmi podobá spíše běžným distribucím na PC. Základní firmware obsahuje jen minimální funkčnost, kterou lze dále rozšiřovat instalací dalších softwarových balíčků. V zařízení je firmware uloženo v paměti flash a OpenWrt umí zpřístupnit tuto paměť i pro zápis běžnými systémovými nástroji (textovým editorem). Jiné typy firmware jsou spíše jen sbírkou utilit, které můžeme či nemusíme používat, ale nelze se jich zbavit jinak, než přepsáním celého firmware. V kontrastu s tím připomíná práce s OpenWrt spíše práci na vzdáleném serveru - systém je možné přizpůsobovat momentálním podmínkám přímo za provozu.

Protože je systém OpenWrt určený především pro bezdrátové routery, je skladba balíčků orientovaná hlavně tímto směrem. Nechybí balíčky pro nastavení firewallu (iptables), pro vzdálený přístup k souborům (ftp, nfs, samba), pro dálkovou správu (telnet, ssh). Lze zprovoznit dokonce i http server a php.

Systém může běžet na dvou různých filesystémech: squashfs a jffs2. Squashfs je odolnější vůči haváriím (systém je pouze pro čtení) a jsou v něm uložené všechny balíčky firmware; zbytek systému (adresář /etc a podobně) je uložený na filesystému jffs2. Filesystém jffs2 je navržený firmou Axis speciálně pro embedded zařízení s pamětí flash. I tento filesystém by měl být odolný vůči výpadkům a haváriím a dovoluje pracovat s pamětí flash podobně jako s pevným diskem v běžném počítači.

Na čem lze OpenWrt provozovat

OpenWrt lze provozovat na procesorech Broadcom. Zařízení s tímto procesorem je celá řada. Na stránce http://wiki.openwrt.org/TableOfHardware můžete vyhledat svoje zařízení a přesvědčit se, jestli na něm lze OpenWrt zprovoznit.

Já jsem dostal do rukou pouze dvě zařízení, schopná provozovat OpenWrt: Asus wl500g Deluxe a Asus wl300g. Výhodou obou strojů je velmi snadná dostupnost - obě zařízení se prodávají v cenách kolem dvou a půl tisíc, model wl500g je o pár stokorun dražší.

Co vlastně obsahuje Asus wl500g deluxe

Router obsahuje 200 MHz procesor Broadcom, 32 MB RAM, 4 MB paměti flash, dva porty USB 2.0, šest (snad) nezávislých 10/100 Mbit ethernetových rozhraní a wifi jednotku. Na jednom ethernetovém rozhraní je připojená wifi, další rozhraní je použito pro WLAN (připojení na internet) a zbývající čtyři rozhraní jsou propojena ve switchi pro připojení lokální sítě. V případě potřeby by mělo jít upravit rozdělení ethernetových portů - použít jeden port například pro připojení na internet, jeden port pro připojení demilitarizované zóny a zbývající tři porty spolu s wifi použít pro připojení lokální sítě.

Velikou výhodou jsou dva USB porty. V závislosti na nainstalovaném software lze připojit k USB například tiskárnu, disk či kameru (a vytvořit si jednoduchý systém pro hlídání objektu). Existují i experimentální drivery bluetooth zařízení, našinci mohou ocenit i možnost připojení k internetu přes CDMA modem od Eurotelu.

Zprovoznění kamery nebo CDMA modemu bude pravděpodobně jednodušší s Olegovým systémem, OpenWrt je ve své základní verzi koncipovaný příliš minimalisticky.

Zkušenosti z provozu

Na disku je strašně málo místa a instalace dodatečných balíčků trvá velmi velmi dlouho, zvláště v případě, že místo na disku dojde. Nevydržíte-li s nervama a pokillujete rozjeté instalační procesy, můžete se dostat do stavu, že ipkg přestane fungovat úplně a pak jsem našel asi jediné řešení - kompletní reinstalace firmware. Až při psaní tohoto článku jsem objevil soubor /usr/lib/ipkg/status (textový soubor s informacemi o nainstalovaných balíčcích). Cítím šanci, že až příště rozbourám balíčkovací systém, nebudu muset sahat po všeléku, který sluší spíše neunixovým typům operačních systémů.

Filesystém jffs2 se chová ve srovnání s normálními filesystémy značně nezvykle. Na disk, na kterém je 400 KB volného místa, není problém překopírovat 500 KB veliký soubor, ale na dokončení celé operace si můžete počkat třeba i několik desítek minut. Přerušení může mít za následek ztrátu místa na disku - naštěstí mi zatím vždy pomohl restart.

Pokud už sáhnu po reinstalaci, oceňuji, že velká část nejzákladnějšího nastavení je v paměti nvram, takže alespoň síťovou komunikaci nemusím nastavovat po úspěšné reinstalaci celého systému znovu.

Instalace samotná dokáže být velmi problematická. Zkusím jednou, podruhé, potřetí... a tahle mne dokáže router zaměsnat několik hodin. Pochopitelně, co už mám taky dělat s wl500 ve stavu oživlé mrtvoly, kdy na mě pouze smutně poblikává ledka, ze všech funkcí routeru funguje jen ping a tftp pro upload systému a nervozita narůstá. To ovšem nebude zřejmě problém systému, jako spíše routeru samotného.

Následující odstavec psaný italikou je zgruntu špatně, je to moje chyba, ve skutečnosti iptables fungují.

Systém je vytvořený až zbytečně úsporně. U routeru bych čekal, že budou fungovat především síťové věci, ale například iptables jsou ořezané až k nepotřebě. Je hezké, že můžu nainstalovat sambu, ssh a ftp, ale je to celkem k ničemu, protože iptables nedovedou filtrovat pakety podle jednotlivých portů. Mám-li na internetu podobné zařízení, chtěl bych, abych se na ně mohl odkudkoli dostat protokolem ssh případně ftp, ale v žádném případě nechci, aby byly vidět i disky nabízené ke sdílení ve vnitřní síti. Dobře mi tak - na routeru nemá samba co dělat. Ale nedovedu-li vybrat provoz podle určitého portu, nelze pak ani vytvořit třeba demilitarizovanou zónu - nelze mít například dedikovaný www server stranou od vnitřní sítě i od internetu.

Dlouhé roky jsem pracoval na počítači s procesorem 386 - nevadí mi, že si na některé věci musím chvíli počkat. 386 určitě není rychlejší, než procesor v routeru, ani 32 MB RAM není příliš omezující. Pamět flash pro uložení firmware se dá snadno rozšířit připojením externího disku, ale v momentě, kdy zkusím nastartovat větší množství aplikací, zjistím, že nelze zapnout swap. Shell busybox, určený pro odlehčená řešení, umí suplovat funkci programu swapon, ale příliš horlivý odlehčovatel při vytváření distribuce tuto možnost z překladu vyloučil. Olegům systém je v tomto směru okleštěný mnohem méně. Naštěstí není problém překopírovat z Olegova systému binárku busyboxu do OpenWrt. Bohužel v busyboxu Olegova systému zase chybí některé funkce, které se používají v OpenWrt.

Na závěr

Běžící systém na routeru wl500g je (dočasně) k nahlédnutí na adrese http://wl500.bravenec.org. Všetečky, kteří by snad chtěli zkoušet na zařízení portscanning, musím předem upozornit, že porty 135-139,445 filtruje můj ISP, nainstalovaná verze iptables filtrování jednotlivých portů neumí.