Jak nahrát OpenWRT do HW AP Asus WL-500b
Dostal se mi do ruky Asus WL-500b, tedy hardwarový přístupový bod pro
WiFi s integrovaným 5-ti portovým ethernet switchem (s podporou
automatického křížení kabelu MDI/MDI-X), ve kterém běží operační systém
Linux. Původní firmware mi tak úplně nevyhovoval, tak jsem se dal do
zkoušení jiných firmwarů pro toto zařízení. Asi nejvíce se mi zalíbil
firmware OpenWRT,
který má i systém balíčků a velice zdařilé skripty pro kompilaci ze
zdrojových kódů. Pochopitelně není nutné tuto distribuci kompilovat ze
zdrojových kódů, můžete si stáhnout hotové binárky,
ale pokud se vám (tak jako mě) stane, že potřebujete nějaký program,
který není dostupný v balíčku, pak není velký problém si takový program
skompilovat.
Linuxová distribuce OpenWRT,
je původně určena pro routery Linksys WRT54G/GS, podle nichž získala i
své jméno, ale podporuje i jiná zařízení, kompletní seznam je zde. Jak jsem již zmínil, tato distribuce má systém balíčků ipkg a lze ji snadno skompilovat pomocí těchto zdrojových kódů,
stačí stáhnout, rozbalit a spustit 'make' (při kompilaci si program sám
stahuje zdroje balíčků z internetu, několik stovek MB).
Router jsem i rozebral, ale bohužel jsem ho zapoměl nafotit. Uvnitř je
základní deska s miniPCI slotem ve kterém je umístěna WiFi karta.
Odvážní lidé mohou zkusit kartu vyměnit, údajně to funguje, ale bývají
problémy s ovladači pro jiné karty.
Jak flashovat ?
Flashování probíhá v tzv. firmware restoration modu, ve kterém má
zařízení ip adresu 192.168.1.1 a očekává připojení pomocí TFTP a
nasypání firmware. "firmware restoration mode" je výborná funkce, neboť
tento režim se nespouští z flash paměti a funguje tedy i pokud se vám
povede nahrát nefunkční flash (nebýt této funkce, nevím kolik bych těch
Asusů vlastně spotřeboval :) ).
Pro flashování samozřejmě potřebujete správný firmware, buď si ho
stáhněte, nebo skompilujte, v každém připadě potřebujete soubor
openwrt-linux.trx
Dále se budu zabývat flashováním pouze z operačního systému Linux,
možná to jde i z Windows, nicméně já to neumím a Windowsová utilita na
obnovu firmware mi nefunguje.
Firmware se do Asusu nahrává pomocí TFTP, takže budete také potřebovat tftp klienta a tento skript. (trošku jsem ten skript upravil tak, aby fungoval s mým Asusem)
Firmware restoration mód se spouští tak, že při zapnutí zařízení
podržíte stisknuté tlačítko restore, měla by se rozblikat PWR LED. Asus
připojte kabelem z portu LAN1 nejlépe přímo do počítače (měla by se
rozsvítit LED na síťové kartě a odpovídající LED na Asusu) a v počítači
si nastavte IP adresu na 192.168.1.2 (nebo jinou až 192.168.1.254).
Nyní můžete rovnou nahrát do Asusu nový firmware, ale stává se mi, že
Asus s novým firwarem ne a ne naběhnout ať zkouším co se dá. Nakonec
jsem zjistil, že pomůže před samotným flashováním nahrát do Asuse
zvláštní "flash", který vymaže celou pamět. Takovouto mazací flash si
můžete vyrobit následujícím příkazem: 'dd if=/dev/zero of=./zero.flash
bs=1k count=4096', pak ji nahrajte do Asuse './recover.sh zero.flash'.
Skript by měl chvíli běžet a na Asusu by se měly rozblikat LED
, skript může jednou (nikoli dvakrát - to je chyba !) vypsat hlášku
'Transfer timed out.'. Vyčkejte po nahrání asi 20s, je trochu vidět, že
se změní frekvence blikání LED. Asus rozpozná "chybnou" flash a
automaticky znovu najede do módu pro nahrání firmware.
Nyní nahrajte do Asusu OpenWRT './recover.sh openwrt-linux.trx'. Měly
by se rozblikat LED signaluzující síťovou komunikaci. Po té vyčkejte až
LED přestanou blikat (asi 20s). Pak by měla trvale svítit PWR LED,
pokud bliká signalizuje špatný flash.
Po chvíli by se měla rozsvítit také LED AIR, pokud svítí, máte skoro
vyhráno :)
Nyní je třeba přepojit síťový kabel z portu ETH1 do WAN. Příkazem
'telnet 192.168.1.1' se připojte na svůj nový router s OpenWRT.
Nyní je třeba nakonfigurovat síťové adresy a nastavit WiFi. Vše je popsáno na stránkách OpenWRT. Nastavení proměnných v nvram je popsáno zvlášť. Já používám Asuse v režimu klient a nastavuji ho takto:
nvram set lan_ifname=br0
nvram set lan_ifnames="eth0 eth1"
nvram set lan_proto=static
nvram set lan_ipaddr=192.168.1.1
nvram set lan_netmask=255.255.255.0
nvram set wan_proto=none
nvram set wan_hostname=Asus
nvram set wifi_ifname=eth2
nvram set wifi_proto=static
nvram set wifi_ipaddr=10.101.5.145
nvram set wifi_netmask=255.255.255.128
nvram set wifi_gateway=10.101.5.129
nvram set wifi_dns=194.108.56.1
nvram set wl0_ifname=eth2
nvram set wl0_mode=sta
nvram set wl0_infra=1
nvram set wl0_country_code=DE
nvram set wl0_radio=1
nvram set wl0_channel=0
nvram set wl0_plcphdr=*
nvram set wl0_ssid=FreeNet.broumak
nvram commit
reboot
Nyní by Asus měl být připojen k AP a můžeme instalovat balíčky z internetu:
ipkg update
ipkg install dropbear
ipkg install dhcp-fwd
ipkg install libpthread
/usr/bin/dropbear
Používám Asus v režimu klient, je nepříjemné mít u klienta router s
NATem, proto používám parprouted, který umožnuje AP používat podobně
jako bridge, stejně jako to umí jiné AP v režimu klient. Parprouted
není mezi běžnými balíčky OpenWRT, tak jsem si udělal balíček vlastní.
Můžete si ho stáhnout zde.
Balíček je třeba stáhnout do Asusu nejlépe do adresáře /tmp, a po té nainstalovat.
cd /tmp; wget http://broumovska.lbcfree.net/~wasik/parprouted_0.63-1_mipsel.ipk
ipkg install /tmp/parprouted_0.63-1_mipsel.ipk
Používám také DHCP a program dhcp-fwd, který umožňuje používání DHCP i počítačům v síti za Asusem. Konfigurace vypadá takto:
vim /etc/dhcp-fwd.conf
user root
group root
chroot /var/run/dhcp-fwd
logfile /var/log/dhcp-fwd.log
loglevel 1
pidfile /var/run/dhcp-fwd.pid
ulimit core 0
ulimit stack 64K
ulimit data 32K
ulimit rss 200K
ulimit nproc 0
ulimit nofile 0
ulimit as 0
# IFNAME clients servers bcast
if br0 true false true
if eth2 false true true
ip br0 10.101.5.148
# TYPE address
#server ip 192.168.8.66
server bcast eth2
Zbývá dokončit nastavení zapnutím dhcp-fwd při startu a vypnutím demonů telnet a dnsmasq.
mv /etc/init.d/dhcp-fwd /etc/init.d/S50dhcp-fwd
rm /etc/init.d/S50dnsmasq
rm /etc/init.d/S50telnet
Na konci nezapomeňte nastavení uložit do flash paměti:
nvram commit
Tím je konfigurace hotova a Asus by měl být plně funkční. Při použití
programu parprouted Asus mění MAC adresy ethernetových rámců, které
přes něj procházejí a pokud na AP používáte MAC filtr je třeba povolit
MAC adresu Asusu, MAC adresy síťových karet za Asusem nastavovat
nemusíte. V nastavení DHCP ovšem můžete s MAC adresami pracovat tak,
jako kdyby se neměnily, o to se postará program dhcp-fwd.
V porovnání s AP OEM D-Link DWL-900AP+ rev. B1 je provoz přes Asus
WL-500B o něco stabilnější, nevyskytují se duplicitní pakety a má lepší
citlivost. Jediný problém na který jsem zatím narazil je, že když při
bootu Asusu není dostupná vybraná WiFi síť (výpadek AP) a po nějaké
době je siť opět aktivní, pak se Asus do sítě automaticky nepřipojí a
je třeba znovu zadat ssid programem iwconfig (nebo provést restart
Asuse).
Jan Wasserbauer
Poslední aktualizace 20.3.2005