By Mark Spencer <[email protected]> and the Asterisk.org developer community.
Copyright (C) 2001-2021 Sangoma Technologies Corporation and other copyright holders.
在尝试配置和运行 Asterisk 服务器之前,您必须阅读并完全理解安全信息文档的内容。
有关详细信息,请参阅重要的安全注意事项。
Asterisk 是一个开源 PBX 和电话工具包。从某种意义上说,它是底层的互联网和电话通道以及顶层的互联网和电话应用程序之间的中间件。然而,Asterisk 支持更多的电话接口,而不仅仅是互联网电话。 Asterisk 还对传统 PSTN 电话提供大量支持。
有关项目本身的更多信息,请访问 Asterisk 主页和官方文档。此外,您还可以在 voip-info.org 上找到由 Asterisk 社区编制的大量信息。
O'Reilly 根据知识共享许可出版了一本关于 Asterisk 的书。它可以在书店购买,也可以在 asteriskdocs.org 网站上下载。
Asterisk 开源 PBX 主要在 GNU/Linux 操作系统上开发和测试,并受到每个主要 GNU/Linux 发行版的支持。
Asterisk 也已被“移植”,据报道在其他操作系统上也能正常运行,包括 Sun Solaris、Apple 的 Mac OS X、Cygwin 和 BSD 变体。
首先,确保您拥有受支持的硬件(但请注意,您不需要任何特殊硬件,甚至不需要声卡)来安装和运行 Asterisk。
支持的电话硬件包括:
如果您要从 Asterisk 的早期版本进行更新,请确保阅读源目录中的 UPGRADE.txt 文件。尽管我们尽一切努力保持向后兼容性,但您仍必须更改一些文件和配置选项。
为了发现要使用的新功能,请检查源代码分发的 configs 目录中的配置示例。有关此版本的 Asterisk 中的新功能列表,请参阅 CHANGES 文件。
确保您的系统包含兼容的编译器和开发库。 Asterisk 需要 GNU 编译器集合 (GCC) 4.1 或更高版本,或者支持 C99 规范和一些 gcc 语言扩展的编译器。此外,您的系统需要有可用的 C 库头文件以及 ncurses 的头文件和库。
有许多模块具有额外的依赖项。要查看正在查找哪些库,请参阅./configure --help
,或运行make menuselect
以查看特定模块的依赖关系。
在许多发行版上,这些依赖项由名称为“glibc-devel”、“ncurses-devel”、“openssl-devel”和“zlib-devel”或类似名称的包安装。
那么,让我们继续:
doc目录下还有比这个更多的文档。您可能还想检查 configs 目录中包含示例和参考指南的配置文件。
./configure
执行配置脚本来猜测编译期间使用的系统相关变量的值。如果脚本指示缺少某些必需的组件,您可以运行./contrib/scripts/install_prereq install
来安装必需的组件。请注意,这将为 Asterisk 的每个功能安装所有依赖项。运行脚本后,您将需要重新运行./configure
。
make menuselect
[可选]如果您想要选择要编译的模块并检查各种可选模块的依赖关系,则需要执行此操作。
make
假设构建成功完成:
make install
如果这是您第一次使用 Asterisk,您可能希望安装示例 PBX,以及演示扩展等。如果是这样,请运行:
make samples
这样做将覆盖您已安装的任何现有配置文件。
# asterisk -vvvc
当 Asterisk 初始化时,你会看到一堆详细消息从屏幕上飞过(这是“非常非常详细”模式)。准备好后,如果您指定了“c”,那么您将获得一个命令行控制台,如下所示:
*CLI>
您可以随时输入“core show help”来获取系统帮助。如需特定命令的帮助,请键入“core show help”。要使用声卡启动 PBX,您可以键入“console dial”来拨打 PBX。然后您可以使用“控制台接听”、“控制台挂断”和“控制台拨号”来模拟电话的操作。请记住,如果您没有全双工声卡(如果您有/没有,Asterisk 会在其详细消息中的某个位置告诉您),那么它将无法正常工作(还没有)。
在 Unix/Linux 命令提示符处输入“man asterisk”将为您提供有关如何启动和停止 Asterisk 的详细信息,以及用于启动 Asterisk 的所有命令行选项。
请随意查看/etc/asterisk
中的配置文件,您将在其中找到大量有关 Asterisk 功能的信息。
所有 Asterisk 配置文件共享通用格式。注释由“;”分隔(当然,因为“#”是 DTMF 数字,可能出现在很多地方)。配置文件分为多个部分,其名称出现在 [] 中。每个部分通常包含两种类型的语句,即“变量=值”形式的语句和“对象=>参数”形式的语句。在内部,“=”和“=>”的使用完全相同,因此它们仅用于帮助使配置文件更易于理解,并且不会影响其实际解析方式。
'variable=value' 形式的条目设置星号中某些参数的值。例如,在 chan_dahdi.conf 中,可以指定:
switchtype=national
为了向 Asterisk 表明他们连接的交换机是“国家”类型的。一般来说,该参数将应用于低于其规范的实例化。例如,如果配置文件读取:
switchtype = national
channel => 1-4
channel => 10-12
switchtype = dms100
channel => 25-47
“national”开关类型将应用于通道 1 到 4 以及通道 10 到 12,而“dms100”开关类型将应用于通道 25 到 47。
“object =>parameters”使用给定的参数实例化一个对象。例如,行“channel => 25-47”为卡的通道 25 到 47 创建对象,从上面指定的变量中获取设置。
使用 SIP 电话的用户应该意识到 Asterisk 对时间的大幅跳跃很敏感。使用 date(1)(或其他类似命令)手动更改系统时间可能会导致 SIP 注册和其他内部进程失败。如果您的系统本身无法保持准确的时间,请使用 NTP 来保持系统时钟与“实时”同步。 NTP 旨在通过加快或减慢系统时钟直至同步到“实时”来保持系统时钟同步,而不是通过跳跃时间并导致不连续性。大多数 Linux 发行版都包含 NTP 的预编译版本。请注意一些时间同步方法,这些方法会定期获取正确的实时时间,然后手动设置系统时钟。
由于夏令时而导致的时间变化就是显而易见的。 Linux系统中夏令时的使用纯粹是一个用户界面问题,不会影响Linux内核或Asterisk的运行。 Linux 内核上的系统时钟按照 UTC 运行。 UTC 不使用夏令时。
另请注意,此问题与 TDM 通道的时钟无关,并且已知至少会影响 SIP 注册。
根据系统的大小和配置,Asterisk 可能会消耗大量文件描述符。在 UNIX 中,文件描述符不仅仅用于磁盘上的文件。文件描述符还用于处理网络通信(例如SIP、IAX2 或H.323 呼叫)和硬件访问(例如模拟和数字中继硬件)。 Asterisk 可以访问许多磁盘文件,以获取从配置信息到语音邮件存储的所有内容。
大多数系统限制 Asterisk 一次可以打开的文件描述符的数量。这可能会限制您的系统可以处理的同时呼叫的数量。例如,如果限制设置为 1024(常见默认值),Asterisk 可以同时处理大约 150 个 SIP 呼叫。要更改文件描述符的数量,请按照以下针对您的系统的说明进行操作:
如果您的系统使用 PAM(可插入身份验证模块),请编辑/etc/security/limits.conf
。将这些行添加到文件底部:
root soft nofile 4096
root hard nofile 8196
asterisk soft nofile 4096
asterisk hard nofile 8196
(根据口味调整数字)。您可能需要重新启动系统才能使这些更改生效。
如果上面没有专门适合您的系统的说明,您可以尝试将命令ulimit -n 8192
添加到启动 Asterisk 的脚本中。
有关各种功能的更多文档,请参阅 doc 目录。再次,请阅读所有包含配置选项文档的配置示例。
最后,如果您有兴趣获取更多信息,您可能希望访问支持网站并加入邮件列表。
欢迎来到不断增长的全球 Asterisk 用户社区!
Mark Spencer, and the Asterisk.org development community
Asterisk 是 Sangoma Technologies Corporation 的商标