Microsoft Teams, conceptos y tecnología (Parte XVIII)
Cuando estamos trabajando con servicios de A/V, una de nuestras “mayores preocupaciones” es la optimización de nuestro entorno de red y con Teams esta preocupación sigue latente. Si tenemos una topología de red basada en el modelo de 3 capas de Cisco (u otro fabricante), es posible que tengamos algo similar a esto:
Al final siempre nos preocupamos por múltiples configuraciones, entre las que nombro las siguientes:
- Seguridad: Vlan, Port Security, 802.1x, Acl, Arp poisoning, Arp spoofing, Dhcp snooping y un largo etc..
- Disponibilidad: Lacp, Hsrp, Glbp y un largo etc..
- Priorización de tráfico: QoS
Damos por hecho que tenemos alta disponibilidad (varias líneas de Internet balanceadas entre si), seguridad aplicada (filtrado de puertos por MAC o con 802.1x para red cableada (NPS: Autenticación 802.1X Red Cableada) o inalámbrica (NPS: Autenticación 802.1x para nuestra red inalámbrica)) y algunas configuraciones para QoS, pero están alienadas con lo que espera Teams? Vamos a ver como podemos establecer los valores DSCP (Differentiated Services Code Point) especificos en Teams para poder alienar nuestras configuraciones de los dispositivos red.
Comentaros que Teams a nivel de cliente utilizará los siguientes valores de DSCP:
- Audio: 46
- Video: 34
- Compartir Pantalla: 18
Aquí os dejo la tabla de equivalencias entre DSCP y TOS para que sea más “comprensible” para todos (fuente original: https://www.tucny.com/home/dscp-tos):
TOS (Dec) | TOS (Hex) | TOS (Bin) | TOS Precedence (Bin) | TOS Precedence (Dec) | TOS Precedence Name | TOS Delay flag | TOS Throughput flag | TOS Reliability flag | DSCP (Bin) | DSCP (Hex) | DSCP (Dec) | DSCP/PHB Class |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
0x00 |
00000000 |
000 |
0 |
Routine |
0 |
0 |
0 |
000000 |
0x00 |
0 |
none |
4 |
0x04 |
00000100 |
000 |
0 |
Routine |
0 |
0 |
1 |
000001 |
0x01 |
1 |
none |
8 |
0x08 |
00001000 |
000 |
0 |
Routine |
0 |
1 |
0 |
000010 |
0x02 |
2 |
none |
12 |
0x0C |
00001100 |
000 |
0 |
Routine |
0 |
1 |
1 |
000011 |
0x03 |
3 |
none |
16 |
0x10 |
00010000 |
000 |
0 |
Routine |
1 |
0 |
0 |
000100 |
0x04 |
4 |
none |
32 |
0x20 |
00100000 |
001 |
1 |
Priority |
0 |
0 |
0 |
001000 |
0x08 |
8 |
cs1 |
40 |
0x28 |
00101000 |
001 |
1 |
Priority |
0 |
1 |
0 |
001010 |
0x0A |
10 |
af11 |
48 |
0x30 |
00110000 |
001 |
1 |
Priority |
1 |
0 |
0 |
001100 |
0x0C |
12 |
af12 |
56 |
0x38 |
00111000 |
001 |
1 |
Priority |
1 |
1 |
0 |
001110 |
0x0E |
14 |
af13 |
64 |
0x40 |
01000000 |
010 |
2 |
Immediate |
0 |
0 |
0 |
010000 |
0x10 |
16 |
cs2 |
72 |
0x48 |
01001000 |
010 |
2 |
Immediate |
0 |
1 |
0 |
010010 |
0x12 |
18 |
af21 |
80 |
0x50 |
01010000 |
010 |
2 |
Immediate |
1 |
0 |
0 |
010100 |
0x14 |
20 |
af22 |
88 |
0x58 |
01011000 |
010 |
2 |
Immediate |
1 |
1 |
0 |
010110 |
0x16 |
22 |
af23 |
96 |
0x60 |
01100000 |
011 |
3 |
Flash |
0 |
0 |
0 |
011000 |
0x18 |
24 |
cs3 |
104 |
0x68 |
01101000 |
011 |
3 |
Flash |
0 |
1 |
0 |
011010 |
0x1A |
26 |
af31 |
112 |
0x70 |
01110000 |
011 |
3 |
Flash |
1 |
0 |
0 |
011100 |
0x1C |
28 |
af32 |
120 |
0x78 |
01111000 |
011 |
3 |
Flash |
1 |
1 |
0 |
011110 |
0x1E |
30 |
af33 |
128 |
0x80 |
10000000 |
100 |
4 |
FlashOverride |
0 |
0 |
0 |
100000 |
0x20 |
32 |
cs4 |
136 |
0x88 |
10001000 |
100 |
4 |
FlashOverride |
0 |
1 |
0 |
100010 |
0x22 |
34 |
af41 |
144 |
0x90 |
10010000 |
100 |
4 |
FlashOverride |
1 |
0 |
0 |
100100 |
0x24 |
36 |
af42 |
152 |
0x98 |
10011000 |
100 |
4 |
FlashOverride |
1 |
1 |
0 |
100110 |
0x26 |
38 |
af43 |
160 |
0xA0 |
10100000 |
101 |
5 |
Critical |
0 |
0 |
0 |
101000 |
0x28 |
40 |
cs5 |
176 |
0xB0 |
10110000 |
101 |
5 |
Critical |
1 |
0 |
0 |
101100 |
0x2C |
44 |
voice-admit |
184 |
0xB8 |
10111000 |
101 |
5 |
Critical |
1 |
1 |
0 |
101110 |
0x2E |
46 |
ef |
192 |
0xC0 |
11000000 |
110 |
6 |
InterNetwork Control |
0 |
0 |
0 |
110000 |
0x30 |
48 |
cs6 |
224 |
0xE0 |
11100000 |
111 |
7 |
Network Control |
0 |
0 |
0 |
111000 |
0x38 |
56 |
cs7 |
Básicamente lo que queremos es clasificar el flujo de tráfico mediante los valores DSCP especificados anteriormente, esto nos permitirá definir prioridades en dichos flujos de tráfico y priorizarlos como se muestra en la siguiente imagen:
Por defecto, cuando iniciamos una sesión de A/V con Teams, los valores DSCP por defecto es 10 como os muestro a continuación en una captura de Wireshark:
Microsoft desde el Centro de Administración de Microsoft Teams y Skype Empresarial tenemos la posibilidad de definir el rango de puertos de origen que el cliente utilizará, de tal forma que podamos fácilmente identificarlo y aplicar las configuraciones oportunas a nuestros dispositivos de red. La configuración es muy sencilla, una vez dentro del Centro de Administración de Microsoft Teams y Skype Empresarial – Reuniones – Configuración de reunión y en la sección Red tenemos la opción de activar la inserción de marcadores de calidad de servicio (QoS) para el tráfico de medios en tiempo real y definir los puertos con los que el cliente de Teams:
Pues ahora tocará configurar los clientes Windows para definir como clasificar el flujo de tráfico con los valores DSCP correspondientes, esto lo haremos de dos formas en función de si el equipo está unido al dominio o no:
- Equipos unidos a nuestro dominio On-Premises: configuración de una GPO que configure los valores DSCP para cada tipo de flujo de tráfico
- Equipo unidos al dominio de AzureAD: utilizaremos Intune para configurar los equipos
Comentar antes de nada, que estas configuraciones no sirven de nada si estamos en una red puramente Internet, puesto que los dispositivos que nos comunicarán con Internet no tendrán las mismas clasificaciones QoS (esto lo tendréis si tenéis ExpressRoute, etc.). Estas configuraciones, sobre todo, son pensadas para entornos de red LAN, donde si tenemos control sobre todos los tramos de la red (menos el último salto sino tenemos un ExpressRoute para llegar a la red de servicios de Teams). Pero vamos, entiendo que algo más que comprensible, igualmente, esta configuración debéis aplicarla y aseguraros que en vuestro entorno LAN esté siempre optimizado para estas soluciones.
- Equipos unidos a nuestro dominio On-Premises
Esta configuración es muy sencilla, simplemente tenemos que crear una GPO, editamos la sección de Computer Configuration – Policies – Windows Settings – Policy-based QoS y con el botón secundario del ratón pulsamos en Crear new policy …
Lo primero que haremos será crear las siguientes políticas de QoS en función del flujo de tráfico:
- Audio:
- Policy Name: Teams – Audio
- DSCP: 46
- Vídeo:
- Policy Name: Teams – Video
- DSCP: 34
- Compartir Pantalla:
- Policy Name: Teams – Sharing
- DSCP: 18
A continuación os muestro la configuración de las sesiones de Audio, pero hay que crear tres políticas una para cada servicio (Audio, Vídeo, Compartir Pantalla o Apps) con los valores que os he especificado anteriormente:
Ahora definimos que esta regla se aplicará a todo el flujo de tráfico de la aplicación de Teams (Teams.exe), esto es común para las tres políticas:
En cuanto al origen de la conexión o destino, yo lo dejo todo en Any (cualquiera), porque si tenéis varias subredes IP internas (locales u otras sedes) no tenéis que adaptarlos, pero aquí ya cada uno con su criterio (común para todas las políticas):
Ahora otro paso importante, debemos especificar los puertos de origen del flujo de tráfico a etiquetar (el que luego podremos identificar de forma fácil desde nuestros dispositivos de red), estos valores son los especificados en el Centro de Administración de Teams y Skype For Business había sido el siguiente:
Teams – Audio: 50000 – 50019 (TCP and UDP)
Teams – Vídeo: 50020 – 50039 (TCP and UDP)
Teams – Sharing: 50040 – 50059 (TCP and UDP)
Con esto ya hemos terminado, ahora vincular la GPO a los equipos que queramos que se aplique y listo. Si ahora desde cualquier equipo del dominio, si queréis, primero verificar que la GPO se ha aplicado correctamente, para ello, desde cualquier equipos nos vamos a la sección del registro de Windows y podemos ver las directivas aplicadas. Podemos verificado editando el registro de Windows de el equipo en la siguiente rama: Equipo\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\QoS y encontraréis una clave por cada política creada:
Teams – Audio
Teams – Vídeo
Bien, pues ahora vamos a probarlo … iniciamos una reunión en línea en Teams y veamos con Wireshark como estamos clasificando los flujos de tráfico. Para poder identificarlo más fácilmente, he filtrado las capturas de Wireshark con el siguiente filtro: ip.dsfield.dscp == 18 or ip.dsfield.dscp == 34 or ip.dsfield.dscp == 46 y a continuación os muestro tres capturas con cada DSCP (46, 34, 18):
Teams – Audio: 46 (equivalencia TOS: EF)
Teams – Vídeo: 34 (equivalencia TOS: AF41)
Teams – Sharing: 18 (equivalencia TOS: EF21)
Ahora tocaría configurar los dispositivos de red que tengáis para mantener la prioridad del flujo de tráfico, sino se hace .. no servirá para nada esta configuración.
2. Equipo unidos al dominio de AzureAD
Ahora, veremos cómo realizar esta misma configuración pero a equipos que únicamente están unidos directamente al dominio de AzureAD (Usage scenarios and deployment considerations for Azure AD Join). Cómo no tenemos la posibilidad de configurar GPO, se nos complicaría el despliegue de esta configuración si tenemos múltiples equipos en múltiples sedes (siempre que los usuarios participen del principio universal del MPP (Mínimo Privilegio Posible)). Pensad en un entorno corporativo, donde tenéis usuarios con los equipos unidos directamente al dominio de Azure (así podéis comprobar si es así o no: dsregcmd /status)
Ahora tocaría ver como podemos desplegar la misma configuración en estos equipos, porque si los usuarios no son administradores (que no deberían) no podrían aplicar dicha configuración. Pues bien, si tenéis Intune en vuestra suscripción, esto sería una tarea más que sencilla. Lo primero, la configuración de QoS la podemos aplicar vía PowerShell (New-NetQoSPolicy) a los equipos, pues este sencillo “script” e Intune tendremos a todos los equipos con la configuración de QoS:
New-NetQosPolicy -Name “Teams-Audio” -DSCPAction 46 -AppPathNameMatchCondition “Teams.exe” -NetworkProfile All -IPProtocol Both -IPSrcPortStart 50000 -IPSrcPortEnd 50019 -Store $env:computername
New-NetQosPolicy -Name “Teams-Video” -DSCPAction 34 -AppPathNameMatchCondition “Teams.exe” -NetworkProfile All -IPProtocol Both -IPSrcPortStart 50020 -IPSrcPortEnd 50039 -Store $env:computername
New-NetQosPolicy -Name “Teams-Sharing” -DSCPAction 18 -AppPathNameMatchCondition “Teams.exe” -NetworkProfile All -IPProtocol Both -IPSrcPortStart 50040 -IPSrcPortEnd 50059 -Store $env:computername
Ahora lo único que tenemos que hacer es copiar y pegar las tres líneas del “script” en un fichero de texto, guardarlo como .PS1 y estaría listo para desplegarlo vía Intune. Pero antes, siempre es recomendable que verifiquemos si funcionará bien, por lo ejecutamos dicho script y luego vía Get-NetQoSPolicy veremos si está aplicado en el equipo:
Pues venga, ahora tocar “publicarlo” vía Intune, para ellos nos vamos al portal de Azure (https://portal.azure.com), accedemos a la configuración de Intune y nos vamos a la sección de Configuración del dispositivo:
Ahora veremos con en 12 sencillos pasos tenemos el script aplicado en todo los equipos unidos al dominio de AzureAD y conectado con Intune, pues vamos a ello. Una vez dentro de la sección de Configuración del dispositivo, pulsamos en Script de PowerShell y en Agregar:
Escribimos un nombre para nuestra Directiva, en mi caso he elegido QoS-Teams. A continuación debemos subir el script de PowerShell que habíamos creado anteriormente a Intune, pera ello pulsamos sobre la carpetita que tenemos en la siguiente captura de pantalla para poder buscarlo en nuestro equipo:
Una vez que lo tengamos seleccionamos, pulsamos en Open
Ahora debemos ir a configuración y definir con que privilegios queremos que se ejecute dicho script, por defecto está en No y lo dejaremos así. Si lo dejamos en NO, la ejecución de dicho script se hará den el contexto de de seguridad de SYSTEM y así no tendremos problemas para que se ejecute en dispositivos con usuarios sin privilegios administrativos. Una vez marcadas las opciones tal cual las muestro, pulsamos en Aceptar
Pulsamos en Crear
Ahora debemos asignar el esta política a los diferentes usuarios, para ello ahora pulsamos en Asignaciones:
Pulsamos en Seleccionar grupos
Ahora buscamos el nombre del grupo al que queremos aplicar esta directiva y la seleccionamos:
Ahora pulsamos en Guardar:
Y … listo, ya tenemos nuestra directiva creada y aplicada:
“Por último”, queda que se vaya desplegando en los equipos, pero tiene unos tiempos de actulización para que se les vayan aplicando la configuración. Si queremos podemos ir forzando “manualmente” alguno para ver de forma “inmediata” que se va aplicando el script. Hay múltiples formas de hacerlo, pero no me voy a liar con ello, yo he buscado mi equipo desde Microsoft Intune – Dispositivos – Todos los dispositivos – Nombre-Equipo tenemos la opción de pulsar en Sincronizar y así forzará la sincronización con Intune y aplicará las diferentes directivas:
Para verificar que se va aplicando la política creada podemos ir revisando desde la sección Información General de la política como se va aplicando:
Y desde la sección Estado del dispositivo veremos los dispositivos de que usuarios se ha ido aplicando la directiva:
Por último, desde cualquier de los equipos que ya tiene la directiva aplicada, ejecutaremos el siguiente cmdlet de PowerShell y veremos si realmente tiene la configuración de QoS aplicada:
Cómo podéis apreciar para nada es complicado, es cuestión de ir ajustando las configuraciones en base a necesidades. Ahora, como os había comentado antes, quedaría configurar cada dispositivo de red que tengáis, esto ya os lo dejo a vosotros porque no puedo documentarlo todo :-).
Ahora os toca probar a vosotros y ya me vais contando que tal!!
PD: Si queréis profundizar más en este tema, aquí os dejo la URL de Microsoft al respecto: https://docs.microsoft.com/es-es/microsoftteams/qos-in-teams