Clearwater IMS All-in-one环境搭建指导书

2023-05-16

xunknown@163.com

2015-01-13


.前言

Clearwater IMS 是一个开源的IMS项目,提供VoIP/SIP电话等功能,Clearwater IMS主页http://www.projectclearwater.org.

为了体验Clearwater IMS 提供的VoIP/SIP电话功能,我搭建了一个Clearwater IMS All-in-one 环境进行体验,参考官方文档:

1.Clearwater IMS All-in-one服务器搭建:https://github.com/Metaswitch/clearwater-docs/wiki/All-in-one%20OVF%20Installation

2.客户端软件安装配置:

https://github.com/Metaswitch/clearwater-docs/wiki/Making%20your%20first%20call

因为实际搭建时跟官方文档有出入,走了一些弯路,因此在此总结一下.


.环境总体说明

我使用一台Intel 464CPU8GB内存的主机,操作系统是Linux Mint 17.1 MATE 64bit系统,内核是3.16:

alpha@mascot ~/Workspace/ims $ uname -a

Linux mascot 3.16.0-28-generic #38-Ubuntu SMP Sat Dec 13 16:13:28 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

在主机上使用VirtualBox (4.3.18)创建多个虚拟机分别安装Clearwater IMS All-in-one服务器,以及VoIP/SIP客户端软件,主机和各个虚拟机之间通过Host-only网络互通.

如下图所示:


. Clearwater IMS All-in-one服务器搭建

为了简单,使用 Clearwater IMS All-in-one模式搭建服务器,搭建过程参考官方手册,主要步骤:

1.下载官方提供的all-in-one image.映像名称是cw-aio.ova.

To install the OVF, you must first download it from http://vm-images.cw-ngv.com/cw-aio.ova and save it to disk.


2.利用下载的官方all-in-one image创建虚拟机并安装IMS服务器.

On VirtualBox, choose File->Import Applicance... from the menu. In the Appliance Import Wizard, click Choose..., select the cw-aio.ova file you downloaded and click Next. On the next tab, you can view the settings and then click Import.

利用VirtualBoxImport操作会自动创建一个虚拟机(虚拟机名称是cw-aio),并安装好IMS服务器,Clearwater IMS所有组件都安装在该虚拟机上.


3.启动IMS服务器虚拟机.登陆系统的用户名和密码是ubuntucw-aio.

If you attach to the console, you should see an Ubuntu loading screen and then be dropped at a cw-aio login prompt. The username is ubuntuand the password is cw-aio.

服务器启动之后,我发现系统不断打印内存不足(out of memory)的信息,说明利用官方映像自动创建的虚拟机内存太小,因此我增加了虚拟机的内存(先把虚拟机下电).


4.修改虚拟机网络.利用官方映像自动创建的服务器虚拟机网络是NAT网络.

VirtualBox uses NAT on the local IP address, exposing SSH on port8022, HTTP on port 8080 and SIP on port 8060. To access ellis, you'll need to point your browser at http://localhost:8080. To register over SIP, you'll need to configure an outbound proxy of localhost port 8060.

由于服务器虚拟机使用NAT网络,服务器的IP外部不可见,主机或者其他虚拟机无法访问服务器,ellis(ellis是管理用户的web服务器,后面开户时会提到,)无法通过 http://localhost:8080访问(在主机上访问,localhost是主机ip,通过这种方式访问没有意义;IMS服务器没有安装浏览器,无法访问http://localhost:8080).因此我将服务器虚拟机的网络方式改为Host-only方式,以便主机和其他虚拟机可以访问IMS服务器(后面提到客户端软件安装在其他虚拟机上,因此其他虚拟机也要能访问IMS服务器).

VirtualBox上创建并配置Host-only Network(File / Preference / Network / Host-only Network),

使用VirtualBox默认配置即可.见下图.



修改IMS服务器虚拟机的虚拟网卡为Host-only适配器(虚拟机先下电),见下图.


补充说明,我尝试给IMS服务器虚拟机增加一个Bridged方式虚拟网卡(希望在我的手机也能通过WiFi局域网访问该服务器),但是发现不起作用(服务器系统上看不到该虚拟网卡),不过这个不影响.见下图.



经过上述网络修改,现在主机和其他虚拟机都可以访问IMS服务器了.

我的IMS服务器分配的IP地址是192.168.56.101.也就是在服务器上运行ifconfig eth0(eth0对应虚拟机的Host-only适配器,第一个虚拟网卡)或者hostname -I看到的IP.这个IP地址就是官方文档提到的<aio-identity>.访问ellis和客户端的SIP代理配置都是使用这个IP地址(后面会提到),主机上ssh登陆IMS服务器也是使用这个IP地址,也是客户端配置用到的SIP代理服务器地址(Outbound Proxy address),也是Bono/P-CSCF服务器的地址,以及STUN/TURN/ICE服务器地址(后面客户端配置会再次提到).


在主机上可以通过ssh登陆服务器.使用如下命令:

ssh ubuntu@192.168.56.101

用户名和密码同系统登陆的用户名和密码.

SSH - username is ubuntu and password is cw-aio

需要说明的是,使用默认的ssh端口即可,并不需要指定ssh端口号(即前面官方文档提到的8022端口)


5.开户

开户是在IMS服务器创建VoIP/SIP用户,包括用户名(IMS系统的IMPIIMPU)和密码.

IMS服务器上的ellis web服务提供用户管理功能,通过浏览器登陆ellis进行开户.

在主机上使用浏览器(我使用的是Google Chrome)打开

http://192.168.56.101,这里的URL是前面提到的IMS服务器的IP地址.这里不需要指定8080端口,默认80端口.

If you installed an All-in-One node, your Ellis URL will be http://<aio-identity>.

看到如下界面:


点击signup,创建一个新用户.进入如下界面:



注意,这里输入的用户名不是前面提到的VoIP/SIP用户,这个用户名只是用来管理VoIP/SIP用户,VoIP/SIP用户挂在这个用户名下.这里的用户名在SIP客户端不需要.

这里最关键的是最后一个signup code,参考官方文档,默认是secret.

HTTP to ellis for subscriber management - sign-up code is secret.


点击Sign up进入下一步,自动创建一个IMPI(Private Identity)和一个IMPU(Associated Public Identities),VoIP/SIP用户,以及密码.如下图.

需要注意的是,这里的密码只显示一次,页面一刷新便再看不到,因此需要记录下来.可以点击Reset更换密码.


可以点击下方的Create创建更多的SIP用户(也可以通过如上面的步骤那样从sign up开始创建新的用户).

至少要创建2SIP用户,一个主叫,一个被叫.

Private Identity部分是客户端配置要用到的关键信息(在下面的客户端配置会再次提到):

SIP Username:<username>,<username>对应@前的数字部分,6505550472,这个数字也是拨打电话的输入的电话号码.

SIP Password:<password>,<password>即这里自动生成的密码.

SIP Domain:<domain>,<domain>对应这里的@后的内容,example.com,这跟官方文档提到的一致.

If you installed an All-in-One node, your base name will be example.com.


Authorization Name:<username>@<domain>,例如6505550472@example.com

至此,Clearwater IMS All-in-one服务器已经安装完毕,并且已经创建了一部分SIP用户.


.安装并配置客户端

1.创建并配置客户端虚拟机

VoIP/SIP客户端分别安装在两个虚拟机上(一个做主叫,一个做被叫),因此分别创建两个虚拟机.根据客户端可以运行的OS安装虚拟机的操作系统.我安装了Linux Mint Mate 17,Linux Mint Mate 17.1WIndows 8.1三个虚拟机.

客户端虚拟机也要加入到Host-only网络,从而可以访问服务器IP,确保在客户端虚拟机可以ping通服务器IP地址.配置方式跟服务器虚拟机一样.

如下图所示.



2.下载并安装客户端软件

根据官方文档,至少一个客户端是Zoiper.(后面测试发现Jitsi呼叫Jitsi会发生异常)

If you have installed Clearwater on VirtualBox using the All-In-One image you must use Zoiper as one of your clients.

我使用了两个不同的客户端软件,ZoiperJitsi,分别安装在两个不同的虚拟机上.客户端软件的下载安装参考对应软件的网站和文档.

说明,如果主被叫分别使用不同的客户端软件,可以在同一个虚拟机上运行,那么只需要一个客户端虚拟机就可以了.


3.配置客户端软件

根据客户端软件不同,需要配置的内容也不同.

官方手册提到的配置内容如下.

Configure your client

Client configuration methods vary by client, but the following information should be sufficient to allow your client to register with Clearwater.

  • SIP Username: <username>

  • SIP Password: <password>

  • SIP Domain: <domain>

  • Authorization Name: <username>@<domain>

  • Transport: TCP

  • STUN/TURN/ICE:

    • Enabled: true

    • Server: <domain> (or <aio-identity> on an All-in-One node)

    • Username: <username>@<domain>

    • Password: <password>

Extra configuration to use an All-in-One node

If you are using an All-in-One node, you will also need to configure an outbound proxy at your client.

  • Outbound Proxy address: <aio-identity>

  • Port: 5060 (or 8060 if installed in Virtualbox)


Zoiper客户端(Windows版本,linux版本参考配置)具体的配置内容如下:

Domain, Username, Password, Auth. username来自Ellis创建的用户名和密码.

Outbound ProxyIMS服务器的IP地址.

SIP optionsport要修改为8060.

STUN的配置修改为IMS服务器的IP地址.(不使用STUN应该也可以)



Jitsi客户端(linux版本)具体的配置内容如下:

SIP Id, Registrar, Password, Authorization name来自Ellis创建的用户名和密码.

ProxyIMS服务器的IP地址.

SIP optionsport5060.不能使用8060.




4.拨打电话

客户端软件配置完成后,用户注册成功到IMS服务器,就可以拨打电话了.

拨打电话时在拨号盘输入用户名(即数字).




.问题定位

1.linux版本的Zoiper客户端在配置过程中突然异常退出(选择STUN配置开关并确认时),再也不能启动,终端输出Segment Fault,不知哪里配置出错.卸载重装也是同样问题,如此折腾几次,换了Windows版本的,Windows 8.1的虚拟机配置成功,用户注册成功.

回头看linux版本重装也不能启动的原因,发现用户目录下有一个.Zoiper目录,Zoiper配置文件保存的地方,原来卸载时不会删除这个目录.删除这个目录后重装,重新参考WIndows版本进行配置,用户注册成功.

2.用户注册不上,通过在IMS服务器上抓包分析,使用tcpdumpwireshark.

Jitsi配置时用户注册不上,之前按照官方手册将Port也配置为8060,通过抓包发现Zoiper客户端注册和Jitsi注册发送的REGISTER请求的端口号不同,Jitsi的端口号改为默认的5060就可以了.

3.IMS服务器虚拟机cw-aio为什么不能配置Bridged适配器,原因是系统不认第二个网卡.可以将第一个虚拟网卡配置为Bridged适配器,从而WiFi局域网的手机也可以访问该IMS服务器.

配置过程中遇到这个问题:关闭第一个虚拟网卡,打开第二个虚拟网卡,系统重启后看不到网卡,说明系统只认第一个网卡.把第一个网卡重新打开,关闭第二个网卡,重启后显示的主机名也变成none(/etc/hostname文件内容为空),SIP用户无法注册(Ellis可以访问).修改/etc/hostname文件,增加cw-aio,即将主机名改为cw-aio,重启之后,系统恢复正常.



4.IMS服务器有时不稳定,重启系统之后恢复正常.

5.客户端是否打开STUN,貌似影响不大.


.实现手机呼叫手机

经过反复尝试,IMS服务器虚拟机的第一个虚拟网卡配置为Bridged模式,局域网内的其他手机终于也可以访问IMS服务器了(IP地址跟Host-only方式不同).在手机上配置SIP账号(Android手机自带功能,不需要另外安装软件),可以实现手机呼叫手机.


手机上的SIP账号配置参考官方文档:https://github.com/Metaswitch/clearwater-docs/wiki/Configuring%20the%20native%20Android%20SIP%20client

Configuring the native Android SIP client

Instructions

  1. Ensure that you have a data connection (either through 3G or WiFi).

  2. Launch your standard dialer (often called Phone or Dialer).

  3. Bring up the menu. Depending on your phone, this may be via a physical Menu button, or via an icon (often in the bottom right, consisting of three square dots in a vertical line).

  4. From the menu, select Settings or Call settings to bring up the settings panel.

  5. Under Internet Call Settings, select Accounts

  6. Press Add account (at the bottom of the screen) and enter its configuration.

    • Set UsernamePassword and Server to their usual values

    • Open the Optional settings panel to see and set the following options.

    • Set Transport type to TCP

    • Set Authentication username to "sip:<username>@<server>", subsituting (note: once we switch to storing user digest by private id, this will change)

  7. Once done, choose Save

  8. Go back to the main Settings menu and under Internet Call Settings, select Use Internet Calling. Set this to Ask for each call

  9. You should now be able to make calls.

需要注意的是,这里的Server相当于Domain,因此配置为example.com,另外还要配置出站代理地址,配置内容就是服务器的IP地址,需要注意的是,更改了IMS服务器虚拟机的网卡类型,IP地址也会改变,需要使用新的IP地址,传输类型选择TCP或者UDP(如果其中一种不通,换另外一种),端口配置为5060.

我使用了一部华为手机和一部三星手机,都是Android系统,进行测试.

以下是华为Mate 1手机的具体配置:




在三星Note手机上参考配置另外一个SIP账号,可以实现手机呼叫手机,在数字键盘上直接拨用户名(即数字),如下:


Zoiper/Jitsi软件与手机之间也可以互相拨打电话.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clearwater IMS All-in-one环境搭建指导书 的相关文章

  • python - 获取时间戳(10位和13位)

    在python 开发web程序时 xff0c 需要调用第三方的相关接口 xff0c 在调用时 xff0c 需要对请求进行签名 需要用到unix时间戳 在python里 xff0c 在网上介绍的很多方法 xff0c 得到的时间戳是10位 而j
  • curl命令模拟post请求发送json格式数据

    以下代码可以作为测试接收请求的程序直接复制使用 xff1a from flask import Flask request app 61 Flask name 64 app route 39 service 39 methods 61 39
  • pip换源 -pip更换国内镜像源

    更换pip源到国内镜像 pip国内的一些镜像 阿里云 http mirrors aliyun com pypi simple 中国科技大学 https pypi mirrors ustc edu cn simple 豆瓣 douban ht
  • 使用python的requests 发送multipart/form-data 请求

    发送post请求 1 r 61 requests post 34 http pythontab com postTest 34 data 61 34 key 34 34 value 34 以上得知 xff0c post请求参数是以data关
  • SHELL - shell 脚本获取本机ip并将ip复制给变量待用

    bin bash VAR 61 34 eth0 34 HOST IP 61 ifconfig VAR grep 34 inet addr 34 awk 39 print 2 39 awk F 39 print 2 39 echo HOST
  • shell - sed匹配某一行开头,替换整行内容

    sed i 39 cloud server ip ccloud server ip 61 update skyeye 360safe com 39 name txt
  • caffe安装系列——安装cuda和cudnn

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装OpenCV

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • 写递归函数的正确思维方法

    什么是递归 简单的定义 当函数直接或者间接调用自己时 xff0c 则发生了递归 说起来简单 但是理解起来复杂 因为递归并不直观 也不符合我们的思维习惯 相对于递归 我们更加容易理解迭代 因为我们日常生活中的思维方式就是一步接一步的 并且能够
  • PCL系列——拼接两个点云

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之移动立方体算法

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • 字节(Byte)与位(bit)、十进制与二进制的关系

    一 基本常识 数据存储是以 字节 xff08 Byte xff09 为单位 xff0c 数据传输大多是以 位 xff08 bit xff0c 又名 比特 xff09 为单位 xff0c 一个位就代表一个0或1 xff08 即二进制 xff0
  • ubuntu20.04配置TensorFlow-GPU版本+对应版本的cuda&cudnn

    ubuntu20 04配置TensorFlow GPU版本 43 对应版本的cuda amp cudnn 配置说明 操作系统是Ubuntu20 04 xff0c GPU是NVIDIA GeForce RTX 2080 Ti xff0c Py
  • 十四、Rust ORM 框架

    Rust 下的 orm xff0c 之前笔者介绍过 sqlx xff0c 但使用中发现 sqlx 在进行参数绑定时 xff0c 使用的是 宏 xff0c 在当前的 IDE 生态环境下 xff0c 有时不能很好的进行代码提示 xff0c 或代
  • mybatis源码之集成mybatis-plus源码

    本文将结合源码介绍mybatis plus的原理 xff0c 包括 xff1a BaseMapper APIMybatisSqlSessionFactoryBean类BaseMapper API Statement解析Wrapper查询构建
  • Jpa 插入更新如何过滤null值

    使用Jpa时 xff0c 默认的save方法会将entity中null的值也更新到数据库 xff0c 这对与存在默认值或者更新接口将直接导致错误的记录产生 xff0c 那么如何解决这个问题 xff1f Hibernate提供了两个注解 64
  • 一个奇怪的java.lang.IncompatibleClassChangeError异常

    解决方法就是替换jdk版本 xff0c 下面都是废话 最近项目进行了一次小更新 xff0c 添加了一个很小很小的功能 xff0c 结果运行一段时间后莫名出现java lang IncompatibleClassChangeError xff
  • nginx的proxy_pass最后反斜杠/的问题

    如果只是host xff0c 如http host 带 xff1a 用代理的内容替换掉匹配的路径 不带 xff1a 拼接上匹配的路径 2 xff1a 如果是子路径 xff0c 如http host func 带和不带 xff1a 用代理的内
  • gitlab修改克隆地址

    1 修改gitlab yml文件 xff0c 修改gitlab下的host和port vi opt gitlab embedded service gitlab rails config gitlab yml 修改完成后执行gitlab c
  • 结构体成员——数组或指针

    结构体成员是C类型的字符数组 表示字符串时 c语言中没有字符串类型 xff0c 只能使用字符数组表示字符串 当定义结构体时 xff0c 成员是字符数组时 xff0c 在外部给该成员赋值 xff0c 不能使用 结构体把变量名 成员名 61 3

随机推荐