Recuperación de EdgeRouter

Hoy les voy a hablar de una cuestión que creo bastante interesante, un procedimiento para ciertas situaciones extremas y que por desgracia, no están suficientemente documentadas o al menos, no lo están en castellano, de modo que vengo a aportar mi granito de arena en esto.

Hace tiempo que tengo un EdgeRouter arrimado en una mesa porque no funcionaba. Un equipo que ya estaba fuera de garantía y que bajo la excusa de “ya lo miraré”, se quedó acumulando polvo en un rincón… hasta que la situación de confinamiento me hizo verle con otros ojos y pensar en retomar ese trabajo pendiente, intentar recuperarlo y pasar el rato.

Este artículo lo he hecho en dos partes: una primera totalmente paso a paso, apta para todos los públicos y con todos los detalles posibles para que sea fácil de seguir y una segunda para los más “pro”, simplemente con un listado de pasos, sin mayor explicación. Si eres de los segundos, baja hasta el final y ahí tendrás todos los datos.

Si por el contrario eres curioso, continúa leyendo.

Debo aclarar que todo lo que viene a continuación es válido para recuperar EdgeRouters que se encuentren en esta situación:

  • El disco USB está estropeado o corrupto
    y
  • El equipo es incapaz de iniciar recovery por TFTP

Requisitos

Antes de continuar con este procedimiento, hay algunos requisitos y/o herramientas necesarios para proceder. Tengo que hacer hincapié en que este procedimiento anula automáticamente la garantía del router, de modo que solo recomiendo continuar en caso de que tu período de cobertura haya expirado o bien, tengas claro todo lo que vas a hacer.

  • Cable de consola Serie
  • Cliente TFTP (recomiendo usar el TFTP32)
  • Cliente SSH/Telnet Putty
  • Acceso a internet
  • Servidor DHCP (recomendable para simplificar el procedimiento)
  • Firmware de recuperación (luego hablo de esto)
  • Destornillador de estrella pequeño
  • Curiosidad

El cable de consola lo compré en su día en Aliexpress, concretamente este:

Producto de Aliexpress.: https://es.aliexpress.com/item/32315192866.html?spm=a2g0s.9042311.0.0.274263c0cNZSwt

En mi caso, este router era incapaz de iniciar por TFTP siguiendo el procedimiento oficial documentado por ubiquiti, lo cual ya era raro, de modo que el siguiente paso era “ver” qué pasaba. Por desgracia y llegados a este punto, viene el primer requisito: es necesario contar con el cable de consola serie. Este cable es fundamental para quienes trasteamos con este tipo de equipos, de modo que si no lo tienes ya, es hora de hacerte con uno.

Para acceder por consola he usado el Putty, con esta configuración:

Speed.: 115200 baud
Data bits.: 8
Stop bits.: 1
Parity.: none
Flow control.: XON/XOFF

Configurado el putty y conectado el cable al router, procedo a alimentar el router para ver el proceso de arranque, y aquí veo lo que pasa:

** Unable to use usb 0:1 for fatload **
## No elf image at address 0x07d00000

Ciertamente, pinta feo. Lo interesante del asunto es que hay un CLI en este caso, el de uBoot, con varios ejecutables y utilidades. Con un simple “help” se obtiene el listado completo de comandos (aquí solo muestro la primera pantalla)

De todos los comandos, hay dos que vamos a necesitar de forma inmediata:

tftpboot tiene una función bastante obvia: forzar un proceso tftp para cargar un firmware por este protocolo. A este comando hay que pasarle varios parámetros: IP del propio router, IP del servidor TFTP y nombre del fichero a cargar. La cosa es que el comando en sí mismo no acepta parámetros, tenemos que hacerlo a través de las variables de entorno, con el comando setenv. Eso lo vemos en un rato, pero si tenéis curiosidad, podéis ver todas las variables de entorno con printenv.

Perfecto, tenemos casi todos los ingredientes para cocinar la tortilla, solo falta uno, el más importante:

Firmware de recuperación

Lo cierto es que no estoy muy seguro de cómo llegué hasta él, pero en esta url se encuentra un firmware especial, pensado para recuperar los EdgeRouters. Por si acaso desapareciera, he añadido ese firmware a la sección de descargas de esta misma web.

Entre las funciones que trae este firmw, se incluyen estas 3 funciones:

  • emrk-factory-reset — elimina el archivo config.boot, de modo que el equipo vuelve a valores de fábrica. Además, permite hacer un backup de la configuración en otro punto del disco.
  • emrk-remove-user-data — elimina cualquier dato almacenado en el filesystem, dejando al sistema operativo totalmente limpio.
  • emrk-reinstall — Permite hacer una instalación desde cero de EdgeOs, creando las particiones necesarias, formateando disco e incluso bajando el firmware desde internet para instalarlo.

De todas ellas, la que nos interesa es la última, emrk-reinstall. Para ello, tenemos que instalar este firmware por TFTP.

Configurando el servidor TFTP

El software TFTP32 es bastante sencillo de utilizar, en realidad solo hay que copiar el firmware de recuperación en una carpeta y configurar TFTP32 para que apunte a esa ubicación. Tengo por costumbre crear una carpeta TFTP en “\”, de modo que mi ruta es C:\TFTP, quedando así:

Es en esa carpeta donde hay que copiar el firmware de recuperación

Pero antes, vamos a definir algunas cosas para que nos entendamos:

  • IP de mi portátil.: 192.168.1.22/24
  • IP del EdgeRouter a recuperar.: 192.168.1.20/24 *

El asterisco (*) indicado en la IP del EdgeRouter es porque en realidad esa no es la IP por defecto, de hecho, cuando el router está en uBoot sin firmware, NO TIENE IP y tenemos que asignársela. Para ello, POR FIN, vamos a lo que interesa:

En ese CLI, que ya vimos antes, vamos a escribir esto:

setenv serverip 192.168.1.22
setenv ipaddr 192.168.1.20
setenv bootfile 'emrk-0.9c.bin'

La primera línea especifica la IP del servidor TFTP (nuestro portátil, servidor tftp), mientras que la segunda especifica la IP del propio router.

La tercera línea indica a tftpboot el nombre del archivo por el que debe “preguntar”. Si no se especifica, el router llamará a uno con nombre aparentemente aleatorio (no puedo comprobar eso, puesto que no tengo otro router aquí para simularlo). Atención a las comillas simples (‘).

En este momento debes conectar tu portátil al EdgeRouter a través de la Eth0.

Una vez aplicados los valores anteriores con setenv, procedemos a arrancar el tftp, con el comando

tftpboot

Si todo ha ido bien, debería empezar el proceso y veremos “movimiento” en TFTP32 y en la consola:

Sabremos que todo termina cuando vuelva el prompt de la línea de comando y con un mensaje satisfactorio, “done“:

El siguiente paso es forzar el arranque con el firmware que acabamos de cargar, lo cual conseguimos con este comando:

bootoctlinux $loadaddr

En este momento tenemos que conectar la Eth0 del router a internet, preferiblemente a una red con DHCP para simplificar el proceso. Tan pronto lo ejecutamos, podemos ver como el router arranca y, al finalizar el proceso, se inicia un asistente.

Las opciones son “case sensitive”, vamos, que debes respetar las mayúsculas

Obivamente queremos continuar, así que contestamos con un “Yes” (La “Y” debe escribirse en mayúsculas).

Si escogemos “yes”, el equipo adquirirá IP, DNS y todo lo que DHCP ofrezca. En caso de escoger “no”, habrá que configurar esos parámetros a mano. Puesto que tengo DHCP activo y correctamente configurado en mi red, escojo “yes” y continúo.

Ahora si que si, hemos acabado con lo más difícil y ahora estamos en la etapa final, simplemente nos toca ejecutar el comando

emrk-reinstall

Tras responder “yes”, se crean las particiones necesarias y monta el sistema de archivos para subir el firmware FINAL y OFICIAL de ubiquiti, que sustituirá al firmware de recuperación:

En este punto se nos pide la URL del firmware, de modo que podemos cargarlo directamente desde internet. Para ello, nos dirigimos a https://www.ui.com/download, buscamos el firmware adecuado para nuestro modelo de router y copiamos la URL del firmware:

IMPORTANTE: Si te fijas, la URL es https. Si la copias y pegas tal cual en la consola, obtendrás un error de certificado. Cambia el https por http y mantén el resto de la ruta igual para que funcione:

Esto inicia la descarga y el proceso de desempaquetado, copiado del kernel al boot e instalación final:

Si todo ha ido bien, deberíamos ver algo como esto:

Solo nos queda hacer un reboot

reboot

Es importante hacer el reboot: no apagues el router a las bravas.

Con esto, hemos terminado:

Ya puedes acceder al router por web con su IP por defecto (192.168.1.1) y/o SSH: sus valores son los mismos que cuando lo sacas de la caja por primera vez, es decir, de fábrica.

Versión rápida para impacientes

  1. Conecta el router por la Eth0 a tu PC
  2. Asigna la IP 192.168.1.22 a tu PC
  3. Conecta el cable serie al router
  4. Descarga el Firmware de recuperación y configura tu servidor TFTP
  5. setenv serverip 192.168.1.22
  6. setenv ipaddr 192.168.1.20
  7. setenv bootfile ’emrk-0.9c.bin’
  8. bootoctlinux $loadaddr
  9. emrk-reinstall
  10. Yes
  11. yes
  12. http://dl.ui.com/firmwares/edgemax/v1.10.11/ER-e100.v1.10.11.5274249.tar
  13. reboot
  14. Listo.-

En resumen

Espero que os haya resultado interesante. Reconozco que en parte he escrito todo este tocho como auto-referencia… no tengo claro que sea capaz de recordar todos los detalles si me vuelve a hacer falta.

Entradas relacionadas