Mostrando entradas con la etiqueta fonera. Mostrar todas las entradas
Mostrando entradas con la etiqueta fonera. Mostrar todas las entradas

DD-WRT en la fonera


Para entrar al RedBoot usar el mismo procedimiento que para OpenWrt:
descargar linux.bin, preparar un servidor tftp, etc.

telnet 192.168.1.1 9000   
 == Executing boot script in 8.530 seconds - enter ^C to abort
    ^C
    RedBoot> ip_address -l 192.168.1.1/24 -h 192.168.1.100
    IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0
    Default server: 192.168.1.166

    RedBoot> fis init
    About to initialize [format] FLASH image system - continue (y/n)? y
    *** Initialize FLASH Image System
    … Erase from 0xa87e0000-0xa87f0000: .
    … Program from 0×80ff0000-0×81000000 at 0xa87e0000: .
    RedBoot> load -r -b 0x80041000 linux.bin
    Using default protocol (TFTP)
    Raw file loaded 0×80041000-0×80684fff, assumed entry at 0×80041000
    RedBoot> fis create linux
Tardará unos 15 minutos, procurar no ponerse nervioso ni tocar nada.
    RedBoot> fconfig //Pulsa enter//
    Run script at boot: true //Pulsa enter//
    Boot script:
    .. fis load -l vmlinux.bin.l7
    .. exec
    Enter script, terminate with empty line
Saldrá un nuevo prompt (>>) donde se introducen los siguientes comandos:
    >> fis load -l linux //Pulsa enter//
    >> exec //Pulsa enter//
    >> //Pulsa enter//
A continuación salen una serie de preguntas sobre parámetros de configuración:
    Boot script timeout (1000ms resolution): 10 //Pulsa enter//
    Use BOOTP for network configuration: false //Pulsa enter//
    Gateway IP address: //Pulsa enter//
    Local IP address: 192.168.1.254 //Pulsa enter//
    Local IP address mask: 255.255.255.0 //Pulsa enter//
    Default server IP address: <blank> //Pulsa enter//
    Console baud rate: 9600 //Pulsa enter//
    GDB connection port: 9000 //Pulsa enter//
    Force console for special debug messages: false //Pulsa enter//
    Network debug at boot time: false //Pulsa enter//
    Update RedBoot non-volatile configuration - continue (y/n)? y //Pulsa enter//
    … Erase from 0xa87e0000-0xa87f0000: .
    … Program from 0×80ff0000-0×81000000 at 0xa87e0000: .
    RedBoot>reset //Pulsa enter//

 

Ya tenemos dd-wrt instalado en la fonera,
ahora podremos cambiar nuestra ip a una del rango 192.168.1.0/24
y entrar a la 192.168.1.1 para ver el menú de administracion
Nombre: root
Password: admin

Compilación cruzada (OpenWrt)

Descargo en primer lugar toda la rama de desarrollo del svn de OpenWrt:

~$ svn co https://svn.openwrt.org/openwrt/trunk/

Error validando el certificado del servidor de 'https://svn.openwrt.org:443':
- El certificado no fue emitido por una autoridad marcada como

( Bla, bla, bla... )

- "Huella": a1:0a:d8:2d:af:4e:67:92:18:a0:27:b6:9f:2b:e1:12:08:28:a0:b1
¿(R)echazar, aceptar (t)emporariamente o aceptar (p)ermanentemente? t

Se nos crea en el HOME un directorio trunk/ con todo el tinglado necesario para compilar .
Es necesario tener instalados los siguientes paquetes gcc, binutils, patch, bzip2, flex, bison,make, gettext, pkg-config, unzip, ibz-dev y libc headers para que no nos de error el
~/trunk$ make menuconfig donde podremos configurar el toolchain y el firmware:



Hago los cambios oportunos y salgo guardándolos.
Continúo con un interminable
~/trunk$ make
que descargará las fuentes, construirá las herramientas para la compilación cruzada y compilará el firmware.

:~/trunk$ make
++ mkdir -p /home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2
++ cd /home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2
++ mkdir -p bin lib include stamp
Checking 'bison'... ok.
make[1] world
make[2] tools/install

( Más bla, bla, bla )

make[2] package/rootfs-prepare
make[3] package/preconfig
make[2] target/install
make[3] -C target/linux install
make[3] -C target/sdk install
make[2] package/index


En ~/trunk/bin tendremos nuestro nuevo firmware con el que podremos flashear la fonera.

*Compilar programas

Preparo un script llamado sdk el cual al invocarlo con el menu ( uso pekwm como gestor de ventanas ) exporta la variable $PATH con la ruta hacia los binarios del compilador y la variable CC para que use el compilador de C para architectura MIPS.

export PATH=$PATH:/home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2/bin/
export CC=mips-linux-uclibc-gcc
cd /home/kir/trunk/package
TERM="xterm -fn fixed +sb -bg black -fg green -T sdk"
$TERM


Doy permiso de ejecución al script y lo guardo en un directorio en la ruta del PATH.

En ~/.pekwm/menu añado una entrada que llama a un xterm con los settings anteriores:
Entry = "SDK" { Actions = "Exec $TERM -iconic -e sdk &" }

* wavemon

Descargo las sources de wavemon con apt en /home/kir/trunk/package , aplico el parche http://kir.sdf-eu.org/wavemon_patch/ y hago un ./configure --host=mips-linux.
No da ningun error y ejecuto un make:
Ahora sí que da error, no encuentra ncurses.h
mips-linux-uclibc-gcc -O2 -Wall -c -o ui.o ui.c
ui.c:25:21: error: ncurses.h: No such file or directory

Creo que toca compilar ncurses.

$ cd build_dir/mips/ncurses-5.6/
./configure --host=mips-linux
make

Copio los archivos de ~/trunk/build_dir/mips/ncurses-5.6/lib
y ~/trunk/build_dir/mips/ncurses-5.6/include a ~/trunk/staging_dir/toolchain-mips_gcc4.1.2/include
y bin/
respectivamente.Creo el enlace simbólico ncurses.h que apunta a curses.h y repito el make para wavemon.
Aparecen varios warning pero finalmente compila sin errores:
file wavemon
wavemon: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
ls -l wavemon
-rwxr-xr-x 1 kir kir 78695 2008-09-17 09:34 wavemon

A continuación "estripo" el binario para que ocupe menos:
mips-linux-strip wavemon
file wavemon
wavemon: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped
ls -l wavemon
-rwxr-xr-x 1 kir kir 71280 2008-09-17 09:41 wavemon
.
Con strip el binario se redujo de 78965 a 71280 bytes.
Sólo queda pasarlo a la fonera con scp, wget o como nos venga en gana y disfrutarlo:

* Netdiscover

Descargo las fuentes de netdiscover con apt:
~/trunk/package$ apt-get source netdiscover
cd netdiscover-0.3beta6/
~/trunk/package/netdiscover-0.3beta6$ ./configure --host=mips-linux
.....
checking for pcap.h... no
configure: error: Cannot find pcap.h - You need libpcap installed.


Necesita libpcap, que ya está en
~/trunk$ cd build_dir/mips/libpcap-0.9.8/

En ~/trunk/build_dir/mips/libpcap-0.9.8/ipkg-install/usr tenemos los directorios include/ y lib/ . Copio su contenido a ~/trunk/staging_dir/toolchain-mips_gcc4.1.2/include y lib/ como anteriormente y repito el .configure
./configure --host=mips-linux

checking for libnet.h... no
configure: error: Cannot find libnet.h - You need libnet installed.


Bien, ya tragó con libpcap pero se atraganta con libnet, así que lo descargo.
~/trunk/package$ wget http://downloads.openwrt.org/sources/libnet.tar.gz
~/trunk/package$ tar zxvf libnet.tar.gz
~/trunk/package$ cd libnet/

El configure no da problemas pero make muestra un error:
In file included from libnet_asn1.c:60:
../include/libnet.h:117:10: error: macro names must be identifiers

Edito la línea que es un #define 1 y la cambio a #define LIBNET_BIG_ENDIAN 1
A continuación ejecuto el make sin ningún error (aunque da varios warnings) pero no me aparece ningun directorio con las librerias.
Cambio la estrategia e instalo otra versión desde el mismo ftp de OpenWrt: wget http://downloads.openwrt.org/sources/libnet-1.0.2a.tar.gz

Descomprimo, cambio al directorio, bla, bla, bla... y no funciona.

Nuevo intento descargando libnet con apt
~/trunk/package$ apt-get source libnet1
...
In file included from libnet_asn1.c:60:
../include/libnet.h:117:10: error: macro names must be identifiers

Ya empezamos ...
Edito y añado LIBNET_BIG_ENDIAN a la linea del #define 1 (#define LIBNET_BIG_ENDIAN 1) y voilà que compila el jodido!
Ahora toca copiar los archivos .h y las librerias como anteriormente.. y sigue sin ir la cosa.

Vuelvo a ejecutar el configure con la opción --prefix:
./configure --host=mips --prefix=/home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2/
make
make install


Compila y se instala sin errores; cambio al directorio de netdiscover y
~/trunk/package/netdiscover-0.3beta6$ ./configure --host=mips-linux

y....

checking libnet.h usability... yes
checking libnet.h presence... yes
checking for libnet.h... yes

~/trunk/package/netdiscover-0.3beta6$ make
O.K.
cd src
file netdiscover
netdiscover: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
ls -l netdiscover
-rwxr-xr-x 1 kir kir 441081 2008-09-18 09:36 netdiscover
mips-linux-strip netdiscover
file netdiscover
netdiscover: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped
ls -l netdiscover
-rwxr-xr-x 1 kir kir 367388 2008-09-18 09:38 netdiscover


Parece ser que para usar nuevas librerías, hay que compilarlas usando la opción --prefix en el ./configure; así le indicamos el compilador dónde está el lib/ y el /include .

Los binarios están en http://kir.sdf-eu.org/kamikaze_808



Enlaces:
Documentación de Kamikaze
OpenWrt Programming
Build-root documentation
Compilación cruzada

¡Más fonera!


El lunes 12 pedí otra fonera y me ha llegado hoy. Despues de flashearla, que por otra parte me costó lo suyo, la preparé para que se conecte automáticamente a la primera red que pille.

0 - Evitar que se inicie el firewall

chmod -x /etc/init.d/firewall

1 - Crear el script /bin/cliente y darle permiso de ejecución.

ifconfig ath1 down
wlanconfig ath1 destroy
wlanconfig ath1 create wlandev wifi0 wlanmode sta nosbeacon
ifconfig ath1 up
ifconfig eth0 192.168.1.1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ath1 -j MASQUERADE
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT


2 - Crear el script /etc/init.d/auto con permiso de ejecución.

START=70
{
cliente
udhcpc -i ath1
}


3 - Hacer el siguiente enlace simbólico:

ln -s /etc/init.d/auto /etc/rc.d/S70auto


Al reiniciar la fonera se conectará automáticamente a la red a la que se haya asociado.

El pc tiene que estar en el rango 192.168.1.x
Si no hay conexión a internet probar con dhclient.

La Foneruca


Hice un pedido a FON el dia 2-11 y me llegó el 6-11. Viva Varsavsky y la madre que lo parió.
Se trata del modelo 2200 con firmware 0.7.1-r2.
El ssh ya no se puede abrir con inyección de código html como en la versión anterior. Por lo que leo, haciendo reset vuelve al firmware 0.7.1-r1. Por más que pruebo no me funciona este método.
Otra forma de abrirlo necesita el uso de un router para conectarla a internet. Como no tengo router descarto este método. ¿Qué más formas hay?

Veamos:
El siguiente texto en italiano está copiado de:
http://www.paologatti.it/2007/01/19/effettuare-il-downgrade-della-fonera-al-firmware-071r1

Hack di Daniele:

  • premete l’nterruttore posto nella parte inferiore della Fonera per 60 secondi
  • staccate l’alimentazione dal dispositivo per 10 minuti
  • collegate La Fonera (sconnessa da internet) al computer
  • accedete all’interfaccia web e notate che la versione del firmware è 0.7.1r1
Con este método no consigo nada. Puede que la fonera traiga ya de fábrica el firm 0.7.1r2.
Habría que abrirla para saberlo y hoy no estoy por la labor.

Hack di Manuele:

  • connettevi all’interfaccia web della Fonera e, utilizzando le voci Avanzato -> Aggiornamento firmware, caricate il firmware 0.7.0r4 scaricabile a questo link (attenzione: è un pacchetto compresso, prima di utilizzarlo decomprimetelo!)
  • quando il caricamento del firmware si blocca, staccate l’alimentazione e riattaccatela dopo qualche secondo
  • al prossimo avvio della Fonera dovreste avere il firmware 0.7.0r4
  • connettete ad internet la Fonera, connettetevi ad essa via wireless e aspettate un po’ in modo da farla aggiornare automaticamente al firmware 0.7.1r1 (per capire quando l’operazione è terminata, osservate la connessione wireless: si scollegherà automaticamente a fine aggiornamento!). A questo punto, scollegate immediatamente la connessione ad internet dalla Fonera, altrimenti verrà effettuato automaticamente anche l’aggiornamento a 0.7.1r2

Notizia dell’ultimo minuto: due tedeschi (precisamente Stefans Datenbruch e Michael), hanno trovato un hack per aprire la porta SSH anche sulle Fonere equipaggiate (di fabbrica) con firmware 0.7.1-r2!

Per chi volesse provarlo subito, può seguire le seguenti istruzioni:

  1. cambiate il nameserver della Fonera in 88.198.165.155 (la voce è presente nell’interfaccia web in Avanzato -> Connessione Internet -> Server DNS. Nel caso in cui utilizziate la connessione tramite DHCP per cambiare nameserver fate così: dell’interfaccia web della Fonera clickate sullo Stato, segnatevi Indirizzo IP e Indirizzo gateway, andate in Avanzato -> Connessione Internet, cambiate il Modo da DHCP a IP statico e reinserite i dati che vi eravate appuntati, con l’eccezione del server DNS che dovrà essere 88.198.165.155 e della Maschera di rete che sarà 255.255.255.0)
  2. riavviate la Fonera
  3. ora potete connettervi via SSH (utilizzando Putty, se siete utenti Windows o ssh da linea di comando se siete utenti *unix/Mac). Se volete aprire permanentemente questa porta, seguite le istruzioni indicate in questo post (eseguite solo i comandi da mv /etc/init.d/dropbear /etc/init.d/S50dropbear
    in poi) o applicate la mia patch come descritto in quest’altro post (in questo caso, eseguite solo i comandi da # cd /tmp in poi)
  4. ripristinate i nameserver della Fonera con quelli che avevate precedentemente

Per chi volesse capire come funziona in dettaglio l’hack, può dare uno sguardo qui.


* * * *

Flashear la fonera

(Tomado de http://hardcode.es/2007/11/02/flashea-tu-nueva-fonera-2200-con-openwrt/)

1- Entrar al RedBoot por
192.168.1.1:9000

Descargar este archivo

Poner en /etc/network/interfaces :

address 192.168.1.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

/etc/init.d/networking restart

Abrir un terminal y poner:

ping 192.168.1.1

y en otro (sin pulsar entr aún) :

nc -vv 192.168.1.1 9000 < break
telnet 192.168.1.1 9000
en un terminal
De este modo se llega al prompt del redboot.

2- Descargar los ficheros rootfs y lzma y ponerlos a servir usando TFTP

Copiar los archivos descargados a /var/lib/tftpboot
Lanzar el servidor tftp:

sudo /etc/init.d/tftpd-hpa start


3- Ejecutar los siguientes comandos en la fonera
(En ipaddr poner la nuestra en el rango 192.168.1.xxx) :

fis init
ip_addr -h 192.168.1.100 -l 192.168.1.1/24
load -r -v -b 0x80041000 openwrt-atheros-2.6-root.squashfs
fis create -b 0x80041000 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs
load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
fis load -l vmlinux.bin.l7
exec

4- Una vez Flasheada hay que entrar por telnet a 192.168.1.1:23 para hacer un passwd y cambiar la contraseña.
A partir de ahí se podrá entrar por ssh:

ssh root@192.168.1.1




La Fonerina

Abrir el ssh de la fonera


1. Esto sirve para la fonera con firm 0.7.1 r1

2. Ver la siguientes páginas para crear los ficheros first.html y second.html

http://www.mariomix.net/mariomix-blog/2006/11
/hacking-la-fonera-parte-3/

http://www.mardito.com/weblog/?p=2007


3. Configurar la tarjeta de red del PC con los siguientes valores:

IP: 169.254.255.2
Mask: 255.255.255.0
Gateway: 169.254.255.1
DNS: 169.254.255.1

4. Conectar la fonera al puerto ethernet del PC con un cable de red cruzado, esperar un par de minutos
y abrir en un navegador la direccion http://169.254.255.1
Cuando nos salga la página de configuración de la fonera abrimos otra pestaña en el navegador y en
ella abrimos el fichero first.html y pulsamos en "Submit". Si pide user y pass eastos serán "admin".

5. Abrir en otra pestaña el fichero second.html y pulsar "Submit".

6. En un terminal poner ssh root@169.254.255.1 y usar "admin" como password.

7. Una vez en el shell (root@OpenWrt) escribir:

mv /etc/init.d/dropbear /etc/init.d/S50dropbear (ENTER)

8. Editar:

vi /etc/firewall.user y descomentar las dos lineas siguientes:


# 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

Salvar el fichero y salir al prompt (Esc :wq ENTER)


9. Editar:

vi /bin/thinclient
Comentar la linea :

. /tmp/.thinclient.sh

y a continuación insertar la linea siguiente:

cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M')

Salvar y salir.

10. Si se hizo todo sin errores la próxima vez que enchufemos la fonera tendremos ya el
server ssh activo y podremos entrar con ssh root@169.254.255.1



La fonera en modo cliente

Ver http://www.fonera.info/index.php/topic,20.0.html (post #12 de PeriBrown)

Crear el fichero cliente: vi cliente que contenga:

#Si el firm es kamikaze añadir esta linea al script:
#con el firm de fon no hace falta
/etc/init.d/firewall stop

##Bajamos los interfaces
ifconfig ath0 down
ifconfig ath1 down
##ifconfig eth0:1 down

##Creamos ath0 para modo monitor
wlanconfig ath0 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode monitor

##Creamos ath1 para modo managed
wlanconfig ath1 destroy
wlanconfig ath1 create wlandev wifi0 wlanmode sta nosbeacon

##Subimos los interfaces
ifconfig ath0 up
ifconfig ath1 up
ifconfig eth0 169.254.255.2
# Con el firm kamikaze eth0 la tengo como 192.168.1.1

##Para conectarnos a traves de la fonera a traves de ath1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ath1 -j MASQUERADE
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT

Salvarlo y darle permiso de ejecución:

chmod +x cliente

Despues de activar el script (./cliente) se pueden ver las redes vecinas con

iwlist ath1 scan


Para conectar a una red conociendo su rango de ip (sin encriptacion) :

iwconfig ath1 essid

ifconfig ath1 192.168.1.100 (una ip dentro del rango)
route add default gw 192.168.1.1 ath1 (de gw la ip del router)
( suponiendo que esas sean las correctas del ap al que nos conectamos )


*Nota
Tambien podemos conectarnos a una red asociandonos a ella:
iwconfig ath1 essid
udhcpc --interface=ath1

Para comprobar si hay conexión basta hacer un ping www.google.es
desde la fonera y desde la máquina conectada a esta por ethernet.