什么是Asterisk?
Asterisk是一个开源专用交换机(PBX)服务器,它使用会话发起协议(SIP)来路由和管理电话呼叫。值得注意的功能包括客户服务队列,待机音乐,电话会议和电话录音等。
本指南介绍了为家庭或办公室配置新的CentOS 7 Linode作为专用Asterisk服务器所需的步骤。
注意本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo
。如果您不熟悉该sudo
命令,可以查看我们的“ 用户和组”指南。
开始之前
- 在最近的数据中心创建CentOS 7 Linode(限制亚特兰大,目前不支持SIP服务器)。2GB Linode足以使用非压缩编解码器处理10-20个并发呼叫,具体取决于每个通道所需的处理。
- 确保已按照“入门和保护服务器”指南来准备服务器。 不要完成设置防火墙的步骤。
- 编辑
/etc/selinux/config
以确保禁用SELinux:
/ etc / selinux/config1
SELINUX=disabled - 更新你的配置:
sudo yum update
- 重新启动你的Linode:
reboot
配置iptables
iptables将用于保护Linode免受不必要的流量的影响。Linode不应配置任何防火墙规则。
- 检查当前的防火墙规则:
sudo iptables -L
它应该显示一个空的规则表:
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
使用首选文本编辑器创建 /etc/iptables.firewall.rules,每次Linode启动时,此文件将用于激活具有所需规则的防火墙。
/etc/iptables.firewall.rules 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
*filter # Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT -d 127.0.0.0/8 -j REJECT # Accept all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow all outbound traffic - you can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allow SSH connections # # The -dport number should be the same port number you set in sshd_config, ie 8050 # -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # SIP on UDP port 5060, 5061 for secure signaling. Used for signals such as "hang up" -A INPUT -p udp -m udp --dport 5060 -j ACCEPT -A INPUT -p udp -m udp --dport 5061 -j ACCEPT # IAX2- the IAX protocol - comment out if you don't plan to use IAX # -A INPUT -p udp -m udp --dport 4569 -j ACCEPT # IAX - old IAX protocol, uncomment if needed for legacy systems. # -A INPUT -p udp -m udp --dport 5036 -j ACCEPT # RTP - the media stream - you can change this in /etc/asterisk/rtp.conf -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT # MGCP - if you use media gateway control protocol in your configuration -A INPUT -p udp -m udp --dport 2727 -j ACCEPT # Uncomment these lines if you plan to use FreePBX to manage Asterisk # -A INPUT -p tcp --dport 80 -j ACCEPT # -A INPUT -p tcp --dport 443 -j ACCEPT # Allow ping -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Log iptables denied calls -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Drop all other inbound - default deny unless explicitly allowed policy -A INPUT -j DROP -A FORWARD -j DROP COMMITNoteLeave IAX commented out unless you know you need it. IAX is “Inter-Asterisk Exchange” and was meant to allow multiple Asterisk servers to communicate with one another. Some VOIP trunking providers use this, but most use SIP. Unless your VOIP provider requires it or you are running multiple Asterisk servers, you probably won’t need IAX or IAX2.
在引导启动防火墙
CentOS 7没有iptables-services
预先安装,它必须安装,以便防火墙可以在启动时加载。
- 安装
iptables-services
,然后启用并启动它:
sudo yum install -y iptables-services sudo systemctl enable iptables sudo systemctl start iptables - 加载防火墙规则:
sudo iptables-restore < /etc/iptables.firewall.rules
- 重新检查Linode的防火墙规则:
sudo iptables -L
您的输出现在应如下所示:
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:8050 ACCEPT udp -- anywhere anywhere udp dpt:sip ACCEPT udp -- anywhere anywhere udp dpt:iax ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp ACCEPT udp -- anywhere anywhere udp dpt:mgcp-callagent ACCEPT icmp -- anywhere anywhere icmp echo-request LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: " DROP all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination DROP all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere
- 保存此规则集:
/usr/libexec/iptables/iptables.init save
- 在新终端中,请确保您可以登录:
ssh exampleuser@xx.xx.xx.xxx
安装依赖项
在安装Asterisk之前,将安装许多依赖项。要安装它们,请运行:
sudo yum install -y epel-release dmidecode gcc-c++ ncurses-devel libxml2-devel make wget openssl-devel newt-devel kernel-devel sqlite-devel libuuid-devel gtk2-devel jansson-devel binutils-devel
安装PJPROJECT
PJPROJECT是Asterisk的SIP通道驱动程序。它应该提供比旧驱动程序更好的呼叫清晰度和性能。
- 作为非root用户,创建一个工作目录:
mkdir ~/build
- 切换到该目录:
cd ~/build
- 使用
wget
来获取PJSIP fdriver源代码:
wget http://www.pjsip.org/release/2.3/pjproject-2.3.tar.bz2 - 进行解压:
tar -jxvf pjproject-2.3.tar.bz2
- 切换到新创建的目录:
cd pjproject-2.3
- 准备要编译的软件:
./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr
您不应该看到任何错误消息。
- 确保所有依赖项都已到位:
make dep make
- 安装:
sudo make install sudo ldconfig
- 确保已正确安装库:
sudo ldconfig -p | grep pj
您应该得到如下输出:
libpjsua2.so.2 (libc6,x86-64) => /lib64/libpjsua2.so.2 libpjsua2.so (libc6,x86-64) => /lib64/libpjsua2.so libpjsua.so.2 (libc6,x86-64) => /lib64/libpjsua.so.2 libpjsua.so (libc6,x86-64) => /lib64/libpjsua.so libpjsip.so.2 (libc6,x86-64) => /lib64/libpjsip.so.2 libpjsip.so (libc6,x86-64) => /lib64/libpjsip.so libpjsip-ua.so.2 (libc6,x86-64) => /lib64/libpjsip-ua.so.2 libpjsip-ua.so (libc6,x86-64) => /lib64/libpjsip-ua.so libpjsip-simple.so.2 (libc6,x86-64) => /lib64/libpjsip-simple.so.2 libpjsip-simple.so (libc6,x86-64) => /lib64/libpjsip-simple.so libpjnath.so.2 (libc6,x86-64) => /lib64/libpjnath.so.2 libpjnath.so (libc6,x86-64) => /lib64/libpjnath.so libpjmedia.so.2 (libc6,x86-64) => /lib64/libpjmedia.so.2 libpjmedia.so (libc6,x86-64) => /lib64/libpjmedia.so libpjmedia-videodev.so.2 (libc6,x86-64) => /lib64/libpjmedia-videodev.so.2 libpjmedia-videodev.so (libc6,x86-64) => /lib64/libpjmedia-videodev.so libpjmedia-codec.so.2 (libc6,x86-64) => /lib64/libpjmedia-codec.so.2 libpjmedia-codec.so (libc6,x86-64) => /lib64/libpjmedia-codec.so libpjmedia-audiodev.so.2 (libc6,x86-64) => /lib64/libpjmedia-audiodev.so.2 libpjmedia-audiodev.so (libc6,x86-64) => /lib64/libpjmedia-audiodev.so libpjlib-util.so.2 (libc6,x86-64) => /lib64/libpjlib-util.so.2 libpjlib-util.so (libc6,x86-64) => /lib64/libpjlib-util.so libpj.so.2 (libc6,x86-64) => /lib64/libpj.so.2 libpj.so (libc6,x86-64) => /lib64/libpj.so
(可选)安装DAHDI
DAHDI或Digium / Asterisk硬件设备接口是控制电话接口卡的内核模块。将Asterisk添加到使用旧技术的现有呼叫中心时,通常会使用此类卡。由于无法将物理卡添加到虚拟机,因此您可能不需要安装DAHDI驱动程序。
有一个例外:如果您计划在您的星号框上主持电话会议,多个人可以加入会议室,DAHDI还提供此功能的所需时间源。
安装Vanilla CentOS内核
由于DAHDI是一个内核模块,因此需要内核头才能进行编译。Linode提供的内核与CentOS存储库中提供的头文件版本不同,因此我们需要切换到分发提供的内核。
按照这个指令后运行一个发行版提供的内核在XEN的Linode或运行在KVM的Linode一个发行版提供的内核与接下来的步骤,然后再继续。
警告您不应尝试替换当前正在生产的系统上的内核。
建立DAHDI
有了新的内核,您现在可以构建DAHDI了。
- 切换回构建目录:
cd ~/build
- 下载最新版本的DAHDI(撰写本文时版本为2.10.2):
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
- 解压文件:
tar -zxvf dahdi-linux-complete-current.tar.gz
- 切换到新目录:
cd dahdi-linux-complete-2.10.2+2.10.2/
注意您的版本可能不同,因此请
2.10.2
使用提取的版本替换。 - 建立DAHDI:
make
- 安装DAHDI:
sudo make install sudo make config
安装Asterisk
我们现在准备安装Asterisk 13,这是Asterisk目前的长期支持版本。
从源 安装Asterisk
- 切换到构建目录:
cd ~/build
- 下载最新版本的Asterisk 13:
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
- 解压文件:
tar -zxvf asterisk-13-current.tar.gz
- 切换到新的Asterisk目录,
13.5.0
如果需要,替换:
cd asterisk-13.5.0
启用MP3支持
要将MP3文件用于待机音乐,需要安装一些依赖项。
- 安装Subversion:
sudo yum install svn
- 跑:
contrib/scripts/get_mp3_source.sh
配置和构建Asterisk
- 运行
configure
脚本以准备用于编译的Asterisk源代码:
./configure --libdir=/usr/lib64 If there are any missing dependencies, install them. - 开始构建过程:
make menuselect
片刻之后,您应该在屏幕上看到一个菜单,允许您配置要构建的功能。
- 如果要将MP3格式与待机音乐一起使用,则应选择
Add-Ons
,然后使用右箭头移至右侧列表。导航到format_mp3
并按Enter键以选择它。 - 在左侧菜单中选择其他声音包和音乐保留包,并启用所需语言的wav格式。(即使用
EN
英语包。) - 按F12保存并退出。
- 编译星号:
make
- 在系统上安装Asterisk:
sudo make install
- 安装示例配置文件:
sudo make samples
- 配置Asterisk在启动时自动启动:
sudo make config
试一试
恭喜!你现在有一个工作的Asterisk手机服务器。让我们启动Asterisk并确保它运行。
- 启动星号:
sudo service asterisk start
- 连接到Asterisk:
asterisk -rvv
您应该获得当前版本号的提示。
- 要查看可能的命令列表:
core show help
- 断开类型:
exit
断开连接后,Asterisk继续在后台运行。
下一步
现在您的Linode上运行了Asterisk服务器,现在可以连接一些电话,添加扩展,并配置Asterisk提供的各种选项。有关详细说明,请查看Asterisk项目的配置星号指南。
警告在Linode等远程服务器上运行电话系统时,使用SRTP保护信令数据和使用SRTP进行呼叫的音频部分以防止窃听始终是一种好习惯。完成拨号计划后,请务必按照安全呼叫指南加密通信。