OpenWrt

De Hacklab La Paz - r00thouse
Revisión del 15:24 28 mar 2016 de Looper (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

OpenWrt

Usualmente el firmware stock que viene junto a aparatos de red (routers, APs) no es lo suficientemente {estable,eficiente,flexible} para nuestros propósitos.

OpenWrt es una "distribución" GNU/Linux (aunque más conocida como firmware en este caso) diseñada para funcionar en sistemas embebidos, como los aparatos antes mencionados. Goza de una gran flexibilidad, lo que lo hace apto para un montón de casos.

How To: Cocinar firmware OpenWrt mediante ImageBuilder

(esta guía está enfocada a la arquitectura ar71xx (Atheros MIPS). La guía funciona para cualquier otro aparato soportado, pero podrían necesitar descargar las utilidades para su arquitectura en específico)

Este es el método más fácil para obtener binarios instalables con configuraciones no estándar. Contrariamente al caso de utilizar Buildroot, las imágenes generadas con ImageBuilder son compatibles con los paquetes de los repositorios existentes en downloads.openwrt.org (incluso módulos de kernel).

Esto es especialmente cuando queremos instalar ciertas cosas en routers con poca memoria de almacenamiento: podemos quitar paquetes con funciones que no necesitamos (ejemplo: dnsmasq, odhcpc, odhcp6c), y aprovechar el espacio libre para instalar más cosas. Además la compresión en el archivo de firmware (solo lectura, squashfs) es más eficiente que en la partición (lectura-escritura, jffs2) del router.


Primero es necesario descargar el ImageBuilder de OpenWrt Chaos Calmer 15.05.1 (la versión más reciente hasta Abril/2016) y descomprimirlo en una carpeta vacía.

Para empezar a trabajar:

# Obtenemos la lista de paquetes por defecto
$ make info

# Revisamos los repositorios por defecto que traerán las imágenes
$ cat repositories.conf

A la hora de compilar, se puede indicar a ImageBuilder:

  • Que agregue más paquetes (esto es, en la partición SquashFS)'. Ej: PACKAGES="luci"
  • Que quite algunos paquetes por defecto, especificándolos con un guión al principio. Ej: PACKAGES="-dnsmasq"
  • Que incruste algunos archivos en el firmware a generar. Ej: FILES=files/

(Se debe tomar en cuenta la jerarquía de archivos. Ej: files/bin/wololo estará, al final, en /bin/wololo)


De manera que, al ejecutar ImageBuilder con los sig. argumentos...

$ make image PROFILE=UBNT PACKAGES="luci" FILES=files/

... compilará imágenes para dispositivos UBNT M Series (NanoStations, NanoStations Loco, Rocket, Bullet, etc...) con Luci por defecto y con los archivos en la carpeta files incrustados.

Imágenes para el proyecto de Redes Mesh

En nuestro caso, tuvimos problemas para configurar algunos routers Wi-Fi (2.4 GHz o 5 GHz) de manera que cumplan las regulaciones nacionales sobre el uso de frecuencias inalámbricas.

Si OpenWrt no te permite elegir frecuencias libres (y legales aquí), puedes necesitar integrar en tu firmware estos archivos. Los archivos extra a añadir, de la carpeta files/ están acá, y son universales para firmwares de dispositivos ar71xx.

Parche para OpenWrt 15.05 Parche para OpenWrt 15.05.1

Routers Wi-Fi 5 GHz

La sugerencia para crear imágenes para dispositivos mesh (UBNT) es la siguiente:

$ make image PROFILE=UBNT PACKAGES="luci luci-i18n-base-es iwinfo -odhcp6c -odhcpc -odhcpd -dnsmasq -ppp -ppp-mod-pppoe" FILES=files/

Router Wi-Fi 2.4 GHz (+gestiona clientes temporales)

Este router era un TP-LINK TL-WR941ND v5.1, y está encargado de enrutar a los "clientes ocasionales" (aparatos conectados a los hotspots Wi-Fi abiertos).

$ make image PROFILE=TLWR941 FILES="files" PACKAGES="luci luci-i18n-base-es luci-theme-material qos-scripts luci-app-qos luci-i18n-qos-es -odhcpc -odhcp6c -ppp -ppp-mod-pppoe ip kmod-ledtrig-heartbeat mini-snmpd"

Router Wi-Fi (ruteo de la red interna)

(aún sin probar)

Este router es un TP-LINK TL-WR841ND v9 (procesador Qualcomm-Atheros). Está encargado de enrutar los paquetes de la red interna, y servir de gateway para los servidores.

Como sólo queremos que enrute paquetes (que vienen por cable), decidimos quitarle todo el soporte Wi-Fi, para ahorrar espacio en la memoria flash (4 MB).

$ make image PROFILE=TLWR841 PACKAGES="-kmod-ath -kmod-ath9k -kmod-cfg80211 -kmod-mac80211 -hostapd-common -wpad-mini -iw -odhcpc -odhcp6c -ppp -ppp-mod-pppoe luci luci-i18n-base-es luci-theme-material tinc ip kmod-ledtrig-heartbeat mini-snmpd"
  • ¿necesitamos dnsmasq?
  • Necesitamos Babel (babeld), pero éste se instalará en la partición jffs2 (lectura-escritura) para poder actualizarlo sin perder uptime.