Triple VLAN: Cómo configurar Movistar TV totalmente funcional en Ubiquiti

La guía definitiva para configurar la Triple VLAN de Movistar con UDM Pro/SE + ONT Huawei.

Triple VLAN: Cómo configurar Movistar TV totalmente funcional en Ubiquiti
Regístrate en HDS+
Es gratuito. Ten acceso a todo el contenido.
🔓
Dificultad del tutorial: Difícil
IMPORTANTE: Desde la versión UnifiOS 3.2.5 no es posible cargar módulos custom en el Kernel ya que han habilitado el Secure Boot sin previo aviso. Por lo que únicamente es válido el método Iptables.

Antes de nada decir que esta guía ha sido elaborada íntegramente por el compañero @12bitlog en su blog de Medium recientemente, tras haber mantenido una pequeña discusión con el en un hilo de GitHub, decidió crear una guía detallada. Todo el agradecimiento hacia su persona.

Yo, solamente hago eco para que llegue al mayor número de personas posible ya que no es posible utilizar Movistar TV de forma oficial en Ubiquiti.


📢
Antes de empezar el tutorial, deberemos de extraer los datos de nuestro servicio IPTV a través del HGU. Para ello seguimos la siguiente guía que elaboré en el pasado para configurar la Triple VLAN con un Asus:
Cómo configurar el Movistar Triple VLAN con ONT Huawei HG8240H + router Asus
Sustituye el HGU por ONT propia + Router Asus y disfruta de Internet, Movistar TV y Teléfono fijo.

Si además tienes teléfono fijo, también tendrás que configurar la ONT Huawei tal y como explico en el artículo enlazado. Con todo esto, tendrás configurada correctamente la Triple VLAN de Movistar en nuestro equipamiento Ubiquiti.

Introducción

El objetivo de esta guía es configurar el UDM Pro/SE para que funcione completamente con la IPTV de Movistar, prescindiendo del router facilitado por el operador (HGU) y sustituyéndolo por una ONT de Huawei pero manteniendo todas las funcionalidades del router original (Guía de canales, VOD, Últimos 7 días, etc). Para ello tenemos que utilizar un paquete llamado udm-iptv.

Prerequisitos

Para que la configuración funcione correctamente hay que cumplir con los siguientes prerequisitos:

  1. Sustituir el router de Movistar por una ONT de Huawei: el router de Movistar entrega ya el tráfico separado sin los tags de la VLAN, por lo que queremos una ONT que nos entregue la información con sus correspondientes VLANs (aparte de que necesitaremos gestionar el VOD desde la UDM Pro/SE).
  2. Instalar el paquete upm-iptv. Esto se requiere porque el UDM Pro/SE sólo admite una VLAN por la conexión WAN, que es lo que va a gestionar el paquete udm-iptv. El script de instalación del upm-iptvinstala también un paquete llamado igmpproxy, que gestiona la redirección del tráfico IPTV (UDM Pro/SE ha incluído recientemente soporte IGMP de forma nativa pero el script del upm-iptvrequiere el paquete igmpproxy).
  3. Una máquina virtual de Linux para compilar el Kernel de Linux de la UDM Pro/SE y los módulos RTSP (para el funcionamiento de VOD, U7D en el desco), o crear una regla de firewall para permitir el tráfico de los servidores de VOD.
  4. Solicitar a Ubiquiti el código fuente del Kernel de nuestro UDM Pro/SE a través del email opensource-requests@ui.com.

Instalación de los paquetes

En la página del paquete udm-iptv se detallan las instrucciones, pero básicamente hay que ejecutar el siguiente comando (que instalará también el igmpproxy) en nuestro UDM Pro/SE a través de SSH:

sh -c "$(curl https://raw.githubusercontent.com/fabianishere/udm-iptv/master/install.sh -sSf)"

Configuración del PPPoE de Movistar en el UDM Pro SE

Cómo configurar un Ubiquiti con la Fibra de Movistar / O2
Sencilla guía para tener conexión a Internet con Movistar/O2 y un equipo Ubiquiti.

Tutorial para configurar Internet con Movistar y nuestro Ubiquiti

Antes de nada, tendremos que configurar la conexión a Internet con Movistar mediante PPPoE, y lo haremos de la siguiente manera:

  • Ir al Menú Internet de la página principal y seleccionar la conexión primaria (Primary (WAN1)):
  • Configurar la conexión de la forma siguiente:
📢
En el campo de los Servidores DNS podemos utilizar unas propias para Pi-Hole / AdGuard, no tienen por que ser las oficiales de Movistar.

Llegados a este punto ya tendremos conexión a Internet. Ahora falta la parte "complicada" así que vamos a ello.


Configurar la red para la IPTV

  1. Ir al Menú Networks de la página principal y pinchar en Create New Network
  2. Crear una red con los siguientes parámetros:

Donde:

  • VLAN ID es el ID de la VLAN donde queremos poner la IPTV (3 en nuestro caso).
  • Network Type será Standard.
  • Host Address y Netmask son los parámetros de red que alojará el IPTV. En nuestro caso hemos seleccionado una subred 192.168.3.1/24 para ser consistentes con la denominación de la VLAN.
  • Muy importante habilitar IGMP Snooping y Multicast para que los paquetes de la IPTV no inunden toda la red (los switches intermedios también deberían tener habilitada esta funcionalidad).

Para finalizar, asignaremos esta VLAN creada al puerto Ethernet del UDM Pro/SE donde hemos conectado nuestro descodificador de Movistar TV:


Configuración del paquete udm-iptv

Edición del fichero de configuración

En el primer paso, lo hemos instalado, pero ahora tenemos que editar el fichero de configuración que se encuentra en: /etc/udm-iptv.conf y dejarlo tal cual se detalla a continuación:

# Interface on which IPTV traffic enters the router
IPTV_WAN_INTERFACE="eth8"
# ID of VLAN which carries IPTV traffic (use 0 if no VLAN is used)
IPTV_WAN_VLAN="2"
# Name of the IPTV VLAN interface
IPTV_WAN_VLAN_INTERFACE="iptv"
# IP ranges from which the IPTV traffic originates (separated by spaces)
IPTV_WAN_RANGES="172.26.0.0/16 239.0.0.0/8 10.0.0.0/8 239.0.0.0/16 172.0.0.0/8 0.0.0.0/1"
# Set ip static IP instead of using 
IPTV_WAN_DHCP="false"
# DHCP options to send when requesting an IP address
IPTV_WAN_DHCP_OPTIONS=""
# MOVISTAR'S STATIC IPTV (unique to each client)
IPTV_WAN_STATIC_IP="10.160.XX.XX/9"
# Static Routes (TV guide, channel icons, etc. need to be configured manually)
IPTV_STATIC_ROUTES="10.128.0.0/9 172.23.96.0/21 172.26.22.0/26 172.26.23.0/27 172.26.80.0/21"
# LAN interfaces on which IPTV should be made available
IPTV_LAN_INTERFACES="br3"
# Disable quickleave for igmpproxy
IPTV_IGMPPROXY_DISABLE_QUICKLEAVE="false"
# Enable debugging for igmpproxy
IPTV_IGMPPROXY_DEBUG="false"
IPTV_WAN_DHCP_OPTIONS=""
IPTV_IGMPPROXY_PROGRAM="igmpproxy"
IPTV_IGMPPROXY_IGMP_VERSION=""

Donde:

  • IPTV_WAN_INTERFACE es la interfaz por donde entra la señal de IPTV (e Internet) al router, en nuestro caso la WAN1 (puerto 9).
  • IPTV_WAN_VLAN es la VLAN de la IPTV.
  • IPTV_WAN_RANGES es el rango de IPs desde donde se origina el tráfico IPTV, que están obtenidas de este enlace.
  • IPTV_WAN_DHCP lo ponemos a false porque Movistar proporciona al decodificador una dirección IP estática.
  • IPTV_WAN_STATIC_IP es la dirección estática proporcionada por Movistar a nuestro decodificador, en nuestro caso 10.160.XX.XX/9
  • IPTV_STATIC_ROUTES son las rutas estáticas de Movistar para las diferentes funciones auxiliares (Guía, iconos de canales, etc.).
  • IPTV_LAN_INTERFACES es la interfaz que hemos definido en el UDM Pro para la IPTV, en nuestro caso br3 (br seguido del número de VLAN que hemos especificado, se puede verificar con un netstat -nr
  • IPTV_IGMPPROXY_DISABLE_QUICKLEAVE dejarlo a false
  • IPTV_IGMPPROXY_DEBUG dejarlo a false salvo que necesitemos debugear.
IMPORTANTE: Después de hacer cualquier cambio en el fichero de configuración hay que reiniciar el udm-iptv mediante el comando systemctl restart udm-iptv

Parcheo del fichero udm-iptvd para gestionar rutas estáticas del fichero de configuración

Para que la variable IPTV_STATIC_ROUTES del fichero de configuración sea tenida en cuenta es necesario hacer lo siguiente:

  1. Editar el fichero: /usr/lib/udm-iptv/udm-iptvd
  2. En la función _network_setup(), debajo del echo “Creating static routes (if necessary)” (línea 74) hay que sustituir este código (fuente: lista discusión udm-iptv):
echo "Creating static routes (if necessary)"    
for range in $IPTV_STATIC_ROUTES; do        
    ip route add "$range" dev "$target"    
done
}

Por este otro:

echo "Creating static routes (if necessary)"    
GW=$(route -n | awk '/iptv/ { print $1 }' | sed 's/.$/1/')    
for range in $IPTV_STATIC_ROUTES; do        
    ip route add "$range" via $GW dev "$target"    
done
}

Comandos útiles para verificar la configuración del paquete udm-iptv

Los siguientes comandos son de gran utilidad para verificar la configuración del udm-iptv:

  • dpkg-reconfigure -p medium udm-iptv: configuración interactiva del paquete, aunque en nuestro caso vamos a tiro hecho.
  • systemctl restart udm-iptv: para reiniciar el udm-iptv después de cualquier cambio en el fichero de configuración.
  • udm-iptv-diag: para revisar los mensajes de error del udm-iptv.
  • journalctl -u udm-iptv: para revisar los mensajes de error del igmpproxy.
  • Para verificar que la conexión se ha establecido correctamente podemos ejectuar el comando ip -4 addr show dev iptv, lo que debería mostrar algo como lo siguiente:
31: iptv@eth8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000    
     inet 10.160.XX.XX/9 scope global iptv       
        valid_lft forever preferred_lft forever
  • Para ver las rutas creadas podemos ejecutar el comando ip route list
10.128.0.0/9 dev iptv proto kernel scope link src 10.160.XX.XX 
172.23.96.0/21 via 10.128.0.1 dev iptv 
172.26.22.0/26 via 10.128.0.1 dev iptv 
172.26.23.0/27 via 10.128.0.1 dev iptv 
172.26.80.0/21 via 10.128.0.1 dev iptv
192.168.3.0/24 dev br3 proto kernel scope link src 192.168.3.1
192.168.5.0/24 dev br0 proto kernel scope link src 192.168.5.1
192.168.11.0/24 dev br11 proto kernel scope link src 192.168.11.1
192.168.144.1 dev ppp0 proto kernel scope link src 81.34.YY.YY
  • Donde las líneas finalizadas en dev iptv son las rutas estáticas de Movistar.
  • El comando netstat -nr nos muestra la tabla de rutas, incluyendo las diferentes interfaces.
  • El comando ip route list nos muestra de forma más compacta las rutas definidas.
  • Para capturar el tráfico de la VLAN X en la interfaz Y podemos ejecutar el comando tcpdump -i Y -nn -e vlan X
  • Para capturar el tráfico multicast podemos ejecutar el comando tcpdump -n "broadcast and multicast"

Configuración de rutas estáticas de forma manual

Si no queremos editar el fichero que se encarga de leer las rutas estáticas del fichero de configuración podemos crearlas de forma manual mediante los comandos siguientes:

GW=$(route -n | awk '/iptv/ { print $1 }' | sed 's/.$/1/')
ip route add 172.23.96.0/21 via $GW
ip route add 172.26.22.0/26 via $GW
ip route add 172.26.23.0/27 via $GW
ip route add 172.26.80.0/21 via $GW

Se trata de una configuración adicional que vemos que se ha utilizado en un hilo del foro de bandaancha, aunque no sabemos muy bien su impacto. Para activarla hay que seguir los siguientes pasos:

  1. Ir a Networks y seleccionar la IPTV-LAN
  2. En Custom DHCP Options pinchar en Apply Options
  3. En el diálogo que aparece pinchar en Add New
  4. Poner los valores siguientes:

Enter DHCP Name: DHCP-Movistar
Type: text (ya aparece por defecto)
Text: :::::239.0.2.10:22222:v6.0:239.0.2.30:22222
Code: 240


Configuración del descodificador de Movistar TV

Para que el descodificador de Movistar funcione correctamente debemos configurarlo para que opere en la VLAN que hemos definido en el UDM Pro/SE.

Para ello hay que hacer lo siguiente:

  1. Entrar en el menú de configuración del decodificador. Para ello hay que pulsar repetidamente el botón del muñequito mientras se inicia el descodificador.
  2. Introruciremos los siguientes parámetros:

Dirección IP: 192.168.3.200
Máscara de Subred: 255.255.255.0
Pasarela: 192.168.3.1
Dirección IP del OPCH: 239.0.2.30:22222
DNS Primario: 172.26.23.3

Donde:

  • Dirección IP: es la dirección estática que hemos asignado al descodificador en el UDM Pro/SE.
  • Pasarela: es la dirección del gateway en la VLAN donde hemos puesto el descodificador.
  • El resto de parámetros son los que vienen por defecto y que no debemos tocar.

Configuración del VOD

La configuración del VOD es necesaria por la forma de trabajar de Movistar (y de los proveedores de IPTV en general), en que se realiza una petición de video bajo demanda a un servidor del proveedor, pero el video es servido desde otro servidor distinto al que se le hace la petición, por lo que hay que hacer un NAT dinámico (netfilter) para que se permita el tráfico desde ese servidor que proporciona el vídeo (que no sabemos a priori cual es). Todo esto queda ilustrado en el siguiente diagrama:

(Fuente: Blog de LuisPa, apuntes técnicos)

Para que el VOD funcione en el UDM Pro SE tenemos dos opciones:

  • Compilar los módulos de RTSP con los fuentes del kernel del UDM Pro SE e instalarlos.
  • Obviar el netfilter y crear una regla de firewall para permitir pasar todo el tráfico MPEG2/TS proveniente de los servidores de Movistar al UDM Pro (no recomendamos este método por ser más inseguro y exponer al UDM Pro).

Hay que decir que el método más seguro y efectivo es la de compilar los módulos. Esto permite además, disponer de varios descos funcionando de forma simultánea en casa.


Compilación e instalación de los módulos del RTSP

Preparación del entorno

  • Lo primero de todo creamos una VM de Linux, p.ej. Ubuntu 18.04 arquitectura AMD.
  • Una vez creada hacemos (para poder acceder por ssh):
sudo su -
apt update
apt install -y openssh-server
  • Instalamos los paquetes requeridos:
apt install libncurses-dev gawk flex bison openssl libssl-dev gcc-aarch64-linux-gnu
  • Da un problema al hacer el make porque no lo tiene, por lo que hacemos:
apt install -y make

Parcheo y compilación de los módulos

El módulo nf_nat_rtsp por defecto no funciona con Movistar; si observamos el tráfico mediante el dmesg veremos una traza como la siguiente (si hemos compilado los módulos con la opción de debug):

[ 3212.119830] nf_nat_rtsp v0.7 loading
[ 3274.477380] conntrackinfo = 2
[ 3274.483501] IP_CT_DIR_REPLY
[ 3274.553324] IP_CT_DIR_REPLY
[ 3274.560429] found a setup message
[ 3274.560431] tran='Transport: MP2T/H2221/UDP;unicast;client_port=27473'
[ 3274.560434] lo port found : 27473
[ 3274.560436] udp transport found, ports=(0,27473,27473)
[ 3274.560441] expect_related 0.0.0.0:0-10.160.XX.XX:27473
[ 3274.560443] NAT rtsp help_out
[ 3274.565217] IP_CT_DIR_REPLY
[ 3274.571049] IP_CT_DIR_REPLY
[ 3284.510360] teardown handled
[ 3284.514298] IP_CT_DIR_REPLY

Pero lo que deberíamos observar (al hacer una solicitud de VOD en el decodificador) en su lugar es algo como esto:

[ 4803.795715] nf_nat_rtsp v0.7 loading[
4952.440314] conntrackinfo = 2
[ 4952.448843] IP_CT_DIR_REPLY
[ 4952.506634] IP_CT_DIR_REPLY
[ 4952.512640] found a setup message
[ 4952.512643] tran='Transport: MP2T/H2221/UDP;unicast;client_port=27557'
[ 4952.512646] lo port found : 27557
[ 4952.512648] udp transport found, ports=(0,27557,27557)
[ 4952.512652] expect_related 172.26.83.37:0-10.160.XX.XX:27557
[ 4952.512657] NAT rtsp help_out

Con las siguientes cabeceras de transporte entre el NAT rtsp help_out

[ 4952.512659] hdr: len=9, CSeq: 3
[4952.512661] hdr: len=25, User-Agent: MICA-IP-STB
[ 4952.512663] hdr: len=53, Transport: MP2T/H2221/UDP;unicast;client_port=27557
[ 4952.512664] hdr: Transport
[ 4952.512667] stunaddr=10.160.XX.XX (auto)
[ 4952.512676] using port 27557
[ 4952.512683] rep: len=53, Transport: MP2T/H2221/UDP;unicast;client_port=27557
[ 4952.512685] hdr: len=14, x-mayNotify:

Y el IP_CT_DIR_REPLY

Buscando por Internet encontramos este post en Google Groups de una persona con un problema similar, donde se apunta a este parche que contiene las modificaciones necesarias para que el nat_helper funcionara.

NOTA: en el post origina se hace mención a otra versión del parche que es ligeramente diferente, porque en vez de declarar el char* rtsp_buffer dentro de la función lo hace globalmente como un static char rtsp_buffer, aunque el funcionamiento es el mismo.

Para recompilar los módulos debemos hacer lo siguiente:

  • Solicitamos el código fuente del UDM Pro/SE a Ubiquiti.
  • Descomprimimos el código fuente en un directorio, no hace falta compilarlo porque viene ya compilado.
  • Descargamos el módulo del RTSP:
git clone https://github.com/maru-sama/rtsp-linux.git
  • Descargamos el parche de este enlace y lo guardamos en un fichero (p.ej. rtsp.patch).
  • Aplicamos el parche mediante el comando patch < rtsp.patch (el parche sabe a qué fichero aplicarse) o (patch nt_nat_rtsp.c < rtsp.patch).
  • Nos movemos al directorio del módulo y lo compilamos (fuente: foro tweakers):
    - Importante compilarlo para arquitectura arm64.
    - udm-kernel es el directorio donde hemos descomprimido previamente el kernel.
    - Para la instalación definitiva recompilar eliminando la opción debug
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNELDIR=../udm-kernel EXTRAVERSION="-al-linux-v10.2.0" LOCALVERSION= debug
  • Por último, subimos los dos módulos compilados (nf_conntrack_rtsp.ko y nf_nat_rtsp.ko) al UDM SE p.ej. al directorio /tmp mediante CyberDuck o similares a través de SFTP.

Módulos compilados

Si tienes un UDM SE con versión de Kernel 4.19.152-ui-alpine, pongo a disposición de descargar los módulos ya compilados y así agilizar el proceso. Para conocer la versión de Kernel iniciamos sesión en nuestro UDM y ejecutamos: uname -r.

⚠️
Estos módulos compilados solamente sirven para esta versión de Kernel (última) y el modelo UDM SE. No intentes ejecutarlos en otra máquina como UDM Pro o podrías causar un brick.

Prueba de los módulos

Para probar los módulos recién compilados, nos vamos al directorio /tmp y tendremos que cargarlos con los siguientes comandos:

insmod nf_conntrack_rtsp.ko
insmod nf_nat_rtsp.ko

A continuación verificamos que funciona el vídeo bajo demanda (VOD) en nuestro descodificador de Movistar TV. Si es así, lo hemos hecho todo bien. Podemos continuar.

Para extraer los módulos y preparar la instalación definitiva tendremos que ejecutar los siguientes comandos:

rmmod nf_nat_rtsp.ko
rmmod nf_conntrack_rtsp.ko

Instalación definitiva de los módulos

Para instalar los módulos definitivamente una vez verificados que funcionan correctamente, seguiremos los siguientes pasos:

  • Copiamos los modulos al directorio de modulos del kernel.
cp nf_conntrack_rtsp.ko /lib/modules/4.19.152-ui-alpine/kernel/net/netfilter
cp nf_nat_rtsp.ko /lib/modules/4.19.152-ui-alpine/kernel/net/netfilter
  • Ejecutamos depmod -a para recrear las dependencias.
  • Cargamos los módulos mediante los comandos:
modprobe nf_conntrack_rtsp 
modprobe nf_nat_rtsp

Para que los módulos se carguen automáticamente con el arranque del UDM Pro SE tenemos que hacer lo siguiente:

  1. Ir al directorio /etc/modules-load.d/
  2. Crear un fichero, p.ej. rtsp.confy poner en su interior las siguientes líneas:
nf_conntrack_rtsp
nf_nat_rtsp

Crear una regla de firewall para permitir el tráfico.

Si no queremos compilar e instalar los módulos RTSP es preciso habilitar una regla especial en el UDM Pro/SE que redirija el tráfico proveniente de los servidores VOD de Movistar, dirigidos a la IP pública 10.160.XX.XX, a la dirección del descodificador 192.168.3.200.

Para ello creamos la siguiente regla con iptables mediante SSH:

iptables -t nat -I PREROUTING 1 -i iptv -p udp --dst 10.160.XX.XX -j DNAT --to 192.168.3.200

Donde:

  • Ponemos el -I PREROUTING 1 porque queremos que la regla se ejecute la primera de todas, aunque si la ponemos al final de la cadena como en el caso siguiente el VOD sigue funcionando correctamente.
  • iptves la interfaz que hemos definido al comienzo de este proceso para la iptv.
  • 10.160.XX.XXes la dirección IP que nos facilita Movistar para nuestro decodificador.
  • 10.168.3.200 es la IP local de nuestro descodificador (sustituir por la que corresponda).

Si queremos visualizar la regla podemos ejecutar el comando siguiente:

iptables -L PREROUTING -n -t nat --line-number

Y si queremos borrarla basta con ejecutar el comando:

iptables -t nat -D PREROUTING <NUMBER>

Donde se corresponde con el número de la regla obtenido mediante el comando anterior.

👉🏼
NOTA IMPORTANTE: Este método va a funcionar sólo si tenemos un descodificador en casa, no va a funcionar correctamente si tenemos más de uno.

Cambios tras un upgrade del UniFi OS

Hay que tener en cuenta que tras actualizar la versión de UniFi OS a una próxima versión, se borrarán los siguientes elementos:

  • El udm-iptv.
  • Los módulos RTSP.

Por lo tanto tras una actualización de UniFi OS habrá que volver a instalar estos elementos. Lo que si permanecerá son los archivos de configuración. Así que recomiendo altamente deshabilitar la actualización automática del sistema.

Invítame a un café



Más artículos

Cómo instalar y configurar Eufy Cam con Synology Surveillance Station

Cómo instalar y configurar Eufy Cam con Synology Surveillance Station

Utiliza tus cámaras Eufy con Surveillance Station. Gestiona y graba todo en el NAS.

Por Joan
Cómo instalar y configurar WireGuard en tu Router Asus e integrarlo con Pi-Hole

Cómo instalar y configurar WireGuard en tu Router Asus e integrarlo con Pi-Hole

Aprende a configurar la VPN más rápida y segura en tu Asus. Además intégralo con Pi-Hole.

Por Joan
Cómo utilizar CloudFlare como gestor DNS para el Proxy Inverso de tu NAS

Cómo utilizar CloudFlare como gestor DNS para el Proxy Inverso de tu NAS

Aumenta la seguridad, privacidad y lleva además todo el control DNS desde un único lugar.

Por Joan