Asus WL-500b & p.salek OpenWRT


Případný zájem/dotaz můžete projevit na wifi(závin)faltynek(tečka)org.

Tato stránka si klade za cíl pomoci uživatelům, kteří používají router WL-500 s firmwarem OpenWRT upraveným p.salkem. Připomínám, že vlastním WL-500b verze 1 (tj. 11Mbps s radio-síťovkou Broadcom). Dalším cílem je pomoc v oblasti zabezbečení Wi-Fi metodou WPA. Pro WPA používám software wpa_supplicant, ten zajišťuje potřebnou asociaci Wi-Fi rozhraní s přístupovým bodem, autentizaci/autorizaci jménem/heslem a následně výměnu šifrovacích klíčů. wpa_supplicant je zkompilován pouze s podporou binárního driveru od Broadcomu (wl.o). Pro svou činnost vyžaduje kryptografické funkce zknihovny openssl (libssl).

Soubory, které by se mohly hodit:
Binárka ipk balíček Zdrojový kód Kam/jak rozbalit? Co to?
wpa_supplicant 0.4.7 Neumím src /usr/sbin/ wpa_supplicant
.config --- --- --- Aktuální konfigurační soubor tohoto buildu wpa suplikanta
libssl 0.9.7e libssl 0.9.7e src /usr/lib/ Knihovny SSL pro součinnost s WPA suplikantem.
--- --- wpa_supplicant.conf /etc/ Konfigurační soubor pro wpa_supplicant
--- dropbear 0.44 src ipkg install ... SSH server/klient namísto telnetu

Vyskytlo se několik nejasností/neznalostí, dotazů apod. S některými jsem se více či méně úspěšně potýkal mj. i v konferenci na czfree.net. Zde je několik snad prospěšných otázek/odpovědí.

Neberte prosím informace na této stránce jako dogma. Jsou to jen mé osobní zkušenosti/názory a často jen domněnky.

Co je to firmware? (pro WL-500)
Co je to OpenWRT?
Jak FLASHovat WL-500?
Co je to failsafe mode?
Jak aktivovat failsafe mode?
Co je to nvram?
Co je to ten BusyBox?
Co je to telnet/SSH?
Jak přenášet soubory?
Jak editovat soubory?
Jak prohlížet delší výpisy/soubory?
Jak spustit wpa_supplicant?
Jak nastavit wpa_supplicant?
DHCP klient?
DNS/DHCP server?
Router pro lokální LAN?
HTTP server a CGI?
odkazy
Konference

Co je to firmware?

Stejně jako u kteréhokoli jiného zařízení je firmware program, který "běží" v zařízení a zajišťuje operace a služby potřebné pro funkčnost. WL-500 má výhodu v tom, že v něm běží Linux. Chytré hlavy buď upravily původní "distribuci" a tak vznikl firmware taky známý jako Olegův, nebo portovali již hotovou "distribuci" z jiného zařízení Linksys WRT54G, která se jmenuje OpenWRT.


Zpět

Co je to OpenWRT?

"Distribuce" Linuxu, původně určená pro zařízení WRT54, v současnosti aplikovatelná do kdejakého kusu hardware. Pro WL-500 existuje několik modifikací OpenWRT. Zde se zaobírám hlavně modifikací od uživatele p.salek. Tato větev se ovšem už nevyvíjí, protože autor nemá čas. Pro mé účely se jeví jako více-méně dostačující. Jednou z dalších modifikací je pak větev uživatele jaha2x.


V současné době (12/2005) se zdá, že OpenWRT modifikace těchto dvou uživatelů již na svých původních výskytech nejsou k dispozici (viz nefunkční odkazy):o( Můžete zkusit zastihnout autory na konferenci czfree anebo zkusit štěstí jinde.
Nicméně i tak doufám, že zde naleznete užitečné informace ;o)


p.salek OpenWRT po naflashování a nabootování routeru nastaví na LAN síťovce IP adresu 192.168.0.1. Toto se dá změnit v souboru /etc/init.d/S40network. Na takto nastartovaný router je možno se přihlásit telnetem bez hesla. (To je samozřejmě v produkčním prostředí při připojení k síti bezpečnostní riziko jako kráva).

Flash pamět u WL-500 není po zapsání p.salek OpenWRT úplně plná a zbývá menší množství prostoru pro uživatelova data. Flash je tedy rozdělena na RO část (jen pro čtení) a RW část (čtení, zápis). RO část je přístupná v adresáři /rom. RW část je pak připojena jako kořenový souborový systém a do RO části z něj vedou symbolické odkazy. Tím je docela elegantně vyřešena myšlenka bezpečné modifikace "firmwarových" souborů. Pokud totiž chceme provést nějakou změnu, je potřeba smazat odkaz z RW do RO, zkopírovat daný soubor do RW a tady ho následně vesele změnit. Např. mně se nelíbíla adresa 192.168.0.1, takže jsem provedl toto:

    rm /etc/init.d/S40network                   # smazání odkazu do RO  
    cp /rom/etc/init.d/S40network /etc/init.d/  # kopie z RO do RW  
    vi /etc/init.d/S40network                   # změna adresy na 192.168.1.1  
    

Obdobným způsobem lze postupovat u dalších souborů, které nevyhovují vašim představám. Pokud by takových bylo mnoho, stojí za úvahu vyrobit firmware, kde tyto soubory budou změněné k obrazu vašemu, ovšem to já zatím neumím :o)

Dlužno podotknout, že RO oblast používá souborový systém squashfs a RW oblast pak systém jffs2.

Pokud je potřeba do routeru narvat "něco většího" a ještě jen dočasně, je vhodné to řešit přes adresář /tmp, který je připojen do operační paměti RAM, tzn. operace jsou rychlé. Samozřejmě po restartu vše z /tmp zmizí, protože je to jen RAM. Na jffs2 při zápisu probíha komprese a to dokáže být hodně pomalé, navíc toho místa je tam poskrovnu. Z technologicého hlediska má flash omezený počet zápisových cyklů, čili čím méně se bude zapisovat, tím déle vydrží. Počet cyklů je však u jednoho typu flashky 100, u jiného 1 000 000, takže těžko říct :o)


Zpět

Jak FLASHovat WL-500? (na Win32)

K routeru se dodává CD se "softwarem", kde je k dispozici utilita "Firmware restoration". Touto jsem já prováděl flashování, až na pár vyjímek, kdy jsem ještě z originálních/Olegových firmwarů prováděl flash přes WWW rozhraní. Před flashováním je nutné uvést router do "flashovacího" režimu:

V takovém stavu je router schopen příjmat pokyny k flashování.


Firmware Restoration Menu Firmware Restoration Application

Zpět

Co je to failsafe mode?

OpenWRT poskytuje pěknou bezpečnostní pomůcku (kterou jsem v jisté chvíli hodně ocenil). Tou je tzv. failsafe režim. V tomto režimu se nepřipojuje RW oblast flashky a jako kořenový strom je použito obsahu z RO části. Tedy toho, co se v normálním režimu tváří jako /rom. Toto chování řeší zacyklené init skripty, zakomentované/nenalezené/vadné SSH/telnet servery apod. Prostě situace, které nastanou vinou editace (rm/cp/vi) původních souborů. RW část je nutno pro napravení situace připojit ručně:

    mtd unlock mtd4                        # netuším, co to dělá
    mount -t jffs2 /dev/mtdblock/4 /jffs   # připojení RW oblasti do /jffs
    

Zde se pak nepříjemný omyl opraví, uloží a router se rebootuje, aby přešel zase do normálního režimu.


Zpět

Jak aktivovat failsafe mode?

Podobný postup jako před flashováním:

Pokud se půjde přihlásit telnetem bez hesla, failsafe byl aktivován.


Zpět

Co je to nvram?

V routeru existuje příkaz nvram, který je schopen nastavit/zobrazit "systémové proměnné", které jsou uloženy v nvram. To je zkratka pro Non-Volatile RAM, čili paměť, která zachová data i po výpadku napájení (asi kus FLASH). Pro tento účel je vyhrazen blok 32kB. Systémové proměnné slouží buď přímo k ovládání funkce hardwaru anebo různé firmwary si do nich ukládají různé konfigurační údaje. Seznam existujících systémových proměnných lze vypsat:

    nvram show 
    

voláním nvram bez parametrů lze zjistit možnosti dalšího použití.


Zpět

Co je to ten BusyBox?

Jedná se o tzv. multi-call binary, což znamená, že podle toho, s jakým názvem či parametrem program spouštíme, takovou vykonává činnost. Je to kolekce základních systémových utilit v jednom souboru. Pokud existuje např. v adresáři /bin/ symbolický odkaz s názvem rm ukazující na /bin/busybox, pak spuštění tohoto /bin/rm vyvolá busybox chovající se jako běžný program rm sloužící k mazání souborů. (Ve skutečnosti je /bin/rm odkaz na /rom/bin/rm a ten je teprve odkazem na busybox).

    [root@router:~]# ls -l /rom/bin/
    -rwxrwxr-x    1 root     root        22964 Apr  6  2004 admcfg
    -rwxr-xr-x    1 root     root           42 May 10  2004 alldone
    lrwxrwxrwx    1 root     root            7 May 19  2004 ash -> busybox
    -rwxr-xr-x    1 root     root       850084 May 19  2004 busybox
    lrwxrwxrwx    1 root     root            7 May 19  2004 cat -> busybox
                                    ...
    lrwxrwxrwx    1 root     root            7 May 19  2004 ps -> busybox
rm  lrwxrwxrwx    1 root     root            7 May 19  2004 pwd -> busybox
--> lrwxrwxrwx    1 root     root            7 May 19  2004 rm -> busybox
    lrwxrwxrwx    1 root     root            7 May 19  2004 rmdir -> busybox
    lrwxrwxrwx    1 root     root            7 May 19  2004 run-parts -> busybox
    lrwxrwxrwx    1 root     root            7 May 19  2004 sed -> busybox
    lrwxrwxrwx    1 root     root            7 May 19  2004 sh -> busybox
                                    ...
    lrwxrwxrwx    1 root     root            7 May 19  2004 vi -> busybox
    lrwxrwxrwx    1 root     root            7 May 19  2004 zcat -> busybox    
    

Toto zapouzdření mnoha programů v jednom celku je úsporné na prostorové požadavky - sdílení kódu. V embedded systémech s omezenými paměťovými možnostmi je to docela zásadní věc. Jednotlivé programy v BusyBoxu se nazývají aplety, a lze je při konfiguraci (před zkompilováním) přidat/ubrat do/z výsledku podle potřeby. Seznam podporovaných apletů se dá zjistit prostým voláním:

    busybox
    

Zpět

Co je to telnet/SSH?

Telnet je služba vzdáleného připojení, která číhá obvykle na portu 23. Připojení k systému probíhá zadáním uživatelského jména a hesla. Nevýhoda telnetu je v tom, že přenášená data jdou po síti v otevřené formě (včetně hesla). Stejně tak veškerá činnost prováděná na vzdáleném systému je "zjistitelná" jednoduchým "odposlechem" linky. Proto vznikly nástroje na bezpečnější spojení, založené na šifrování přenášených dat, které už tak lehce kompromitovatelné nejsou.

Protokol šifrovaného vzdáleného přístupu je obecně znám jako ssh. Tato služba naslouchá obvykle na potu 22. V unixovém světě je ssh klient/server naprosto běžnou součástí. Ve windousech je to horší a člověk si jej musí sehnat. Je to např. buď klasické ssh z CygWinu nebo velice užitečný program PuTTY. To dovoluje použít mj. jak telnet protokol, tak SSH protokol, což je velice praktické. Ve windousech totiž telnet existuje, ale jako většina standardních, ale MS zprzněných, programů se, mně osobně, jeví jako hůře použitelný.


Zpět

Jak přenášet soubory?

Je v zásadě několik možností, jak do/z routeru dostat nějaká ta data ve formě souborů:


Zpět

Jak editovat soubory?

Pro někoho možná až trapný dotaz. Ovšem najdou se lidé, kterým editor vi (obsažený v omezené verzi v BusyBoxu) zrovna k srdci nepřirostl :o) Pokud tedy, přihlášeni k routeru, chceme editovat nějaký soubor, můžeme pro tuto činnost použít právě vi. Např.:

    vi /etc/init.d/S40network
    

Pokud soubor neexistuje, je vyroben. Spuštěné vi je implicitně v příkazovém režimu, do editačního režimu lze přepnout buď stisknutím <insert> nebo a jako append nebo i jako insert. Po provedení změn lze přejít zpět do příkazového režimu pomocí <esc>. Uložení pak je :w (dvojtečka, malé w, z příkazového režimu), opuštění pak:q. Vyhledávání je /text (lomítko, vyhledávaný text v přík. režimu). Další vyhledávání je n resp. N, podle směru (dolů/nahoru). Smazání řádku je dd, vložení (naposled smazaného) je p - pod aktuální řádek, popř. P nad aktuální řádek. Atd, apod...


Zpět

Jak prohlížet delší výpisy/soubory?

Prosté vypsání souboru na terminál je možné provést příkazem cat. Tedy např. necháváme-li si ukládat zprávy od logovacího démona (syslogd) do souboru /tmp/messages a chceme je zobrazit na konzoli, provedeme:

    cat /tmp/messages
    

Pokud máme dobrý terminál, je možné se ve vypsaném textu pohybovat např. pomocí kláves či scrollbaru. Pokud ne, máme k dispozici pouze několik posledních řádek, které se vlezly na konzoli. To lze obejít buď tak, že soubor zobrazíme (nebo filtrujeme) pomocí příkazu more:

    more /tmp/messages       # jednoduše
    cat /tmp/messages | more # nebo složitější způsob, tzv. řetězení, filtr apod.
    

more ovšem umožňuje pouze posun dopředu, což taky není úplně praktické. Pokud jsme kamarádi s editorem vi, není asi nic pohodlnějšího, než daný soubor otevřít v něm:

    vi /tmp/messages
    

Pokud si chceme prohlížet nějaký dlouhý výpis z programu, lze použít právě filtr more. Např. nápověda k programu wl:

    wl 2>&1 | more
    wl 2>&1 > /tmp/wl.help
    vi /tmp/wl.help
    

První řádek spustí wl, přesměruje chybový výstup na standardní výstup (2>&1, protože wl bez parametrů vypisuje nápovědu na chybový výstup), a ten předhodí na standardní vstup programu more.

Pokud more není vyhovující, další dva řádky přesměrují text do souboru /tmp/wl.help a ten je pak zobrazen v editoru vi.


Zpět

Jak spustit wpa_supplicant?

Typicky v nějakém init sriptu v /etc/init.d/. Parametry lze zjistit z nápovědy. Já používám volání:

    wpa_supplicant -t -w -i eth2 -c /etc/wpa_supplicant.conf >>$LOGFILE 2>&1 &  
    
Podrobný popis kroků, který wpa_supplicant zahájí po svém spuštění je zde (sekce "Using wpa_supplicant"). Pro správnou činnost musí být zaveden a funkční modul wl.o. Zjistit se to dá například příkazy:
    lsmod
    wl isup
    wl radio
    
Aktivovat bezdrátové rozšíření na síťovce eth2 lze pak provést pomocí:
    wl up
    wl radio on
    wl ...        # apod. viz. nápověda k wl
    
Konfigraci eth2 lze zjistit/změnit pomocí:
    ifconfig eth2
    ifconfig eth2 up
    ifconfig eth2 ... # viz. opět nápověda
    

Zpět

Jak nastavit wpa_supplicant?

Ve zdrojových souborech nebo na stránkách autora (sekce "Configuration file") je "ukázkový" konfigurační soubor wpa_supplicant.conf. Zde je vhodné zvolit jeden blok, který se podobá naší síti nejvíce a upravit jej k obrazu svému. Některé volby jsou mi nejasné a to jsem o chaosu WPA/TKIP EAP/MSCHAPv2 už něco málo zjistil :o) Každopádně zde prezentovaný soubor je funkční oproti Radius serveru na poskytovateli 802.cz. Je pouze nutné vyplnit správné ssid (název přísupového bodu), jméno a heslo. Všechny ostatní zakomentované řádky (#) lze klidně smazat z důvodů úspor či přehlednosti.


Zpět

DHCP klient?

Pokud nám poskytovatel sdělil, že IP adresa nám bude přidělována z DHCP serveru, potřebujeme program, který se s tímto serverem bude bavit - DHCP klient. V BusyBoxu je k dispozici udhcpc, který je pro danou funkci dostačující. Volání:

    udhcpc -b -i eth2
    

znamená: "zjisti adresu (a ostatní parametry) pro síťovku eth2 z DHCP serveru, pokud se to nepovede, přejdi do pozadí a zkoušej dál". udhcpc pro každou událost dovoluje přiřadit uživatelský skript. Tzn. např. když se mu podaří získat adresu, když obnoví adresu po určité době, když nedostane žádnou odpověď na DHCP požadavek, apod.

Spolu s adresou poskytovatel může přidělovat i další parametry, jako je odchozí brána (router, alias default gateway), DNS servery, maska sítě apod. Skripty, které používám jsou mírně modifikované ukázkové skripty z udhcpc. Leží v adresáři /usr/share/udhcpc/:

default.bound Provede se při první pozitivní odpovědi z DHCP serveru. Do /etc/resolv.conf naháže konfiguraci DNS serverů, přiřadí síťovce adresu/masku, atd...
default.renew Provede se při obnově adresy. Identické jako předchozí.
default.leasefail Provede se, když na výzvu nedorazí odpověď z DHCP serveru.

Zpět

DNS/DHCP server?

Pokud je potřeba obsluhovat routerem více počítačů v nějaké domácí mikrosíti, je užitečné mít DNS server pro překlad názvů domácích počítačů na IP adresy, abychom např. při kopírování přes scp nemuseli psát 192.168.1.1, ale např "router" nebo "WL500" nebo cokoli jiného. Podobně při komunikaci s ostatními PC v síti.

Stejně tak, pokud se nám nechce na každém PC nastavovat síťové parametry (zvláště ve windousech, kde se člověk ukliká), můžeme brát jako užitečné mít na routeru i DHCP server, který se o daný problém postará. "Známým" počítačům je klidně možné přidělovat "statické" IP adresy, tzn. na DHCP žádost dostane vždy stejnou adresu. Toho je možné využít následně při konfiguraci DNS serveru a daným adresám přiřadit jména. Vazba se provádí podle MAC adresy síťovky, kterou je proto dobré zjistit. V Linuxu jednoduše pomocí ifconfig, ve windousech pak pomocí zprzněnce ipconfig /all. Ačkoli to tak mnohdy nevypadá, jednotlivé oktety MAC adresy se oddělují dvojtečkou, nikoli pomlčkou.

Výše uvedené požadavky na DHCP server a DNS server splňuje program dnsmasq. Podobně pokud by nám stačil pouze DHCP server, je k dispozici v BusyBoxu udhcpd. Mně osobně se více líbí dnsmasq a tudíž používám tento program.

dnsmasq se jednoduše a hlavně přehledně dá nakonfigurovat editací souboru /etc/dnsmasq.conf. Zde je uvedena spousta komentářů a vysvětlujících příkladů.


Zpět

Router pro lokální LAN?

Máme-li k dispozici domácí síť, ale od poskytovatele pouze jednu IP adresu a přesto bychom chtěli ze všech PC v síti na Wi-Fi internet, je potřeba provést nějaké finty tak, aby se z vnějšku celá síť tvářila jako jeden počítač s tou dodanou IP adresou.

Tento problém se dá řešit různými způsoby, mně nejpřívětivější se zdá překlad adres, alias NAT (tuším, že to znamená Native Address Translation). Toto řešení znamená, že na routeru se něco postará o to, aby pakety odcházející do internetu měly jako zdrojovou adresu nastavenu IP adresu routeru (tu, kterou nám poskytovatel přidělil např. přes DHCP). Příchozí pakety pak jsou "přeznačeny" (podle toho, ke kterému PC v lokální síti patří) správnou lokální adresou. Logicky z toho plyne jedna vlastnost NATu: nelze z vnější sítě (internetu) navázat spojení přímo na jeden PC v lokální síti, protože NAT by nevěděl, jakou adresou pakety přeznačit (pokud je spojení navázáno zevnitř, NAT si pamatuje, kdo ho navázal a podle toho přeznačkuje pakety příchozí v rámci tohoto spojení). Izolaci LAN od vnější sítě lze brát jako výhodu (můj názor) stejně tak jako nevýhodu.

Tuto vlastnost lze pro konkrétní případy vhodně eliminovat. Např. pokud nutně potřebuji na PC xxx v LAN provozovat FTP server, na který je možno se připojit zvenčí, lze zajistit, aby příchozí spojení na router byla "přesměrována" na daný PC xxx s FTP serverem. Pak se pro uživatele v internetu jako FTP server jeví náš router. Technika se nazývá port forwarding - přesměrování portů.

Uvedené hrátky s pakety a adresami zajistí vhodně nastavený paketový filtr v jádře. Nastavení jeho tabulek se provádí příkazem iptables. Opět se dá říct, že toto nastvení je možné umístit do init skriptů v adresáři /etc/init.d/. Zapnutí NATu je možno provést příkazem:

    iptables -t nat -A POSTROUTING -o $PROVIDER -j MASQUERADE
    

Kde $PROVIDER obsahuje adresu, která bude do paketu zapsána jako zdrojová. Přesměrování portů je možné realizovat například podobně jako zde:

    iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 80 -i eth2 -j DNAT --to 192.168.1.3:80
    

Zhruba to znamená, že přijde-li na rozhraní eth2 paket z počítače 1.2.3.4 a "je namířen" na port 80 našeho routeru, jádro jej přesměruje na PC 192.168.1.3 v lokální síti, taktéž na port 80.

Pokud se výše uvedené, zjednodušené příklady zdají nejasné a zavádějící, je možné si počíst trošku podrobněji: Připojujeme domácí síť, Stavíme firewall, Linux 2.4 NAT HOWTO, atd...


Zpět

HTTP server a CGI?

Pro jednoduché diagnostické/informační účely je možné využít kombinaci HTTP serveru a CGI skriptů. Co to je? Pokud chci zjistit/provést něco, co bych normálně řešil příkazem, přihlášen přes SSH na WL-500, a přihlašovat se mi nechce, napíšu si na to CGI skript. To není nic jiného, než bash shell skript (resp. ash shell skript :o). Je spuštěn HTTP serverem a výstup je zobrazen jako HTML stránka v prohlížeči. CGI používám typicky pro zobrazení logů a konfiguračních informací. Ukázkový skript např. /www/cgi-bin/messages.cgi.

HTTP server je obsažen v BusyBoxu ve formě apletu httpd. Je možné jej minimálně konfigurovat, volby konfiguračního souboru se dají zjistit přímo ze zdrojáku httpd. V podstatě se jedná akorát o nastavení přístupových práv. Např. /etc/httpd.conf, pokud obsahuje text

    A:192.168.1.0/24
    A:127.0.0.1
    A:1.2.3.4
    D:*      
    

Říká, že na http stránky lze přistupovat pouze z lokální sítě, z vlastního routeru a pak ještě z počítače 1.2.3.4, jinak odnikud.


Zpět

Odkazy

p.salek OpenWRT firmware
p.salek OpenWRT firmware 0.6.3 stable, lokální kopie
jaha2x OpenWRT firmware
Oleg firmware
WPA suplikant
dropbear
openssl
Wi-Fi protected access (WPA)
Můj poskytovatel
Český text o OpenWRT
Zpět

Mé neumělé dotazy/reakce v konferenci


Příspěvek č. 1431, první chaotické dotazy
Příspěvek č. 1433
Příspěvek č. 1435, WPA? OpenWRT?
Příspěvek č. 1438, přechod na OpenWRT
Příspěvek č. 1440
Příspěvek č. 1445, nefunguje dropbear?
Příspěvek č. 1448, používá to WPA vůbec někdo?
Příspěvek č. 1450
Příspěvek č. 1454, jó kdybych věděl o failsafe...
Příspěvek č. 1462, už ho znám
Příspěvek č. 1466, PMON flash versus failsafe
Příspěvek č. 1492, sondování WPA, wpa_supplicant
Příspěvek č. 1536, tak už jsme dva
Příspěvek č. 1557, o ničem
Příspěvek č. 1570, cross-compiling?
Příspěvek č. 1578, tak ne, jen něco málo
Příspěvek č. 1592, WPA funguje
Příspěvek č. 1650, p.salek OpenWRT se nevyvíjí
Příspěvek č. 1713, tak už jsme tři
Příspěvek č. 1716, shrnutí
Zpět



Zpět na index

Tato stránka byla načtena 24548x od 28.01.2005
Poslední úpravy 17.08.2016 21:20:24.

Valid HTML 4.01!