Данная инструкция описывает процесс установки телефонной системы Asterisk с модулями DAHDI, LibPRI, PJSip, SpanDSP, chan_dongle и дополнительными кодеками Opus и g729. Никаких WEB-интерфейсов и прочих утилит для конфигурирования и мониторинга системы данная инструкция не предусматривает. Это связано с тем, что автору приходилось неоднократно разбираться с конфигурационными файлами, сгенерированными автоматически при помощи FreeBPX и прочих подобных систем, что вызывало у автора сильную ненависть к подобным оболочкам. Поэтому, друзья, настраивайте все руками в конфигурационных файлах. Это не так сложно, зато работает как часы и разобраться намного проще.
Disclamer
Автор предупреждает читателей, о тонкой грани между допустимым использованием телефонных систем подобного рода и уголовной ответственностью, которая может наступить при неправильной маршрутизации телефонного трафика (рефайлинг). Пожалуйста, ознакомьтесь с законодательством Вашей страны, чтобы избежать проблем. Автор снимает с себя ответственность за любые действия читателя, в которых ему может помочь материал данной статьи и возлагает ее целиком и полностью на читателя данной статьи. Информация, приведенная в данной статье, является справочной и не носит практического характера.
Входные данные
Для написания статьи я создал тестовый виртуальный сервер под управлением Debian 8.4. Во время установки было выбрано следующее программное обеспечение: SSH-сервер и Стандартные системные утилиты. В боевой конфигурации рекомендуется выделить отдельный раздел диска для файлов записей разговоров, если это необходимо.
Важное замечание: производите все действия по установке под учетной записью суперпользователя root. Не используйте sudo, так как это вызывает ошибки в некоторых случаях. Пожалуйста, не игнорируйте это замечание. Вы можете использовать команду
1 |
su - |
либо разрешите на время установки доступ пользователю root через ssh, для чего в файле /etc/ssh/sshd_config установите параметр
1 |
PermitRootLogin yes |
и перезапустите ssh-сервер
1 |
service sshd restart |
Установка зависимостей
1 |
apt-get update && apt-get upgrade && apt-get dist-upgrade |
Это все одна длинная строка. Дважды щелкните по блоку ниже и скопируйте текст целиком.
1 |
apt-get install -y build-essential autoconf libncurses5-dev libssl-dev libxml2-dev libsqlite3-dev libmysqlclient-dev curl mpg123 libxml2 libxml2-dev libaudiofile-dev subversion sox libsox-fmt-all uuid-dev libjansson-dev libiksemel-dev libssl-dev libtiff5-dev mysql-client lame linux-headers-`uname -r` |
libmyodbc – удалил, т.к. не находит.
После этой процедуры желательно перезагрузить сервер.
Установка DAHDI
Внимание! В большинстве инсталляций Вам не пригодится этот модуль. Он необходим только если у Вас есть оборудование, подключенное к данному серверу, которое взаимодействует с телефонной сетью посредством E1, T1 и т.п. Это разного рода PSTN/DAHDI-платы.
1 2 3 4 5 6 7 8 |
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz tar xvfz dahdi-linux-complete-current.tar.gz rm -f dahdi-linux-complete-current.tar.gz cd dahdi-linux-complete-* make all make install make config |
Установка LibPRI
1 2 3 4 5 6 7 |
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz tar xvfz libpri-current.tar.gz rm -f libpri-current.tar.gz cd libpri-* make make install |
Установка PJSip
PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами. Подробнее.
Скопируйте ссылку на загрузку последней версии с сайта http://www.pjsip.org/download.htm и используйте в команде wget ниже
1 2 3 4 5 6 7 8 9 |
cd /usr/src wget http://www.pjsip.org/release/2.6/pjproject-2.6.tar.bz2 tar -xjvf pjproject-*.tar.bz2 rm -f pjproject-*.tar.bz2 cd pjproject-* CFLAGS='-DPJ_HAS_IPV6=1' ./configure --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr make dep make make install |
Установка SpanDSP
Данный модуль необходим для работы с факсами. Если поддержка факсов не нужна, то можно смело пропустить установку этого модуля.
Так как последняя версия spandsp была выпущена достаточно давно, то можно без проблем установить его из репозитория Debian
1 |
apt-get install -y libspandsp2 libspandsp-dev |
Либо же загрузите последнюю версию для установки вручную
1 2 3 4 5 6 7 8 9 |
cd /usr/src wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6pre21.tgz tar vxfz spandsp-*.tgz rm -f spandsp-*.tgz cd spandsp-* ./configure make clean make make install |
Установка Asterisk 13
1 2 3 4 5 6 7 8 9 |
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz tar xvfz asterisk-13-current.tar.gz rm -f asterisk-13-current.tar.gz cd asterisk-13* contrib/scripts/get_mp3_source.sh contrib/scripts/install_prereq install ./configure make menuselect |
Далее в конфигурационном меню необходимо выбрать по необходимости следующие компоненты:
Add-ons: format_mp3
Core Sound Packages: CORE-SOUNDS-EN-(WAV, ALAW, GSM, G729, G722), CORE-SOUNDS-RU-(WAV, ALAW, GSM,G729, G722)
Extras Sound Packages: WAV, ALAW, GSM, G729 и G722
Продолжаем установку. (процесс make занимает достаточно много времени)
Если это первая установка или у Вас еще нет базовых конфигурационных файлов, Вы можете их установить, выполнив make samples. Если Вы не понимаете, о чем идет речь, однозначно устанавливайте.
1 2 3 4 5 |
make make install make config make samples ldconfig |
Установка кодека G729
Если кодек g729 не нужен — смело пропускаем.
G729 — узкополосный речевой кодек (вокодер), который применяется для эффективного цифрового представления узкополосной телефонной речи (сигнала телефонного качества).
Для начала нужно узнать, какой процессор используется в Вашем сервере
grep -E ‘model name|flags’ /proc/cpuinfo
Внимание! Перед тем, как скачивать кодек, откройте сайт http://asterisk.hosting.lv/, выберите подходящий под систему и процессор кодек, скопируйте ссылку на его загрузку и используйте именно эту ссылку в команде ниже! Это крайне важно!
1 |
wget -P /usr/lib/asterisk/modules/ -O codec_g729.so ссылка_на_загрузку |
После установочная настройка
На этом основная установка системы окончена. Запустите Asterisk и убедитесь, что все в порядке
1 2 3 4 5 |
/etc/init.d/asterisk start ps ax | grep asterisk asterisk -rvvvvvvvvvvddddddddddc quit /etc/init.d/asterisk stop |
Если планируется использовать USB-модемы, то Asterisk желательно запускать от имени группы dialout, чтобы он имел доступ к устройствам USB.
1 2 |
adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk usermod -a -G dialout,audio asterisk |
Задаем права на каталоги:
1 2 3 4 5 6 7 8 9 10 11 12 |
chown -R asterisk:asterisk /var/lib/asterisk chown -R asterisk:asterisk /var/log/asterisk chown -R asterisk:asterisk /var/run/asterisk chown -R asterisk:asterisk /var/spool/asterisk chown -R asterisk:asterisk /usr/lib/asterisk chown -R asterisk:asterisk /etc/asterisk chmod -R u=rwX,g=rX,o= /var/lib/asterisk chmod -R u=rwX,g=rX,o= /var/log/asterisk chmod -R u=rwX,g=rX,o= /var/run/asterisk chmod -R u=rwX,g=rX,o= /var/spool/asterisk chmod -R u=rwX,g=rX,o= /usr/lib/asterisk chmod -R u=rwX,g=rX,o= /etc/asterisk |
Если Вы установили базовые конфигурационные файлы, то по умолчанию в них сконфигурирован английский язык (это влияет на речевые информаторы). Если желаете, можете изменяем язык на русский во всех файлах
1 2 |
sed -i 's/defaultlanguage = en/defaultlanguage = ru/' /etc/asterisk/asterisk.conf sed -i 's/;language=en/language=ru/' /etc/asterisk/*.conf |
В файле /etc/default/asterisk раскомментируем две строчки и изменяем название группы
1 2 |
AST_USER="asterisk" AST_GROUP="dialout" |
Запускаем Asterisk и смотрим, от какого пользователя он запустился
1 2 |
/etc/init.d/asterisk start ps aux | grep asterisk |
Установка chan_dongle
Модуль chan_dongle необходим для работы с модемами Huawei:
K3715
E169 / K3520
E155X
E175X
K3765
Описываемая в данной статье версия является форком основного проекта, но основной проект не развивается с 2013 года и поддерживает только Asterisk 11. Впрочем, есть еще один форк той версии, что используется в данной статье. В связи с этим гарантировать работу модуля невозможно. Со списком известных багов можно ознакомиться по этой ссылке, но не ожидайте, что автор их исправит, так как этот список не обновлялся с 2011 года. Даже сам автор предупреждает, что модуль работает как попало и может назвонить вам куда нибудь и тем самым сожрать все ваши деньги или натворить еще что-то. Так что пожалуйста, прежде чем читать дальше, еще раз подумайте, стоит ли связываться с этим модулем. На сегодняшний день это единственный модуль, способный заставить дружить недорогие GSM-модемы с Asterisk и, скорее всего, у Вас нет выбора.
This channel driver is in alpha stage.
I am not responsible if this channel driver will eat your money on your SIM card or do any unpredicted things.
Модемы должны быть разлочены, проверка PIN-кода на SIM-карте должна быть отключена. Также необходимо обязательно отключить на модемах функции CR-ROM и CARDREADER, оставив модем только в режиме модема. Для этого необходимо подключиться к модему консолью и дать следующую АТ-команду:
1 |
AT^U2DIAG=0 |
Также желательно отключить на модеме ожидание вызова:
1 |
AT+CCWA=0,0,1 |
Установите необходимые для сборки chan_dongle пакеты
1 |
apt-get install -y unzip automake autoconf |
Далее загружаем форк chan_dongle под Asterisk 13, разархивируем, собираем, устанавливаем. Не обращаем внимание на строчку «automake: error: no ‘Makefile.am’ found for any configure output» — это не является ошибкой
1 2 3 4 5 6 7 8 9 |
cd /usr/src wget https://github.com/oleg-krv/asterisk-chan-dongle/archive/asterisk13.zip unzip asterisk13.zip rm -f asterisk13.zip cd asterisk-chan-dongle-asterisk13 aclocal && autoconf && automake -a ./configure make make install |
Копируем конфигурационный файл dongle.conf
1 2 3 |
cp etc/dongle.conf /etc/asterisk/ chown asterisk:asterisk /etc/asterisk/dongle.conf chmod u=rwX,g=rX,o= /etc/asterisk/dongle.conf |
Перезапускаем Asterisk, смотрим, загрузился ли модуль
1 2 3 |
/etc/init.d/asterisk restart asterisk -rvvvvvvvvvvddddddddddc dongle show devices |
Далее необходимо сделать так, чтобы модемам при подключении назначался верный владелец (чтобы Asterisk имел к ним доступ). Для этого создадим файл /etc/udev/rules.d/92-dongle.rules со следующим содержимым
1 |
KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="dialout" |
Затем перезапустим службу udev
1 |
service udev restart |
Теперь при подключении устройства типа ttyUSB, система автоматически назначит ему владельца asterisk и группу dialout.
Идентификация по IMSI или IMEI
В Файле /etc/asterisk/dongle.conf описываются все устройства. Синтаксис файла — общепринятый в Asterisk. Например, я опишу модем, в котором установлена SIM-карта оператора Киевстар:
1 2 3 4 |
[Kievstar] imsi=255012321232123 imei=345654898756548 context=from-dongle |
Идентификация устройства производится по imsi и imei. Можно идентифицировать устройство только по одному из параметров. imsi — это идентификатор SIM-карты, imei — это идентификатор терминала. Если Вам важно идентифицировать устройства по SIM-картам, тогда Вы можете указать только imsi номера этих SIM-карт (написаны на картах), если же важно идентифицировать по терминалам, тогда указывайте imei терминала (написан на модеме).
Все входящие вызовы с такого устройства будут обработаны контекстом from-dongle из файла extensions.conf или extensions.ael.
Исходящие вызовы через данный модем необходимо направлять на Dongle/Kievstar
Также в описании устройства можно указать exten=+380123456789. В таком случае все входящие вызовы будут иметь указанный exten. В некоторых случаях это возможно понадобится.
Если идентификация по IMEI / IMSI не работает
В последней версии chan_dongle обнаружение устройств выполняется либо по идентификатору терминала (модема) — IMEI, либо по идентификатору абонента (SIM-карты) — IMSI. Если же по каким-то причинам Вам необходимо идентифицировать устройство по порту USB-контроллера, то используйте расширенную конфигурацию udev для присвоения псевдонимов портам, а затем эти псевдонимы можно использовать для определения модемов в dongle.conf.
Для привязки модемов по номеру порта контроллера USB, нужно определить адреса этих портов. Извлеките все модемы из сервера, затем запустите
1 |
udevadm monitor |
Вставляйте по одному модему и записывайте адреса портов контроллера, которые относятся к каждому из них. Затем в файл /etc/udev/rules.d/92-dongle.rules допишите псевдонимы для каждого из модемов, указав адреса контроллеров в качестве ID, подобно следующему:
1 2 3 4 5 6 7 8 |
KERNEL=="ttyUSB[0-9]*", ID=="1-1:1.1", SYMLINK+="Kievstar-audio" KERNEL=="ttyUSB[0-9]*", ID=="1-1:1.2", SYMLINK+="Kievstar-data" KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.1", SYMLINK+="Vodafone-audio" KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.2", SYMLINK+="Vodafone-data" KERNEL=="ttyUSB[0-9]*", ID=="1-3:1.1", SYMLINK+="Lifecell-audio" KERNEL=="ttyUSB[0-9]*", ID=="1-3:1.2", SYMLINK+="Lifecell-data" |
Как видно из примера, необходимы только два порта, вместо четырех.
Теперь в файле /etc/asterisk/dongle.conf вместо идентификации по IMEI и/или IMSI укажите идентификацию по портам USB следующим образом:
1 2 3 4 |
[Kievstar] audio=/dev/Kievstar-audio data=/dev/Kievstar-data context=from-dongle |
Однако этот метод определения модемов не является рекомендуемым, т.к. при случайной смене USB-порта либо вообще ничего не будет работать, либо Ваши вызовы пойдут не туда куда планировалось. Настоятельно рекомендуется использовать идентификацию по IMEI / IMSI.
Далее переносим конфиги из бэкапа со старого сервера путем запуска nautilus из терминала запущенного под root.
После копирования необходимо повторно назначить права
1 2 3 4 5 6 7 8 9 10 11 12 |
chown -R asterisk:asterisk /var/lib/asterisk chown -R asterisk:asterisk /var/log/asterisk chown -R asterisk:asterisk /var/run/asterisk chown -R asterisk:asterisk /var/spool/asterisk chown -R asterisk:asterisk /usr/lib/asterisk chown -R asterisk:asterisk /etc/asterisk chmod -R u=rwX,g=rX,o= /var/lib/asterisk chmod -R u=rwX,g=rX,o= /var/log/asterisk chmod -R u=rwX,g=rX,o= /var/run/asterisk chmod -R u=rwX,g=rX,o= /var/spool/asterisk chmod -R u=rwX,g=rX,o= /usr/lib/asterisk chmod -R u=rwX,g=rX,o= /etc/asterisk |
Cоздаем папки:
/bcp с правами 755
/var/calls с правами 777
далее делаем reboot сервера и проверяем работоспособность.
После установки астериск в большинстве случаев перестает работать MariaDB, для устранения необходимо выполнить переустановку.
MariaDB
1 2 |
sudo apt-get install mariadb-server mariadb-client sudo mysql_secure_installation |
Всегда отвечаем Да.
далее делаем reboot сервера и проверяем работоспособность.
На этом установка полностью завершена.