| 知乎专栏 | 
http://www.asteriskpbx.com/
[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			
			
		
	dnf install -y automake g++ dnf install -y svn
wget https://github.com/pjsip/pjproject/archive/refs/tags/2.15.1.tar.gz tar zxvf 2.15.1.tar.gz cd pjproject-2.15.1 ./configure make dep make make install ldconfig ldconfig -p | grep pjsip
		
[root@production pjproject-2.15.1]# pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu 
09:40:24.622         sip_endpoint.c !.Module "mod-pjsua-log" registered
09:40:24.623         sip_endpoint.c  .Module "mod-tsx-layer" registered
09:40:24.623         sip_endpoint.c  .Module "mod-stateful-util" registered
09:40:24.623         sip_endpoint.c  .Module "mod-ua" registered
09:40:24.623         sip_endpoint.c  .Module "mod-100rel" registered
09:40:24.623         sip_endpoint.c  .Module "mod-pjsua" registered
09:40:24.623         sip_endpoint.c  .Module "mod-invite" registered
09:40:24.697             alsa_dev.c  ..ALSA driver found 2 devices
09:40:24.697             alsa_dev.c  ..ALSA initialized
09:40:24.697                  pjlib  ..select() I/O Queue created (0x236cb68)
09:40:24.702         sip_endpoint.c  .Module "mod-evsub" registered
09:40:24.702         sip_endpoint.c  .Module "mod-presence" registered
09:40:24.702         sip_endpoint.c  .Module "mod-dlg_even" registered
09:40:24.702         sip_endpoint.c  .Module "mod-mwi" registered
09:40:24.702         sip_endpoint.c  .Module "mod-refer" registered
09:40:24.702         sip_endpoint.c  .Module "mod-pjsua-pres" registered
09:40:24.702         sip_endpoint.c  .Module "mod-pjsua-im" registered
09:40:24.702         sip_endpoint.c  .Module "mod-pjsua-options" registered
09:40:24.702           pjsua_core.c  .1 SIP worker threads created
09:40:24.702           pjsua_core.c  .pjsua version 2.15.1 for Linux-5.14.1.171/x86_64/glibc-2.34 initialized
09:40:24.702           pjsua_core.c  .PJSUA state changed: CREATED --> INIT
09:40:24.702         sip_endpoint.c  Module "mod-default-handler" registered
09:40:24.702           conference.c  .Add port 1 (ringback) queued
09:40:24.702           conference.c  .Add port 2 (ring) queued
09:40:24.702           pjsua_core.c  SIP UDP socket reachable at 192.168.0.230:5060
09:40:24.702           udp0x23c2dc0  SIP UDP transport started, published address is 192.168.0.230:5060
09:40:24.702            pjsua_acc.c  Adding account: id=<sip:192.168.0.230:5060>
09:40:24.703            pjsua_acc.c  .Account <sip:192.168.0.230:5060> added with id 0
09:40:24.703            pjsua_acc.c  Modifying account 0
09:40:24.703            pjsua_acc.c  Acc 0: setting online status to 1..
09:40:24.703             tcptp:5060  SIP TCP listener ready for incoming connections at 192.168.0.230:5060
09:40:24.703            pjsua_acc.c  Adding account: id=<sip:192.168.0.230:5060;transport=TCP>
09:40:24.703            pjsua_acc.c  .Account <sip:192.168.0.230:5060;transport=TCP> added with id 1
09:40:24.703            pjsua_acc.c  Modifying account 1
09:40:24.703            pjsua_acc.c  Acc 1: setting online status to 1..
09:40:24.703           pjsua_core.c  PJSUA state changed: INIT --> STARTING
09:40:24.703         sip_endpoint.c  .Module "mod-unsolicited-mwi" registered
09:40:24.703           pjsua_core.c  .PJSUA state changed: STARTING --> RUNNING
09:40:24.703                 main.c  Ready: Success
>>>>
Account list:
  [ 0] <sip:192.168.0.230:5060>: does not register
       Online status: Online
 *[ 1] <sip:192.168.0.230:5060;transport=TCP>: does not register
       Online status: Online
Buddy list:
 -none-
+=============================================================================+
|       Call Commands:         |   Buddy, IM & Presence:  |     Account:      |
|                              |                          |                   |
|  m  Make new call            | +b  Add new buddy        | +a  Add new accnt.|
|  M  Make multiple calls      | -b  Delete buddy         | -a  Delete accnt. |
|  a  Answer call              |  i  Send IM              | !a  Modify accnt. |
|  h  Hangup call  (ha=all)    |  s  Subscribe presence   | rr  (Re-)register |
|  H  Hold call                |  u  Unsubscribe presence | ru  Unregister    |
|  o Toggle call SDP offer     |  D  Subscribe dlg event  |                   |
|                              |  Du Unsub dlg event      |                   |
|  v  re-inVite (release hold) |  t  Toggle online status |  >  Cycle next ac.|
|  U  send UPDATE              |  T  Set online status    |  <  Cycle prev ac.|
| ],[ Select next/prev call    +--------------------------+-------------------+
|  x  Xfer call                |      Media Commands:     |  Status & Config: |
|  X  Xfer with Replaces       |                          |                   |
|  #  Send RFC 2833 DTMF       | cl  List ports           |  d  Dump status   |
|  *  Send DTMF with INFO      | cc  Connect port         | dd  Dump detailed |
| dq  Dump curr. call quality  | cd  Disconnect port      | dc  Dump config   |
|                              |  V  Adjust audio Volume  |  f  Save config   |
|  S  Send arbitrary REQUEST   | Cp  Codec priorities     |                   |
+-----------------------------------------------------------------------------+
|  q  QUIT      L  ReLoad       I  IP change     n  detect NAT type           |
|  sleep MS     echo [0|1|txt]                                                |
+=============================================================================+
You have 0 active call
>>> 		
		
		
		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.3.0/ contrib/scripts/get_mp3_source.sh contrib/scripts/install_prereq install ./configure make menuselect make -j2 make install make samples make basic-pbx make config ldconfig
cat >> /etc/default/asterisk <<EOF AST_USER="asterisk" AST_GROUP="asterisk" EOF
sudo addgroup --quiet --system asterisk sudo adduser --quiet --system --ingroup asterisk --no-create-home --disabled-password asterisk usermod -a -G dialout,audio asterisk
		
sudo chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk
sudo chmod -R 750 /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk
		
		
		systemctl enable asterisk sudo systemctl start asterisk
5060/udp 10000:20000/udp
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:~$
配置文件说明
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 ;回音练习(会话前发个声音,用于测试回声)有关配置文件的语法规则,等以后再表。红色标出部分为自己首先要配置的部分。
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
			
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
[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"
[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