Teams Direct Routing con AudioCodes Session Border Controller

In questo articolo, andremo a parlare di un argomento molto interessante per chi desidera avere Microsoft Teams come unica interfaccia per tutti gli strumenti di Collaboration, compresa la telefonia. Il 28 Giugno 2018 Microsoft annuncia “Microsoft Phone System Direct Routing”. Il Direct Routing consente di collegare un SBC (Session Border Controller) supportato e fornito dal cliente, al sistema telefonico della casa di Redmond. Gli strumenti ora presenti su Microsoft 365 offrono inoltre la possibilità di utilizzare il PBX in Cloud andando così a gestire tutta l’infratruttura su Azure con Microsoft come unico provider. Per l’Italia questo tipo di servizio per ora è limitato, è infatti possibile avere la numerazione con il prefisso della sola Milano. Per questo motivo se abbiamo necessità di avere un sistema telefonico con frontend Teams, e ci troviamo in una città differente da Milano, ci viene in aiuto il “Microsoft Phone System Direct Routing”.

La possibilità di utilizzare il sistema di Direct Routing di Microsoft con un SBC supportato ci apre molti scenari interessanti, di seguito alcuni di questi:

  • Possibilità di integrare la nostra vecchia centrale telefonica con un sistema moderno andando ad eliminare completamente i telefoni da scrivania
  • Possibilità di Audioconference con utenze miste, identità Azure AD e PSTN
  • Possibilità di Meeting con utenze miste, identità Azure AD e PSTN
  • Possibilità di avere un SIP TRUNK diretto con il provider senza la necessità di comperare una centrale telefonica ma solo l’SBC (Session Border Controller fisico o virtuale)
  • Possibilità di avere un unico SBC collegato a più Tenant, offrendo così SBC in PaaS

Microsoft supporta svariati vendor di SBC per il Direct Routing con Teams, di seguito una lista:

  • Audiocodes
  • Ribbon Communications
  • Thinktel
  • Oracle
  • TE-SYSTEMS
  • Metaswitch
  • Cisco
  • Avaya
  • Nokia

Di Seguito uno schema che illustra il flusso di chiamate tra Microsoft Phone System, SBC, Legacy PBX e PSTN:

Direct Routing - Customer Deployed.png

In questo articolo andremo a vedere gli step necessari per l’integrazione tra Microsoft Teams e l’SBC di Audiocodes.

Prerequisiti:

Prima di iniziare la configurazione, è fondamentale assicurarsi di avere tutto il necessario a posto:

AudioCodes SBC:

  • Versione firmware almeno 7.20A.250.xxx o successiva, l’ultima versione firmware consigliata da Microsoft è disponibile qui
  • Licenze necessarie per l’SBC:
    • Microsoft Teams (Part SW/MSTEAMS) – questa licenza abilita l’SBC per il Direct Routing di Teams e abilita gli audio codes SILK e OPUS. Nelle versioni firmware precedenti a 7.20A.250.xxx non era necessario possedere questa licenza per far funzionare il Direct Routing, dunque se l’SBC che possedete ha firmware 7.20A.250.xxx o successive averete bisogno di questa licenza per far funzionare il tutto.
    • Sessioni SBC – Come qualsiasi altra configurazione di SBC Audiocodes che utilizza SIP-SIP, ogni stream di chiamata consumerà 1 sessione SBC.
    • (Facoltativa) Transcoding – Se l’operatore SIP non supporta i codec che desideriamo utilizzare, ad esempio G.711 per il Direct Routing di Teams, sarà necessario il transcoding per eseguire la conversione tra i due codec.
  • L’SBC ha un’interfaccia “WAN” alla quale è possibile assegnare un IP Pubblico oppure nattarla dietro il FW perimetrale. È comune inoltre utilizzare l’interfaccia “LAN” per la MGMT ma non è un requisito fondamentale.
  • Un SIP Trunk o PSTN trunk configurato sull’SBC

Network:

  • Un record A pubblicato nei DNS Esterni che punti all’ip pubblico dell’SBC. L’FQDN dell’SBC deve avere come dominio un accepted domain del nostro Tenant di Microsoft 365 (ovviamente non può essere dominio.onmicrosoft.com, ma un nostro dominio di primo livello), ad esempio sbc.contoso.com.
  • Un certificato che contenga l’fqdn dell’SBC (SAN, WILDCARD, ecc..) rilasciato da una Root CA pubblica trustata da Microsoft, da notare che non tutte le Root CA sono trustate da Microsoft. Per una lista delle CA trustate vedete qui, esempi di CA trustate sono DigiCert, GlobalSign, Go Daddy.
  • Le seguenti porte devono essere aperte tra SBC e Internet:
Traffic From To Source Port Destination Port Descrizione
SIP/TLS Teams SIP Proxy* SBC 1024-65535 TCP Definito su SBC Segnalazione SIP da Teams al tuo SBC, la porta di destinazione dipende da cosa configuri l’interfaccia SIP TLS (es. 5067 TCP)
SIP/TLS SBC Teams SIP Proxy* Definito su BC 5061 TCP Segnalazione SIP dall’SBC a Teams. Consigliato consentire tutte le porte di origine (1024-65535 TCP) da SBC alla porta di destinazione 5061 TCP
UDP/SRTP Teams Media Processor** SBC 3478-3481,49152-53247 UDP Definito su SBC Contenuti multimediali da Teams all’SBC. La porta di destinazione dipende da ciò che è configurato nell’area multimediale sull’SBC
UDP/SRTP SBC Teams Media Processor** Definito su SBC 3478-3481,49152-53247 UDP Contenuti multimediali dall’SBC a Teams. La porta di origine dipende da ciò che è configurato nell’area multimediale sull’SBC
  • Gli ip del SIP PROXY di *Teams sono i seguenti:
    • 52.114.148.0 (sì proprio così, .0)
    • 52.114.132.46
    • 52.114.75.24
    • 52.114.76.76
    • 52.114.7.24
    • 52.114.14.70
    • NUOVO (2020): 52.114.16.74
    • NUOVO (2020): 52.114.20.29
  • Gli ip del Media Processor di **Teams sono i seguenti:
    • 52.112.0.0/14
    • NUOVO (2020): 52.120.0.0/14

Per essere aggiornati sugli ultimi ip, guardate qui

Office 365:

  • Accesso al Tenant tramite powershell utilizzando il modulo di Skype For Business Online
  • Le identità utente che andranno ad utilizzare il Direct Routing saranno:
    • Identità utente presenti su Azure AD (Sincronizzate o Cloud Only)
    • Modalità di coesistenza di Teams Only (policy globale o assegnata alla singola identità)
    • Licenze necessarie
      • Microsoft Teams – Parte del licensing Business Standard, Busines Premium, E3, E5 ecc.
      • Phone System – Può essere comprata standalone oppure è compresa nella E5
      • Audio Conferencing – Non è tecnicamente necessaria per effettuare chiamate, è necessaria nel momento in cui vogliamo invitare tramite codice telefonico utenti non presenti in Tenant di 365 nei nostri meeting. Può essere comprata standalone oppure fa parte della Office 365 E5.

Configurazione SBC

A questo punto siamo in possesso di un SBC con queste caratteristiche:

  • Versione firmware 7.20A.250.xxx o successive e licenziato per Teams e per le sessioni SBC (stream chiamate da Teams)
  • Configurata la PSTN su SBC e.g. SIP Trunk
  • Interfaccia “WAN” con ip pubblico assegnato (o nattata)
  • Record A pubblicato sui DNS pubblici che punta all’ip pubblico della “WAN” dell’SBC (o a ip pubblico che natta verso SBC)

Se abbiamo eseguito tutte le operazioni sopraelencate, possiamo procedere con la configurazione dell’SBC.

Certificati

La prima cosa da fare è configurare un certificato in modo che Teams e l’SBC si possano “fidare” l’uno dell’altra, e crittografare il traffico. Andate su Setup > IP Network >Security >TLS Contexts, create un nuovo TLS Context apposito per Teams:

Parameter Value
Name Teams (arbitrary name)
TLS Version TLS v1.2

Successivamente, nel nuovo TLS Context appena creato, andate su Change Certificate:

Scorrete fino alla parte in cui vi chiede di importare chiave privata e pubblica del vostro certificato, caricate in formato pem le due chiavi (NB: anche se dice di accettare il formato PFX (PKCS#12) per la chiave privata è comunque consigliato utilizzare il formato pem direttamente, la macchina non riesce a estrarre correttamente la chiave privata dal PFX).

Se avete importato con successo sia chiave privata che pubblica, tornando indietro e selezionando “Certificate Information”, dovreste vedere le seguenti info sul certificato appena caricato:

Lo “Status: OK” vi farà stare tranquilli sul buon esito dell’operazione effettuata.

Ora che il certificato è stato installato, procediamo con l’installazione delle “Root” e “Intermediate” del nostro certificato, questi certificati sono presenti nella chain del certificato installato:

In aggiunta sarà necessario installare anche il certificato della “Root” utilizzato dai SIP Proxy di Teams – questo certificato può essere scaricato qui. Per importare questi certificati nel TLS Context creato per Teams andate su “Trusted Root Certificates” e importare le root e le intermediate.

NB: L’SBC accetta certificati in formato Base64 e NON in DER

I primi due di Baltimore sono i certificati delle “Root CA” e fanno parte delle chain dei certificati utilizzati dai SIP Proxy di Teams, gli altri due sono certificati delle “Root CA” delle chain dei certificati del nostro lab.

Media Realms

Un Media Realm è una serie di porte UDP utilizzate per i contenuti multimediali su un’interfaccia dell’SBC. Andate in Setup > Signaling and Media > Core Entities > Media Realms.

Se non è presente un Media Realm assegnato all’interfaccia “WAN”, createne uno. Microsoft raccomanda due porte per sessione/chiamata. Prendete nota del range di porte dell’interfaccia “WAN” come defnito su SBC per le regole su firewall.

NB: In questo esempio iniziamo dalla porta 6000 con 100 “Media Session Legs”, dunque il range di porte definito su questo SBC sarà 6000-6399 UDP.

Interfaccia SIP

Un’interfaccia SIP è simile ad un Media Realm, definisce quali porte e protocolli sono utilizzate per le interfaccie dell’SBC. Andate su Setup > Signaling and Media > Core Entities > SIP Interfaces. Clickate su New e create una nuova Interfaccia SIP.

Dovrete configurare I seguenti valori:

Parameter Value
Index Use an Index other than 0
Name Teams (nome a piacere)
Network Interface “WAN facing” interface
UDP Port 0
TCP Port 0
TLS Port Porta utilizzata in ascolto TLS e.g. 5067
Enable TCP Keepalive Enable
Classification Failure Response 0 (l’SBC non risponderà ai failure, utile negli attacchi DDOS)
Media Realm Media Realm agganciata alla “WAN” (creato precedentemente)
TLS Context Name “Teams” TLS context (creato precedentemente)

PROXY Set

Un Proxy Set è una definizione di indirizzi IP o hostname con le quali comunicherà l’SBC, nel nostro caso, Teams. Andate su Setup > Signaling and Media > Core Entities > Proxy Sets. Aggiungetene uno per Teams clickando su New.

Configurate i seguenti parametri:

Parameter Value
Index Use an index other than 0
Name Teams (nome a piacere)
SBC IPv4 SIP Interface Teams SIP Interface (creato precedentemente)
Proxy Keepalive Using OPTIONS
Proxy Hot Swap Enable
Proxy Load Balancing Method Random Weights

Una volta che è stato creato il proxy, click su Proxy Addresses in fondo alla pagina del Proxy Set:

Aggiungete i seguenti Proxy Address:

Index Proxy Address Transport Type Proxy Priority Proxy Random Weight
0 sip.pstnhub.microsoft.com:5061 TLS 1 1
1 sip2.pstnhub.microsoft.com:5061 TLS 2 1
2 sip3.pstnhub.microsoft.com:5061 TLS 3 1

Questi sono i tre indirizzi dei SIP Proxy di Teams. Il primo è l’indirizzo primario e gli altri due sono in standby. Ovviamente a seconda della “region” nella qualle si trova l’SBC verrà risolto quello più vicino.

sip.pstnhub.microsoft.com -L’FQDN globale deve essere provato per primo.
sip2.pstnhub.microsoft.com -FQDN secondario, mappa geograficamente alla seconda area di priorità.
sip3.pstnhub.microsoft.com –FQDN terziario, mappa geograficamente alla terza area di priorità.

Per più informazioni sui requisiti di configurazione, vedere segnalazione SIP:FQDN.

Una volta che tutti gli indirizzi dei SIP Proxy ti Teams sono stati aggiunti la configurazione sarà simile a questa:

Coder Groups

Un Coder Group è una lista di codecs utilizzati per ogni SIP Trunk. Andate su Setup > Signaling and Media > Coders and Profiles > Coder Groups. Qui, andrete a definire la lista di codec che verranno utilizzati per la comunicazione con Teams:

Coder Name Packetization Time Rate Payload Type Silence Suppression
SILK-NB 20 8 103 N/A
SILK-WB 20 16 103 N/A
G.711A-law 20 64 8 Disabled
G.711U-law 20 64 0 Disabled
G.729 20 8 18 Disabled

NB: In questo caso è stato scelto lo spare Coder Group 1 – prestate attenzione ai tipi di payload del SILK, considerato che questi NON sono i valori di default. Inoltre, per SILK dovrete avere la licenza – questo dovrà essere licenziato come parte del Teams SBC SKU.

Clickate sul pulsante “Apply” appena terminato!

IP Profile

Un IP Profile definisce il comportamento SIP di un IP Group a seconda di quello che è stato configurato sull’IP Profile. Andate su Setup > Signaling and Media > Coders and Profiles > IP Profiles. Click su New e aggiungete i seguenti valori:

Section Parameter Value
General Index Use an Index other than 0
General Name Teams (nome a piacere)
Media Security SBC Media Security Mode Secured
SBC Early Media Remote Early Media RTP Detection Mode By Media
SBC Media Extension Coders Group Coders Group (creato precedentemente)
SBC Media RTCP Mode Generate Always
SBC Media ICE Mode Lite (Only required if using Media Bypass)
SBC Signalling SIP UPDATE Support Not Supported
SBC Signalling Remote re-INVITE Support Supported Only with SDP
SBC Signalling Remote Delayed Offer Support Not Supported
SBC Forward and Transfer Remote REFER Support Handle Locally
SBC Forward and Transfer Remote 3xx Mode Handle Locally
SBC Hold Remote Hold Format Inactive

IP Group

Gli IP Group mettono insieme molte delle configurazioni fatte insieme precedentemente. Andate su Setup > Signaling and Media > Core Entities > IP Group. Andiamo a configurare un nuovo IP Group per Teams con i seguenti valori:

Section Parameter Value
General Index Use an Index other than 0
General Name Teams (nome a piacere)
General Topology Location Up
General Proxy Set Teams (creato precedentemente)
General IP Profile Teams (creato precedentemente)
General Media Realm Media realm agganciato alla “WAN” (creato precedentemente)
SBC General Classify By Proxy Set Disable
Advanced Local Host Name FQDN of SBC e.g. sbc.contoso.com
Advanced Always Use Src Address Yes
Message Manipulation Proxy Keep-Alive using IP Group settings Enable

SRTP

L’SRTP noto anche come Secure Real – Time Transport Protocol (Protocollo di Trasporto Sicuro in Tempo Reale), è un profilo di estensione della RTP (Real-Time Transport Protocol), che aggiunge ulteriori funzionalità di sicurezza, come ad esempio l’autenticazione dei messaggi, la riservatezza e la protezione contro la riproduzione, principalmente destinato alle comunicazioni VoIP. Andate su Setup > Signaling and Media > Media > Media Security e assicuratevi che Media Security sia abilitato e che Media Security Behavior sia settato su Preferable (Quando potete utilizzate SRTP).

Message Condition Rule

Andate su Signalling and Media > Message Manipulation > Message Conditions. Qui avrete necessità di creare una condizione tale per cui gli unici vengano accettati solo i messaggi SIP che contengono nel contact header “pstnhub.microsoft.com”.

Parameter Value
Index 0
Name Teams-Contact (nome a piacere)
Condition Header.Contact.URL.Host contains ‘pstnhub.microsoft.com’

Classification Rule

Andate su Signalling and Media > SBC > Classification. Qui, utilizzando la message condition appena creata, potete classificare il traffico proveniente dagli IP di Teams e matchare la condition del IP Group di Teams. Senza la “classification”, l’SBC non sarà in grado di determinare il tipo di traffico e dove indirizzarlo. Eseguite la configurazione con i seguenti valori:

Parameter Value
Index 0
Name Teams (nome a piacere)
Source SIP Interface Teams (creato precedentemente)
Source IP Address 52.114.. (range IP Teams)
Destination Host FQDN SBC e.g. sbc.contoso.com
Message Condition Teams-Contact (creato precedentemente)
Action Type Allow
Source IP Group Teams (creato precedentemente)

IP-to-IP Call Routing Rules

Queste regole sono utilizzate per l’instradamento (o per non instradare) IP to IP chiamate/traffico. Andate su Setup > Signaling and Media > SBC > Routing > IP-to-IP Routing. Qui, dovrete creare 4 regole di instradamento, con i seguenti valori:

Index Name Source IP Group Request Type Call Trigger ReRoute IP Group Destination Type Destination IP Group Destination Address
0 Terminate OPTIONS Any OPTIONS Dest Address internal
1 REFER From Teams Any REFER Teams Request URI Teams
2 Teams -> SIP Trunk Teams IP Group SIP Trunk (o come lo avete chiamato)
3 SIP Trunk -> Teams SIP Trunk (o come lo avete chiamato) IP Group Teams

0.Termina le OPTIONS tra gli IP Groups. Questo fa in modo di tenere le OPTIONS in locale su SBC e non le proxa tra gli IP GROUPS.

1.Regola “REFER” permette a Teams di trasferire le chiamate correttamente

2.Instradamento chiamate dal Teams IP Group al SIP Trunk IP GROUP

3.Instradamento chiamate dal vostro SIP Trunk IP Group al vostro Teams IP GROUP.

Dovreste avere i 4 instradamenti definiti dopo le configurazioni effettuate:

Verificate il collegamento tra SBC e Teams

La configurazione dell’SBC è terminata! – ora l’SBC si collegherà correttamente a Teams. Se andate su Monitor > VOIP Status > Proxy Set Status vi dovrebbe far vedere Online tutti e 3 gli indirizzi dei SIP Proxy di Teams

Configurazione Microsoft 365

Con l’SBC configurato, ora è tempo di procedere con la configurazione del vostro Tenant di Microsoft 365.

Aggiungete l’SBC come PSTN Gateway in powershell eseguendo questi passaggi:

Collegatevi in powershell remota tramite il modulo “SkypeOnlineConnector” che potete scaricare qui:

Import-Module SkypeOnlineConnector

$credential = Get-Credential teamsadmin@contoso.com

$session = New-CsOnlineSession -Credential $credential

Import-PSSession $session

Una volta collegati in powershell andrete a vedere una lista di nuovi CMDLETS tramite CMDLET get-command *pstngateway*:

Andate ad aggiungere l’SBC su Teams utilizzando il CMDLET New-CSOnlinePSTGateway:

New-CsOnlinePSTNGateway -Fqdn sbc.contoso.com -SipSignallingPort 5061 -MaxConcurrentSessions 3 -Enabled $true

Andate a verificare l’sbc appena aggiunto tramite il CMDLET Get-CSOnlinePSTNGateway:

Qui potete vedere alcuni parametri aggiuntivi che potete configurare:

Parameter Value
TranslationRules Regole per manipolare numeri in entrata/uscita sorgente/destinazion – Tipicamente questo viene lasciato gestire direttamente all’SBC
FailoverTimeSeconds Quanto tempo attendere risposta dell’SBC. Se non risponde, si può fare failover su un altro SBC della lista (se ne avete più di uno)
ForwardCallHistory Mostra la cronologia delle chiamate, e.g. trasferimenti di chiamata con intestazioni SIP History-Info e Referred-By
ForwardPAI Se si desidera verificare l’identità del chiamante utilizzando l’intestazione SIP P-Asserted-Identity (PAI), possiamo utilizzare questa. NB: Forzerà l’instazione FROM SIP come anonima
MediaRelayRoutingLocationOverride Se la location dell’IP pubblico dell’SBC è differente da quella dell’SBC stessso, è possibile specificare la location della macchina in questo parametro

Se andate su Teams Admin Centre sotto Voice > Direct Routing: potete verificare che il collegamento tra Teams e SBC è attivo:

Abilitazione Utenti alle chiamate

Per ciascun utente assicuratevi di aver assegnato le licenze correttamente e.g. E3 con Phone System. In seguito, andate ad eseguire la seguente CMDLET per abilitarli alle chiamate:

Set-CsUser -Identity "<UserUPN>" -EnterpriseVoiceEnabled $true -HostedVoiceMail $true -OnPremLineURI tel:+390522xxxxxx

Configurazione Voice Routing

Proprio come Skype For Business On-Premises, ci sono delle regole di normalizzazione del numero, policy voice, utilizzi e instradamenti PSTN. Sostanzialmente le chiamate si basano sulle autorizzazioni (Online Voice Routing Policy) e sul numero chiamato (Online Voice Routing).

Creiamo una PSTN Usage – Qui aggiungiuamo un PSTN Usage alla lista globale utilizzando il CMDLET Set-CSOnlinePSTNUsage:

Set-CsOnlinePstnUsage -Identity Global -Usage @{Add="<PSTN Usage Name>"}

Creiamo una Online Voice Route – Ora possiamo aggiungere una Online Voice Route. Questa collega gli PSTN usages all’SBC(s) (PSTNGateways) con un pattern regex da matchare. Se matcha, manda la chiamata all’SBC(s) designato:

New-CSOnlineVoiceRoute -Identity "<Route Name>" -NumberPattern "<Regex>" -OnlinePstnGatewayList <SBC FQDN> -Priority <Num> -OnlinePstnUsages "<PSTN Usages>"

NB: Questo è un NumberPattern di esempio dove andiamo ad indicare tramite “wildcard” che tutte le chiamate saranno matchate.

Creiamo una Online Voice Routing Policy – Utilizzando gli PSTN Usage e gli Online Voice Routing è necessario creare una Online Voice Routing policy. È a tutti gli effetti un elenco di pattern e numeri di telefono consentiti (con priorità) per un utente:

New-CSOnlineVoiceRoutingPolicy "<Name>" -OnlinePstnUsages "<PSTN Usages>"

Assegnamo la Online Voice Routing Policy a ciascun utente:

Grant-CsOnlineVoiceRoutingPolicy -Identity <UserUPN> -PolicyName <Policy>

Una volta configurato, il flusso delle chiamate funzionerà in questo modo:

  1. Un utente effettua una chiamata.
  2. In base alla Online Voice Routing Policy viene restituita una lista di PSTN Usage.
  3. Le Online Voice Route che sono collegate ai PSTN Usage sono controllate per vedere se il numero di telefono matcha. In caso affermativo la chiamata viene inviata all’SBC nell’Online Voice Route con la priorità più alta.
  4. Se per qualsiasi motivo la chiamata non può essere instradata tramite l’Online Voice Route (e.g. l’SBC è Offline), vengono utilizzate le Online Voice Route rimanenti che matchano con i PSTN Usage.
  5. Se non sono state trovate Online Voice Route funzionanti e all’utente è stato assegnato un “Calling Plan (PBX in cloud)”, questo viene utilizzato come ultima spiaggia.

CONCLUSIONI

Microsoft 365, tramite l’utilizzo di Teams ci permette di avere un unico HUB di collaborazione che ora comprende anche la telefonia, in questo modo possiamo fare a meno dei vecchi telefoni da scrivania e sfruttare la nostra centrale telefonica esistente, o addirittura eliminarla del tutto andando a risparmiare non poco. Dopo l’articolo che avete letto, sperando che abbiate trovato gli step abbastanza semplici, dovreste essere riusciti a stabilire una connessione SIP con Teams, sarete dunque in grado di instradare le chiamate da e verso Teams. Nelle prossime puntate andremo vedere gli step di configurazione con altri vendor differenti da AudioCodes in modo da darvi un’idea delle differenze.

Stay Tuned on Technical365!!

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *