2020-12-16

asterisk服务器的搭建和配置


前言

  Asterisk 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案。Asterisk是一种功能非常齐全的应用程序,提供了许多电信功能,能够把你的 x86 机器变成你自己的交换机,还能够当作一台企业级的商用交换。


一、安装

  Asterisk安装可以通过在官网上下载源码,自己手动解压编译安装,这种办法比较麻烦,有可能还需要更新各种依赖库,我们选择直接通过ubuntu下载安装包进行安装。(在下载之前要确认自己的虚拟机已经能够上网且更新过下载源。是否能够上网可以通过ping www.baidu.com来测试是否是正常;下载源可以查看/etc/apt/sources.list 文件来确认是否已经修改成海康的软件源)
 系统:ubuntu12.04
 命令:sudo apt-get install asterisk
输入命令下载安装完后,可以通过 dpkg -l | grep asterisk查看安装的版本情况,默认配置文件目录存放在 /etc/asterisk/,命令行存在/usr/sbin/下。
2020-12-16


二、修改配置文件

1. 配置用户信息

  配置用户信息sip.conf文件(添加SIP账号),用来给客户端添加账号使用。在原来的配置文件后面加入如下的用户信息。

命令: sudo gedit /etc/asterisk/sip.conf

[general]
context = default
bindport = 5060
tcpbindaddr = 0.0.0.0
tcpenable = yes
videosupport=always

[1001]
videosupport=always
type = friend
username=1001
secret = 1001
host = dynamic
canreinvite = no
dtmfmode = rfc2833
mailbox = mailbox
transport = udp
nat=yes
videosupport=always
maxcallbitrate=384
canreinvite=no
disallow=all
allow = ulaw
allow=alaw
allow=h263
allow=h264

[1002]
videosupport=always
type = friend
username=1002
secret = 1002
host = dynamic
canreinvite = no
dtmfmode = rfc2833
mailbox = mailbox
transport = udp
nat=yes
videosupport=always
maxcallbitrate=384
canreinvite=no
disallow=all
allow = ulaw
allow=alaw
allow=h263
allow=h264

[1003]
videosupport=always
type = friend
username=1003
secret = 1003
host = dynamic
canreinvite = no
dtmfmode = rfc2833
mailbox = mailbox
transport = udp
nat=yes
videosupport=always
maxcallbitrate=384
canreinvite=no
disallow=all
allow = ulaw
allow=alaw
allow=h263
allow=h264

 上面的配置文件内容主要是配置了三个用户:1001,1002,1003。具体每个字段的含义参考下面的翻译:

(1)type:sip的类型。格式:type =user|peer|friend 。
peer用于认证呼出呼叫,如果想要一个用户(extension)中有多个电话,定义可以呼叫两个SIP peer 的extension。user用于认证呼入呼叫,用户通过上下文鉴定到达服务器。friend用于认证呼入呼出,相当于(peer+user)。

(2)username :格式:username =<username[@realm]>。如果Asterisk接受来自远程SIP的SIP INVITE请求的客户端,这字段指定验证的用户名。

(3)accountcode:格式:accountcode =<string>。此字段,是用来填充“accountcode“领域的CDR(呼叫详细记录)。

(4)secret:用于认证的密码。如果Asterisk是作为一个SIP代理服务器,那么这个SIP客户端必须使用此密码登录(一个共享密码)。如果Asterisk是一个SIP客户端作为一个远程SIP的SIP INVITE的服务器要求身份验证,那么这个字段是用来验证该Asterisk的SIP协议提请发送到远程SIP服务器。

(5)context:格式:context = <context_name>定义了指令的地点,用于控制电话的权限,以及如何处理此号码的呼入呼叫。如果类型为用户,上下文定义呼入呼叫使用。如果类型为节点,上下文定义呼出呼叫使用。如果类型为friend通过SIP实体定义呼入和呼出所使用的上下文。

(6)host:格式:host =dynamic|hostname|IPAddr。host参数指定了用户的主机名或SIP端点IP地址。配置host=dynamic将要求号码注册,可以让Asterisk知道如何找到电话。

(7)nat:格式:nat =yes|no。这个变量改变了Asterisk的防火墙后面客户端的行为。配置nat=yes,强迫Asterisk忽略号码的联系信息,使用收到的包的地址信息。

(8)qualify:格式:qualify =yes|no|milliseconds。检查客户端是否可到达,我们可以监视Asterisk服务器和电话之间的延时,使用qualify=yes,确认远端设备是否可达。qualify=yes可以用于监视任何远端设备,包括其它的Asterisk服务器。默认情况是Asterisk认为时延在2,000 ms (2 seconds)以内的设备可达。你可以配置Asterisk判断对端是否可达的时间,通过将yes替换为毫秒。

(9)canreinvite:格式:canreinvite =update|yes|no|nonat。在SIP协议,邀请用于发起呼叫,重定向媒体。在初始邀请后相同对话中发起的任何邀请都被视作重邀请(reinvite)。配置canreinvite=no让Asterisk媒体通道经过自己,而不允许RTP信息直接在端点之间传送。Asterisk在以下的任何情况下都不会发起重邀请:如果客户端的任何一方配置为canreinvite=no;如果客户端不能协商编码,Asterisk需要执行语音编码转换;如果客户端的任何一方配置为nat=yes;如果Asterisk在呼叫中需要监听双音多频(DTMF)音(用于呼叫前转或者其他功能)。配置canreinvite=yes“允许RTP媒体直接” 。canreinvite = nonat“允许reinvite当本地,否认reinvite当NAT” 。配置canreinvite=update“使用UPDATE,而不是邀请” 。配置canreinvite = nonat“更新时使用的地方,否认当NAT” 。

(10)callgroup:格式:callgroup =num1,num2-num3。定义了此分机的电话组。

(11)pickupgroup:同组可以接电话,按*8应用。

(12)setvar:格式:setvar = variable=value。通道变量被设置为从该节点/用户的所有通话

(13)call-limit :格式call-limit = number 。同时呼叫的数量

此外除了自动生成的配置还有其他的配置

(1)allow:格式:allow =<codec>。按优先级的顺序允许编解码器。

(2)disallow :格式:disallow =all。不允许这个peer或用户定义的所有编解码器。

(3)allowguest :格式:allowguest = yes|no 。拒绝或允许来电。

(4)amaflags:分类的CDR记录。选择是默认情况下,省略,计费,文件。

(5)astdb:向Asterisk 的数据库里插入值。

(6)auth :格式:auth =<authname>。

(7)callerid :格式:callerid = <string>。当没有可用信息时使用call ID信息

(8)busylevel:格式:busylevel= number。同时通话的数量,直到用户/同行正忙

(9)callingpres:格式:callingpres =number|descriptive_text。设置电话的来电显示,有效描述的值是allowed_not_screened, allowed_passed_screen, allowed_failed_screen,allowed,prohib_not_screened,prohib_passed_screen, prohib_failed_screen, prohib, and unavailable.

(10)cid_number :格式:cid_number = <string>。设置对外显示的字符串

(11)defaultip:格式defaultip =Dotted.Quad.IP.Addr。默认的IP地址,如果客户端指定host=dynamic。如果客户端没有使用任何其他的IP地址注册使用此项。只适用于type=peer

(12)directrtpsetup:格式directrtpsetup =yes|no。类似canreinvite,可以马上把媒体传递给像SIP代理器的另一方。

(13)dtmfmode:格式:dtmfmode =inband|info|rfc2833。客户如何对DTMF信令处理。默认rfc2833。配置dtmfmode = rfc2833,允许在呼叫中监听双音多频(DTMF)音(用于呼叫前转或者其他功能)

(14)fromuser :格式:fromuser =<from_ID>。指定用户输入“from”来代替$CALLERID(number)。

(15)fromdomain:格式:fromdomain = <domain>。

(16)fullcontac:格式:fullcontact = <sip:uri_contact>。 SIP URI的联系,实时同行。只适用于实时同行

(17)fullname :格式:fullname = “FullName”。设置对外来电显示(姓名)。

(18)incominglimitand outgoinglimit:格式:incominglimitand outgoinglimit = Number。限制同时呼叫SIP客户端的数量,仅仅适用于type=peer。

(19)insecure: very|yes|no|invite|port 。指定如何处理与peers的连接。

(20)language:这对于一个在Asterisk SIP帐户配置选项指定语言设置为这个客户端使用。通过使用此设置,您可能会得到本地化的声音在为不同的用户不同的语言提示。

(21)mailbox:格式 mailbox =mailbox。语音信箱。

(22)musicclass:在musiconhold.conf指定的类

(23)musiconhold:保持音乐。

(24)subscribemwi:指示Asterisk 在等待信息的时候不要发送NOITFY信息。确定Asterisk如何通知SIP客户端关于语音信箱的信息

(25)permit,deny , mask格式:permit=<ipaddress>/<network mask> deny= <ipaddress>/<network mask>IP地址和网络限制。允许或限制到达某些特定的网络。

(26)port:SIP端口的客户端

(27)progressinband:格式:progressinband =never|no|yes。

(28)promiscredir :格式:promiscredir = yes|no。是否允许支持302重定向。

(29)regseconds :格式:regseconds = seconds。SIP注册的秒数。

(30)sendrpid:格式:sendrpid =yes|no。确定是否发送Remote-Party-IDSIP header

(31)subscribecontext:格式:subscribecontext =<context_name>。为SIP       SUBSCRIBE设置特殊的context

(32)trunkname:为中继定义一个名字

(33)trustrpid:格式:trustrpid =yes|no。设置Remote-Party-IDSIP header是否被信任。

(34)vmexten :格式vmexten = <string>拨号规则扩展到邮箱


2. 配置打电话策略

电话策略主要是配置一些被呼振铃时间等,我们需要修改/etc/asterisk/extensions.conf文件,在最后面加入我们的电话策略。

 命令:sudo gedit /etc/asterisk/extensions.conf

[general]
static=yes
writeprotect=no

[default]
exten => 1001,1,Dial(SIP/1001)

exten => 1002,1,Dial(SIP/1002)

exten => 1003,1,Dial(SIP/1003)

上面的策略[general]中static=yes,writeprotect=no主要是可以通过CLI命令来保存拨号方案

[default] 说明:
(1) 开头部分“exten =>”表示,也可以用“exten =”表示。并且在一个小节内可以定义多条exten语句。
(2) 之后的1001表示匹配上1001的拨号
(3) 然后的“1”表示优先级,“1”表示第一步执行的意思,如果后续还需要执行其他动作的话,可以继续写多条exten语句,并且用递增执行次序依次设计下去。
(4) 接着的“Dail()”表示“执行动作”,这里是表示拨号的执行动作。更规范的说,这个是APP应用程序。
(5) 括号当中又分成2个部分。第一个SIP表示拨号动作中拨向的通道是SIP协议的通道。1001就是用户实际拨打的号码。

三、重启测试

  修改完上面的两个配置文件完,就可以重启下asterisk重新生效。通过命令 “sudo /etc/init.d/asterisk restart” 重启。

重启完成后就可以在我们的终端设备中中配置我们刚才添加的三个用户,分别配置两台终端设备的账号为1002和1003,然后查看注册和拨号情况。

2020-12-16

在注册完我们也可以通过asterisk查看注册和拨号情况,具体操作为:
1.先输入:sudo asterisk -r 进入asterisk 的控制台
2020-12-16

2.输入:sip shwo peers,查看当前登录用户。(控制台下还提供其他很多命令,有需要的可以自行查看)
2020-12-16
当我们注册完成后,就可以通过账户互相呼叫,控制台也会有当前通话的记录打印:
2020-12-16

上一篇:pg_log,数据库日志表postgresqllog


下一篇:Python获取Get传值(CGI)