OMG, my Fonera get bricked because I can't setup TFTP server!
Navodila opisujejo flashanje Fonere s pomočjo Ubuntu Linuxa, različica Edgy. Po potrebi lahko uporabimo tudi live CD, vendar pa potrebujemo omrežno povezavo saj je potrebno namestiti TFTP strežnik in morda še putty odjemalca.
Potrebujemo:
Prvi korak v osvoboditev Fonere je pridobitev SSH dostop do usmerjevalnika.
Najprej pogledamo katera različica firmware je naložena na dostopni točki. To storimo preko spletnega vmesnika s pogledom na statusno stran. Če je različica 0.7.1 r1, smo že na pravi poti, sicer pa je dostopno točko potrebno resetirati z nekajsekundnim pritiskom na gumb na spodnji strani naprave (naprava mora biti med tem vključena). Med tem postopkkom napravo tudi izključimo iz omrežja, saj se v nasprotnem primeru firmware sam obnovi.
Sedaj lahko preko napake v spletnem vmesniku dostopni točki pošiljamo ukaze. Najprej se prijavimo na dostopno točko (z uporabniškim imenom “root” in geslom “admin”), nato pa pošljemo ukaz, ki odpre SSH vrata na dostopni točki, nato pa še ukaz, ki zažene SSH daemon. S tem smo pridobili dostop na sovražnikov ozemlje.
V sovražno državo smo poslali prvo obveščevalno celico in dobro je, da si pustimo odprta vrata tudi za v bodoče. Prijavimo se torej na dostopno točko preko SSH:
ssh -l root 192.168.10.1
Geslo za uporabnika “root” je ponovno “admin”.
Vnesemo ukaz, ki bo ob zagonu dostopne točke pognal tudi SSH daemon:
mv /etc/init.d/dropbear /etc/init.d/S50dropbear
V /etc/firewall.user je potrebno odkomentirati naslednje vrstice (odstranimo znak #), da bodo tudi SSH vrata vedno odprt:
iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT
V primeru, da bomo dostopno točko sedaj priključili na internet, je dobro, da onemogočimo samodejno nadgrajevanje. V datoteki /bin/thinclient je potrebno zakomentirati zadnjo vrstico in dodati novo. Tako konec datoteke izgleda:
#. /tmp/.thinclient.sh cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M')
Sedaj sledi naslednja stopnja v boju za svobodo. Najprej se prijavimo na dostopno točko preko ssh povezave:
ssh -l root 192.168.10.1
Vzpostaviti je potrebno opozicijo, ki bo po vojaški intervenciji prevzela oblast. Namestimo torej Red Boot zagonski nalagalnik (ang. boot loader), ki nam kasneje omogoča nalaganje operacijskega sistema v firmware oz. prihod “demokratičnih sil” na oblast. Potrebujemo datoteko:
Datoteko prekopiramo na dostopno točko:
scp openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma root@192.168.10.1:~/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
Na dostopni točki poženemo ukaz (ki traja nekaj minut):
mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7 reboot
V naslednjem koraku je potrebno opozicijo “demokratizirati”, se pravi nastaviti zagonski nalagalnik. Potrebujemo datoteko:
Datoteko skopiramo na dostopno točko:
scp out.hex root@192.168.10.1:~/out.hex
In na dostopni točki poženemo ukaz:
mtd -e "RedBoot config" write out.hex "RedBoot config" reboot
Najprej namestimo TFTP strežnik:
sudo apt-get install tftp-hpa tftpd-hpa
V datoteki /etc/default/tftpd-hpa nastavimo:
RUN_DAEMON="yes" OPTIONS="-l -s -c /tftpboot"
Ustvarimo TFTP podimenik, kjer se bodo nahajale datoteke, ki jih potrebujemo za flashanje:
sudo mkdir /tftpboot sudo chmod 777 /tftpboot
Vanj prekopiramo potrebne datoteke in nastavimo pravice (recimo iz /media/…..):
sudo cp /media/...../openwrt-atheros-2.6-root.jffs2-64k /tftpboot/ sudo cp /media/...../openwrt-atheros-2.6-vmlinux.lzma /tftpboot/ ... sudo chmod 666 /tftpboot/*
Nastavljanje pravic je precej pomembno, saj v nasprotnem primeru prenos preko TFTP ne deluje.
Zaženemo TFTP strežnik:
sudo /etc/init.d/tftpd-hpa start
Na omrežni vmesnik eth0 vklopimo križni UTP kabel in ga povežemo s Fonero ter nastavimo lokalni IP 192.168.1.166:
sudo ifconfig eth0 192.168.1.166 netmask 255.255.255.0 up
Lahko pa Fonero priključimo na omrežno stikalo in si nastavimo dodaten IP na eth0 omrežnem vmesniku:
sudo ifconfig eth0:1 192.168.1.166 up
Izključimo požarni zid:
sudo iptables -I INPUT -p udp --dport tftp -j ACCEPT
Testiramo TFTP strežnik:
tftp 192.168.1.166
Vpišemo:
get openwrt-atheros-2.6-root.jffs2-64k
Če ne javi napake, TFTP strežnik deluje!
Sedaj se na Fonero priključimo s pomočjo telneta na IP 192.168.1.254, vrata 9000. Če je na Foneri že naložen sistem (če jo želimo ponovno flashati), je treba po prijavi v RedBoot poslati Ctrl-C. Žal običajni telnet odjemalci tega ne znajo, zato si lahko pomagamo z odjemalcem putty:
sudo apt-get install putty
Poženemo ga iz konzole z ukazom:
putty
V puttyu ne pozabimo izbrati telnet protokola (privzeti protokol je ssh) in nastaviti vrat na 9000! Še opozorilo: pri nalaganju datotek preko TFTP strežnika v puttyu včasih dobimo malce čuden izpis.
Fonero priključimo na električno omrežje in se v prvih 10 sekundah povežemo nanjo:
telnet 192.168.1.254 9000
Povezovanje je morda potrebno večkrat ponoviti, ker se mora Fonera najprej dovolj “zbuditi”. Ko se povežemo na Fonero dobimo naslednji izpis:
Trying 192.168.1.254... Connected to 192.168.1.254. Escape character is '^]'. == Executing boot script in 9.360 seconds - enter ^C to abort RedBoot> No image 'vmlinux.bin.l7' found RedBoot> Can't execute Linux - invalid entry address
Vpišemo ukaz:
ip_addr -h 192.168.1.166 -l 192.168.1.254/24
Dobimo izpis:
IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0 Default server: 192.168.1.166
Vpišemo ukaz:
fis init
Dobimo izpis:
About to initialize [format] FLASH image system - continue (y/n)?
Vpišemo:
y
Dobimo izpis:
Initialize FLASH Image System ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
Vpišemo ukaz:
load -r -v -b 0x80040450 openwrt-atheros-2.6-root.jffs2-64k
Dobimo izpis:
Using default protocol (TFTP) - Raw file loaded 0x80040450-0x801e044f, assumed entry at 0x80040450
Vpišemo ukaz:
fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs
Dobimo izpis:
... Erase from 0xa8030000-0xa8730000: ............................................... ... Program from 0x80040450-0x80740450 at 0xa8030000: ................................ ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
Vpišemo ukaz:
load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
Dobimo izpis:
Using default protocol (TFTP) Raw file loaded 0x80040800-0x800f07ff, assumed entry at 0x80040800
Vpišemo ukaz:
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
Dobimo izpis:
... Erase from 0xa8730000-0xa87e0000: ........... ... Program from 0x80040800-0x800f0800 at 0xa8730000: ........... ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
Vpišemo ukaz:
fis load -l vmlinux.bin.l7
Dobimo izpis:
Image loaded from 0x80041000-0x80290086
Vpišemo ukaz:
exec
Čez nekaj časa, ko se Fonera zbudi, se nanjo lahko telnetamo:
telnet 192.168.1.1 23
Nakar si takoj nastavimo geslo z ukazom:
passwd
Sedaj se lahko na Fonero prijavimo tudi s pomočjo ssh protokola:
ssh -l root 192.168.1.1
… in po vnosu gesla smo že prijavljeni v Fonero:
root@192.168.1.1's password:
BusyBox v1.4.1 (2007-03-04 21:35:19 CET) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (bleeding edge, r6511) -------------------
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
---------------------------------------------------
root@OpenWrt:~#
V tem trenutku lahko na vojaški ladji skličemo tiskovno konferenco in nazdravimo zmagi. Seveda pa nas čaka še nekaj dela.
Po končanem postopku si na svojem računalniku nastavimo stari IP naslov oz. ugasnemo eth0:1, nazaj vključimo privzeti požarni zid ter ugasnemo TFTP strežnik.
sudo /etc/init.d/tftpd-hpa stop sudo apt-get remove --purge tftpd-hpa sudo rm -r /tftpboot/ sudo ifconfig eth0:1 down sudo iptables -I INPUT -p udp --dport tftp -j DROP
Fonera je sedaj svobodna!
Sedaj na dostopni točki teče osnovna OpenWrt Linux distribucija. Ker smo torej Fomero osvobodili in vzpostavili demokracijo se odločimo kakšen bo prihodnji tip vladavine, ljudstvo pa naši odločitvni pritrdi na svobodnih volitvah. Odločimo se lahko med:
Zahvaljujemo se Modremu Vodji za pametne besede in misli, ki nam jih je namenil in s pomočjo katerih lahko duh svobode in resnice širimo po vsem svetu.