Im vorherigen Blog-Beitrag wurde die Integration der Anruf-Funktionen in Teams beschrieben. An dieser Stelle geht es nun um die technischen Grundlagen.
Direct Routing bezeichnet die Nutzung eines eigenen (oder gemieteten) SIP-Trunks, oder sogar ISDN-Anschlusses mit Microsoft Teams. Dafür gibt es einige Voraussetzungen.
Voraussetzungen:
- Ein Session Border Controller, kurz SBC. Am besten einen, der von Microsoft zertifiziert wurde: Liste der zertifizierten SBC
- Einen Ort zum Betrieb des SBC, z.B. eine Azure Instanz, ein Rechenzentrum oder einen Firmenstandort für einen Hardware-SBC. Der SBC ist keine native Cloud-Funktion; er lässt sich allerdings durch den Betrieb z.B. in Microsoft Azure zu einer solchen Cloud-Funktion konvertieren
- Einen Hostnamen, unter dem der SBC erreichbar ist. Dieser Hostname muss zwangsweise direkt, also maximal eine Ebene unter einer der in Office365 konfigurierten Domänen liegen. Zudem muss der SBC über ein gültiges TLS-Zertifikat verfügen.
- Lizenzen: Jeder Anwender benötigt eine Telefonie-Lizenz für Office365, optional ergänzt durch eine Audiokonferenz-Lizenz. Diese Lizenzen sind in der Office365 E5 Lizenz bereits eingeschlossen; alternativ können diese zur E1 oder E3 Lizenz hinzugebucht werden. Ob die Telefonie-Lizenz mit Office365 Business Lizenzen kombinierbar ist, ist momentan nicht klar definiert. Vorhandene Szenarien funktionieren offenbar, die Neubuchung dieser Kombination scheitert derzeit allerdings.
- Ein Server oder Client mit der PowerShell-Erweiterung SkypeOnlineConnector. (Download hier) Diese benötigt wiederum PowerShell 5.0, plus eine spezielle Version der Visual C++ 2017 Runtime. Klingt relativ einfach, allerdings bin ich aufgrund von zahlreichen Problemen bei der Installation des Connectors auf unseren Technik-RDS-Server ausgewichen.
Der Session Border Controller (SBC)
Kurzfassung: Installieren Sie den Session Border Controller Ihrer Wahl, am Ort Ihrer Wahl, und binden Sie den Trunk Ihrer Wahl an. Dieser Vorgang ist von Produkt zu Produkt zu unterschiedlich, und liegt tatsächlich an Ihren individuellen Gegebenheiten.
Anschließend veröffentlichen Sie Ihren Session Border Controller unter einer Domäne, die in Office365 konfiguriert ist; in unserem Fall wäre dies die skysystems.it, der Session Border Controller liegt unter controller.skysystems.it. Wichtig ist, dass der Hostname direkt unter der Domäne platziert ist; controller.telefonie.skysystems.it wäre beispielsweise nicht zulässig, da telefonie.skysystems.it keine in Office365 konfigurierte Domäne ist. Auch die Nutzung von *.onmicrosoft.com ist nicht möglich.
Damit nicht jeder, der nun den Hostnamen unseres SBC gelesen hat, diesen nutzen darf, haben wir unsere Firewall entsprechend konfiguiert, dass der SBC nur von Microsoft erreichbar ist. Hierzu werden folgende Freigaben erstellt:
Quell-Hosts:
sip.pstnhub.microsoft.com
sip2.pstnhub.microsoft.com
sip3.pstnhub.microsoft.com
Alternativ, Quell-IPs:
52.114.148.0
52.114.132.46
52.114.75.24
52.114.76.76
52.114.7.24
52.114.14.70
Ziel-Ports:
TCP 5061 (SIP/TLS)
UDP 49152-53247 (UDP/SRTP)
Selbstverständlich muss der SBC auch ausgehend die Möglichkeit haben, den Microsoft SBC zu erreichen; Berücksichtigen Sie dies innerhalb Ihrer Firewall-Konfiguration.
Wichtig: Wir verwenden aktuell keinen Media Bypass; dieser benötigt ggf. eine andere Firewall-Konfiguration.
Einbindung des SBC in Microsoft Teams
Stellen Sie zunächst eine Verbindung mit dem Skype Online Connector her. (Skype for Business Online ist quasi der „Vorläufer“ und damit die technische Grundlage der Teams-Telefonie, daher gibt es fachliche und begriffliche Überschneidungen.)
Öffnen Sie hierzu eine Powershell-Sitzung und geben Sie die folgenden Befehle ein:
Import-Module SkypeOnlineConnector $credentials= Get-Credential $session = New-CsOnlineSession -Credential $credentials Import-PSSession $session
Sollte die nachfolgende Meldung erscheinen, so ist das entsprechende Modul nicht installiert:

In diesem Falle gilt, installieren Sie das entsprechende Modul, siehe Voraussetzungen.
Nachdem die Sitzung hergestellt wurde, konfigurieren Sie den SBC:
New-CsOnlinePSTNGateway -Fqdn controller.skysystems.it -SipSignalingPort 5061 -MaxConcurrentSessions 10 -Enabled $true
Ersetzen Sie hierbei den Hostname sbc.skysystems.it durch den Hostnamen Ihres SBC, und die 10 durch die Anzahl der zeitgleichen Sitzungen, die Ihr SBC zulässt. Auch den SIP-Signalisierungsport 5061 müssen Sie ggf. an Ihren SBC anpassen. Bitte hierbei die Firewall nicht vergessen, siehe oben.
Als Erfolgskontrolle können Sie mittels
Get-CsOnlinePSTNGateway
die konfigurierten Gateways (Session Border Controller) abrufen.

Anschließend lässt sich der Controller-Status auch innerhalb des Teams-Admin-Portals https://admin.teams.microsoft.com/ kontrollieren:

Warnungen und Fehlermeldungen sollten nicht vorhanden sein.
Benutzerkonfiguration
Nachdem der SBC vorhanden ist, können die Anwender konfiguriert werden. Hierzu verwenden Sie den Befehl:
Set-CsUser -Identity “Benutzername” -EnterpriseVoiceEnabled $true -HostedVoiceMail $true -OnPremLineURI "tel:+49xxxxyyyyyy"
Ersetzen Sie den Benutzernamen und die Telefonnummer.
Sollte die nachfolgende Fehlermeldung erscheinen:
so bedeutet dies lediglich, dass der Anwender nicht über die notwendige Lizenz verfügt.
Das Routing und die Richtlinien
Nun folgt der teils verwirrende Teil: Der Benutzer muss zum Gateway. Die Details sind hier dokumentiert: https://docs.microsoft.com/en-us/microsoftteams/direct-routing-configure
Für ein vereinfachtes Szenario, mit einem SBC, welcher alle Anrufe routen soll, reichen folgende Befehle:
Erstellung einer Route:
Set-CsOnlineVoiceRoute -id "SBC" -NumberPattern ".*" -OnlinePstnGatewayList controller.skysystems.it
Dieser Befehl legt die Route an, welche für alle gewählten Nummern unter der Kennung „SBC“ die Anrufe über den SBC sendet. Anschließend benötigen wir eine Routing Policy, quasi die Anweisung, die Route auch zu verwenden:
New-CsOnlineVoiceRoutingPolicy "SBC" -OnlinePstnUsages "SBC"
Zuletzt benötigen die konfigurierten Anwender die Erlaubnis, diese Route auch zu verwenden:
Grant-CsOnlineVoiceRoutingPolicy -Identity "Benutzername" -PolicyName "SBC"
Insbesondere beim letzten Schritt kommt es oftmals zu Fehlermeldungen, welche wie folgt lauten:
Policy “Policy Name” is not a user policy. You can assign only a user policy to a specific user.
+ CategoryInfo : NotSpecified: (:) [Grant-CsOnlineVoiceRoutingPolicy], ManagementException
Sollte diese Fehlermeldung erscheinen (oder die deutsche Übersetzung), so hilft nur eins: Geduld. In unserem Fall waren es rund 36 Stunden (!), bis die Richtlinie zuzuweisen war. Mehrfache Anmeldungen in Teams werden als Hilfsmittel empfohlen, wir konnten allerdings keine Beschleunigung messen.
Nachdem die Policy dann zugewiesen ist, dauert es nochmals bis zu 24 Stunden, bis der Ziffernblock in Teams erscheint und ausgehende Anrufe möglich sind. Eingehende Anrufe hingegen funktionieren bereits vor der Einrichtung der Routen und Policies, sobald der SBC eingerichtet und der Anwender „enabled“ ist und eine Rufnummer hat.
That’s it.
Natürlich ist dieser Beitrag nur ein kurzer Exkurs in die Möglichkeiten. Tatsächlich bieten beispielsweise die Routing-Funktionen zahlreiche Möglichkeiten, welche hier nicht im Einzelnen erwähnt sind. Eine besondere Aufmerksamkeit sollte der Session Border Controller bekommen: Mittels des richtigen Produktes lässt sich hier ein Hybridbetrieb mit einer bestehenden Telefonanlage implementieren.
Gerne hilft unser Team auch bei Ihrem Projekt!




