如何在CentOS 7上安装Asterisk

什么是Asterisk?

Asterisk是一个开源专用交换机(PBX)服务器,它使用会话发起协议(SIP)来路由和管理电话呼叫。值得注意的功能包括客户服务队列,待机音乐,电话会议和电话录音等。

本指南介绍了为家庭或办公室配置新的CentOS 7 Linode作为专用Asterisk服务器所需的步骤。

注意本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo。如果您不熟悉该sudo命令,可以查看我们的“ 用户和组”指南。

开始之前

  1. 在最近的数据中心创建CentOS 7 Linode(限制亚特兰大,目前不支持SIP服务器)。2GB Linode足以使用非压缩编解码器处理10-20个并发呼叫,具体取决于每个通道所需的处理。
  2. 确保已按照“入门和保护服务器”指南来准备服务器。 不要完成设置防火墙的步骤。
  3. 编辑/etc/selinux/config以确保禁用SELinux: / etc / selinux/config1 SELINUX=disabled
  4. 更新你的配置: sudo yum update
  5. 重新启动你的Linode: reboot

配置iptables

iptables将用于保护Linode免受不必要的流量的影响。Linode不应配置任何防火墙规则。

  1. 检查当前的防火墙规则: 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预先安装,它必须安装,以便防火墙可以在启动时加载。

  1. 安装iptables-services,然后启用并启动它: sudo yum install -y iptables-services sudo systemctl enable iptables sudo systemctl start iptables
  2. 加载防火墙规则: sudo iptables-restore < /etc/iptables.firewall.rules
  3. 重新检查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
  4. 保存此规则集: /usr/libexec/iptables/iptables.init save
  5. 在新终端中,请确保您可以登录: 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通道驱动程序。它应该提供比旧驱动程序更好的呼叫清晰度和性能。

  1. 作为非root用户,创建一个工作目录: mkdir ~/build
  2. 切换到该目录: cd ~/build
  3. 使用wget来获取PJSIP fdriver源代码: wget http://www.pjsip.org/release/2.3/pjproject-2.3.tar.bz2
  4. 进行解压: tar -jxvf pjproject-2.3.tar.bz2
  5. 切换到新创建的目录: cd pjproject-2.3
  6. 准备要编译的软件: ./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr 您不应该看到任何错误消息。
  7. 确保所有依赖项都已到位: make dep make
  8. 安装: sudo make install sudo ldconfig
  9. 确保已正确安装库: 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了。

  1. 切换回构建目录: cd ~/build
  2. 下载最新版本的DAHDI(撰写本文时版本为2.10.2): wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
  3. 解压文件: tar -zxvf dahdi-linux-complete-current.tar.gz
  4. 切换到新目录: cd dahdi-linux-complete-2.10.2+2.10.2/ 注意您的版本可能不同,因此请2.10.2使用提取的版本替换。
  5. 建立DAHDI: make
  6. 安装DAHDI: sudo make install sudo make config

安装Asterisk

我们现在准备安装Asterisk 13,这是Asterisk目前的长期支持版本。

从源 安装Asterisk

  1. 切换到构建目录: cd ~/build
  2. 下载最新版本的Asterisk 13: wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
  3. 解压文件: tar -zxvf asterisk-13-current.tar.gz
  4. 切换到新的Asterisk目录,13.5.0如果需要,替换: cd asterisk-13.5.0

启用MP3支持

要将MP3文件用于待机音乐,需要安装一些依赖项。

  1. 安装Subversion: sudo yum install svn
  2. 跑: contrib/scripts/get_mp3_source.sh

配置和构建Asterisk

  1. 运行configure脚本以准备用于编译的Asterisk源代码: ./configure --libdir=/usr/lib64 If there are any missing dependencies, install them.
  2. 开始构建过程: make menuselect 片刻之后,您应该在屏幕上看到一个菜单,允许您配置要构建的功能。
  3. 如果要将MP3格式与待机音乐一起使用,则应选择Add-Ons,然后使用右箭头移至右侧列表。导航到format_mp3并按Enter键以选择它。
  4. 在左侧菜单中选择其他声音包和音乐保留包,并启用所需语言的wav格式。(即使用EN英语包。)
  5. F12保存并退出。
  6. 编译星号: make
  7. 在系统上安装Asterisk: sudo make install
  8. 安装示例配置文件: sudo make samples
  9. 配置Asterisk在启动时自动启动: sudo make config

试一试

恭喜!你现在有一个工作的Asterisk手机服务器。让我们启动Asterisk并确保它运行。

  1. 启动星号: sudo service asterisk start
  2. 连接到Asterisk: asterisk -rvv 您应该获得当前版本号的提示。
  3. 要查看可能的命令列表: core show help
  4. 断开类型: exit 断开连接后,Asterisk继续在后台运行。

下一步

现在您的Linode上运行了Asterisk服务器,现在可以连接一些电话,添加扩展,并配置Asterisk提供的各种选项。有关详细说明,请查看Asterisk项目的配置星号指南。

警告在Linode等远程服务器上运行电话系统时,使用SRTP保护信令数据和使用SRTP进行呼叫的音频部分以防止窃听始终是一种好习惯。完成拨号计划后,请务必按照安全呼叫指南加密通信。

本文的版权归 滑稽园扛把子 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Windows Phone应用 博客园阅读器

今儿个平安夜,明天圣诞节,聚餐、飙歌、通宵玩,各种欢乐走起来!给WindowsPhone机友发个小应用。 最近学习实际开发WindowsPhone应用程序,第一...

2257
来自专栏landv

烽火2640路由器命令行手册-11-IP语音配置命令

(1)       用户输入的ID若在dialpeer表中已存在,且模式匹配,则进入dialpeer配置模式对相应dialpeer进行配置修改;

1583
来自专栏JavaWeb

基于自定义注解和Aop动态数据源配置

5927
来自专栏Python攻城狮

Django实战(二)- 创建一个课程选择系统1.需求2.代码操作

1773
来自专栏技术栈大杂烩

LINUX: 在不重启各自socket程序情况下, 断开ESTAB的TCP链接

上面的意思就是, server端在5555端口监听, 而client 通过 6666 端口去连接

1573
来自专栏跨界架构师

C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)

  在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_c...

1231
来自专栏猿湿Xoong

咦,Oreo怎么收不到广播了?

2934
来自专栏阮一峰的网络日志

fortune 命令简介

美国中餐馆的最后一道菜,往往是小甜饼,叫做"幸运饼"(fortune cookie)。 ? 里面有一张纸条,写着人生格言。 这种形式的格言,显然很受欢迎。早在1...

3198
来自专栏云计算

配置OpenStack VM启用多张网卡

[这篇文章是由巴拉克·梅里莫维奇撰写的。] 我们已经在之前的文章中广泛讨论了OpenStack网络。在这篇文章中,我想深入讲解一个更高级的OpenStack...

5357
来自专栏FreeBuf

树莓派随身工具箱:中间人劫持获取控制权

上文讲解了树莓派随身工具箱的环境搭建,这段时间又对其进行了一些优化,主要是从便携美观上面改进。同时,在实际使用中发现了一些问题,并做了小小的改动。

3143

扫码关注云+社区

领取腾讯云代金券