Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

168.6. Asterisk (OpenSource Linux PBX that supports both SIP and H.323)

http://www.asteriskpbx.com/

168.6.1. Redhat/CentOS/RockyLinux/AlmiLinux

			
[root@netkiller ~]# dnf install asterisk asterisk-pjsip
			
		
			
[root@netkiller ~]# ls /etc/asterisk/
acl.conf              cdr.conf              dnsmgr.conf       modules.conf           say.conf
adsi.conf             cdr_custom.conf       dsp.conf          musiconhold.conf       sla.conf
aeap.conf             cdr_manager.conf      dundi.conf        muted.conf             smdi.conf
agents.conf           cdr_syslog.conf       enum.conf         osp.conf               sorcery.conf
alarmreceiver.conf    cel_beanstalkd.conf   extconfig.conf    phoneprov.conf         stasis.conf
amd.conf              cel.conf              extensions.conf   prometheus.conf        statsd.conf
ari.conf              cel_custom.conf       features.conf     queuerules.conf        stir_shaken.conf
ast_debug_tools.conf  cli_aliases.conf      followme.conf     queues.conf            telcordia-1.adsi
asterisk.adsi         cli.conf              http.conf         resolver_unbound.conf  udptl.conf
asterisk.conf         cli_permissions.conf  indications.conf  res_parking.conf       users.conf
ccss.conf             codecs.conf           logger.conf       res_stun_monitor.conf  vpb.conf
cdr_beanstalkd.conf   confbridge.conf       manager.conf      rtp.conf
[root@netkiller ~]#
			
		
			
[root@netkiller ~]# cp /etc/asterisk/asterisk.conf{,.original} 
			
		
			
[root@netkiller ~]# cp /etc/asterisk/extensions.conf{,.original} 

[root@netkiller ~]# cat /etc/asterisk/extensions.conf
[from-internal]
exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(hello-world)
same = n,Hangup()
			
		
			
[root@netkiller ~]# cp /etc/asterisk/pjsip.conf{,.original}			
[root@netkiller ~]# cat /etc/asterisk/sip.conf
[general]
context=default

[6001]
type=friend
context=from-internal
host=dynamic
secret=unsecurepassword
disallow=all
allow=ulaw
			
		
			
[root@netkiller ~]# vim /etc/asterisk/pjsip.conf
[root@netkiller ~]# cat /etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

[6001]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
allow=gsm
auth=6001
aors=6001

[6001]
type=auth
auth_type=userpass
username=6001
password=unsecurepassword

[6001]
type=aor
max_contacts=1
			
		
			
[root@netkiller ~]# systemctl enable asterisk
[root@netkiller ~]# systemctl start asterisk
[root@netkiller ~]# systemctl status asterisk
● asterisk.service - Asterisk PBX and telephony daemon.
     Loaded: loaded (/usr/lib/systemd/system/asterisk.service; disabled; preset: disabled)
     Active: active (running) since Sat 2025-03-01 18:34:36 CST; 10s ago
   Main PID: 3321189 (asterisk)
      Tasks: 42 (limit: 100479)
     Memory: 32.3M
        CPU: 493ms
     CGroup: /system.slice/asterisk.service
             └─3321189 /usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf

Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] WARNING[3321189]: loader.c:2487 load_modules: Module 'app_>
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] WARNING[3321189]: loader.c:2487 load_modules: Module 'app_>
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: Error loading >
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: Error loading >
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: Failed to reso>
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: res_stir_shake>
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: cdr_syslog dec>
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: Failed to reso>
Mar 01 18:34:38 netkiller asterisk[3321189]: [Mar  1 18:34:38] ERROR[3321189]: loader.c:2508 load_modules: res_http_media>
Mar 01 18:34:38 netkiller asterisk[3321189]: Asterisk Ready.
			
		
			
[root@netkiller ~]# ss -lnp | grep asterisk
u_str LISTEN 0      2                                                              /run/asterisk/asterisk.ctl 30717648               * 0    users:(("asterisk",pid=3322611,fd=5))

udp   UNCONN 0      0                                                                                 0.0.0.0:56265            0.0.0.0:*    users:(("asterisk",pid=3322611,fd=8))

udp   UNCONN 0      0                                                                                 0.0.0.0:4520             0.0.0.0:*    users:(("asterisk",pid=3322611,fd=17))

udp   UNCONN 0      0                                                                                 0.0.0.0:5060             0.0.0.0:*    users:(("asterisk",pid=3322611,fd=10))

udp   UNCONN 0      0                                                                                    [::]:43446               [::]:*    users:(("asterisk",pid=3322611,fd=9))			
			
		
			
[root@netkiller ~]# asterisk -rx "pjsip list auths"

  I/OAuth:  <AuthId/UserName.............................................................>
==========================================================================================

     Auth:  6001/6001

Objects found: 1			
			
		

168.6.2. 源码安装 asterisk-22

			
cd /usr/local/src/
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
tar zxvf asterisk-22-current.tar.gz		
cd asterisk-22.2.0/
./configure
make menuselect	
			
		

168.6.3. Ubuntu

			
netkiller@shenzhen:~$ apt-cache search Asterisk
asterisk-app-dtmftotext - Text entry application for Asterisk
asterisk-app-fax - Softfax application for Asterisk
asterisk-app-misdn-v110 - V.110 protocol handler for Asterisk
asterisk-chan-capi - Common ISDN API 2.0 implementation for Asterisk
asterisk-chan-misdn - mISDN support for Asterisk
asterisk-oh323 - oh323 channel driver for Asterisk
asterisk-prompt-de - German voice prompts for the Asterisk PBX
asterisk-prompt-es-co - Colombian Spanish voice prompts for Asterisk
asterisk-prompt-fr - French voice prompts for Asterisk
asterisk-prompt-it - Italian voice prompts for the Asterisk PBX
asterisk-prompt-se - Swedish voice prompts for Asterisk
asterisk-rate-engine - Asterisk least cost routing module
asterisk-sounds-extra - Additional sound files for the Asterisk PBX
destar - management interface for the Asterisk PBX
gastman - GUI tool for Asterisk administration and monitoring
iaxmodem - software modem with IAX2 connectivity
kiax - IAX VoIP softphone
libiax-dev - implementation of the Inter-Asterisk eXchange protocol (devel)
libiax0 - implementation of the Inter-Asterisk eXchange protocol
op-panel - switchboard type application for the Asterisk PBX
asterisk-prompt-es - Spanish prompts for the Asterisk PBX
asterisk - Open Source Private Branch Exchange (PBX)
asterisk-bristuff - Open Source Private Branch Exchange (PBX) - BRIstuff-enabled version
asterisk-classic - Open Source Private Branch Exchange (PBX) - original Digium version
asterisk-config - config files for asterisk
asterisk-dev - development files for asterisk
asterisk-doc - documentation for asterisk
asterisk-h323 - asterisk H.323 VoIP channel
asterisk-sounds-main - sound files for asterisk
asterisk-web-vmail - Web-based (CGI) voice mail interface for Asterisk
netkiller@shenzhen:~$
			
		

168.6.4. RasPBX – Asterisk for Raspberry Pi

http://www.raspberry-asterisk.org/

168.6.5. 配置文件

配置文件说明

		
asterisk.conf:主配置文件,通知Asterisk环境目录位置,包含其他所有配置文件所包含的目录,缺省Asterisk会在/etc/asterisk/目录下找到,也可以通过命令参数使用不同的asterisk.conf
agents.conf:配置代理通道
h323.conf:配置H323通道
iax.conf:配置IAX通道
mgcp.conf:配置MGCP(媒体网关控制协议,应用于多媒体网关单元之间)
modem.conf:配置ISDN,不是modem
phone.conf:配置linux电话设备
sip.conf:配置SIP通道,可以添加sip用户,设置用户名,密码,拨号规则等。
sip_notify.conf:配置SIP 消息通知
skinny.conf:配置Cisco SCCP通道
vpb.conf:配置Voicetronix卡通道(是澳大利亚的开放源码的CTI专业制造厂商)
zapata.conf:配置ZAP Digium卡通道
extensions.conf:Asterisk的具体拨号方案,它所有的操作控制和执行流程的主要方案,它控制呼入呼出如何别处理和路由。
extensions.ael:扩展拨号方案语言
features.conf:配置呼叫停泊,parking.conf文件名字已被修改为features.conf , 自定义按键配置,同时还有一些系统默认的功能键
extconfig.conf:通过res_data方式部署扩展配置,例如通过ODBC
alarmreceiver.conf:警报接收配置
enum.conf:电话号码映射查找配置
dundi.conf:分布式全球号码发现(DUNDi)是一个对等(P2P)协议,用于提供等价于那些由电子号码(ENUM)提供的服务。DUNDi有一个超过 ENUM的优点就是它更有弹力,因为也它缺乏一个故障中心点。DUNDi能够被用于增加DNS和它与IP语音(VOIP)服务一起发展。
festival.conf:文本语音转换配置
indications.conf:铃音清晰度配置
meetme.conf:会议配置
musiconhold.conf:音乐保持配置
queues.conf:队列配置
voicemail.conf:语音邮件配置,设置语音存储文件格式,分机号对应的语音邮箱密码和邮箱地址。
alarmreceiver.conf:警报接收配置
alsa.conf:致力于为Linux 提供高质量的声音子系统
cdr_odbc.conf,cdr_pgsql.conf:通话详单数据库存储配置
codecs.conf:Asterisk编码配置文件
dnsmgr.conf:DNS管理(new in Asterisk v1.2)
http.conf:内置http server配置,可以配置绑定的端口,可以访问的IP等。
logger.conf:配置系统日志
manager.conf:配置管理接口,设置管理员账号、密码、登录端口、访问权限等。
modules.conf:配置可加载模块
odbc.conf:ODBC驱动配置
oss.conf:open source software配置
privacy.conf:私密配置
res_odbc.conf:实时数据库加载配置,可以把配置文件放在数据库中
rpt.conf:循环应用配置
rtp.conf:配置RTP(实时)端口
say.conf:读出标准的数字和日期(new in Asterisk v1.4)
users.conf:用户定义配置文件
adsi.conf,asterisk.adsi,telcordia-1.adsi:配置模拟显示服务接口
capi.conf:CAPI是计算机辅助面对面访问(Computer Assisted Personal Interviewing)的简称,是使用基于计算机的问卷的一种调研技术,CAPI可以像CATI一样控制复杂的逻辑,而且,它可以在各种各样的场所使用,购物中心,论坛或者其它公共场所,只要是被访者可以接触到电脑的地方。例如,在定点街访项目,借助端对端网络,它可以从容的管理问卷,控制配额,以及管理数据库,且不需要数据库服务器。 在面对面访问中,问卷可以由访问人员直接采用电脑,被访者同时可以查看的方式进行访问,也可以是被访者自己的电脑上看到电子问卷,自己操作访问。
sirrix.conf:配置Sirrix ISDN通道
cdr_mysql.conf:配置通话详单在mysql中存储
prepaid.conf:预付费卡配置
ldap.conf:访问x.500目录访问的标准协议
bonjour.conf:苹果服务发现接口支持
enumagi.conf:电话号码映射查找配置文件
zeroconf.conf:zeroconf是一个轻量级的服务发现协议,适用于注册和寻找附近的可用协议、设备等等。 他是bonjour的开源名称,bonjour是苹果公司力推的一个service echotraining=yes   ;回音练习(会话前发个声音,用于测试回声)有关配置文件的语法规则,等以后再表。红色标出部分为自己首先要配置的部分。
		
		

168.6.6. 拨号规则设置

extensions.conf

			
[root@netkiller ~]# cat /etc/asterisk/extensions.conf
[from-internal]
exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(hello-world)
same = n,Hangup()	
			
		
			
[from-internal]
exten => 10010,1,Dial(PJSIP/1111) /*当拨打10010时转到分机1111中*/
 
exten => 10086,1,Dial(PJSIP/6666) /*当拨打10086时转到分机6666中*/
 
exten => 110,1,Answer()  /*当拨打110时自动接听*/
same => Wait(1)
same => n,Playback(hello-world)
same => n,Hangup()
			
		
			
asterisk -rx “core restart now”
asterisk -rvvvvv
			
		

168.6.7. pjsip

			
netkiller*CLI> pjsip show auths

  I/OAuth:  <AuthId/UserName.............................................................>
==========================================================================================

     Auth:  6001/6001

Objects found: 1

netkiller*CLI> 			
			
		
			
netkiller*CLI> dialplan show 6001@from-internal
There is no existence of 'from-internal' context
Command 'dialplan show 6001@from-internal' failed.
			
		
			
sip show peers
			
		
			
			
			
		

168.6.8. 配置例子

168.6.8.1. sip.conf

			
[root@netkiller ~]# cat /etc/asterisk/sip.conf
[general]
context=default
bindport=5060
tcpbindaddr=0.0.0.0
tcpenable=yes
externip=139.9.54.211
localnet=192.168.0.0/255.255.255.0;
nat=force_rport,comedia
canreinvite=no
qualify=yes
;directmedia=no
nat=yes
transport=udp


[6000]
type=friend
context=default
username=6000
secret=6000
host=dynamic
;transport=tcp
;transport=udp
;nat=yes
;directmedia=no
disallow=all
allow=ulaw
allow=alaw
allow=g722
allow=g729
;allow=h263
;allow=h264

[6001]
type=friend
context=default
username=6001
secret=6001
host=dynamic
;transport=udp
;nat=yes
;directmedia=no
disallow=all
allow=ulaw
allow=alaw
allow=g722
allow=g729
;allow=h263
;allow=h264

[6002]
type=friend
context=default
username=6002
secret=6002
host=dynamic
;transport=udp
;nat=yes
;directmedia=no
disallow=all
allow=ulaw
allow=alaw
allow=g722
allow=g729
;allow=h263
;allow=h264

[6003]
type=friend
context=default
username=6003
secret=6003
host=dynamic
;transport=udp
;nat=yes
;directmedia=no
disallow=all
allow=ulaw
allow=alaw
allow=g722
allow=g729
;allow=h263
;allow=h264

[6004]
type=friend
context=default
username=6004
secret=6004
host=dynamic
;transport=udp
;nat=yes
;directmedia=no
disallow=all
allow=ulaw
allow=alaw
allow=g722
allow=g729
;allow=h263
;allow=h264			
			
			
			
[root@netkiller ~]# cat /etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no

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

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

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

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

exten => 6004,1,Dial(SIP/6004)			
			
			
			
			
			
			
			
			
			
asterisk -rx "core restart now"
			
			

168.6.8.2. pjsip.conf

			
[root@netkiller asterisk]# cat pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

[6000]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=auth
aors=aors

[auth]
type=auth
auth_type=userpass
username=neo
password=chen

[aors]
type=aor
max_contacts=3

[6001]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
allow=gsm
auth=6001
aors=6001

[6001]
type=auth
auth_type=userpass
password=6001
username=unsecurepassword

[6001]
type=aor
max_contacts=1

[6002]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6002
aors=6002

[6002]
type=auth
auth_type=userpass
username=6002
password=unsecurepassword


[6002]
type=aor
max_contacts=2

[6003]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6003
aors=6003

[6003]
type=auth
auth_type=userpass
username=6003
password=unsecurepassword

[6003]
type=aor
max_contacts=3