Всем Добра!
Сегодня телефония сама по себе можно сказать что умерла, но мы же пользуемся мобильной сетью и телефонами. Вопрос, а как они Собственно работают? На чем? и что находится за кулисами мобильных сетей и как сделать свою сеть.
На все эти вопросы один ответ ASTERISK – это собственно программа которая превращает обычный компьютер в СЕРВЕР ip-телефонии. Именно с помощью нее мобильные и обычные операторы достовляют нам голоса и картинки наших близких.
И так задача опишем воображаемый офис:
- Работает 50 сотрудников. Номера будут 4-х значными, от 1000 до 4000.
- У нас будут 4 отдела – менеджеры, топ-менеджеры, технический отдел, руководство и все остальные.
- Номер секретаря 4000, менеджеры 1000-1999, топ-менеджеры 2000-2999, техподдержка 3000-3999, руководство 4001-4999.
- Мы не будем использовать ни одного SIP провайдера для звонков, только внутренняя связь.
Все нововееденя бдем производить на CentOS 7. Для быстрой настройки использую скрипт AISS, очень быстро и удобно. И приступаем к установке.
Все это работать будет на Asterisk+FreePBX.
Asterisk – бесплатное решение для организации voip телефонии. Он обладает всеми возможностями обычных АТС, но предоставляет более богатый функционал по управлению звонками. За относительную простоту настройки, по сравнению с цифровыми АТС, бесплатность и широкие возможности он и снискал такую популярность.
Freepbx – бесплатный веб интерфейс для управления астериском. Он существенно упрощает работу с конфигурациями, позволяет выполнять некоторые функции людям, вообще далеким от астериска. Например, с его помощью практически любого можно научить управлять учетными записями пользователей.
Прежде чем мы начнем устанавливать asterisk, нам надо выполнить целый ряд подготовительных действий. Первым делом отключаем selinux. Для этого открываем файл:
# nano /etc/sysconfig/selinux
и устанавливаем значение SELINUX=disabled. После этого применяем настройку без перезагрузки сервера:
# setenforce 0
Рекомендация по отключению selinux дается в официальной инструкции по установке freepbx, так как это может привести к нарушению процесса инсталляции.
Дальше ставим пакеты Development Tools:
# yum groupinstall core base "Development Tools"
В своей работе FreePBX использует базу данных Mysql. В качестве mysql сервера будем использовать mariadb. Подключаем репозиторий со свежей версией MariaDB. Для этого создаем файл /etc/yum.repos.d/MariaDB.repo
# nano /etc/yum.repos.d/MariaDB.repo
Cледующего содержания:
# MariaDB 10.3 CentOS repository list - created 2019-04-01 09:11 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Устанавливаем MariaDB.
# yum install MariaDB-server MariaDB-client MariaDB-shared
Запускаем mariadb и добавляем в автозагрузку.
# systemctl start mariadb # systemctl enable mariadb
Для работы панели FreePBX нужен web сервер с php. Я буду использовать версию php 7.4. это минимальная версия для FreePBX 16
Подключаем репозиторий epel, если еще не сделали это ранее.
# yum install epel-release
Добавляем remi репозиторий:
# rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Активируем репу remi-php74, для этого выполняем команду:
# yum-config-manager --enable remi-php74
Устанавливаем необходимые пакеты для работы сервера voip:
# yum install wget php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysql php-gettext php-bcmath php-zip php-xml php-imap php-json php-process php-snmp
Далее установим httpd. Он, по идее, должен установиться в качестве зависимости на предыдущем шаге, но на всякий случай проверьте.
# yum install httpd
Теперь нам нужно изменить некоторые параметры httpd – запустить его от пользователя asterisk и включить опцию AllowOverride. В файле /etc/httpd/conf/httpd.conf, с помощью sed.
# sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf # sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf
Httpd запускать пока не надо, так как пользователя asterisk мы еще не создали. Сделаем это после установки asterisk.
Изменим параметр php, который отвечает за максимальный размер загружаемого файла. Дефолтное значение слишком низкое для freepbx. Для этого в /etc/php.ini устанавливаем параметр.
# sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
С веб сервером закончили. Продолжаем подготовку к установке FreePBX на CentOS.
Для работы Freepbx требуется сервер NodeJS. Установим его на Centos 7. Подключаем репозиторий NodeJS с помощью скрипта автоматизации от разработчика и произведем его установку.
# curl -sL https://rpm.nodesource.com/setup_14.x | bash - # yum install -y nodejs
Обновляем кэш yum.
# yum clean all && sudo yum makecache fast
Устанавливаем зависимости для следующих шагов, компитятор языка С++ и сборщик пакетов.
# yum install gcc-c++ make
Установка Asterisk. Скачиваем архив последней версии Asterisk с официального сайта.
# cd ~ && wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
Распаковываем исходники.
# tar zxvf asterisk-*.tar.gz
Переходим в директорию с исходниками.
# cd asterisk*
Выполняем скрипт для установки пакетов с зависимостями для asterisk.
# contrib/scripts/install_prereq install
Запускаем скрипт для скачивания исходников для работы с mp3.
# contrib/scripts/get_mp3_source.sh
Настраиваем конфигурацию:
# ./configure --with-pjproject-bundled --with-jansson-bundled --with-crypto --with-ssl=ssl --with-srtp
Запускаем меню для выбора параметров:
make menuselect
В целом, можно оставить дефолтную настройку, если вы не очень разбираетесь, что тут выбирать. Можно запускать установку asterisk.
# make && make install && make config && make samples && ldconfig
Настроим запуск астериск от системного пользователя asterisk. Для этого редактируем скрипт запуска /usr/sbin/safe_asterisk, установив параметр ASTARGS=”-U asterisk”.
# sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g' /usr/sbin/safe_asterisk
Создадим этого пользователя и назначим нужные права на каталоги.
# useradd -m asterisk # chown asterisk.asterisk /var/run/asterisk # chown -R asterisk.asterisk /etc/asterisk # chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk # chown -R asterisk.asterisk /usr/lib/asterisk
Запускаем Asterisk.
systemctl start asterisk
Проверьте сразу, что он запустился.
# systemctl status asterisk
Консоль выдаст:
● asterisk.service - LSB: Asterisk PBX Loaded: loaded (/etc/rc.d/init.d/asterisk; bad; vendor preset: disabled) Active: active (running) since Чт 2022-06-16 09:20:58 MSK; 3s ago Docs: man:systemd-sysv-generator(8) Process: 19269 ExecStop=/etc/rc.d/init.d/asterisk stop (code=exited, status=0/SUCCESS) Process: 19296 ExecStart=/etc/rc.d/init.d/asterisk start (code=exited, status=0/SUCCESS) Main PID: 19325 (asterisk) CGroup: /system.slice/asterisk.service ├─19323 /bin/sh /usr/sbin/safe_asterisk └─19325 /usr/sbin/asterisk -f -U asterisk -vvvg -c июн 16 09:20:58 tel.sefdar.ru systemd[1]: Starting LSB: Asterisk PBX... июн 16 09:20:58 tel.sefdar.ru asterisk[19296]: Starting asterisk: июн 16 09:20:58 tel.sefdar.ru systemd[1]: Can't open PID file /var/run/asterisk/asterisk.pid (yet?) after start: No such file or directory июн 16 09:20:58 tel.sefdar.ru systemd[1]: asterisk.service: Supervising process 19325 which is not our child. We'll most likely not notice when it exits. июн 16 09:20:58 tel.sefdar.ru systemd[1]: Started LSB: Asterisk PBX.
Если будет ошибка вроде:
radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
Тогда нужно отредактировать конфигурационные файлы:
# sed -i 's";\[radius\]"\[radius\]"g' /etc/asterisk/cdr.conf # sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cdr.conf # sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cel.conf
После этого перезапустите asterisk, ошибок быть не должно. Скачиваем последнюю версию Freepbx с сайта разработчика. на момент написания статьи v.16
# cd ~ && wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz
Распаковываем исходники.
# tar xvfz freepbx-*.tgz
Переходим в каталог freepbx и запускаем скрипт проверки запуска asterisk.
# cd freepbx && ./start_asterisk start
Если не получили ошибок, то запускаем установку непосредственно FreePBX.
# ./install -n