Conectar decodificador TV Movistar por WiFi

Objetivo y Escenario

Acaban de instalarnos la Fibra Movistar (de 50Mbps, sustituyendo el ADSL). Con el nuevo router HGU también nos han proporcionado el decodificador de TV. El problema es que la ubicación del router y de la TV está muy alejada, por lo que o se tira un cable de red por toda la casa (no posible), o se usa un PLC (que depende mucho de las condiciones particulares, en mi caso he probado uno con una velocidad de bajada al lado de la TV de unos 6-7 Mbps, con un rendimiento del decodificador no muy óptimo)

Era por tanto necesario probar usar un router en modo cliente Wifi (con OpenWrt esto es fácil) y tratar de configurarlo para darle internet al decodificador (la velocidad de bajada con el openwrt al lado de la TV es de unos 25Mbps).

enscenario

En internet existen muchos tutoriales en información, pero casi siempre en el caso de uso donde el router openwrt (u otros) está conectado por cable al router de Movistar, se configuran las VLAN, etc, etc… El principal problema (y me ha costado mucho solucionarlo, con muchas pruebas) ha sido conseguir que el decodificador reciba el tráfico multicast, pero es todo cuestión de configuración. El rendimiento del decodificador es mejor que el conseguido al conectarlo con el PLC, no obstante aún existen pixelaciones, probablemente ocasionadas por la saturación de la Wifi de 2.4 GHz (Movistar vende el videobridge inalámbrico que funciona en la frecuencia de 5GHz, que seguro que funciona mucho mejor)

Material usado

  • Router Movistar HGU Mitrastar GPT-2541GNAC (con firmware  de 2017, verión b38_2), la versión de firmware es indiferente, pues usaremos la wifi y prácticamente no hay que tocar nada en él.
  • Decodificador TV Movistar Zyxel STB-2112t
  • Router AMPER ASL-26555 (el previo de movistar con el ADSL, se le puede instalar Openwrt), cualquier otro valdrá

ACTUALIZACIÓN (09/01/18): En lugar del router, he usado una Raspberry Pi B (primera generación), con un adaptador Wifi USB (Edimax con chip Realtek), instalándole LeDe 17.01.4   (y los drivers Kmod-rtl ), configurándola como cliente WiFi (un poco más elaborado, hay que tener cierto cuidado y tener presente que el Firewall debe estar activo en las zonas Wifi=Wan y Lan). El resultado es un poco mejor, aunque sigue habiendo cortes (dándole a la pausa esperando un par de segundos y volviendo al play, se recupera), parece que la capacidad de la Raspberry Pi es superior a esos routers de gama baja de las operadoras…

ACTUALIZACIÓN (26/01/18) Los cortes y pixelaciones están causados por la WiFi de 2.4 GHz, usando una WiFi de 5GHz (prueba en portátil y con Raspberry Pi y USB WiFi de 5GHz el resultado es espectacular, sin cortes…Al final del punto 3 está el enlace al segundo post

Pasos del Proceso

El conseguir esto me ha llevado multitud de pruebas y errores, hasta conseguir el proceso definitivo. Brevemente, los pasos que he dado, y voy a describir a continuación son los siguientes:

  1. Instalar Openwrt en el router Amper ASL-26555
  2. Configurar el Openwrt como cliente Wifi del router HGU de Movistar. El modo ha de ser «Routed Client»o bien «Pseudobridge Relayd», ambos funcionan, los he probado, pero voy a describir la configuración primera, más sencilla
  3. Tratamiento del tráfico multicast/IGMP en el Openwrt, instalar igmpproxy ( y otros paquetes) y configurarlo correctamente. Este es el paso más crítico y fundamental para que funcione el decodificador. Es sólo cuestión de entender correctamente la configuración de igmproxy
    • 3.1 Usar mcproxy en lugar de igmpproxy (prueba en la raspberry pi), apenas hay diferencias
  4. Para terminar, algunos de los pasos intermedios que he dado para poder lograr el punto 3 anterior: pruebas de conexión en ambos routers con tcpdump, Man in the Middle entre el Router HGU y el decodificador para entender el tráfico multicast y ver si por wifi funciona, etc…

1- Instalar OpenWrt

Esto dependerá del router en cuestión. En el caso del Amper ASL-26555 está perfectamente indicado en la wiki de openwrt y en el blog siguiente>

https://cogemelamatricula.net/instalar-openwrt-en-el-router-asl-26555-de-movistar/

https://wiki.openwrt.org/toh/alpha/asl26555

Básicamente consiste en dos pasos:

  • Hacer downgrade del firmware de movistar
  • Instalar openwrt 15 mediante una herramienta vía ssh

Basta seguir los pasos del link anterior (blog) que está muy bien explicado

2- OpenWrt Routed Client

Basta seguir los pasos de https://wiki.openwrt.org/doc/recipes/routedclient , el hecho de elegir routed client frente a masquerading es simplemente porque así la subred del router HGU tiene visibilidad sobre toda la subred del OpenWrt, y por tanto de decodificador. La configuración del modo Routed Client es exactamente igual a la de Masquerade Client, con la salvedad de que hay que configurar una ruta estática en el router HGU de movistar.

En el esquema, la parte de la derecha es la red del HGU de movistar y la izquierda la del router Openwrt

En el router OpenWrt

Una vez instalado OpenWrt nos conectamos por cable y entramos en su página de administración (192.168.1.1). Seguimos los pasos indicados por la wiki de OpenWrt, en el menú interfaces/ Wireless damos al botón scan, seleccionamos nuestra WiFi, y  nos conectamos a ella , a esta conexión le damos un nombre (por defecto pone wwan, yo le he puesto un nombre particular, ojo que este dato es importante para la configuración del tráfico igmp posterior). Todo lo demás por defecto.

Ahora en interfaces/lan, tenemos que poner una ip estática a nuestro router OpenWrt para crear una subred distinta a la que nos proporciona el Router HGU de movistar (yo he usado 192.168.2.1/24). OJo, vamos pulsando el botón Save, el Save and Apply al final.

En el menú interfaces veremos algo como lo siguiente:

Como vemos, el router de movistar nos ha dado una ip por DHCP 192.168.1.38, es necesario hacer que esta ip sea fija siempre, pero lo haremos desde el router HGU.

Ahora en la pestaña Firewall tenemos que configurarlo como se indica en la wiki. Ojo que en mi caso he de dejar la casilla masquerading, puesto que si no, luego al volver a conectar no tengo internet (es necesario pues el doble NAT con este router)

(recordar el nombre que hemos dado al interfaz lan)

Con esto ya tenemos casi la configuración de routed client. Podemos dar ya al botón Save & Apply. Con ello, nos tendremos que conectar de nuevo (desconectar el cable y reconectar), y comprobarlo todo, accediendo ahora al router OpenWrt con la dirección 192.168.2.1. Comprobamos que tenemos internet.

En el router HGU Movistar

Tenemos que hacer dos cosas y una comprobación:

1- Asignar una IP fija al router OpenWrt

2- Crear una ruta estática para redirigir todo el tráfico a la subred del OpenWrt a través de él

3- Comprobar que en la WiFi de 2.4GHz está activada la transmisión multicast.

 

Para asignar la IP fija al router OpenWrt (u otro dispositivo) basta conocer la MAC (la tenemos en la tabla ARP) y crear una entrada nueva, en este caso le he puesto 192.168.1.2

Para crear una ruta estática, en el menú correspondiente se selecciona, el interfaz lan, y dirigiendo todo el tráfico a la red 192.168.2.0/24 (la que hemos seleccionado en la lan del router OpenWrt) por la ip del router OpenWrt que acabamos de definir

Al pulsar Apply/save tenemos lo siguiente:

Ahora ya tenemos visibilidad en ambos sentidos entre las dos redes, cosa que puede comprobarse conectándose indistintamente a una u otra.

En el router OpenWrt : Decodificador TV

Puesto que estamos en una subred distinta a la del HGU, tenemos que configurar algo más en el OpenWrt para que el Decodificador TV funcione, ya que sus DNS son particulares, también le pondremos una ip fija para tenerlo identificado.

El asignarle una ip fija es muy sencillo, en el menú DHCP/DNS (tenemos que conocer la MAC del deco, pero desde el HGU en su tabla ARP lo podemos conocer)

Por último tenemos que asignarle los DNS de Movistar, para ello, búsquedas por internet nos llevan a la solución:

https://comunidad.movistar.es/t5/Soporte-T%C3%A9cnico-MOVISTAR/Rango-IP-distinto-de-192-168-1-x-Conexi%C3%B3n-por-fibra/td-p/2862467

Es necesario editar (mediante ssh) el archivo dnsmasq.conf: en mi caso:

Podemos ahora reiniciar el router y ver que todo sigue bien, antes del paso final, y más importante, la configuración del IGMP

3- OpenWrt y Multicast/IGMP

Buscando por internet, y en la propia Wiki de OpenWrt, tenemos los pasos que hay que dar. No obstante es muy importante dar con la configuración correcta. Los enlaces de referencia son los siguientes:

https://wiki.openwrt.org/doc/howto/udp_multicast

https://www.adslzone.net/postt405884.html

Seguiré las instrucciones del post de adslzone, idéntico al de la wiki, pero con alguna salvedad y alguna nota adicional

Instalamos los paquetes kmod-bridge, igmpproxy (ambos necesrios para multicast),  y  kmod-ipt-nathelper-rtsp (necesario para VOD, Video On Demand, sin él sólo veremos los canales TV en directo, ni películas, ni series ni programas previos), por el interfaz web o bien por ssh, el paquete mcproxy no ya que es redundante con igmpproxy. Posteriormente veremos cómo sustituir igmpproxy por mcproxy, aunque sin ningún cambio apreciable.

Una vez instalados procedemos a la configuración (la hago en otro orden, pero da igual)

1- habilitar igmp_snooping

en el interfaz de red lan (editar /etc/config/network)

2- forzar protocolo igpm v2,

que es la que usa movistar, editamos el archivo /etc/sysctl.conf y añadimos

net.ipv4.conf.all.force_igmp_version=2

3- Configurar igmpproxy

Aquí está el quid de la cuestión. La configuración ha de ser la particular para nuestro caso. El servicio igmpproxy al iniciarse lee el archivo /etc/config/igmpproxy y lo usa para reescribir el /etc/igmpproxy.conf, que es el que realmente usa.

Para comprobar cómo funciona, desde ssh podemos ejecutar el modo debug y verbose usando un archivo de configuración de prueba (gracias a esto es fácil dar con la configuración adecuada).

igmpproxy -vdd /etc/igmpproxy.conf_prueba

En el archivo de configuración hay que definir varios elementos: el upstream es el interfaz de salida a internet, y el downstream puede haber varios, ha de ser el de la lan, https://forum.turris.cz/t/setting-up-tweak-iptv-solved/2565?page=2

Ahora viene la importancia de recordar el nombre que hemos dado a nuestro interfaz de conexión a la Wifi, nuestra wan.

El archivo de configuración necesario es:

/etc/config/igmpproxy
config igmpproxy
        option quickleave 1

config phyint wan
        option network ClienteWifiAbrazalaweb
        option direction upstream
        list altnet 224.0.0.0/4
        list altnet 239.0.0.0/8
        list altnet 172.0.0.0/8
        list altnet 192.168.2.0/24

config phyint lan
        option network lan
        option direction downstream
        list altnet 192.168.1.0/24
        list altnet 192.168.2.0/24

Es fácil distinguir los cambios que hay que realizar, en el interfaz wan tenemos que indicar el nombre de nuestro interfaz en OpenWrt (el lan por defecto tendrá el nombre lan). Las ip’s multicast son las que se obtienen buscando en internet y en mis pruebas de Man in The Middle y capturas de tráfico. Es necesario también añadir la subred del OpenWrt.

Tenemos que configurar ahora las reglas del Firewall, que pasan por permitir todo el tráfico UDP de esass direcciones multicast:

Podemos hacerlo con el interfaz luci o bien editando /etc/config/firewall añadiendo al final:

config rule
 option name 'IGMP-Movistar1'
 option src 'wan'
 option proto 'udp'
 option dest 'lan'
 option dest_ip '224.0.0.0/4'
 option target 'ACCEPT'
 option family 'ipv4'

config rule
 option name 'IGMP-Movistar2'
 option src 'wan'
 option proto 'udp'
 option dest 'lan'
 option dest_ip '239.0.0.0/8'
 option target 'ACCEPT'
 option family 'ipv4'

config rule
 option name 'IGMP-Movistar3'
 option src 'wan'
 option proto 'udp'
 option dest 'lan'
 option dest_ip '172.0.0.0/8'
 option target 'ACCEPT'
 option family 'ipv4'

Falta sólo una cosa, y es que el igmpproxy no se inicia autimáticamente al encender o reiniciar el router, por tanto falta algo más, hacer que se inicie automáticamente, la maner más sencilla es la indicada aquí: https://dev.openwrt.org/ticket/20443

En la interfaz web Startup añadimos el comando para reiniciar el servicio:

Y ya está, reiniciamos el router y podremos tener el Decodificador de TV donde queramos, conectado por wifi…Es interesante comprobar que sin igmpproxy el decodificador algo muestra, pero no es funcional, sin embargo, al lanzar el igmpproxy, todo funciona bien de inmediato (aunque por el tema de la wifi de 2.4GHz hay cortes)

3.1 Usar mcproxy en lugar de igmpproxy

Era necesario comparar los resultados, aunque sin ningún resultado apreciable…

Simplemente se instala mcproxy y se desactiva del inicio igmpproxy (probado en la Raspberry Pi 1 con Lede, aunque idéntico proceder en el router con OpenWrt)

La configuración de mcproxy también resulta «particular». Es necesario modificar 2 archivos para que en el autoarranque funcione bien (se puede comprobar tras un reinicio con el comando ‘ps’)

Primero hay que saber los nombres de las interfaces de red (wan/lan), si nos equivocamos, mcproxy no arrancará.

El primer archivo a editar es /etc/mcproxy.conf, el que se instala por defecto es muy largo, a mí me funciona con los siguiente:

Los nombres son los de las interfaces físicas, podemos ver otros archivos de configuración para ir probando (en mi caso, usé el /etc/igmpproxy.conf, con igmpproxy funcionando)

Lo siguiente es indicar a mcproxy que use el archivo de configuración que hemos editado, para ello, hay que editar el archivo /etc/config/mcproxy, indicando que use ese archivo (poner disabled a ‘0’)

Con esto ya está, con un reinicio tendremos todo funcionando.

Antes de reiniciar y para ir probando podemos lanzar el comando

mcproxy -svv -f /etc/mcproxy.conf

Si todo va bien, nos comenzará a mostrar resultados similares a los siguientes (y el decodificador empezará a funcionar):

No obstante, he notado el mismo comportamiento que con igmpproxy, es decir, funciona, pero hay cortes, que creo que son motivados más bien por la Wifi 2.4GHz…

ACTUALIZACION (26/01/18): Efectivamente los cortes son provocados por la Wifi de 2.4 GHz, realizando la prueba con un portátil con tarjeta de 5GHz y posteriormente con la Raspberry Pi con un pincho USB Wifi de 5GHz, el resultado es espectacular, sin cortes ni pixelaciones… Todo en la segunda parte:

Conectar decodificador TV Movistar por WiFi (parte 2,Wifi 5GHz)

4. Análisis IGMP

Para intentar comprender qué es lo que ocurría, un volcado del tráfico con tcpdump en ambos routers permiten ver que el tanto el router de movistar como el decodificador envían el tráfico igmp, pero no reciben la respuesta

Tcpdump en el router OpenWrt, se comprueba que el Decodificador intenta asociarse al igmp (en la ip 239.0.2.30), sin respuesta

En el otro lado, el tcpdump en el router HGU muestra lo mismo, envía solicitudes igmp pero no obtiene respuesta

Podría pensarse que el tráfico udp no sale por la wifi, pero no puede ser, pues el HGU tiene configurada esta opción (WMF) en la red de 2.4GHZ (en la de 5GHz no aparece esta opción, supuestamente habilitada por defecto para permitir los videobridge de movistar)

Por tanto, una prueba adicional para ver si el tráfico UDP pasa por la wifi entre ambos routers puede hacerse enviando paquetes udp con hping3 desde un linux (VMWare) conectado a la Wifi del HGU hacia el decodificador, y el resultado es satisfactorio, es decir todo funciona como uno esperaría.

Queda una última verificación, y es ver cómo se comporta el deco y el router HGU en condiciones normales, para ello, usando la máquina virtual Linux (conectada mediante WiFi), usando ettercap para hacer un ataque de tipo MiTM (hombre en el medio) entre el router HGU y el decodificador. De esta manera además comprobamos que realmente por WiFi sí que funciona todo (ya que pasa a través de la máquina virtual), eso sí, la TV se empieza a ver todo pixelado y casi parado…

Captura del tráfico en el MiTM, sí hay comunicación deco-HGU

Por tanto, como conclusión, necesariamente el problema estaba en el router Openwrt y el tratamiento del tráfico IGMP, en particular con la configuración de IGMPPROXY, que con el modo debug de éste y tras probar, se encuentra la configuración definitiva descrita en el punto 3 anterior:

y con este resultado todo funciona correctamente.

7 Comments

  1. jordipm · miércoles, 14 febrero, 2018 Reply

    Has logrado que te funcione VOD ? Yo he probado tanto con igmpproxy como con mcproxy y flnalmente he dejado omcproxy. En todos los casos veo los canales en directo, pero no puedo ir atras, ver programas desde el principio, etc.

    • abrazalaweb · jueves, 15 febrero, 2018 Reply

      Hola, sí funciona VOD perfectamente, hay que instalar el kmod-ipt-nathelper-rtsp , está puesto en el post, en el punto 3. Yo experimenté con mcproxy, y dejé finalmente igmpproxy, pues no noté ninguna mejora.
      Lo tengo con la Raspberry Pi (Lede) y un pincho WiFi de 5GHz y funciona todo genial.

  2. Perpx · jueves, 12 abril, 2018 Reply

    Gracias. Gran post y muy bien explicado. Me ha servido muchisimo para poder evitar tirar un cable.

  3. Alberto · jueves, 6 diciembre, 2018 Reply

    Buenas. Tengo un HGU Mitrastar que tiene una interfaz distinta que no tiene tal configuración de WMF y al conectar el router salta el error de que no es capaz de conectarse. Si lo inicio con cable directo al router y desspués lo paso al Openwrt no es capaz de conectarse al EPG. En el PC tengo IPTVIEwr y es capaz de ver canales por medio del router con OpenWRT pero no de actualizar la lista ya que al conectarse a 239.0.2.30 da error TIMEOUT. ¿Alguna sugerencia?

    ¿y como se puede hacer tcpdump desde el router? me he metido por ssh y no reconoce ningun comando típico de unix, ni siquiera un triste help

  4. Alberto · jueves, 6 diciembre, 2018 Reply

    No sé si se ha enviado correctamente mi comentario sobre que ha desaparecido la configuración de los WMF de los mitrastar y ahora no es capaz de entenderse por el 239.0.2.200

    • abrazalaweb · viernes, 7 diciembre, 2018 Reply

      Hola,
      Revisa bien la configuración del router openwrt, algún problema tiene que haber ahí, si hace un timeout a la dirección multicast (239.0.x.x) es porque no está bien asociado al grupo IGMP. Revisa la configuración de igmproxy y el resto de módulos del openwrt (explica con más detalle tu configuración de y lo que usas en tu red, e intenta reproducir exactamente todos los pasos) .

      Respecto al programa IPTVIEwr, no sé, me lo he instalado en una máquina virtual y también tengo ese mismo error (time out), pero mirando un poco, también tiene pinta de ser por problemas de igmp. En sus foros también tienen ese problema.

      En relación a los routers HGU Movistar (hay dos modelos, uno el GPT-2541GNAC y otro el Askey) ha actualizado ahora en octubre/noviembre los firmwares y los ha dejado muy limitados (ha capado mucho, ya es imposible hacer nada con los routers de movistar, busca información el los foros de comunidad.movistar.es sobre los últimos firmwares), el acceso por ssh no permite casi nada. Supongo que el tuyo es el Askey y el WMF lo tiene activado por defecto, comprueba también en LAN si IGM snooping está activado.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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