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…

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…

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.

1 Comment

Leave a Reply

Tu dirección de correo electrónico no será publicada.