1
头图

大家好,我是本期的实验室研究员——王远。今天我将通过实验和完整的操作过程,向大家介绍通过Microsoft Teams Direct Routing相关技术实现在Teams中接听与拨打PSTN电话以及带领大家快速完成Direct Routing及SBC的完整配置流程。接下来就让我们一起到实验室中一探究竟吧!

微软MVP实验室研究员

image.png

Teams Phone System

在使用Teams的用户或许还未使用Calling Service这个功能,白话就是可以在Teams上拨打和接听电话,场景例如:所有员工均可使用Teams拨打手机和座机以及各种服务号码,而打出去的号码显示都是企业座机,同样手机拨打企业总机号通过分机号或者DID号码直接呼通Teams用户;或在Teams会议中通过PSTN电话呼入,或呼叫外部座机/手机通过语音的方式加入Teams会议 。

08107cdc8e956506ad5e8a484c939c94.png
在Teams中实现PSTN呼叫是依靠Phone System来完成的,就如同传统企业内部电话系统使用PBX系统一样。通过Phone System,用户可以使用 Teams来拨打和接听呼叫、转接呼叫以及将呼叫设为静音或取消静音。Phone System用户可以单击其通讯簿中的姓名,然后Teams呼叫此人。要拨打和接听呼叫,Phone System用户可以使用其移动设备、带笔记本电脑或电脑的耳机,或者使用Teams电话。Phone System管理员可以从用于消息传递、协作等的同一主机管理呼叫选项和设置。

在Teams中实现PSTN呼叫的方式有两种,分别是:

  • 基于云服务:Phone System with Calling Plan
  • 基于现有PSTN:Phone System with Direct Routing

Phone System with Calling Plan

这是最为简单的一种方式,把Microsoft当作运营商,直接购买通话套餐就行,就好比咱们买了一部手机,然后就是选择SIM卡的运营商是电信/联通/移动,选择好了运营商之后就选择是199还是299或399的套餐了,购买了套餐后就可以用手机拨打和接听电话了。所以Calling Plan也是SaaS服务的一种,架构如下:
3594adb6a5b75c4bf304c9f2ee5006f2.png

Phone System with Direct Routing

Direct Routing对比较复杂的一种方式,但相对更加灵活多变,Calling Plan是微软给你号码用于拨打和接听电话,那么Direct Routing可以使用企业自己的电话号码在Teams上拨打和接听外线电话,同时还支持自动呼叫助理,呼叫队列,用户分机号等等功能,通过SBC语音网关可以实现更多的号码规则以及路由规则,基于这种方式实现在Teams中拨打和接听电话需要购置一台SBC语音网关设备用于对接本地电话线路运营商和Microsoft Teams,架构如下:
80b13af736d91fb242cf073e10925b84.png

Direct Routing 原理

要使用Teams拨打接听PSTN电话,不单单是购置一台SBC语音网关,还需要配置拨号计划,让用户在Teams拨号盘输入的号码能按照预期转换成E.164格式并根据用户所在位置及策略将PSTN呼叫路由到不同目的地语音网关并最终通过E1线路送达至运营商。

首先,Teams Phone System遵循的规则E.164

E.164 是国际电信联盟电信(ITU-T) 的建议,它定义了用于公共交换电话网络和其他数据网络的国际公共电信编号计划,还定义了电话号码格式E.164号码最多有 15 位数字,并以[+]前缀书写。可确保 PSTN 上的每个设备都有全球唯一的号码。此号码允许电话和短信可以正确路由到不同国家/地区的各个手机/座机。标准的E.164 号码的格式为:

[+] [国家号码] [区域号码] [目的号码]

例如:我们在国外旅游的时候希望拨打国内号码应急的时候正确的拨号应该是如下(以成都某座机为例说明):

0734960bbc65eeee1c77aaa3f5cc7942.png
(E.164格式号码解读)
上面的电话号码可以从全球任意一个角落精准的呼叫到成都的一个叫88888888的座机号码上,同样拨打手机规则也是需要在前面添加+86

而Phone System也是遵循这种号码格式,所以在Teams上要拨打电话一定会在电话号码前添加一个[+]号。
8d41d938fea42b4233e1f3a8d45207ea.png

(Teams严格遵循E.164格式)

但是呢在Teams上为用户分配号码可以不那么严格的按照E.164的标准格式,因为在Teams中我们是无法针对某个用户的分机号去定义国家和对应地区的,所以在Teams里面用户号码只要满足是以+开头的号码就行,例如设置某用户分机号为tel:+1234,一般我们就说这个用户的Teams分机号是1234。

其次,国内座机拨打电话规则

根据通信管理局和工信部要求手机号是1:1且实名认证的,所以我们只能采用座机号码的方式与Phone System对接。而座机号码的PSTN线路又包括SIP中继和E1线路(也就是我们所说的30B+D线路),国外不同的标准下也有叫T1线路(23B+D)。

那么针对座机号码的拨打和接听我们需要了解如下规则:

拨打本地座机:直接输入当地座机号码即可开始呼叫;

拨打本地手机:直接输入当地手机号码即可开始呼叫;

拨打外地座机:输入目的地区号+目的地座机号码才能开始呼叫;

拨打外地手机:在外地手机号码前加0才能开始呼叫;

拨打本地服务号码:直接输入3位或5位服务号码即可开始呼叫;

拨打外地服务号码:输入目的地区号+3位或5位服务号码才能开始呼叫;

拨打800热线号码:直接输入800开头的热线号码即可开始呼叫即可开始呼叫;

拨打海外电话:在开通国际长途功能后输入00国家代码[目的地号码]即可开始呼叫,其中打头的00是咱们国家的国际冠字号,主要作用是用来启动国际长途的号码;

特别提醒在座机拨打国内长途号码的时候区号都是010、021、028这类号码

细心的同学已经发现了E.164格式和我们国内座机的拨号方式完全不一样。对的,国内座机都是直接输入数字开始呼叫。并且国内的区号都是010、021、028这类号码,以0开头的,准确的说在标准的E.164格式中地区号是没有0的,例如010变成标准格式后变成+8610对应北京地区区号,021变成标准格式后变成+8621对应上海地区区号、028变成标准格式后变成+8628对应成都地区区号。

最后,Teams Direct Routing

基于E.164和咱们国内的座机拨打规则的回顾,我们接下来需要了解如何将一个预期想打出去的号码在Teams上去做号码转换,以及拨打该号码的用户是否有权限拨打长途号码,以及这个呼叫要从哪台语音网关出局,了解清楚这些问题才好去做SBC和Teams语音路由策略规划。

拨号计划:

Teams上的拨号规则的建立,可以使用户在拨号的时候不用过多考虑E.164规则,用户只管按照常规拨打电话习惯直接输入需要拨打的号码,剩下的交给Teams来帮用户自动完善成各种E.164格式送到SBC设备。

例如我在Teams拨号盘上输入一个手机号码(手机号前未加0表示是本地手机号)进行号码规则检测,结果会在号码前面自动补上+86,而匹配的规则是本地手机号。

83962b94a62312cfb3b3010b941a9b64.png
(在Teams管理中心测试手机号转换)

b7f1148b21a5898e059299495464e1fc.png
(在Teams客户端输入手机号呼叫)

9ef3e0dc0737d2d7f1517c0d232f8a31.png
(Teams拨号界面自动为手机号添加+86并开始呼叫)
又例如给一个北京用户分配了成都的拨号策略,那么北京的用户要拨打北京本地一家单位的一个号码就会变成+8628成都的区号送到SBC语音网关,最终到成都电信运营商。这时候要么这个是空号,要么这个号码归属于成都某个单位或个人,总之肯定打不到预期的北京当地单位的电话。

548762414d8e23b0b72972bc30188c21.png
(管理用户拨号计划)
为了方便大家理解,请看下面这张拨号图,红色标记部分拨号记录我用的全局默认的拨号计划,绿色标记部分拨号记录是给当前账号分配了CN-Chengdu这个拨号计划的。

由于当前我的Microsoft365租户注册地为香港,即使我的全局拨号策略里面没有创建任何的拨号规则,默认会在所拨号码前面加上香港的地区号+85,大赞微软!

当分配了CN-Chengdu拨号计划策略后,在Teams拨号盘里面输入66668888这个号码会自动填充上中国的国家代码+86和成都的地区代码28。有了拨号计划Teams才知道用户拨号的最终意图是本地电话还是长途电话还是其他电话。
36268a8ce91d0198111d73848479d824.png
(不同的拨号计划最终号码转换效果不一样)

语音路由策略:

语音路由更像是Teams Phone System拿到了一个用户最终想要拨打的号码之后要去匹配这个号码应该往哪台语音网关设备路由,所以这里面涉及到了以下这张图上的内容。

例如:

下图有一条策略叫CN-Chengdu-AllCalls,匹配的拨号模式是只要是在Teams上拨打的号码前面带“+”号就直接路由给【cdsbc.and-sc.com】这台语音网关并最终从成都的电信运营商发起呼叫到目的号码,这是最粗暴的模式。

那么,如果我只希望成都某某同事使用Teams拨打电话的权限为只能拨打本地的座机,不允许拨打长途和国际电话呢?很简单,我们只需要创建一条语音路由(下图中已经有CN-Chengdu-Local),在这条路由里面我们写好匹配的拨号模式为^+8628\d+,这个拨号模式意思是只要在Teams拨号盘里面最终的号码是以+8628开头的任意号码,我们都把这个号码路由到【cdsbc.and-sc.com】这台语音网关并最终从成都的电信运营商发起呼叫到目的号码,反之是以+86XX其他号码开头的呼叫一律不进行路由。同样我们也需要在语音路由策略里面创建对应的策略使用PSTN用法关联到语音路由上,并最终把这条策略分配给限制拨打长途的用户即可。
9679bfe687e956ad9318e3cab5e71b53.png
(语音路由)

d61c4aa03e74266d3e6c0d6afa875438.png
(语音路由策略)
上面的一个需求是成都当地某用户只能拨打当地电话,而实际上当地电话除了本地座机还有本地手机,我们给出的策略是+8628开头的号码才进行路由,而本地的手机变成E.164格式后是【+86189XXXX1042】这样的号码,根据策略这样的号码是不能被路由到语音网关的。所以,如果只是匹配一个拨号模式这个做法是不合理的,禁止拨打长途的场景中还应该包括能拨打本地手机号,那么这时候我们就需要完成两个动作:

①在语音路由中增加CN-Chengdu-Mobile,写好匹配的已拨号模式为^+86(1[345789]\d{9})$,这个拨号模式意思是以+86开头,第二位数是1,第三位数是3/4/5/7/8/9并且后面还有9位任意数字的号码,这个其实就是咱们的手机号码标准的E.164格式,例如+86147xxxx9999,这个手机号里面的1对应的规则中的第二位数,4对应的第三位数,7xxxx9999对应规则中的d{9},也就是9位任意数字,并在PSTN用法中新建一个CN-Chengdu-Mobile进行关联到这条语音路由。

ae1855a10d0f5ba6bd8cbee3ade3fabb.png
(新增CN-Chengdu-Mobile语音路由并创建PSTN用法)
②在已有的CN-Chengdu-Local语音路由策略中编辑PSTN用法新增加上CN-Chengdu-Mobile去关联拨打成都本地手机的路由。

2311c79ffbc2396f15bc5b0b2c14821a.png
(现有CN-Chengdu-Local策略中添加CN-Chengdu-Mobile PSTN用法)
完成以上两步操作后应用CN-Chengdu-Local这条语音路由策略的用户不论是拨打本地座机还是手机都能把拨打的号码路由到【cdsbc.and-sc.com】这台语音网关,并最终到电信运营商。

所以语音路由及策略包括:

  • 匹配的已号码模式
  • PSTN用法
  • 关联的SBC语音网关

其中PSTN用法只是一个标识,同时关联语音路由策略和语音路由,当Teams上拨号盘输入的号码转换成E.164格式的号码并匹配上了我们在语音路由中定义好的号码模式后就把这个E.164格式电话号码路由到SBC语音网关进行下一步的处理。 从以上的配置中初看可能会有点绕,但是我认为只要把各种路由,策略,PSTN用法的命名进行规范化还是比较容易理解的。

规划 Direct Routing

整个Phone System with Direct Routing技术中涉及到3大部分,分别是:

  • Microsoft365租户:提供Phone System及Direct Routing技术和语音路由配置
  • SBC语音网关:提供会话边界控制器用于将本地PSTN网络连接至Microsoft Phone System
  • PSTN运营商:俗称电话线路运营商,如电信、移动、联通,提供中继或E1线路用于PSTN接入和拨出。

b093c653336598c0d9b6db4679422305.png

Microsoft 365租户

首先要保证当前你拥有一个Microsoft 365全球版独立租户(Phone System目前已经支持GCC DoD环境)

在当前的Microsoft365中绑定企业域名,Microsoft 365默认域名为.onmicrosoft.com,SBC设备FQDN不支持此类通用域名,仅支持.contoso.com此类域名。

cdddebf3372e45267af3b4d63bf13afa.png
(Microsoft 365中绑定的域名)

拥有对Micrsofot 365环境操控权限,操作账户至少需要Teams管理员权限用于添加SBC设备、配置语音路由策略、分配策略等操作。

在Microsoft 365上还需要单独的Phone System许可分配到用户,如果是E5/A5许可已经自带了Phone System许可,若非此版本的许可,还需要额外购买Phone System许可并分配到需要拨打和接听电话的用户。

Direct Routing可以在Teams Admin Center中配置,也可以在Powershell中配置,如需通过Powershell配置则需要提前安装Teams模块用于远程连接,命令如下:

Install-Module -Name PowerShellGet -Force -AllowClobber

Install-Module -Name MicrosoftTeams -Force -AllowClobber

由于SBC与Phone System之间使用Direct Routing技术直接连接,全部采用https TLS协议所以需要互相信任对方,此时Direct Routing节点为:

  • sip-all.pstnhub.microsoft.com
  • sip.pstnhub.microsoft.com
  • sip2.pstnhub.microsoft.com
  • sip3.pstnhub.microsoft.com

通过查询得知Microsoft Direct Routing使用由Baltimore CyberTrust Root颁发的证书,所以,在配置之前需要获取到这张CA证书,并导入SBC设备用于信任Teams Direct Routing。

SBC语音网关

在SBC这部分首先是需要一台经过微软认证的设备才能进行配置,已通过认证的SBC设备包括如下品牌:

AudioCodes、Ribbon Communications、Thinktel、Oracle、TE-SYSTEMS、Metaswitch、Cisco、Avaya、Nokia、Italtel、Ericsson、Cataleya、ULTATEL、Atos、Sansay Inc.、Enghouse Networks、Patton Electronics Co.、M5 Technologies(previously known as Media5 Corporation)、Ekinops、46 Labs LLC

具体的型号版本可以通过此链接查询:

其次,SBC设备需要一个FQDN名称,且在公网DNS中能解析,用于Teams Phone System在互联网中发现SBC设备,所以此时还需要企业IT管理员拥有公网DNS管理权限。

此外SBC设备需要一个固定公网IP地址对外映射端口,用于和Phone System建立SIP连接,所以DNS解析的IP也应该是这个公网固定IP地址。

对于SBC设备对外映射的端口如下:

image.png

(注意:媒体端口16384-16884根据设备不同端口范围有所不同)

最后SBC设备还需要一张SSL证书(可使用通配符证书*.contoso.com),用于与Phone System建立SIP Trunk连接时使用,目前通过Direct Routing技术连接到SBC网关时,SBC上的SSL证书仅支持以下证书颁发机构(GCC环境仅支持DigiCert颁发机构颁发的证书):

ea9926c738a55855f8df8563cebfdc8c.png
(支持的证书颁发机构)

PSTN运营商

最后就是PSTN运营商需要提供的线路了,可以是SIP线路,也可以是E1线路接到SBC设备上即可。

其实,一套Teams Direct Routing实施起来并非简单,除了以上列举到的内容以外还包括:客户的拨号习惯和拨号规则是如何定义的,多站点SBC的规划,根据不同用户的拨号权限配置策略等等并非一篇文章就能细化出来,还需要多方沟通。接下来的文章将会为大家分享配置阶段的操作。

以上,我们已经了解到Teams Phone System with Direct Routing的相关原理以及实施前的规划接下来我将继续带领大家快速完成Direct Routing及SBC的完整配置流程。

Microsoft Teams 配置

在做配置之前建议按照一定的标准格式来命令各种规则和策略以便后期运维,例如可以按照:国家-地区-规则描述的方式来命名,例如:

US-CA-Local 表示美国加利福利亚州本地电话

CN-CD-Local 表示中国成都本地电话

本文以PowerShell配置来进行分享(需提前安装好Teams模块,上一篇有相关要求和安装命令)。

通过Connect-MicrosoftTeams命令连接到Teams远程管理。

4e61435a0ed938b92b92c6e06a6b0909.png
(PS连接至Teams管理中心)

步骤-1,创建拨号计划

在创建拨号计划之前可以用Get-CsTenantDialPlan查看下当前已经有的拨号计划及详细的规则,例如我这里已经有了CN-Beijing和CN-Chengdu这两个地区的拨号计划,大家可以看详细的规则里面已经定义好了北京的区号是10,成都的区号是28,拨打本地电话的时候Teams的拨号规则都会根据当前用户所分配的拨号策略对电话号码区号进行自动补齐。

363af56431898ad4e01b800758627e4a.png
(查看当前已有的拨号计划)

接下来我模拟新建一个上海地区的拨号计划。
在后面的配置中还会用到上海地区的拨号计划,为了方便配置将上海地区的拨号计划赋予一个变量,后面的配置可以直接调用这个变量。

定义一个变量DPParent,值为CN-Shanghai。

然后使用New-CsTenantDialPlan命令创建一个拨号计划合集,描述中可以自定义为shanghai dial plan。

接下来创建一个新的号码规范规则,也就是详细的拨号规则,例如:客户定义了内部分机号,Teams之间互相拨打分机号而不需要输入UPN地址来进行呼叫,定义的内部分机号是4位,在分机号前面添加一个“+”变成一个的E.164格式号码。

创建的这个号码规范规则再放到之前创建的拨号计划CN-Shanghai。

691eda6b27d47aba08588b2a0730e776.png
(创建拨号计划及规范化号码规则)
接下来去定义一些拨打各种外线电话的号码规范规则,并对这些规则加以命名。

以CN-Shanghai-Local这个号码规范规则为例说明:

在Teams拨号盘里面拨打的号码以1到9开头的7位数或9位数的电话号码,需要转换成+8621[Teams拨号盘里面输入的号码],也就是说这条规则对应的是拨打上海本地的号码,会在拨打的号码前面自动加上“+8621”来转换成E.164格式进而通过Direct Routing将这通电话呼叫送到SBC网关。

ec02ffc0cdff2dbeb5780c3da6c29c46.png
(创建号码规范规则)
通过Set-CsTenantDialPlan将创建好的Normalization应用到CN-Shanghai这个拨号计划。
b77e07e32676f452dfee68f145fa99a4.png
(应用号码规范规则到拨号计划)

这样一个中国上海地区的拨号计划已经创建完毕,可以回到Teams Admin Center中心通过图形化界面来测试创建拨号规则是否生效。

此时在我的租户中就存在着3条自定义拨号计划的分别是:CN-Beijing、CN-Chengdu、CN-Shanghai。

afbde7e365baa1c9c1870ce953e3616c.png
(拨号计划合集)
进入CN-Shanghai拨号计划后,我们所创建的号码规范化规则已经全部出现。

此时在测试中输入66666666这个号码,默认就是上海本地的一个电话号码,这时候预期应该是+862166666666,而结果也符合预期,并告知我匹配的是CN-Shanghai-Local这条规范化规则。

9896fdc40d036c152357d16a0e67e91b.png
(上海本地号码规范测试)
如果使用这个拨号计划的用户需要拨打一个成都的长途座机呢?我们来看看结果

注意下:这里我输入的长途号码是严格按照我们国家电信局针对国内长途的拨号规则以028开头的号码,不过在E.164格式中会将28前面的0给吃掉,变成+862866666666,这是符合我们预期的。

特别注意:国内运营商根据地区不一样不一定能接受+8628这样的目的区号,在项目中需要跟运营商沟通确认,如果不支持接受+8628类似的区号仅接受+86028这类区号,此时有两种方式可以解决这个问题:

  • 方法一:在拨号计划的号码规范规则中将转换的号码规则改写成+860$1,把吃掉的0补回来。
  • 方法二:在SBC语音网关的号码转换规则中将Teams送过来的号码把0补上。

fa0aa8789cd110330b23fccdd70097bf.png
(长途号码规范测试)

步骤-2,创建PSTN用法

回到PowerSherll中新增一个PSTN用法标识,定义为CN-Shanghai-AllCalls。

d828f78305ed56fc026dc42d3403e7a8.png
(创建PSTN用法)

步骤-3,创建PSTN网关

接下来就需要创建PSTN网关了,因为在语音路由中除了要用到匹配拨号计划模式和定义的PSTN用法以外还需要知道这条路由最终走到哪台PSTN网关。

所以先定义好如下信息:

  • PSTN网关的FQDN名称为shsbc.and-sc.com;
  • SIP信令监听端口为5061;
  • 最大并发量为30(E1线路最大并发为30);

然后使用New-CsOnlinePSTNGateway命令创建好PSTN网关。

9e39a4b1eaeb34111d21257c94fab115.png
(创建PSTN用法)

步骤-4,创建语音路由

创建好语音网关后就可以开始创建语音路由了,首先我们还是定义好PSTNGW变量的值为shsbc.and-sc.com。

然后使用New-CsOnlineVoiceRoute命令创建一条语音路由,命名为CN-Shanghai-AllCalls,关联的PSTN用法也是刚才创建好的CN-Shanghai-AllCalls,并定义好匹配到只要是以+开头的所有号码就应用到这条策略,并最终路由到shsbc.and-sc.com这台PSTN网关。

不难看出我这里比较简单粗暴,所有用户其实都可以拨打任意电话,无论是长途还是本地电话,如果权限划分比较细致,可以针对哪些用户可以拨打长途座机,哪些用户可以拨打长途手机来创建更多的语音路由和PSTN用法,并分配给相应的人员(详细配置可参之前的文章)。

330b47192c8b7a991b5ad66e572b09cf.png
(创建语音路由)

步骤-5,创建语音路由策略

定义好了上面的语音路由,我们再使用New-CsOnlineVoiceRoutingPolicy来创建语音路由策略,命名为CN-Shanghai-AllCalls并关联到PSTN用法为CN-Shanghai-AllCalls。

c8fed47493428ecbd62ae5b1bdd68103.png
(创建语音路由策略)

步骤-6,应用策略到用户并测试

最后我们拿一个测试用户设置URI为tel:+0000作为他在Teams上的号码,并启用他的企业语音功能(前提是这个用户必须要有Phone System的许可哦)。

命令为Set-CsUser,如下图:

1918eb299fae3ae9366fa0487011eb6f.png
(设置用户线路号码)
可以使用PowerShell去分配策略也可以在Teams管理中心通过图形化界面去设置用户的拨号计划和语音路由策略(绿色标记部分已经显示该用户在Teams上的电话号码为+0000)。

34ff0677933ee96df507e4bee8c86564.png
(可以在UI界面编辑用户策略)
此时,我们在Teams上的配置就已经全部完成,在Direct Routing中也能看到我们创建的shsbc语音网关已经出现,只不过是处于非活动状态而已,因为SBC语音网关还未配置与Phone System建立SIP Trunk连接。

70cfb9182d9cf4ad89be2f6f2d02390a.png
(SBC设备列表及状态)
在语音路由中也能看到针对上海地区全部允许外呼的语音路由匹配的拨号模式就是只要是以+开头的号码,关联上PSTN用法后就直接送到shsbc.and-sc.com这台语音网关。

c9882349aa30dbf6b84d7d9132450a43.png
(CN-Shanghai-AllCalls语音路由规则)

SBC语音网关配置

目前微软认证的语音网关品牌基本都是国外品牌,例如Audiocodes和Ribbon均在Azure应用市场提供基于虚拟机的语音网关。例如:

517ecf2d5b8c4c87f9538b81296cbd92.png
(奥科 VE系列SBC)

c9bbaaf2de38beca9b5961f888dd4599.png
(ribbon SWeLite SBC)
所以,我将基于Azure上的SBC去为大家分享如何创建SBC虚拟机及配置SBC。以Ribbon SBC SWe Lite为例跟大家整个配置流程如下:

  • 创建SBC虚拟机;
  • 创建公网DNS记录指向Azure虚拟机固定公网IP;
  • 申请包含SBC FQDN DNS的证书(可使用通配符证书);
  • 准备MS Phone System CA证书(公众号中回复“证书”即可获取下载链接);
  • SBC虚拟机端口映射;
  • SBC ACL配置;
  • SBC SIP Server配置;
  • SBC SIP Profiles配置;
  • SBC TLS Profiles配置;
  • SBC Media Profiles配置;
  • SBC Media List配置;
  • Signaling Group配置;
  • SBC Call Routing配置;
  • SBC Transformation配置;

看着貌似挺多的....别害怕跟着我继续往下看

基于Azure的SBC只能与运营商进行SIP对接,如果自己购买了如ribbon SBC1000/2000这样的设备是可以支持E1线路直接接到设备上,所以在创建SIP Signaling Group的时候只能选择基于IP的信令而不能创建ISDN信令。

Part-1,创建SBC SWe Lite虚拟机

首先你需要一个可用的Azure租户,然后直接搜索Ribbon即可,选择SBC SWe Lite & Quick Launch,如果直接选择SBC SWe Lite也可以根据Ribbon提供的系统镜像来创建虚拟机,但是要注意不能选择D系列虚拟机,除了DS3_v2虚拟机外都是最多只能支持2张网卡,可以选择B系列虚拟机,因为在SWE中需要3张网卡,一张网卡用于管理,另外两张网卡用于传输信令和媒体,另外还需要进行复杂的IP路由配置,所以建议采用Quick Launch。

894b9db2fbcd46ae32792c757bde3403.png
(SBC SWe Lite & Quick Launch)
然后点击创建。

bb353e0f3f8334883346325440477f15.png
(创建SBC SWe Lite虚拟机)
接下来选择资源组,这里我采用直接新建的方式,也可以在创建虚拟机之前在Azure Portal中创建好资源组以及子网,并定义虚拟机放置的位置为东亚地区(所属区域可以在Teams Admin Center中通过全球地图快速查看哪些区域语音网关存在故障),填写好虚拟机名称(一旦创建后虚拟机的名称无法修改,建议使用地理-功能-角色)以及并发呼叫范围。

6cbef3e91dbdbb24445ce0ca09340895.png
(创建资源组及虚拟机命名)
接下来选择虚拟机的大小,用于demo的默认是2核4GB内存完全足够,自动创建存储诊断账户。

037e36d401474f1da7ffaf765fe4235d.png
(选择虚拟机大小)
接下来进入网络配置,会根据虚拟机的命名自动创建虚拟网络,如CN-SH-SBC-SWeLite-VirtualNetwork,同时还会创建三个不同子网的网卡分别用于管理、信令和媒体传输。

9d16601b21c47de23d8e5434f43767fe.png
(确认子网信息)

接下来进入SWeLite的预设置,包括管理员用户名及密码(后面通过Web管理SBC时的登录账号)、对SBC系统定义包括主机名以及域名(这里要和上一篇文章在Teams上新建的PSTN网关FQDN保持一致)。
44e2c5de53179aa2f6636a8293450875.png
(定义管理账号及初始密码,FQDN)
接下来进行创建虚拟机前的配置检查,如果无误点击创建后大约5分钟左右就会将SBC SWeLite虚拟机按照预期设置创建完成。
8f8dd25b90a9910c265f629e04541443.png
(检查无误即可创建机虚拟机)
创建完成后点击左侧输出栏,此时将SBC SWeLite的管理FQDN和公网IP地址复制出来,首次进入SBC管理网页可用使用管理FQDN也可用使用IP地址直接访问,另外SBC设备的公网DNS也需要解析到这个公网IP用于与TeamsDirect Routing通信。
e601a1a86056a97f2a72732594015196.png
(管理FQDN及公网IP地址)

3d585f221114803ddee139e29ace72a0.png
(使用IP地址直接登录)

1d4598f0d03b57dd3714f19a50e43ef7.png
(使用FQDN地址直接登录)

Part-2,配置SBC前的准备工作

1、创建公网DNS解析记录,将shsbc主机指向52.175.60.156

7856f63f8527e5670f17cbddeeaccec2.png
(Teams拨号界面自动为手机号添加+86并开始呼叫)
2、首次登录SBC SWeLite配置界面需要修改密码

12ea9afb709ea11bb8b4be6ae2c060b7.png
(修改初始密码)
3、上传证书

在SBC证书配置中是提供生成CSR文件的功能,但一般项目中我们都会让客户提前准备好一张通配符证书,最后将证书导出PFX文件给到我们,我们就可用从PFX文件中拿到这张证书颁发机构的根证书(CA证书)以及中间证书。这里就不过多赘述如何获取CA证书和中间证书了。直接开搞导入CA证书和中间证书以及设备的证书。

进入SBC Seeting,依次展开安全-SBC证书-信任的根证书。然后点击上传按钮,选择上传文件的方式上传SBC设备的证书颁发机构的根证书。

ed4bd4e4b3d93f57dbe074225e1c0473.png
(导入SSL证书颁发机构的CA证书)
使用同样的方法再导入中间证书,以及最最重要的Phone System的CA证书,是由Baltimore CyberTrust Root签发的。

f75f4aee49efe4da5442e4c6122ec4d9.png
(导入Phone System证书颁发机构的CA证书)
接下来选择SBC主要证书,默认是有一张ribbon自签发的证书,这时候我们要换成已经申请好了的通配符证书或者单/多域名证书,还是以导入pfx文件的方式将证书导入。

0208ca8a0cf306e7f1585e78a4c31006.png
(导入SSL公网证书)
完成导入证书的动作之后,原来由ribbon签发的证书消失了,变成了我们所申请的SSL证书。

6ce4d4e7911456bec8fc7002d51ef606.png
(检查SSL公网证书)
4、修改系统时间

由于之前已经做好了DNS解析记录,所以此时也可用通过https://shsbc.and-sc.com来对网关进行管理了,在Setting中依次进入System——Node-LevelSettings,将默认的UTC时区更改为GMT +8的中国时区并应用,这样系统的时间就会正确显示。

581a20abd09ba14494f5acfd460c95f2.png
(修改设备的系统时区)

Part-3,SBC配置

接下来的配置就是比较重要的内容了,包括ACL、TLS Media Profiles以及SIP Server和SG、Call Routing了,如果单独一项一项配置里面的逻辑性太强了至少需要1到3工作日,如果有问题再来排错的话花费的时间更长。好在ribbon为我们提供了一个Wizard用来配置SBC与Teams的Direct Routing。整个过程非常简单,大约3分钟左右就能配置完成,在顶部点击Tasks然后选择SBC快速配置,点击快速配置向导。

5270c1c006dacce4dfe8556815d4b595.png
(选择快速配置向导)
Step1:选择配置的模式

选择SIP Trunk --- Microsoft Teams,对这个配置进行命名为Shanghai,拨打电话的国家选择China,SIP并发30路。

1a73d431f2c51299f2d7469a66d062c3.png
(选择配置的模式)
如果你有包括ATT、NTT等以下的SIP线路的运营商可直接选择相应的SIP Trunk。

b91e14ce32eb30259928f8ec42b9e7ad.png
(SIP Trunk的配置)
Step2:配置Other SIP Trunk

这里我暂时以SWeLite作为一个SIP线路提供商,直接填写当前设备FQDN。在Teams Direct Routing配置中将Ethernet 1 IP作为信令和媒体的源IP,要映射的NAT地址为上面提到的Public IP,监听端口填写5061。

a292c2099f3f24d9c7ae341b0e3049a0.png
(NAT映射及监听端口配置)
Step3:检查

检查SIP Trunk配置以及Teams Direct Routing配置,如果无误点击Finish将会在30秒内完成所有的配置。

858cd2fc4509c0174a7f2d2f693b19e2.png
(检查预设配置)
以上步骤完成后在Azure Portal上添加网络端口放行。

3c9454c8f07a871a75a262054c5f30cc.png
(入站端口规则)
为什么我说SWeLite的Easy配置向导很赞呢?我们看下配置向导帮我们干了多少事情,绿色标记的地方全是向导帮咱们配置的,只是Transformation不会帮咱们配置,而这恰巧又是最重要的地方,它控制的进出Teams的号码规则以及送到运营商的号码规则。只是有一个默认的(.*)转换成\1,也就是说进来的是什么号码我就给什么号码出去。我们还是先看下其他的配置吧,检验Teams Direct Routing是否配置成功,我们只需要看信令组里面的Teams的信令是否为UP状态,点击Counters还能看到数据的进和出,SBC和Teams之间的SIP Options返回值是200表明通道已经建立起来了。

85bd01868e9e3e6c3bf5431ff6a93443.png
(通过SIP Options判断DR配置)
还有诸如ACL、TLS Profiles、Media Profiles、Media Lists、SRTP Profiles等。

5ee37083536e1a6a350e02d0ac823149.png
(SBC配置项)
从SBC设备上看到Teams Direct Routing的状态是OK的,那么从Teams Admin Center里面来看SBC设备的状态呢?通过SBC列表可以看到shsbc这台网关的TLS连接状态和SIP状态都是正常的。

f8fb2e4e18c6116b81c33efb0cc8c363.png
(Teams Admin Center中SBC状态)
接下来我们试试从SBC里面发起一个呼叫吧,还是以wangy@and-sc.com这个账号进行测试,这个账号的号码为+0000测试下Teams客户端能否收到这个呼叫。进入SBC点击Diagnostics然后再Tools里面选择Test a Call,目标号码填写+0000,Calling Number(主叫号码)填写一个手机号,然后点击OK就可以开始测试了。

f3a78ba33c5afc66667979093f7256cb.png
(Test a Call)
在Teams客户端上成功的接收到了这条来自SBC设备的呼叫。

611de33c5dc63eefed0445ba2f881aaf.png
(Teams客户端接收到来自SBC的呼叫)
好了,基于以上内容基本就可以实现使用Teams客户端来拨打接听电话了。

总结

本文先介绍了Teams Direct Routing原理及前期规划,有利于Microsoft 365管理员深入规划设计Teams语音呼叫。然后着重介绍了Teams Direct Routing及SBC配置,有助于Microsoft 365管理员深入理解Teams语音呼叫,可以根据实际需求动态调整。

*Source Link:


这里有更多微软官方学习资料和技术文档,扫码获取免费版!
内容将会不定期更新哦!
208f6785e4bc3f899ded709a80dff426.jpg


微软技术栈
418 声望994 粉丝

微软技术生态官方平台。予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。