OpenWRT a Asus WL-500GP

08.07.2007 14:49 | fiwo

Co? Preco?
Co je OpenWRT? Je to linuxova distribucia pre embedded zariadenia. Ma svoj vlastny balickovy system, ak balicky niesu v repozitaroch, dost ich nagooglite.
Preco? Tanto myslienka ma uz zaujala davnejsie, chcel som mat male zariadenie all-in-one, financne dostupne, relativne lahko ovladatelne, proste hracka.
Plany? Povodne plany boli do tohto zariadenia pripojit 2 linky jednu cez WAN druhu cez LAN a spavit na nich load balancing. Nakoniec je z toho home GW s obrovskymi moznostami a co ja viem co vsetko ma este napadne pridat.

Zopar tech. info o zariadeni na ktorom prevadzkujem OpenWRT:
ASUS wl-500gp
Je to wifi access point/router, ktory je povodne urceny pre home userov na natovanie WAN linky do LAN a WIFI toto zariadene ma v sebe 3 interfacey eth0, eth1 a eth2 pricom eth1 je nepouzivane, eth1 su vsetky wired porty, cize LAN 1-4 a WAN, eth2 je wifi. pomocou programovatelneho switchu je eth1 rozdelena do vlanov.

Tech. parametre:
CPU RISC Broadcom 266MHz
32MB RAM
8MB ROM
64KB NVRAM
2x USB 2.0

Instalacia OpenWRT
Tento ASUS mal povodne uz flashnuty firmware na Olegov, ale zdal sa mi niejaky cudny tak som predsa presiel na OpenWRT.
Ako som sa docital na stranke OpenWRT, ze web interface nevezme subor s wrtkom pokial nieje istej verzie tak som upgradeol firmware asusu na pozadovanu verziu, ale bola to zbytocnost. Ani po upgradenuti mi webinterface nechcel brat image subor.
Zriesil som to cez Asus utility na firmware restore, slo to ako po masle, a uz bol v masinke OpenWRT ;-) prvy uspech, dovod na radost. Dal som do neho OpenWRT WhiteRussian 0.9. Asus ma prekvapil velmi sviznym bootovanim, behom 10 sec bol online.

Do OpenWRT sa da dostat bud cez web interface, ssh alebo telnet. Po prvom prihlaseni system poziada heslo na roota. Web interface nefunguje pokial sa nenastavi heslo cez telnet alebo ssh !!!

Prvou vecou ktoru som potreboval zmenit boli ip adresy a pod, vedel som ze sa to da zmenit cez konzolu ale klasicke linuxaske postupy nefungovali, tak som pristupil k web interfaceu, tam som pozmenil vsetko ako som potreboval. Cize rada: ked si uz nevies dat rady v konzole skus web interface ;).
Tam som nastavil hostname a ip adresy. Vtedy som zistil ze existuje nieco ako NVRAM, je to specialna pamat kde sa ukladaju nastavenia zariadenia.

Boot z USB
Hlavna myslienka bola prinut tento router bootovat s USB kluca? Preco? Viac miesta, vacsi diskovy priestor, sirsie moznosti. takze isiel som podla navodu na http://wiki.openwrt.org/UsbStorageHowto

Takze pekne po poriadku, do asusa som vlozil 256MB USB 2.0 kluc, nastartoval.

Ako prve potrebujeme loadnut moduly pre podboru usb (2.0) storageu takze:

ipkg install kmod-usb2
insmod ehci-hcd
ipkg install kmod-usb-storage
insmod scsi_mod
insmod sd_mod
insmod usb-storage
reboot

Takze to by bolo asi vsetko, slo to ako po masle nic nepiskovalo, ide sa dalej.
Dalej som si nainstaloval moduly pre podporu FS a to konkretne fat/ext2/ext3.

ipkg install kmod-vfat
ipkg install kmod-ext2 kmod-ext3
insmod fat
insmod vfat
insmod ext2
insmod jbd
insmod ext3

takze filesystemy mame zavedene, chcelo by to fdisk
ipkg install fdisk
mkdir -p /mnt

no a teraz si myslim ze mozete mountovat a umountovat kolko sa Vam zachce. Zariadenie sa zvycajne nachadza v /dev/scsi/host0/bus0/target0/lun0/part1 takze pohodicka.

A teraz prichadzam k casti ktora je dost zaujimava. Prinutenie OpenWRT bootnut z usb.
System je navrhnuty tak ze ak je v nom vlozeny pri starte USB kluc so systemom tak ho mountne ako / a zacne pouzivat. Pokial USB storage chyba tak sa system nastartuje z flash pamate zariadenia.

Kedze moduly mame loadnute tak mozeme sa pustit do vytvorenia particii. Particiu si mozete vytvorit bud na desktopovom pc alebo priamo vo wrte, ja som zvolil druhu moznost cez fdisk, ktory som si nainstaloval.

fdisk /dev/scsi/host0/bus0/target0/lun0/disc

naformatujeme si particiu na ext3.
ipkg install e2fsprogs
mke2fs -j /dev/scsi/host0/bus0/target0/lun0/part1

Takze teraz tam mame uz aj FS mozeme sa pustit do kopirovania:
# mount it
mount -t ext3 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt
# now, we need to mount the root contents somewhere so we can copy
# them without copying /mnt and /proc to the new usb device
mkdir /tmp/root
# if you're using squashfs, you want to copy the squashfs contents,
# not the jffs2 symlinks, so use the command:
mount -o bind /rom /tmp/root
# if you're using jffs2 then use the command /
mount -o bind / /tmp/root
# now /tmp/root contains the root filesystem with no extra directories mounted
# so we just copy this to the usb device
cp /tmp/root/* /mnt -a
# and now we unmount both the usb and our /tmp/root
umount /tmp/root
umount /mnt

A nakoniec nahradime script /sbin/init

rm /sbin/init
cat > /sbin/init

Prepastujeme tento script(uz upraveny pre usb2.0):
#!/bin/sh
# change this to your boot partition
boot_dev="/dev/scsi/host0/bus0/target0/lun0/part1"
# install needed modules for usb and the ext3 filesystem
# **NOTE** for usb2.0 replace "uhci" with "ehci-hcd"
# **NOTE** for ohci chipsets replace "uhci" with "usb-ohci"
for module in usbcore ehci-hcd scsi_mod sd_mod usb-storage jbd ext3; do {
        insmod $module
}; done
# this may need to be higher if your disk is slow to initialize
sleep 4s
# mount the usb stick
mount "$boot_dev" /mnt
# if everything looks ok, do the pivot root
[ -x /mnt/sbin/init ] && {
        mount -o move /proc /mnt/proc && \
        pivot_root /mnt /mnt/mnt && {
                mount -o move /mnt/dev /dev
                mount -o move /mnt/tmp /tmp
                mount -o move /mnt/jffs2 /jffs2 2>&-
                mount -o move /mnt/sys /sys 2>&-
        }
}
# finally, run the real init (from USB hopefully).
exec /bin/busybox init

Ctrl+D

zmenime prava:

chmod a+x /sbin/init
reboot

A ak ste nic nepokaslali a ja som to dobre napisal tak Vam system nabehne z USB kluca.

Ako ASUS skoro zomrel ...
Zatial slo vsetko po masle, ale ako spom spominal zacal som badat co je ta NVRAM, a hovorim si, ze skusim zrusit bridge a tak, nasiel som navody, vsetko krasne. Lenze bridge som odstranil, a teraz ze oslobodim aj lan interface, pomenil som vlany. ale tak kruto ze nic neslo, nvram commit, reboot a smolka. Asus zdochol, neodpovedal na pingy ani na jednom interface, cista koma, ako dalej?, zacal som googlit. Ako jedina schodna cesta sa mi zdala seriova linka do pc, lenze nemal som doma prevodniky nic, cize mrtvo. Ako som nahresil, ze aky som ja debil, cca o pol 2 rano ma napadlo, ze vyberiem usb kluc pozmenim init.d scripty a bootnem.
Mountol som disk v pocitaci, nasiel som si init script pre telnet, ved o nic nejde, pozmenil som ho aby mi pekne krasne nastavil nvram do povodneho stavu, par riadkov, nvram commit, reboot, nechal som Asus pusteny asi dve minutky. To mu musleo stacit, akonahle som videl ze mi odpoveda na pingy vypol som ho, vybral usb kluc, vlozil do pc, zakomentoval nvram settings a startol.
Fuuh takze problem nadobro zazehnany, tu vam pastnem nastavenia nvram ktore by mali dat masinu do poriadku:

## v pripade nudze dopisat do  /etc/init.d/S50telnet a odkomentovat
#nvram set wan_hostname=efko
#nvram set vlan0hwname=et0
#nvram set vlan0ports="1 2 3 4 5*"
#nvram set vlan1hwname=et0
#nvram set vlan1ports="0 5*"
#nvram set wan_ifname=vlan1
#nvram set wan_ipaddr=192.168.10.1 #ip wan interface
#nvram set wan_netmask=255.255.255.0
#nvram set wan_proto=static
#nvram set lan_ifname=br0 #bridge
#nvram set lan_ifnames="vlan0 eth2"
#nvram set lan_proto=static
#nvram set lan_ipaddr=192.168.1.200 #ip lan interface+wifi
#nvram set lan_netmask=255.255.255.0
#nvram commit
#sleep 5
#reboot

Asus mi funguje doteraz ;-)

Instlacia SW
Takze zaklad mame, networking ako tak ide, je nacase vyzbrojit masinku tym, na co som ju povodne chcel.
Kedze OpenWRT ma vlastny balickovaci system, tak niekedy je to velmi jednoduche. Najprv si nastavime repozitare balickov v /etc/ipkg.conf :

src whiterussian <a href="http://downloads.openwrt.org/whiterussian/packages" title="http://downloads.openwrt.org/whiterussian/packages">http://downloads.openwrt.org/whiterussian/packages</a>
src non-free <a href="http://downloads.openwrt.org/whiterussian/packages/non-free" title="http://downloads.openwrt.org/whiterussian/packages/non-free">http://downloads.openwrt.org/whiterussian/packages/non-free</a>
src backports <a href="http://downloads.openwrt.org/backports/0.9" title="http://downloads.openwrt.org/backports/0.9">http://downloads.openwrt.org/backports/0.9</a>

(dalsi zaujimavy repozitar: http://ipkg.nslu2-linux.org/feeds/unslung/wl500g)
Po nastaveni repozitarov nasleduje update lokalnej databazy takze:
ipkg update

Niektore ktore napr. nemame v repozitaroch tak ako napriklad ja mc:
ipkg -d root install <a href="http://ipkg.nslu2-linux.org/feeds/unslung/wl500g/ncurses_5.5-1_mipsel.ipk" title="http://ipkg.nslu2-linux.org/feeds/unslung/wl500g/ncurses_5.5-1_mipsel.ipk">http://ipkg.nslu2-linux.org/feeds/unslung/wl500g/ncurses_5.5-1_mipsel.ip...</a>
ipkg -d root install <a href="http://ipkg.nslu2-linux.org/feeds/unslung/wl500g/mc_4.1.35-3_mipsel.ipk" title="http://ipkg.nslu2-linux.org/feeds/unslung/wl500g/mc_4.1.35-3_mipsel.ipk">http://ipkg.nslu2-linux.org/feeds/unslung/wl500g/mc_4.1.35-3_mipsel.ipk</a>

Zvycajne staci pouzit len "ipkg install balicek" popripade "ipkg install url-balicka".

V mojom systeme mam nainstaloveny mc, screen, irssi, rrdtool, nmap, mtr, wl, php5+gd, lighttpd, ...

Zoznam balickov dostupnych v repozitaroch: ipkg list
Zoznam nainstalovanych balickov: ipkg list_installed

Mazanie, pridavanie balickov je taktiez mozne cez webove rozhranie, ale naco.

Ako spritulnit OpenWRT
Takze wrt je sw zariadeny, je nacase si trosku spritulnit ovladanie.
Ako prve som si zmenil login, uplne jednoducho vi /etc/passwd som prepisal root na fiwo - mal som tik v ruke pri ssh a zmenil home adresar na /home.
Prekopiroval som /etc/profile do /home. Nastavil si alias na mc pretoze sa mi nepaci cierny, a ja som chcel modry takze: alias mc="/opt/bin/mc -c".
Skusal som sa hrat s wifi, nastavil som si wifi ako AP ale kedze doma uz jedno mam tak som ho uplne vypol. Dalsim krokom bolo nakonfigurovanie lighttpd, vypol som spustanie web interface v init scripte, lebo len papalo ramku nic viac. Rozbehal som si statistiky na rrdtool a nastavil som ntp server:

nvram set ntp_server=ntp.sanet.sk
nvram commit

Pri nasledujucom restarte uz som mal Asus wl500gp prisposobeny skoro uplne podla mojich poziadaviek.

Wifi klient, remove bridge
Takze ked uz mam vsetko co mi treba, este by bolo slusne spravit z toho router ako sa to primarne vola.
Takze najprv si odstranime bridge:

nvram set lan_ifname=vlan0
nvram unset lan_ifnames

Nastavime si LAN interface:
nvram set lan_proto=static
nvram set lan_ipaddr=192.168.1.200
nvram set lan_netmask=255.255.255.0

Nastavime si wifi (eth2) interface:
nvram set wifi_ifname=eth2
nvram set wifi_proto=static
nvram set wifi_ipaddr=192.168.115.3
nvram set wifi_netmask=255.255.255.0
nvram set wifi_gateway=192.168.115.1
nvram set wifi_dns=62.65.163.7
nvram set wl0_ssid=net-wifi-ssid
#nastavime  client mod (sta-klient, ap-acces point, wet-bridgeovany klient)
nvram set wl0_mode=sta
#pri sta/wet nastavit 0-ad-hoc, 1-managed mode
nvram set wl0_infra=1
nepovinna zmena MAC u wifi:
nvram set wifi_hwaddr=00:00:00:00:00:01
nvram set wl0_hwaddr=00:00:00:00:00:01
#ulozenie nastaveni
nvram commit
reboot

Po starte mozte trosku experimentovat:

ipkg install wl
wl scan; sleep 1; wl scanresults
wl join wifi-net-ssid

NAT, network connect ...
Takze ked uz mame funkcne vsetky interface je nacase spravit NAT. v /etc/init.d/ sa nachadza script firewall, ktory je predom upraveny na natovanie.
Na zaciatku scriptu si zistuje premenne z NVRAM, kedze my ju mame pomenenu a on defaultne chce natovat medzi wan linkou a zvyskom tak mu to dame natvrdo.

Povodny zapis:

#WAN="$(nvram get wan_ifname)"
#WANDEV="$(nvram get wan_device)"
#LAN="$(nvram get lan_ifname)"

Nahradime:

WAN="eth2"
WANDEV="eth2"
LAN="vlan0"

Restartneme script a mozeme si uzivat plnohodnotne NAT.

Ked uz som mal vsetko nastavene napadlo mi ze by bolo dobre rozbehat vnstat aby som vedel kolko dat mi cez Asusa tecie. Balicek vnstat sa standartne nachadza v repozitaroch, cize s nim nebol problem, ale treba ho este trosku nastavit.

ipkg install vnstat
#kedze /var sa nam po restarte vymaze tak tu je riesenie"
mkdir /home/var
mkdir /home/var/lib
mkdir /home/var/lib/vnstat
#vytvorime odkaz. Kedze /var sa nam premaze pri s tarte tak si tento prikaz nakopirujeme napriklad niejakeho /etc/init.d/ scriptu (/etc/init.d/S98local - autorun scripty musia mat na zaciatku nazvu S<cislo>nazov inac sa nespustia)
ln -s /home/var/lib/ /var/lib
#vytvorime si db pre eth2-wifi
vnstat -u -i eth2
#pre lan
vnstat -u -i vlan0

Este vyeditujeme crontab a pridame:

* * * * * /usr/bin/vnstat -u 2>/dev/null 1>/dev/null

Takze tolko moja mensia skusenost s OpenWRT, mozno som v niektorych castiach nesiel do detailov ale dost vela som si uz nepamatal. Viem ze na slovenskom internete je minimum clankov s touto tematikou tak dufam, ze tento jedinec Vam pomoze a presvedci ak ste vahali s pouzitim tohto zariadenia.

Special thanx patri Pistikovi za rady a jeho skusenosti, siel to tohto vsetkeho so mnou, taktiez si kupil jedneho Asusa, stvara na nom tiez zaujimave kusky.

Viac info na:
http://openwrt.org
http://wiki.openwrt.org
http://wl500g.info
http://google.com

    • Re: OpenWRT a Asus WL-500GP 08.07.2007 | 15:30
      Avatar blackhole_kepro   Používateľ

      Pekna praca :)
      --
      TxX

    • Re: OpenWRT a Asus WL-500GP 09.07.2007 | 10:37
      hacmis   Návštevník

      Ja som tiez experimentoval S WRTckom v adhoc mode.
      mam 2 WRT54GL testoval som asterisk v Mesh sietach.
      celkom zaujimave.

    • super clanok 09.07.2007 | 11:40
      Avatar bhole   Používateľ

      perfektny clanok... nastavil som ti zato prava na power user (3). takze mozes robit este viac lepsich veci :)

      • Re: super clanok 12.07.2007 | 07:12
        Avatar patie   Návštevník

        to si mu mohol dat rovno 4. je tam diera jak hovado v tom levelovom systeme :D

        zivot je tazky - jeden z najtazsich

        zivot je tazky - jeden z najtazsich
    • Re: OpenWRT a Asus WL-500GP 09.07.2007 | 15:08
      Pistik   Návštevník

      velmi pekny clanok, vlastne prvy na .SK zaoberajuci sa touto problematikou. Clanok pre zaciatocnika ako stvoreny, ziadne zbytocnosti. Onedlho sa pustim do spravadzkovania samby, sftp (fiwo zacal) a VPN, + rozchodenie swapu lebo 32MB je malo ;). Snad to tie mipsy podrzia.
      fiwo: davaj bacha na NVRAM, neze zas bude panika na IRC ;) a na jej cistenie, teraz ma napadlo, co tak pridat link na script na precistenie NVRAM od zbytocneho bordelu co tam zanechali predosle firmwary ? No zalezi na kazdom ako so svojou masinkou bude narabat.

      • Re: OpenWRT a Asus WL-500GP 09.07.2007 | 16:40
        Avatar fiwo   Používateľ

        mno mozno dame niejaku update ale momentalne som sa vyriadil na clanku tak chytam novu energiu a skillz ;) a ten link na script daj ty lebo ja som ho sosl k sebe link zahodil ;)

        --
        stretlo ma stastie, povedalo mi ustup a slo dalej ...

        • Re: OpenWRT a Asus WL-500GP 10.07.2007 | 16:41
          Pistik   Návštevník

          NVRAM clean script - najbezpecnejsii sposob ako precistit NVRAM

          tu

    • Re: OpenWRT a Asus WL-500GP 10.07.2007 | 18:35
      Avatar phb   Používateľ

      OpenWRT rocks :)
      mozno niekoho zaujme tato praca ...

      Linksys WRT54G3G + podpora Flarion (Flash-OFDM) = T-Mobile rychly internet; PCMCIA kartou prijma signal a dalej to siri do okolia cez WiFi resp. kabel

      strucne wocogo:
      - OpenWRT, ipkg balicky pre tento system
      - uprava ovladacov tak aby fungovali pod OpenWRT
      - nejake tie fiiigle :P

      Praca na SVOS

      abstrakt k tejto praci
      ______________________________
      my life is better than sci-fi

      ______________________________ There are no great men, only great challenges that ordinary men are forced by circumstances to meet. -- Admiral William Halsey
    • Re: OpenWRT a Asus WL-500GP 11.03.2008 | 13:08
      Avatar blackhole_kepro   Používateľ

      som dalsi majtel Asus WL-500G Premium :))) uz aj s openwrt kamikaze
      --
      TxX Shell Server