LEDE 17.01.1 en una Mikrotik RB750GL, sin brickear nada en el intento

Hola,
Algunos de uds. saben que estoy ayudando a montar una red de Internet en la carrera donde estudio (Informática-UMSA). Entre las compras, venía un RouterBOARD 750GL con instrucciones de instalar OpenWrt para nuestro propósito.

Instalar OpenWrt es sencillo (initramfs + wget2nand), pero ésto se ha vuelto más complicado con LEDE, y no sale a la primera. Pero tengo una guía para lograrlo a la primera (necesitarás un sistema GNU/Linux cualquiera, medianamente actualizado).

 

Primeros pasos

  • Vamos a tocar el sistema de archivos completo, así que es hora de hacer una copia de tu licencia RouterOS, si quieres volver a ése firmware sin romper nada. Abre WinBox -> System -> License -> Export Key.
  • No debes fiarte de una sola fuente de información, y no me responsabilizo si te equivocas. Debes seguir los pasos y leer mucha documentación para saber lo que estás haciendo. TEN MUCHO CUIDADO: aquí es muy fácil romper cosas. Ésta edición de RouterBOOT no habilita los pines serial TX-RX de la placa (y para colmo, la memoria es NAND), así que un hard-brick será casi imposible de solucionar.
  • Igual, debes saber que las RB750GL suelen tener cambios importantes de hardware sin ser mencionados (como el tamaño de la NAND). ¡Mucho ojo con brickear algo!

 

Para instalar LEDE, vamos a aprovechar una feature de RouterBOOT y utilizaremos una imagen initramfs que se cargará en la memoria RAM. Para ello, necesitamos configurar al router para que 1) bootee de la red una vez, y 2) que luego bootee de la NAND. Sí o sí necesitaremos WinBox para eso.

Volvé a Windows, conecta tu máquina a un puerto LAN cualquiera del router, y abre WinBox.

  1. System → Routerboard → Settings → Boot device: Try ethernet once then NAND
  2. System → Routerboard → Settings → Boot protocol: DHCP
  3. System → Routerboard → Settings → Force Backup Booter: Activar (¡importante!)

Guarda (“save”), y luego, apaga el router. No lo enciendas ahora.

 

Instalando LEDE 1/2

Ahora, inicia tu sistema GNU/Linux, andá a tu $HOME, creá una carpeta “mtikgl” y una carpeta “mtikglcc”

En la carpeta mtikgl descarga éstos archivos:

 

En la carpeta mtikglcc descarga éstos archivos:

Ahora, asigna a tu máquina la dirección 192.168.0.100/24 con iproute2 o con NetworkManager. Luego conecta tu máquina al router, al puerto 1 (WAN): NO LO ENCIENDAS AÚN.

 

Quizás, al encender el router luego, la interfaz se levante demasiado rápido y no te alcance a activar un comando. Tal vez haya flips, y las siguientes instrucciones no funcionen. Para estar seguros, conecta al medio de tu máquina y el router, un switch ethernet barato.

 

Ahora abre un terminal en la carpeta mtikgl y ejecuta:

sudo killall dnsmasq
sudo dnsmasq --no-daemon --port=0 --dhcp-range="192.168.0.50,192.168.0.150,12h" --enable-tftp \
    --bootp-dynamic --dhcp-boot="lede-17.01.1-ar71xx-mikrotik-vmlinux-initramfs.elf" \
    --tftp-root="$HOME/mtikgl"

Ahora, toma un palillo y presiona el botón de RESET, con el router apagado.

Mientras mantienes presionado RESET, ahora sí enciende el router. Espera al menos 15 segundos, y luego quita el palillo.

Podrás ver ahora en las lucecitas del switch bastante actividad, y en la ventana del terminal donde está dnsmasq, que alguien pidió una IP y descargó el initramfs.

 

Bien! Ahora LEDE está cargándose en la memoria RAM, y puedes cerrar el dnsmasq con un Ctrl-C. Conéctate al router usando cualquier puerto LAN (del 2 al 5) y asígnate la IP 192.168.1.100/24.

Ahora nos conectamos al router e instalaremos LEDE.

# Copiamos ahora mismo el firmware. Aquí uso el firmware para NANDs >=128, ojo.
scp lede-17.01.1-ar71xx-mikrotik-nand-large-squashfs-sysupgrade.bin 192.168.1.1:/tmp

ssh -l root 192.168.1.1
# ahora estamos dentro del router
cd /tmp
sysupgrade lede-17.01.1-ar71xx-mikrotik-nand-large-squashfs-sysupgrade.bin

 

Si todo va bien, el router aceptará el archivo y la sesión SSH se apagará de inmediato. Déjalo así unos 30 segundos.

Instalando LEDE 2/2

La instalación debería ser así de fácil, pero no funciona: el router no podrá bootear LEDE y entrará en un bootloop.

Al parecer, LEDE ahora guarda el kernel y el rootfs en la partición UBI de datos en mtd3, pero algunas ediciones de RouterBOOT sólo pueden bootear kernels en la partición mtd2, formateada con yaffs. Hasta donde sé, LEDE no soporta ya yaffs.

 

Gracias a nuestra configuración de RouterOS, el bootloop activa el booteo por DHCP y podremos arrancar otro initramfs.

Vamos a la carpeta mtikglcc y ejecutamos ésto:

sudo killall dnsmasq
sudo dnsmasq --no-daemon --port=0 --dhcp-range="192.168.0.50,192.168.0.150,12h" --enable-tftp \
    --bootp-dynamic --dhcp-boot="openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf" \
    --tftp-root="$HOME/mtikglcc"

Nos conectamos con la IP 192.168.0.100/24 al router encendido (que está en bootloop ahora mismo) al puerto 1 (WAN). No suele ser necesario reiniciar, el router debería pedirte un initramfs desde ya.

 

Ahora, conéctate al router usando cualquier puerto LAN (del 2 al 5) y asígnate la IP 192.168.1.100/24

# Copiamos el kernel que falta
scp ../mtikgl/lede-17.01.1-ar71xx-mikrotik-vmlinux-lzma.elf 192.168.1.1:/tmp/

telnet 192.168.1.1
# ahora estamos dentro del router
cd /tmp
cat /proc/mtd
# debería aparecer la partición kernel como mtd1

mtd erase kernel
mount /dev/mtdblock1 /mnt
mv /tmp/lede-17.01.1-ar71xx-mikrotik-vmlinux-lzma.elf /mnt/kernel
chmod a+x /mnt/kernel
umount /mnt

 

Ahora sí puedes reiniciar, y al bootear de nuevo, LEDE debería estar funcionando.

 

Créditos

He tomado información de los siguentes enlaces:

  • https://wiki.openwrt.org/toh/mikrotik/common
  • https://www.mail-archive.com/lede-dev@lists.infradead.org/msg06759.html
  • http://lists.infradead.org/pipermail/lede-dev/2017-April/007005.html