1. 项目概述
Asterisk作为一款开源的VoIP服务器软件,在企业通信系统构建中扮演着核心角色。它支持SIP、IAX等多种协议,能够实现PBX、IVR、会议桥等完整电信功能。在Ubuntu系统上部署Asterisk,可以快速搭建低成本、高灵活度的企业级通信平台。
我曾在多个项目中采用Ubuntu+Asterisk的方案替代传统PBX设备,单台服务器就能支持200+并发呼叫。相比商业解决方案,这套组合在定制化开发、成本控制和功能扩展方面具有明显优势。下面将详细拆解安装配置过程中的关键技术点。
2. 环境准备
2.1 系统要求
推荐使用Ubuntu 20.04 LTS或22.04 LTS版本,这两个长期支持版经过充分测试验证。服务器配置建议:
- 至少2核CPU(语音转码较耗资源)
- 4GB以上内存(每路通话约占用5MB)
- 50GB存储空间(录音文件占用较大)
注意:避免使用WSL环境,实时音频处理需要完整Linux内核支持
2.2 依赖安装
执行以下命令安装基础依赖:
bash复制sudo apt update
sudo apt install -y build-essential git wget libssl-dev libncurses-dev \
libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev
关键依赖说明:
- libssl-dev:TLS加密支持
- libnewt-dev:Asterisk菜单界面依赖
- linux-headers:编译内核模块必需
3. Asterisk安装
3.1 源码下载与验证
建议从官方仓库获取稳定版本:
bash复制wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar xvf asterisk-18-current.tar.gz
cd asterisk-18.*
验证文件完整性:
bash复制md5sum -c checksums.md5 # 需与官网公布值一致
3.2 编译配置
运行配置脚本:
bash复制./configure --with-jansson-bundled
关键参数说明:
--with-jansson-bundled:内置JSON支持,简化依赖管理- 若需ODBC支持需额外添加
--with-odbc
3.3 选择性模块安装
进入菜单选择界面:
bash复制make menuselect
推荐配置:
- Core Sound Packages → 启用所有语音包
- Extra Sound Packages → 按需选择语言
- Applications → 启用app_meetme(会议功能)
- Channel Drivers → 启用chan_sip/chan_pjsip
3.4 编译与安装
执行完整安装流程:
bash复制make -j$(nproc) # 并行编译加速
sudo make install
sudo make samples # 安装默认配置文件
sudo make config # 添加启动项
4. 基础配置
4.1 核心配置文件
主要配置文件路径:
/etc/asterisk/asterisk.conf:主配置/etc/asterisk/sip.conf:SIP协议配置/etc/asterisk/extensions.conf:拨号方案
启动服务:
bash复制sudo systemctl start asterisk
4.2 SIP基础配置
编辑sip.conf示例:
ini复制[general]
context=default
bindport=5060
bindaddr=0.0.0.0
[1001](user) # 分机账号
type=friend
secret=123456
host=dynamic
context=local_users
4.3 拨号方案配置
extensions.conf基础示例:
ini复制[local_users]
exten => _1XXX,1,Dial(SIP/${EXTEN},20)
exten => _1XXX,n,Hangup()
5. 安全加固
5.1 防火墙设置
开放必要端口:
bash复制sudo ufw allow 5060/udp # SIP
sudo ufw allow 10000-20000/udp # RTP媒体端口
5.2 TLS加密配置
生成证书:
bash复制sudo asterisk -rx "astgenkey create self-signed /etc/asterisk/keys/asterisk.key /etc/asterisk/keys/asterisk.crt"
sip.conf启用加密:
ini复制[general]
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.crt
tlscafile=/etc/asterisk/keys/asterisk.crt
tlscipher=ALL
6. 功能测试
6.1 控制台操作
进入交互式控制台:
bash复制sudo asterisk -rvvvv # -v参数增加调试信息
常用命令:
sip show peers:查看注册终端core show channels:显示活跃通话dialplan reload:重载拨号方案
6.2 基础测试流程
- 使用MicroSIP等软电话注册分机1001
- 拨打测试号码*43(回声测试)
- 检查
/var/log/asterisk/messages日志
7. 常见问题排查
7.1 注册失败排查
典型错误现象:
- 407 Proxy Authentication Required → 检查secret配置
- 403 Forbidden → 确认context匹配
- 408 Timeout → 检查网络连通性
7.2 单通/无声音
排查步骤:
rtp set debug on开启RTP调试- 检查防火墙/ACL规则
- 验证NAT设置:
ini复制[general] externip=your.public.ip localnet=192.168.1.0/255.255.255.0
7.3 高CPU占用优化
处理方法:
- 关闭不必要模块:
bash复制make menuselect # 禁用res_snmp等 - 调整转码策略:
ini复制[general] transcoding=passthrough
8. 高级功能扩展
8.1 数据库集成
配置MySQL存储:
bash复制sudo apt install libmysqlclient-dev
make menuselect # 启用res_config_mysql
配置res_mysql.conf:
ini复制[general]
dbhost=localhost
dbname=asterisk
dbuser=asterisk
dbpass=yourpassword
8.2 网页管理界面
安装Asterisk GUI:
bash复制sudo apt install asterisk-gui
访问地址:http://server-ip:8088/static/config/cfgbasic.html
8.3 集群部署方案
多服务器配置要点:
- 数据库集中存储
sip.conf配置:ini复制[general] register => cluster_peer:password@secondary-server- 使用IAX2协议做服务器间中继
9. 性能监控
关键监控指标:
- 并发呼叫数:
asterisk -rx "core show channels" - CPU/内存:
top -p $(pgrep asterisk) - 网络延迟:
sudo tcptrack -i eth0
日志分析工具:
bash复制sudo tail -f /var/log/asterisk/full | grep -E 'WARNING|ERROR'
10. 备份与迁移
配置文件备份:
bash复制sudo tar czvf asterisk_backup_$(date +%F).tar.gz /etc/asterisk /var/lib/asterisk
迁移注意事项:
- 保持相同Asterisk版本
- 检查绝对路径引用
- 转移SQLite数据库文件:
bash复制sudo cp /var/lib/asterisk/astdb.sqlite3 new_server
在实际部署中,我发现编译时添加--with-pjproject-bundled参数可以避免常见的PJSIP兼容性问题。对于生产环境,建议配置logrotate防止日志膨胀:
bash复制sudo nano /etc/logrotate.d/asterisk
添加内容:
code复制/var/log/asterisk/*log {
daily
rotate 30
missingok
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2>&1
endscript
}