IP телефония на базе FreeBSD и Asterisk
Собственно предыстория банальна, анализ затрат на связь показал, что 40% стоимости телефонной связи это звонки с центрального офиса на филиалы и обратно. Кроме того, директор, каждую пятницу, проводит обзвон директоров филиалов по мобильному, и каждому рассказывает задачи и выслушивает возражения и пожелания каждого филиала. Филиалы у нас в каждом областном центре в общей сложности 24 точки. Думаю поверите на слово, что и времени и денег такое удовольствие стоит не мало. Поэтому решили найти решение, которое сократит расходы на всю эту прелесть.
После штурма гугла мой выбор остановился на бесплатном продукте для реализации IP телефонии - Asterisk и ставить я его буду на FreeBSD. Прежде немного о самом продукте.
Что такое Asterisk Это проект с открытым исходным кодом компании Digium, первоначально начатый Марком Спенсером. Asterisk обладает всеми возможностями классической АТС, поддерживает множество VoIP протоколов и предоставляет функции голосовой почты, конференций, интерактивного голосового меню (IVR), центра обработки вызовов (постановка звонков в очередь и распределение их по агентам используя различные алгоритмы), запись CDR и прочие функции. Для создания собственной функциональности можно воспользоваться собственным языком Asterisk для написания диалплана, написав модуль на языке C, либо воспользовавшись AGI, который является гибким и универсальным интерфейсом для интеграции с внешними системами обработки данных. Выполняемое через AGI может быть написано на любом языке программирования.
подробнее
http://asterisk.ru/Перейдем к установке. Имеем:
Code
voip# uname -a
FreeBSD voip.mycopmanyname.com 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May 1 08:49:13 UTC 2009
[email protected]:/usr/obj/usr/src/sys/GENERIC i386
с обновленным деревом портов
поехали
Code
$ su -
Password:
voip# cd /usr/ports
voip# make search name=asterisk
Port: asterisk-1.4.29_1
Path: /usr/ports/net/asterisk
Info: An Open Source PBX and telephony toolkit
Maint:
[email protected]B-deps: bison-2.4.1,1 ca_root_nss-3.12.4 curl-7.19.7_1 expat-2.0.1_1 freetds-0.64_5,1 gettext-0.17_1 gmake-3.81_3 gnutls-2.8.3 gsm-1.0.13 iksemel-1.4_1 libgcrypt-1.4.5 libgpg-error-1.7 libiconv-1.13.1_1 libltdl-2.2.6b libogg-1.1.4,4 libslang2-2.2.2_1 libvorbis-1.2.3_1,3 m4-1.4.14,1 mpg123-1.10.1 net-snmp-5.4.2.1_6 newt-0.52.11_1 openh323-1.19.0.1_1 openldap-client-2.4.21 pcre-8.00 perl-5.10.1 pkg-config-0.23_1 png-1.4.1_1 popt-1.14 postgresql-client-8.2.15_1 pwlib-1.12.0_5,1 radiusclient-0.5.6_1 speex-1.2.r1_2,1 sqlite-2.8.17_1 unixODBC-2.2.14_2
R-deps: ca_root_nss-3.12.4 curl-7.19.7_1 expat-2.0.1_1 freetds-0.64_5,1 gettext-0.17_1 gnutls-2.8.3 gsm-1.0.13 iksemel-1.4_1 libgcrypt-1.4.5 libgpg-error-1.7 libiconv-1.13.1_1 libltdl-2.2.6b libogg-1.1.4,4 libslang2-2.2.2_1 libvorbis-1.2.3_1,3 mpg123-1.10.1 net-snmp-5.4.2.1_6 newt-0.52.11_1 openh323-1.19.0.1_1 openldap-client-2.4.21 pcre-8.00 perl-5.10.1 pkg-config-0.23_1 png-1.4.1_1 popt-1.14 postgresql-client-8.2.15_1 pwlib-1.12.0_5,1 radiusclient-0.5.6_1 speex-1.2.r1_2,1 sqlite-2.8.17_1 unixODBC-2.2.14_2
WWW: http://www.asteriskpbx.com
на сайте ссылки на две версии 1.4 и 1.6 и обе как бы стабильные, ну я остановился на 1.4, объяснить свой выбор не могу
Далее устанавливаем asterisk
Code
voip# cd /usr/ports/net/asterisk
voip# make configure
...
voip# make
...
voip# make install
я не указываю параметры конфигов, потому как все оставлял по дефолту, только отключал поддержку IPv6.
Разрешим запуск asteriska при загрузке, добавив строку
asterisk_enable="YES"в файл
/etc/rc.confну и запустим службу
Code
voip# asterisk -vvvvvcd
Если все установилось правильно то увидим много бегущей информации, заканчивающейся
Code
Asterisk Ready.
*CLI>
далее нам нужно создать пользователей разрешить им совершать и принимать звонки ну и выбрать и настроить софтфоны.
Начнем с редактирования конфигов
Code
voip# ee /usr/local/etc/asterisk/sip.conf
Секцию
[general] я оставил по умолчанию, мы к ней еще вернемся, но это будет немного другая задача. Теперь спускаемся в самый конец файла, и добавляем наших абонентов
Code
...
[400]
type=friend ; Тип friend разрешает пользователю совершать и принимать звонки
host=dynamic ;IP-адрес, с которого разрешены подключения для данного пользователя (dynamic - разрешает любой адрес)
username=400 ; Имя пользователя для авторизации
secret=400 ; Пароль для авторизации пользователя
nat=yes ; Разрешаем работу из-за NAT
callerid="Director" <400> ; Отображаемое имя, при звонках от этого пользователя (Мои софтфоны не смогли отобразить кирилицу)
canreinvite=no ; Параметр запрещающий прямое соединение клиентов, минуя сервер Asteriska
context=office ; Имя контекста, в котором будет находиться данный абонент
disallow=all ; Запрещаем использование всех кодеков (Ниже подключаем только те, которые нужны)
allow=gsm ; Аудио кодек
allow=ulaw ; Аудио кодек
allow=alaw ; Аудио кодек
[401]
type=friend
host=dynamic
username=401
secret=401
nat=yes
callerid="Filial Kiev" <401>
canreinvite=no
context=office
disallow=all
allow=gsm
allow=ulaw
allow=alaw
[402]
type=friend
host=dynamic
username=402
secret=402
nat=yes
callerid="Filial Nikolaev" <402>
canreinvite=no
context=office
disallow=all
allow=gsm
allow=ulaw
allow=alaw
Теперь нужно создать Dial Plan для каждого абонента
Code
voip# ee /usr/local/etc/asterisk/extensions.conf
Это файл расширений, с его помощью абонентам можно подключать множество приложений такие как голосовая почта, комната конференций и много других, но сейчас нам нужно только звонки.
Опять же спускаемся в самый конец файла и добавляем наших абонентов с именем контекста office
Code
...
[office]
exten => 400,1,Dial(SIP/400,20)
exten => 400,2,Hangup
exten => 401,1,Dial(SIP/401,20)
exten => 401,2,Hangup
exten => 402,1,Dial(SIP/402,20)
exten => 402,2,Hangup
Впринципе для звонков все готово, подключимся к консоли астериска и перегрузим модули, чтобы наши изменения вступили в силу.
Code
voip# asterisk -r
Asterisk 1.4.29, Copyright (C) 1999 - 2009 Digium, Inc. and others.
Created by Mark Spencer <
[email protected]>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
================
Connected to Asterisk 1.4.29 currently running on voip (pid = 841)
voip*CLI> module reload
перейдем к выбору софтфонов
По ссылке есть несколько бесплатных софтфонов, поддерживающих SIP .
Я остановил свой выбор на X-Lite, поскольку он довольно прост в настройке и только он нормально запустился на всех тестируемых ОС.
Качаем, устанавливаем, запукаем, заходим в настройкм аккаунта
Вводим данные абонента, которые мы описали в файле sip.conf
Применяем настройки, и через пару секунд софтфон должен зарегистрироваться на сервере
Тоже самое проделываем у всех абонентов.
Теперь пытаемся позвонить с номера 400 (мы его закрепили за директором) на номер 401.
Есть входящий вызов от директора, нажимаем кнопку Ответа
и наслаждаемся общением с начальством
вместо софтфонов можно использовать обычные USB телефоны, или SIP телефоны их стоимость чуть больше чем стоимость обычного телефона, но по телефону говорить удобнее, чем кричать на монитор
Как говорят у нас "Далі буде"
Дальше планирую написать о:
- совершении видеозвонков
- аудио и видео конференциях
- подключении этого сервера к офисной миниАТС KX-TDA200
- настройке логирования разговоров как по миниАТС так и по серверу астериска.
PS. если есть вопросы,замечания,предложения пишите. У меня например вопрос к юниксоидам, насколько критично, что процесс астериска запускается от root-a?