OpenWRT

Este manual introductorio fue escrito por Andres Gomez de la RICB y Jorge Gonzalez de Zoociedad, para la democratización de documentación en español sobre OpenWRT.

Que es OpenWrt ?

De Wikipedia : OpenWRT es una distribución de Linux basada en firmware usada para dispositivos empotrados tales como routers personales.

El desarrollo de OpenWRT fue impulsado inicialmente gracias a la licencia GPL y su carácter vírico, que impulsaba a todos aquellos fabricantes que modificaban y mejoraban el código, a liberar éste y contribuir cada vez más al proyecto en general. Poco a poco el software ha ido creciendo y se encuentran características implementadas que no tienen muchos otros fabricantes de dispositivos comerciales para el sector no profesional, tales como QoS, VPN y otras características que dotan a OpenWRT de un dispositivo realmente potente y versátil, apto para utilizar los hardware donde corre OpenWRT no sólo para utilizarlos como routers, sino como servidores de archivo, nodos P2P, servidores de WEBcams, firewall o puertas de acceso VPN.

¿ Porque crear una imagen propia del OpenWrt?

El Slogan de OpenWrt nos da una primera idea: "WIRELESS FREEDOM".

El programador experimental encontrará en OpenWrt un sistema operativo de código Abierto para sistemas embebidos WIFI, muy completo, documentado y avanzado; como todo Software Libre, podrá modificarlo, estudiarlo, adaptarlo y así crear su distribución personalizada.

Quien quiere expermimentar con OpenWrt encontrará la libertad de los routers inalámbricos, tendrá a mano todas las opciones para hacer de éstas máquinas casi cualquier cosa; ventajas del software libre y la difusión del conocimiento que la visión mercantilista y privada no permite.

Se puede personalizar un Router Inalámbrico para que haga cosas como: streaming de audio, streaming de video, uso de archivos de una USB, uso de discos duros, montaje de servidores FTP, P2P, servidores web, de correo, etc.,.... Solamente se personaliza OpenWrt y se crea una imagen.... el nuevo firmware del router.

Nuestra motivación particular e inicial es modificar un router y poder utilziarlo para correr protocolos de enrutamiento que nos permitan crear una red Mesh, donde muchos nodos se interconceten y haya eficiencia en la comunicación de paquetes, que en la práctica redundará en una gran red con acceso a muchos nodos y clietes comunitarios.

MANUAL OpenWrt

Inicialmente este manual está basado en el publicado en la página oficial de OpenWrt y en su puesta en práctica:

http://wiki.openwrt.org/inbox/howto.build.openwrt

Aunque este manual es más extenso y prentende responder todas las preguntas que en la práctica surgieron y que muchas otras que pudieran surgir.

A continuación se explican diversos procedimientos que nos permitirán al final desarrollar un firmware para los router inalámbircos, que esten personalizados de acuerdo a nuestras necesidades.

NOTA!!!! CONVENCIONES - ANTES DE EMPEZAR

Debido a que se incluirán muchos códigos se adopta las siguientes onvenciones para evitar confusiones:
 

 Código con fondo blanco: Comandos en consola de Linux, a insertar por el usuario.
Código con fondo azúl: Mensajes en consola de Linux, generados por el PC.
Código con fondo verde: Comandos en consola de OpenWrt, a insertar por el usuario.

Dispositivos Soportados

Como se dijo en "Que es OpenWrt?" muchas personas han trabajado altruistamente para que cada vez más dispositivos puedan trabajar con OpenWrt. Si ya se ha adquirido un Router en específico o se va a adquirir, aquí está la lista de dispositivos soportados, organizados por marca (fabricante):

http://wiki.openwrt.org/oldwiki/tableofhardware

Aunque el dispositivo estrella para OpenWrt es el Router Linksys WRT54G, vamos a experimentar con el Router Ubiquiti Nanostation 2.

Router Ubiquiti Nanostation 2

Creacion de una imagen de OpenWrt

Pasos previos

  1. Tener un sistema adecuado para construir la imagen de OpenWrt
  2. Asegurarse que las dependencias necesarias están instaladas
  3. Copiar el código fuente del OpenWrt

Para lograr cada uno de estos pasos tenemos:

Sistema adecuado

Cuando se dice "tener un sistema adecuado" se refiere al sistema operativo donde podamos correr el ambiente de desarrollo del OpenWrt.

Debido a que OpenWrt es un proyecto esencialmente desarrollado bajo plataformas libres de Linux, el sistema operativo ideal para trabajar con OpenWrt es éste, Linux.

Este manual se desarrolla con base a una distribución de linux basada en Debian, así si tienes Ubuntu instalado, te sirve este manual.

Dependencias

Haciendo uso de la consola y sistema de comandos de Debian.

Actualización de repositorios: es importante que habitualmente se actualicen los repositorios. Recordar que los repositorios son almacenamientos centralizados de archivos donde encontramos todas las actualizaciones pertientes de los aplicactivos que se haya instalado (y del sistema en general), por ejemplo en Ubuntu, y también se encuentran todos los paquetes para instalación de nuevos aplicativos. Cuando instalamos un programa usando la consola de Linux o los gestores de paquetes como el Synaptic, se hacen requerimientos de paquetes a los repostiorios

Para dicha actualización simplemente en la consola de linux usamos los comandos:

 sudo apt-get update

Pide la clave de root y listo (cuidado, usualmente se necesita conexión a internet, a menos que se tenga el CD y se configuren los repositorios, pero eso es otro tema).

Las dependencias necesarias son compiladores, aplicaciones descomprimidas, librerías específicas, etc., Se hace esto para alistar el sistema y que pueda generar el ambiente de desarrollo del OpenWrt y pueda luego compilar la imagen.

En la consola:

sudo apt-get install g++ libncurses5-dev zlib1g-dev bison flex unzip autoconf gawk make gettext gcc 
binutils patch bzip2 libz-dev libc6-dev linux-headers-2.6.28-15 

Se debe generar un informe algo así:

Checking 'working-make'... ok. <br>
Checking 'case-sensitive-fs'... ok. <br>
Checking 'getopt'... ok. <br>
Checking 'fileutils'... ok. <br>
Checking 'working-gcc'... ok. <br>
Checking 'working-g++'... ok. <br>
Checking 'ncurses'... failed. <br>
Checking 'zlib'... ok. <br>
Checking 'gawk'... failed. <br>
Checking 'flex'... failed. <br>
Checking 'unzip'... ok. <br>
Checking 'bzip2'... ok. <br>
Checking 'patch'... failed. <br>
Checking 'perl'... ok. <br>
Checking 'python'... ok. <br>
Checking 'wget'... ok. <br>
Checking 'gnutar'... ok. <br>
Checking 'svn'... ok. <br>
Checking 'gnu-find'... ok. <br>
Checking 'getopt-extended'... ok. <br>
Checking 'non-root'... ok. <br>
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h) <br>
Build dependency: Please install GNU awk. <br>
Build dependency: Please install flex. <br>
Build dependency: Please install patch. <br>
Prerequisite check failed. Use FORCE=1 to override. <br>
make: *** [tmp/.prereq-build] Error 1 

Como se puede observar en este caso muestra la verificación de los paquetes necesario, y hay unos que han fallado (failed); para poder continuar se necesita que este reporte verifique todo en "ok". Para lograr esto, el mismo sistema nos dice que necesitamos instalr unos paquetes.

En este caso vemos que falló la revisión de ncurses, gawkm, flex; lo arreglamos simplemente con

sudo apt-get install gawk
sudo apt-get install flex

Para el paquete ncurses fue necesario

sudo apt-get install libncurses5-dev

Cualquier duda con un paquete o un error, simplemente se consulta en Google, por ejemplo si aparece fallido el paquete "flex", se puede buscar en Google "instalar flex en debian" o "instalar flex en ubuntu".

Codigo fuente OpenWRT

Open Wrt dispone el código fuente completo de todo el sistema operativo. El siguiente paso, luego de haber alistastado el sistema es descargar este código para poder modificarlo con el entorno de configuración y luego compilarlo.

Para descargar toda la lista de archivos que compone le código del OpenWrt es nececsatio tener instalado el aplicativo Subversion

Instalar Subversion

  • ¿que es subversion?

Subversion, o SVN, es la versión actual del sistema de control usado por el proyecto OpenWrt.

Instalamos Subversion mediante consola:

 sudo apt-get install subversion

Luego de haber instalado el aplicativo, procedemos a crear una carpeta donde descargaremos el código fuente de OpenWrt y allí mismo se compila.

Recomendamos crear una carpeta en el directorio /home/[tu usuario]/

Puedes hacerlo en entorno gráfico con el explorador Nautilus o mediante consola navegando en el comando cd

cd ..

para crear la carpeta "OpenWrt"

mkdir OpenWrt 

ingresa a ella

 cd OpenWrt/ 

Descargar código fuente del OpenWrt

Hay varias versiones de OpenWRT, puedes ver como bajar cada una aqui;:

https://dev.openwrt.org/wiki/GetSource
A este momento, la vesrion estable se llama Backfire y se bajaria con svn co svn://svn.openwrt.org/openwrt/branches/backfire

Y ejecuta ésta linea de comando que descargará en la carpeta OpenWrt el código fuente de OpenWrt

 svn co svn://svn.openwrt.org/openwrt/trunk/ 

Se empezará a desgar el código, mostrando algo así en el proceso:

A    trunk/toolchain/gcc
A    trunk/toolchain/gcc/files
A    trunk/toolchain/gcc/files/alternate-arch-cc.in
A    trunk/toolchain/gcc/patches
A    trunk/toolchain/gcc/patches/4.1.2
A    trunk/toolchain/gcc/patches/4.1.2/100-uclibc-conf.patch
A    trunk/toolchain/gcc/patches/4.1.2/300-libstdc++-pic.patch
A    trunk/toolchain/gcc/patches/4.1.2/120-cris-do_not_overide_limits_h_test.patch
A    trunk/toolchain/gcc/patches/4.1.2/910-soft-float.patch
A    trunk/toolchain/gcc/patches/4.1.2/802-fix-ICE-in-arm_unwind_emit_set.patch
A    trunk/toolchain/gcc/patches/4.1.2/304-index_macro.patch
A    trunk/toolchain/gcc/patches/4.1.2/200-uclibc-locale.patch
A    trunk/toolchain/gcc/patches/4.1.2/303-c99-complex-ugly-hack.patch

Para saber cual es la lista del código fuente más actualizada entra a http://downloads.openwrt.org/

Al descargar el Código creará una carpeta
TRUNK </b> dentro de la carpeta OpenWrt donde estará contenido todo el cídigo.

/home/"tu usuario"/OpenWrt/trunk

DESARROLANDO... LA PRÁCTICA

Para trabajar el código es recomendable siempre actualizarlo, actualizar el entorno de desarrollo y luego proceder a modificarlo. A continuación se describe el procedimiento para hacer esto.

  1. Verificar nuevamente la lista "trunk" usando Subversion
  2. Actualizar los paquetes (comando ./scripts/feeds update)
  3. Construir la configuración (comando make defconfig)
  4. Paquetes Symlink y el entorno de desarrollo
  5. Configurar la imagen a compilar (comando make menuconfig)
  6. Compilar (comando make)

 

Actualizaciones

Recuerda que hay mucha gente trabajando en los proyectos de software libre como OpenWrt y su código se mejora muy rápido, para asegurarte que se tiene la última versión del código fuente:

Ingresa a la carpeta OpenWrt

 cd trunk 

Y ejecuta el comando:

 svn up 

Esto genera algo así:

A    package/dnsmasq/patches/001-upstream-security.patch
U    package/dnsmasq/Makefile
Actualizado a la revisión 17464.

Actualizar ambiente desarrollo

Luego de actualizar el código fuente es necesario actualizar el ambiente de desarrollo (es decir los paquetes que permiten configurar, compilar, etc.).

 ./scripts/feeds update 

Esto genera algo así:

...
A    feeds/xwrt/webif-iw-lua-mesh-hotspot-freeradius/files/etc/config/iw_hotspot_wizard
A    feeds/xwrt/webif-iw-lua-mesh-hotspot-freeradius/ipkg
...
Updating feed 'luci' from 'http://svn.luci.subsignal.org/luci/tags/0.8.7/contrib/package' 
...
A    feeds/luci/olsrd-luci/ipkg
A    feeds/luci/olsrd-luci/ipkg/postinst
A    feeds/luci/olsrd-luci/Makefile
U   feeds/luci
Revisión obtenida: 5317
Create index file './feeds/luci.index' 
Collecting package info: done

Configuración nuevo sistema

El siguiente paso es generar una configuración general del sistema y configuración de la imagen, esto incluye una revisión de las dependencias, etc.

 make defconfig 

Esto debe generar algo así:

Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... failed.
Checking 'zlib'... ok.
Checking 'gawk'... failed.
Checking 'flex'... failed.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.

Como se ve, nuevamente verifica las dependencias, si se instalaron adecuadamente en el primer procedimiento todo debe generar "OK", pero si aparece un error al ejecutar el comando "defconfig" en el que reporta pérdida de una dependencia, se resuelve instalando nuevamente el paquete y corriendo nuevamente el comando, recuerda, esto se hace facilmente con

 sudo apt-get install ''NOMBRE_DEL_PAQUETE'' 

Cualquier duda: Buscar "instalar NOMBRE_DEL_PAQUETE' en debian" en Google.

Volvemos a correr

 make defconfig 

Finalmente debemos tener este informe:

Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... ok.
Checking 'zlib'... ok.
Checking 'gawk'... ok.
Checking 'flex'... ok.
...

Y empieza a mostrar todas las caracteristicas de OpenWrt en bloque como:

* Wireless Drivers
*
kmod-hostap............................. Host AP support for Prism2/2.5/3 (PACKAGE_kmod-hostap) [N/m/y/?] (NEW) n
kmod-ieee80211................................... 802.11 Networking stack (PACKAGE_kmod-ieee80211) [N/m/y/?] (NEW) n
kmod-ieee80211-softmac......................... ieee80211 SoftMAC support (PACKAGE_kmod-ieee80211-softmac) [N/m/y/?] (NEW) n
kmod-net-airo....................................... Cisco Aironet driver (PACKAGE_kmod-net-airo) [N/m/y/?] (NEW) n
kmod-net-ipw2100.................................... Intel IPW2100 driver (PACKAGE_kmod-net-ipw2100) [N/m/y/?] (NEW) n
kmod-net-ipw2200.................................... Intel IPW2200 driver (PACKAGE_kmod-net-ipw2200) [N/m/y/?] (NEW) n
kmod-net-prism54................................ Intersil Prism54 support (PACKAGE_kmod-net-prism54) [N/m/y/?] (NEW) n
kmod-rt2570............... Driver for Ralink RT2570 usb wireless chipsets (PACKAGE_kmod-rt2570) [N/m/y/?] (NEW) n
*

En general muestra caracterisiticas como: Tablas IP, discos, Kernel boots, Network, PPP daemon, Libreria, IPv6, Dispositivos, Cryptographic API modules, Monitor de hardware, Otros modulos (bluetooth, crc, pcmia, switch, ...), modulos de sonido, USB, video, Wireless Drivers, idiomas, LUA, .... Muy interesante

Realizar enlaces simbolicos

Antes de ir a la configuración actual de la imagen que se desea compilar se requiere construir "symlink" (enlaces simbólicos) entre los paquetes y el ambiente local de desarrollo.

 make package/symlinks

Debe generar algo así:

++ mkdir -p /home/andresgom/8.09/staging_dir/toolchain-mipsel_gcc3.4.6
++ cd /home/andresgom/8.09/staging_dir/toolchain-mipsel_gcc3.4.6
++ mkdir -p bin lib include stamp
 make[1] package/symlinks
 make[2] prepare-tmpinfo

Generar los Symlinks toma un tiempo, pero cuando ha sido finalizado, el sistema a compilar esta ubicado y listo para la acción.

Menu configuración

La configuración de la imagen que se desea compilar, basada en la plataforma de destino disponible es invocada por el comando:

 make menuconfig

Esto generará el entorno de desarrollo, una interfaz azul con todas las características de OpenWrt, así:

Qué es QEMU?

De Wikipedia: QEMU es un emulador de procesadores basado en la traducción dinámica de binarios (conversión del código binario de la arquitectura fuente en código entendible por la arquitectura huésped). QEMU también tiene capacidades de virtualización dentro de un sistema operativo, ya sea Linux, Windows, o cualquiera de los sistemas operativos admitidos, (de hecho es la forma más común de uso). Esta máquina virtual puede ejecutarse en cualquier tipo de Microprocesador o arquitectura (x86, x86-64, PowerPC, MIPS, SPARC, etc.). Está licenciado en parte con la LGPL y la GPL de GNU.

Se usa QEMU para simular la imagen compilada (o descargada de la Web) de OpenWrt (kamikaze).

Para instalar QEMU simplemente usamos la consola y los comandos de Debian

sudo apt-get install qemu

Con esto se descarga el paquete y se instala automáticamente.

El Qemu como tal no tiene interfaz gráfica y solo basta con ir hasta la carpeta donde esta la imagen a Emular y escribir qemu ARCHIVO.image

Pero existe una aplicación adicional para una interfaz gráfica de qemu, se llama qemu launcher

Cargar la imagen de OpenWrt

Este ejercicio se puede realizar con la imagen personalizada y compilada según el anterior manual, o simplemente descargando una de las imagenes compiladas y listas para los dispositivos específico.

Se realizará el ejercicio con base a una imagen desargada de la web de OpenWrt.

Entrando a http://downloads.openwrt.org/ tendremos acceso a los repositorios.

En la carpeta kamikaze/ se encuentran las imagenes de diversas versiones de OpenWrt.

Descargaremos la última imagen en esta época: Carpeta http://downloads.openwrt.org/kamikaze/8.09.1/x86/ Imagen: openwrt-x86-jffs2-128k.image

Al bajar la imagen lo recomendable es guardarla en una carpeta diferente a la que contiene el código de OpennWrt, en este ejecicio se creará una carpeta llamada "Simula" y quedará /home/"usuario"/Simula/

Nota: LA imagen al bajarla pesa 6.3 Mbps... mas adelante será de utilidad este dato.

Ingresamos a la carpeta

cd Simula

Como esa imagnes es de un disco duro, usamos la herramienta fdisk para obtener más informaicón.

:~/Simula$ fdisk openwrt-x86-jffs2-128k.image

El programa fdisk suministra información sobre las particiones, con él es posible crear o eliminar particiones y unidades lógicas y definir la partición activa, si es que no lo está.

fdisk preguntará:

Debe establecer cilindros.
Puede efectuar esta operación desde el menú de funciones adicionales.

Orden (m para obtener ayuda): 

En este proceso solicitamos ver las particiones del disco (cuidado, no nuestro disco duro, sino la imagen de disco de OpenWrt openwrt-x86-jffs2-128k.image) digitando p.

p

Con lo cual genrera:

Disco openwrt-x86-jffs2-128k.image: 0 MB, 0 bytes
16 cabezas, 63 sectores/pista, 0 cilindros
Unidades = cilindros de 1008 * 512 = 516096 bytes
Identificador de disco: 0x00000000

                    Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
openwrt-x86-jffs2-128k.image1   *           1           9        4504+  83  Linux
openwrt-x86-jffs2-128k.image2              10         107       49360+  83  Linux

Orden (m para obtener ayuda): 

Aqui es importante anotar el tamaño de los cilindros, en este caso 1008 y el tamaño del disco, en este caso 107

E insertamos q para salir

Orden (m para obtener ayuda): q

Ahora multiplicamos 107*1008, si se quiere usar la terminal, se usa el comando bc

Orden (m para obtener ayuda): bc
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type "warranty'. 

y podemos hacer operaciones

107*1008
107856

Esta cifra representa el tamaño de la imagen de disco.

Se va a utilizar este último dato para poner en ceros desde el sector cero hasta el 107856 de la imagen openwrt-x86-jffs2-128k.image. Se utiliza

:~/Simula$ dd if=/dev/null of=openwrt-x86-jffs2-128k.image seek=107856

donde

dd: escribi r alfo en algun lado if: imput file null: desde cero of: output file

Lo cual genera el siguiente informe:

0+0 registros de entrada
0+0 registros de salida
0 bytes (0 B) copiados, 9,4774e-05 s, 0,0 kB/s

Ahora miramos las propiedades del archivo de la imagen de OpenWrt openwrt-x86-jffs2-128k.image

:~/Simula$ ls -lh openwrt-x86-jffs2-128k.image 

Nos insforma:

-rw-r--r-- 1 andresgom andresgom 53M 2009-09-14 22:45 openwrt-x86-jffs2-128k.image

Emulación de OpenWrt

NOTA: el archivo pesaba cerca de 53 Megas, cuando hace poco pesaba 6,5 Megas, esto se explica por la gran catidad de ceros que se le introdujeron en el paso anterior.

Finalmente EMULAMOS convocando a QEMU y la imagen trabajada

 

:~/Simula$ qemu openwrt-x86-jffs2-128k.image

Se iniciará una ventana con la máquina virtual, algo así:

Carga como un sistema operativo común, con su propia rutina de booteo y demás. Luego de un rato se llega a esta pantalla:

En este momento solamente es necesario presionar ENTER para obtener la interfaz principal de OpenWrt:

NOTA: Si en algún momento hace Click en esta pantalla perderá el control del Mouse (puntero) para recobrarlo solamente hay que presionar CTRL y ALT al mismo tiempo.

Para poder simular OpenWrt en cuanto a conexión con la tarjeta de red del PC y que se pueda, por ejemplo, conectar a internet u otras redes es necesario configurar la tarjeta de red y el OpenWrt, según el siguiente procedimiento:

Configuración de Puente de Red (Bridge)

En este momento lo mejor es cerrar QEMU, ya que se configurará la red del PC mediante consola de Linux (debian) y luego se procederá con OpenWrt.

Un bridge pasa paquetes sin modificaciones de una interfaz a otra. El bridge mira las direcciones de los paquetes para determinar lo que ha de pasar de un lado al otro. Esto significa que el tráfico que pasa por el bridge no tiene que ser comprendido por Linux, basta con que los paquetes tengan una dirección de hardware. ([1])

El primer paso para crear un bridge es instalar el paquete bridge-utils en la consola normal de Linux (debian).

sudo apt-get install bridge-utils

En este momento es bueno mirar las interfaces actuales del PC. En la consola:

ifconfig

Lo cual genera un informe así:

eth0      Link encap:Ethernet  direcciónHW 00:03:0d:b5:9f:dc  
          inet dirección:200.118.206.41  Difusión:200.118.207.255  Máscara:255.255.252.0
          dirección inet6: fe80::203:dff:feb5:9fdc/64 Alcance:Vínculo
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          RX packets:115084 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2653 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:1000 
          RX bytes:9157716 (9.1 MB)  TX bytes:468437 (468.4 KB)
          Interrupción:254 Dirección base: 0x8000 

lo        Link encap:Bucle local  
          inet dirección:127.0.0.1  Máscara:255.0.0.0
          dirección inet6: ::1/128 Alcance:Anfitrión
          ARRIBA LOOPBACK CORRIENDO  MTU:16436  Métrica:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:0 
          RX bytes:888 (888.0 B)  TX bytes:888 (888.0 B)

wlan0     Link encap:Ethernet  direcciónHW 00:21:85:be:69:50  
          ARRIBA DIFUSIÓN MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wmaster0  Link encap:UNSPEC  direcciónHW 00-21-85-BE-69-50-00-00-00-00-00-00-00-00-00-00  
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Donde se pueden ver datos como las direcciones IP de cada interfaz (en caso de estar conectadas), la MAC del equipo, y detalles del funcionamiento de la conexión. Pero lo importante es identificar los nombres de las interfaces, en este caso eth0 indica la intrfaz cableada y wlan0 indica la tarjeta inalámbrica.

Habiendo identificado las interfaces del PC se procede a modificar las características y activar el Bridge.

Linux genera un archivo de configuración de interfaces el cual está ubicado en:

/etc/network/interfaces

Para ver su contenido en la consola, usamos el comando cat:

cat  /etc/network/interfaces

Esto por lo general genera un informe así:

auto lo
iface lo inet loopback

En el archivo de configuración, la primera interfaz que aparece es la de loopback. Ésta, aunque no es necesaria para conectarnos a la red, sí se utiliza para hacer pruebas de conectividad y para identificar al host/equipo (definición de la Wikipedia). Dicha interfaz viene configurada por defecto en el proceso de instalación y para que se levante automáticamente cuando enciende la máquina.

Analizamos un poco estas líneas, no está de más avisar que las líneas que empiezan con # son comentarios, no son líneas de la configuración de las interfaces:

  1. . auto lo: esta línea se encarga de levantar la interfaz que se especifica (en este caso “lo” de loopback)
  2. . iface: diminutivo de interfaz
  3. . lo: nombre de la interfaz
  4. . inet: configura dicha interfaz para valores de Ipv4 (inet6, para las direcciones Ipv6)
  5. . loopback: Especifica que se debe cargar la configuración de loopback

[2]

Ahora, se modifica este archivo de configuración para incluir el puente (bridge). Con el editor de texto, en este caso GEDIT, se abre el archivo; es importante abrirlo como superusuario para poder guardar cambios. En la consola:

sudo gedit /etc/network/interfaces

Lo cual desplegará algo así:

 

Se modifica de la siguiente forma, para crear una interfaz bridge con dhcp. Se deja un espacio de interlineado y se escribe esto:

auto br1
iface br1 inet dhcp
bridge_ports eth0

De tal forma que quede así:


 

Se guardan los cambios y se cierra el editor (Gedit).

NOTA IMPORTANTE: con esos cambios es posible que sus conexiones como venian trabajando fallen, para volver a dejarlo como estaban originalmente se abre nuevamente el archivo con gedit y a todas las lineas nuevas se les antepone el signo #

En este ejemplo, para restituir las interfaces originales quedaria así:


 

Y se guardan cambios.

Luego de haber modificado el archivo INTERFACES se procede a activar la tarjeta virtual. En la consola:

sudo ifup br1

Generará un informe de esta forma:

Waiting for br1 to get ready (MAXWAIT is 32 seconds).
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
wmaster0: unknown hardware address type 801
wmaster0: unknown hardware address type 801
Listening on LPF/br1/00:14:22:ae:ef:df
Sending on   LPF/br1/00:14:22:ae:ef:df
Sending on   Socket/fallback
DHCPDISCOVER on br1 to 255.255.255.255 port 67 interval 5
DHCPOFFER of 192.168.1.30 from 192.168.1.1
DHCPREQUEST of 192.168.1.30 on br1 to 255.255.255.255 port 67
DHCPACK of 192.168.1.30 from 192.168.1.1
 * Reloading /etc/samba/smb.conf smbd only
   ...done.
bound to 192.168.1.30 -- renewal in 40238 seconds.

Se puede ver que este proceso asigna una dirección IP, en este caso fue 192.168.1.30

Al hacer una nueva revisión de las interfaces

ifconfig

se tiene todo el informe, donde es importante ver que ya aparece activa la interfaz Bridg br1 con la Ip que habia sido asignada en el paso anterior:

br1       Link encap:Ethernet  direcciónHW 00:14:22:ae:ef:df  
          inet dirección:192.168.1.30  Difusión:192.168.1.255  Máscara:255.255.255.0
          dirección inet6: fe80::214:22ff:feae:efdf/64 Alcance:Vínculo
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:0 
          RX bytes:13153 (13.1 KB)  TX bytes:9058 (9.0 KB)

A esta altura ya se tiene creada una tarjeta de red virtual vinculada con la tarjeta de red real. El siguiente paso es ligar esta tarjeta virtual con el arranque de QEMU.

Primero se verifica el estado del br1. Con el comando brctl se ve las propuedades de la interfaz bridge.

brctl show

Muestra:

bridge name	bridge id		STP enabled	interfaces
br1		8000.001422aeefdf	no		eth0
pan0		8000.000000000000	no	

Para vincular la tarjeta virtual con QEMU se modifica el script dedicado a esto, llamado qemu-ifup

sudo gedit /etc/qemu-ifup

Aparece en gedit

Se modifica

  1. !/bin/sh

sudo -p "Password for $0:" /sbin/ifconfig $1 0.0.0.0 promisc up sudo /usr/sbin/brctl addif br1 $1

Quedando así:

Luego abrimos una terminal nueva; vamos a este archivo "tun" que usa qemu como dispositivo de la red

cd /dev/net

 

ls

 

tun
ls -lh

 

total 0
crw------- 1 root root 10, 200 2009-07-24 18:41 tun

Proseguimos a dar permisos de escritura y lectura del archivo tun

:/dev/net$ sudo chmod a+rw tun
:/dev/net$ ls -lh
total 0
crw-rw-rw- 1 root root 10, 200 2009-07-24 18:41 tun

Volvemos a la otra carpeta

:~/Simula$ sudo qemu -net tap -net nic -hda openwrt-x86-jffs2-128k.image

Este comando le ordena a QEmu arrancar usandio las interfaces que previamente ya se alistaron.

y .... ARRANCA QEMU!!!

Hacemos ifconfig en openwrt

ifconfig

cambiamos la ip estatica que generó en br-lan

vi /etc/config/network

Vi es un editor de texto que se encuentra en (casi) todo sistema de tipo Unix.

Cambiamos la Ip donde dice config interface, nos paramos en la ip, y en vez de static colocar dhcp. Presionamos i para editar, escribimos nueva ip, lueigo ESC  :wq

wq: write quit

Subimos la interfaz

ifup lan

hacemos ping

ping google.com

si no funciona

sudo apt-get install uml-utilities 
sudo tunctl

volvemos a iniciar qemu

sudo qemu -net tap -net nic -hda openwrt-x86-jffs2-128k.image

en otra terminal

ifconfig

debemos tener

tap1      Link encap:Ethernet  direcciónHW 5a:af:af:f1:52:52  
          dirección inet6: fe80::58af:afff:fef1:5252/64 Alcance:Vínculo
          ARRIBA DIFUSIÓN CORRIENDO PROMISC MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:500 
          RX bytes:0 (0.0 B)  TX bytes:398 (398.0 B)

 

Configuración BATMAN en OpenWRT

En OPENWRT, nuevamente hacemos ping, por ejemplo a google

ping google.com

Y ya debe haber conexión a internet

Con el comando upkg update muestra la lista de paquetes que pdemos instalar

upkg update

Para ver lista de archivos

upkg list

Por ejemplo para ver solo los relacionados con batman (tambien ssh)

opkg list | grep batman

Instalamos batman

opkg install battool kmod-batman-advanced

seguimos todo el procedmimeinto del punto 4 de http://pizza.hskflashcards.com/index.php?page=B.A.T.M.A.N.+Advanced+on+OpenWrt+How-To

OJO a que sean los mismos dispositivos (ver ipconfig)

Editar interfaces y reiniciar

andresgom@andresgom-laptop:/dev/net$ sudo gedit /etc/network/interfaces
[sudo] password for andresgom: 
andresgom@andresgom-laptop:/dev/net$ sudo /etc/init.d/network restart
sudo: /etc/init.d/network: command not found
andresgom@andresgom-laptop:/dev/net$ sudo /etc/init.d/networking restart
 * Reconfiguring network interfaces...                                                                                                                       Ignoring unknown interface eth0=eth0.

Ignoring unknown interface br1=br1.

FUENTES:

http://wiki.openwrt.org/oldwiki/runningkamikazeonqemuhowto

http://pizza.hskflashcards.com/index.php?page=B.A.T.M.A.N.+Advanced+on+OpenWrt+How-To

Mirror de este documento

http://www.zoociedad.org/wiki/Red_comunitaria_Libre/ManualOpenWrt

 

 

                                                         
Con el apoyo de :