Browsed by
Category: 文档和常见问题

技术文档以及常见问题解答

对接中国电信IMS网络

对接中国电信IMS网络

最近帮助一位客户部署MSS服务器,对接中国电信IMS网络。在本次对接中,中国电信的软交换是ZTE的设备(至少SIP消息中的User-Agent是这么描述的),存在一些问题,需要特别注意配置方法才能完成对接。

由于中国电信是提供账号、密码信息进行对接,因此在MSS中应配置“外线”,其中需要注意的是以下几个关键点:

鉴权用户

通常外线配置中,默认采用“外线/账户”做鉴权用户(或者配置单独的鉴权ID)。而ZTE设备要求采用完整的URI作为鉴权用户名,因此在MSS的外线配置中,必须配置“鉴权用户名应包含地址信息”项,请参考下图。

外线鉴权用户配置
外线鉴权用户配置

设置该项后,例如上图的信息,MSS将采用“+8612345678@gd.ctcims.cn”作为鉴权用户名进行鉴权操作。

如果不采用完整格式的鉴权用户名,IMS网络会返回“403 Forbidden”拒绝注册和呼叫。我们认为这实际是ZTE软交换的缺陷,因为鉴权信息中本来就携带了域信息,无论鉴权用户名是否携带域信息,应该都不影响鉴权。如果您在与其他IMS设备对接时,也遇到了类似的问题,建议试试上述配置項。

Proxy设置

在中国电信的IMS网络中,对外的服务器地址作为逻辑域存在,实际上并不可访问。例如,上述例子中的“gd.ctcims.cn”就是域,而不是实际的SIP服务器。SIP消息实际应路由到指定的物理实体(在此我们理解为IMS网络前置的一个SBC或者Proxy),因此在MSS外线配置中,必须指明实际SIP消息需要路由的地址,请参考下图:

IMS网关的物理地址
IMS网关的物理地址
SIP中继的并发呼叫数

SIP中继的并发呼叫数

通常我们不限制SIP中继的并发呼叫数,也就是说,默认情况下能呼叫多少就呼叫多少。如果对方资源有限,自然会拒绝多余的呼叫。然而在一些应用场景中,客户们希望MSS能主动对呼叫进行限制。

为此我们拓展了SIP中继中的配置,分别对“呼入呼叫”和“呼出呼叫”的最大并发呼叫数进行限制,超出最大呼叫数的呼叫将被禁止或者抛弃。请参考下图:

SIP中继并发数配置
SIP中继并发数配置

需要注意的是:

(1)这两项配置是独立的,因此可以对呼入和呼出做出不同的限制决定。

(2)如果将其中一项或者两项配置为0,则可以限制为只允许呼入,或者只允许呼出。

一号多机业务的一点修改

一号多机业务的一点修改

在最新发布的V30版本中,对“一号多机”业务做了点改动。原有版本中默认所有分机都具有该业务能力,也就是说,任何一个分机账号都允许多部设备或者话机同时注册和使用。在实际应用过程中,客户们反馈这样做虽然简化了配置,但是其实带来了管理问题,并不想所有分机都允许多机注册,只有部分或者特定的分机才可以这样做。

考虑到这种情况,我们在分机配置中增加了“一号多机”业务权限配置。只有明确配置了该权限位的分机,才允许多机注册和使用。请参考下面的图例。

一号多机权限配置
一号多机权限配置

本次修改同时适用于本地MSS版本以及云MSS版本。

阻止匿名呼叫

阻止匿名呼叫

我们可以使用“系统黑白名单”来过滤、阻止匿名呼叫。请点击菜单“业务 – 系统黑名单”,添加以下记录:

caller number prefix = anonymous
called number prefix = *
rate = 100

该记录的作用就是:100%阻断来自“anonymous”的呼叫。

有些匿名呼叫的主叫号码可能会有差别,不过仍然可以在“系统黑名单”配置类似的记录进行过滤。

Invalid CSeq number

Invalid CSeq number

最近一位客户报告了一个问题:他的外线始终无法注册到VoIP运营商的网络。这让人倍感奇怪,毕竟“外线”是MSS非常基础的功能,已经和众多VoIP运营商对接过,我们从没想到过“外线注册”居然会有问题。

抓取了相应的log,发现该运营商返回了“400 Bad Request”消息,其中携带了以下原因信息:

P-Registrar-Error: Invalid CSeq number

我们检查了REGISTER消息,MSS在处理CSeq时并没有任何问题。以下是MSS消息的摘要:

==>
REGISTER sip:sip.xxx.com SIP/2.0
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 13 REGISTER
...

<==
SIP/2.0 401 Unauthorized
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 13 REGISTER
...

==>
REGISTER sip:sip.xxx.com SIP/2.0
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 14 REGISTER
...

<==
SIP/2.0 400 Bad Request
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 14 REGISTER
P-Registrar-Error: Invalid CSeq number
...

我们再次检查了RFC3261规范中的定义:

A UA MUST increment the CSeq value by one for each REGISTER request with the same Call-ID.

显然我们是完全正确的,但是为什么对端会拒绝了注册呢?

最终我们尝试修改了Call-ID参数后注册成功。这让我们更感困惑!RFC3261规范很清楚地说明了注册流程中Call-ID参数的注意事项:

All registrations from a UAC SHOULD use the same Call-ID header field value for registrations sent to a particular registrar.

我们认为这个VoIP运营商的系统是不专业的。不幸的是,该运营商很难去升级他们的系统,因此我们在MSS中增加了一个开关变量来控制这种情况:

[sip]
gVarSipRegSameDialog=0

如果您在与某些VoIP运营商系统对接时遇到类似的问题,请在“mss_var_param.ini” 文件中增加上述参数并重启MSS。

外线无应答时长

外线无应答时长

在外线的“出呼叫”配置中,我们增加了一个配置项“无应答时长”。该参数用于限制外线外呼时的无应答时间。请参考下图:

外线无应答配置
在外线中配置无应答定时器时长

该参数默认值为0,也就是缺省采用系统定义的无应答定时器时长。如果设置了其他值,则优先采用该值。

例如,设置为15,则该外线的外呼呼叫如果在15秒内没有应答,外线将强制释放呼叫。

对抗SIP扫描

对抗SIP扫描

一位客户向我们报告:他的MSS服务器可能被黑客攻击。我们一起检查了MSS产生的呼叫详细话单,数据显示某人用另外一部SIP电话注册了同样一个分机号,并产生了大量的呼叫。

很显然,这是个非常严重的问题。我们推测这位“黑客”可能采用了发送大量SIP消息的方式来尝试上述分机的密码,并最终破解了密码。MSS以前的版本没有考虑这种异常情况,总是会允许SIP话机不停使用密码进行鉴权,直到最终通过鉴权为止,这就导致某些人刻意不停地扫描和尝试分机和密码。

为阻止这种情况,我们升级了MSS的版本,提供“失败则阻止(fail to ban, F2B)”特性。一旦SIP话机在一分钟内鉴权失败了若干次,则MSS会视之为“恶意扫描”并屏蔽其IP地址若干小时,期间MSS将拒绝所有来自该IP地址的SIP消息。这样迫使某些人几乎不可能破解SIP分机的密码。

F2B特性默认就开启,并且用户无需做任何配置。

部分虚拟虚拟服务器变更

部分虚拟虚拟服务器变更

最近我们对某些虚拟服务器进行了变更,请注意以下几点:

STUN服务器

每个虚拟SIP服务器都同时启动了STUN服务,例如,如果您的虚拟服务器地址是“1234.s1.minisipserver.com”,那么STUN服务器地址也同样可以是“1234.s1.minisipserver.com”。

而现在我们单独部署了独立的简单STUN服务器“stun.minisipserver.com”。默认情况下,我们推荐用户采用这个STUN服务器,所有虚拟SIP服务器节点都可以采用这个新的STUN节点。当然,您仍然可以采用虚拟服务器地址做自己的STUN服务器地址。

SMTP服务器

在语音邮箱业务中,我们需要SMTP服务器发送带语音文件的电子邮件。以前每个虚拟SIP服务器都可以配置客户自己的SMTP信息。但是实际部署过程中我们发现一些问题,例如大部分用户都会采用gmail的SMTP服务。而Gmail默认是没有打开POP/SMTP服务的,客户需要在gmail配置中单独打开这些配置项。另外,gmail要求明确授权其他接入者使用用户的SMTP服务,大部分客户实际上并不清楚这些细节,因此大量的语音邮箱业务都以失败告终。

考虑各种状况,我们决定去掉SMTP的各项配置,即用户不再需要配置自己的SMTP信息,系统会采用我们自己的SMTP服务器发送语音邮件。当然这样也有一点不足之处:您可能需要检查“垃圾”邮箱文件夹,您的邮件系统有可能会将我们的邮件作垃圾邮件处理。

IP地址鉴权

IP地址鉴权

本特性已经合入最新的V25版本(build 20160126)。

某些特殊的SIP设备,例如自动控制系统中的嵌入式SIP设备,往往不具备全SIP能力集,只能发起或者接受简单的SIP呼叫,不能进行账号和密码鉴权。部分设备甚至不支持发送“注册”消息到MSS更新自己的状态。

嗯,我们在MSS中可以将这些设备配置为“SIP中继”,但是这样也会丢掉一些关键特性,例如“振铃组”。在某些场景中,客户们希望能让所有设备同时振铃,这样我们就只能将设备配置为“分机”用户。

为满足这些需求,我们在“分机”中增加了“IP地址鉴权”的特性。也就是说,MSS可以不要求SIP终端首先进行注册,呼叫过程中也可以不再对账号和密码进行鉴权,只要SIP消息来自特定的或者预先配置的IP地址即可。请参考下图了解更多的细节:

IP地址鉴权
IP地址鉴权

另外,在新版本中我们同样也更新了openAPI文档,如果您有兴趣的话,可以参考最新的文档。

MSS之间采用SIP中继通信

MSS之间采用SIP中继通信

1. 描述

部分客户在多地都有分支机构或者分公司,因此希望在这些分公司之间建立VOIP连接。有很多种方法可以实现这个需求,本文给出一个具体的实例描述两个MSS之间采用SIP中继建立这种连接。

2. 网络拓扑

整个网络拓扑结构是比较简单的,总共只有两个分支办公室,各部署一套MSS。如下图所示:

网络拓扑
网络拓扑

在部署VoIP网络之前,我们应先做好号码规划。不同的号码格式或者规划直接影响到后期的呼叫路由配置。在上图中可以看到:我们给分支1规划的号码是1xx格式,例如100、101等,而给分支2规划的号码是2xx格式,例如200、201等。

两地的MSS都配置了公共IP地址,能直接连接公网。如果您的MSS是部署在私网或者路由器后面,并且您希望也能向外部用户提供服务,请先点击文档了解细节。

现在我们开始本场景的具体配置细节。

3. 配置

在下面各项配置中,如果没有特别申明,部分参数总是采用默认值即可。

3.1 MSS1

请点击菜单“数据 – SIP中继”,添加以下记录:

SIP中继编号 = 1
描述 = to MSS2
服务器地址 = 10.23.x.x

请点击菜单“拨号规则 – 分析被叫号码”,增加以下记录用于MSS将呼叫路由给MSS2:

被叫号码前缀 = 2
路由类型 = SIP中继
SIP中继编号 = 1

3.2 MSS2

基本配置与MSS1几乎相同。

请点击菜单“数据 – SIP中继”,添加以下记录:

SIP中继编号 = 1
描述 = to MSS1
服务器地址 = 41.32.x.x

请点击菜单“拨号规则 – 分析被叫号码”,增加以下记录用于MSS将呼叫路由给MSS1:

被叫号码前缀 = 1
路由类型 = SIP中继
SIP中继编号 = 1