Este apunte forma parte de “Movistar Fusión Fibra + TV + VoIP con router Linux“. Aquí me ocupo en detalle de la configuración de los “Videos bajo demanda”. Desde el Decodificador es posible seleccionar y ver videos bajo demanda en dos situaciones: 1) reproducir una grabación o 2) reproducir un video, serie, etc. desde la parrilla de Movistar TV, pero para que esto funcione tu Router debe soportar una cosa que se llama “Full Cone NAT” y como Linux no lo implementa en el kernel entonces no es sencillo hacerlo funcionar, así que he dedicado un artículo entero a este concepto.

Full Cone NAT vs “netfilter rtsp”

Hay varios tipos de NAT y no es el objeto describirlos aquí, lo que sí que tienes que tener en cuenta es que necesitas usar Full Cone NAT (o algo parecido) para poder ver los videos bajo demanda (si mirás la configuración del router que te deja Movistar verás que lo trae activo en el interfaz IPTV, vlan2). ¿Porqué hace falta? pues porque los Decos solicitan los videos mediante el protocolo RTSP a un servidor X pero el que realmente entrega el stream MPEG2(TS) es otro servidor Y completamente distinto, enviando tráfico desde una IP distinta y desconocida para el router, tráfico que se descartará si no tenemos algo “especial” configurado.

Como el Kernel de Linux no soporta Full Cone NAT tenemos que buscar otra opción. Ahí es donde entra en juego un módulo para el kernel llamado “netfilter rtsp”, se trata de un pequeño pero potente paquete de software libre desarrollado para resolver precisamente este problema, identifica las peticiones de video bajo demanda (flujos RTSP) e instala lo necesario en el kernel para aceptar el tráfico cuando empiece a llegar.

vod

¿Cómo funciona?

Sigamos el gráfico anterior. Cuando pulsas el botón “Movistar TV” en tu mando, el Deco busca al servidor que gestiona la parrilla, lo primero que hace es enviar una consulta al DNS Server (1) para preguntar quién es el servidor que gestiona la parrilla y los menús. Una vez que consigue su dirección establece un diálogo con él (2) y es ahí donde recibes y ves los menús en tu tele. Navegando por los menús y una vez seleccionas una grabación, serie o película y pulsas en “Ver”, el deco solicita el video a otro servidor distinto que llamo gestor de videos bajo demanda (3) mediante el protocolo RTSP. En esta última petición se envía un paquete SETUP que contiene el número del puerto por el que el Deco se quedará escuchando para recibir el futuro video. Mientras el deco espera, el gestor de videos bajo demanda solicita (4) que uno de los servidores que llamo MPEG Servers envíe de vuelta el stream de video MPEG (5) al puerto que se solicitó en el paquete SETUP.

captura_vod

En el gráfico de captura anterior vemos como el Deco solicita que se envíe el video al puerto 27171. El servidor que hará de emisor del stream MPEG será distinto y empezará a enviar tráfico MPEG-2 TS (Transport Stream) en modo Unicast a la IP visible del router (Linux) al puerto solicitado (27171 en este ejemplo). El router (Linux) deberá instalar una regla dinámica para que todo tráfico recibido en su IP exterior y ese puerto se conmute hacia el Deco solicitante y mismo puerto.

¿Cómo lo implemento?

Para conseguir que nuestro Linux haga todo esto necesitamos activar “conntrack” en el Kernel e instalar el programa “Netfilter RTSP”, que a fecha 18/Oct/2014 estaba en la versión 3.7-v2. Muy importante: verás que hay que aplicarle un pequeño parche para que funcione con Movistar TV.

Nota 1: En este ejemplo verás que pongo la dirección 10.214.XX.YY como la IP del interfaz vlan2, recuerda que es una dirección IP fija que te asigna Movistar, tal como describo en “Movistar Fusión Fibra + TV + VoIP con router Linux

Nota 2: Estas pruebas están hechas con el kernel 3.17.0 y en Gentoo “NO” he usado el paquete net-firewall/rtsp-conntrack-3.7, dado que instala unav ersión más antigua. Descargué los fuentes originales y los compilé de forma manual.

1.- Descarga, parchea, compila e instala el programa Netfilter RTSP:

Empleo la opción “debug” al hacer el make. Te recomiendo que lo uses para poder enterarte de lo que está pasando en el log del kernel.

2.- Cargamos el nuevo módulo en el Kernel

Una vez terminada la compilación e instalación anterior ya puedes cargar los módulos en el Kernel:

Te vuelves a tu Deco, entras en el menú Movistar TV, busca una grabación y pula en “ver”, debería funcionar. Puedes comprobar con el comando dmesg que la asociación es correcta, algo parecido a lo siguiente:

Instalación final

Una vez lo tengas todo funcionando te recomiendo que recompiles sin “debug”, vuelvas a instalar los módulos y programes su carga durante el arranque del equipo

Recompila e instala

Nota: Recuerda que si compilas e instalas un nuevo Kernel, tendrás que recompilar e instalar de nuevo estos dos módulos.

Programa su carga durante el boot, añade lo siguiente final del fichero /etc/conf.d/modules

Monitorizar

Dejo aquí algunos comandos útiles que te pueden servir para monitorizar qué está pasando:

Ver qué ocurre (debes compilar con opción debug)

Ver qué flujos UDP tienes contra tu IP fija en la vlan 2. Recuerda cambiar 10.214.XX.YY por tu ip), en Gentoo instala las conntrack tools con “# emerge -v conntrack-tools”

Comprobar si se creo NAT hacia IP de un Deco concreto (.200 en el ejemplo)