# Точка входа route{ # # Следующий условный оператор осуществляет проверку поля заголовка MaxForwards - счетчик «прыжков» маршрутизации. # Если его значение равно нулю, посылается ответ 483 и прекращается обработка данного пакета. # Помимо этого, функция mf_process_maxfwd_header() смотрит. а имеется ли вообще такой заголовок в пакете, если нет, # то он создается и устанавливается в заданное значение - в данном случае 10. if (!mf_process_maxfwd_header("70")) { sl_send_reply("483","Too Many Hops"); exit; } # Далее мы проверяем наличие тега у поля To, который показывает, относится ли данный пакет к какому-либо диалогу. if (has_totag()) { # Пакет OPTIONS, помимо собственно запроса доступных опций, обычно используется в качестве средства проверки соединения. # Следующая проверка служит для того, чтобы удостовериться, действительно ли пакет предназначен именно нашему прокси. if (is_method("OPTIONS") && uri==myself && (! uri=~"sip:.*[@]+.*")) { options_reply(); exit; } # Смотрим, есть ли в пакете указание, куда его маршрутизировать дальше. # Функция loose route() сама по себе очень многозначная (как и многие другие функции), и, если таковое указание имеется, # она действует в соответствии с секцией 16.12 RFC 3261 за некоторыми исключениями (о них лучше почитать в документации). if (loose_route()) { # В серьезных скриптах маршрутизации здесь и спрятана вся логика - например, # осуществляется аккаунтинг. Однако, поскольку скрипт у нас исключительно простой, # пакет мы просто маршрутизируем по направлению, которое в нем и задано. route(relay); } else { #В случае же, если пакет не содержит маршрута, мы смотрим, не является ли он пакетом ACK, # пришедшим в ответ на сообщение об ошибке, и переправляем его куда следует. if (is_method("ACK")) { if ( t_check_trans() ) { t_relay(); exit; } else { # Если же данный запрос ACK не принадлежит никакой транзакции, мы просто его игнорируем. exit; } } #В остальных же случаях мы отправляем сообщение с кодом "404", аналогичное подобному же в HTTP. sl_send_reply("404","Not here"); } exit; } #Обрабатываем запросы, не относящиеся к заданному диалогу. Запрос CANCEL мы не трогаем и пересылаем дальше. if (is_method("CANCEL")) { if (t_check_trans()) { t_relay(); } exit; } #Функция t check trans() тоже имеет двойное назначение - если запрос не относится ни к ACK, ни к CANCEL, # но относится к какой- то транзакции ретрансляции, она его ретранслирует дальше, что следующая строчка и делает. t_check_trans(); # Фильтруем пакеты, у которых есть поле Route, но не задано поле To (за исключением пакета ACK), и логируем о подобных попытках. t_check_trans(); #Если запрос адресован не нам, добавляем поле Record-Route для принудительной маршрутизации SIP-трафика через наш прокси. if (loose_route()) { xlog("L_ERR","Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); if (!is_method("ACK")) { sl_send_reply("403","Preloaded Route denied"); } } #Если в запросе не фигурирует URI, который хоть как-то относится к нашему серверу, мы его отправляем в route(relay). if (!is_method("REGISTER|MESSAGE")) { record_route(); } #Поддержку presence (сообщений о статусе присутствия абонента) тоже не реализуем, для чего отключаем методы. if (!uri==myself) { route(relay); } #Поддержку presence (сообщений о статусе присутствия абонента) тоже не реализуем, для чего отключаем методы. PUBLISH и SUBSCRIBE if (is_method("PUBLISH|SUBSCRIBE")) { sl_send_reply("503","Service Unavailable"); exit; } #Обработка запроса REGISTER. Для упрощения скрипта мы даем возможность регистрироваться всем, безо всякой аутентификации. Кроме того, база местоположений по тем же соображениям временная, в настоящую БД ничего не пишется if (is_method("REGISTER")) { if (!save("location", "m")) { sl_reply_error(); } exit; } # Функция lookup() проверяет, есть ли у нас в базе местоположений данный пользователь. Если его нет, мы создаем новую транзакцию и возвращаем "404". # Опять же в серьезных скриптах здесь еще и проверяются поддерживаемые клиентом методы, чего мы не делаем. if (!lookup("location")) { t_newtran(); t_reply("404", "Not Found"); exit; } route(relay); } #Блок relay, который и обрабатывает все проходящие пакеты. route[relay] { #В случае INVITE мы смотрим, есть ли отрицательный результат транзакции, и, если есть, отправляем в соответствующий блок. if (is_method("INVITE")) { t_on_failure("fail"); } #Наконец, пропускаем пакет дальше и, если он почему-либо не проходит,выдаем ошибку "500". if (!t_relay()) { send_reply("500","Internal Server Error"); } } # Блок fail, о котором было упомянуто выше. failure_route[fail] { #Если транзакция была отменена, мы просто выходим из блока. if (t_was_cancelled()) { exit; } }
opensips
Настройка оборудования
Настройка оборудования
FreeSWITCH
FreeSWITCH
FreeSWITCH - настройка и установка. Документация и руководства на русском языке.
- Сервер маршрутизации.
- Сервер B2BUA.
- Сервер IVR
- Сервер Конференций
- Сервер Голосовой почты
- SBCСервер
- Fax сервер
- И, конечно, АТС!
FreeSWITCH это open source, масштабируемая, кросс-платформенная, телефонная система. Предназначена для маршрутизации и коммутации между большинством современных протоколов передачи аудио, видео, текстовых и других форм медиа данных. В данном разделе собрана русскоязычная документация по установке, настройке и использованию FreeSWITCH и сопутствующих приложений.
Установка FreeSWITCH
Настройка FreeSWITCH
FusionPBX
FreePBX
FreePBX
Подробное описание модулей. Примеры. Архитектура Freepbx. Скриншоты.
FreePBX это полнофункциональный веб-интерфейс для конфигурации Asterisk.
Если Вы знакомы с Asterisk, то знаете, настройка ATCосуществляется при помощи конфигурационных файлов.
FreePBX предлагает простой, интуитивно понятный интерфейс для настройки и управления Asterisk PBX.
FreePBX также поставляется со многими дистрибьютивами: AsteriskNOW, FreePBX Distro, Trixbox, Elastix.
Новости
3CX поглощает Elastix. (22. Dec 2016)
Объявлено о слиянии Elastix и 3CX. Версия MT закрыта для скачивания. Elastix 5 будет разрабатываться в партнерстве с 3CX и распространяться по коммерческой лицензии.
Установка FreePBX.
- Установка FreePBX 12 - Как установить FreePBX и Asterisk из исходников.
Настройка FreePBX
Руководства по установке и настройке FreePBX.
- Файлы и стандартные контексты FreePBX - Структура конфигурационных файлов используемых FreePBX.
- Asterisk FreePBX Fax-to-EmailПрием факсов на емайл во FreePBX
Admin modules
Документация по административным модулям FreePBX
- FreePBX Administrators - Используется для назначения администраторов системы.
- FreePBX: Backup and Restore - Резервные копии и восстановление.
- FreePBX 13 Bulk Handler - Импорт / Экспорт csv.
- FreePBX Feature Codes - Коды абонентских функций.
- FreePBX 12 System Recordings - Запись системных голосовых сообщений.
- FreePBX Custom Destinations - Пользовательские контексты, как модули FreePBX.
- Freepbx - User management - Управление правами пользователей.
Applications
Документация по модулям приложений FreePBX
- Announcements - Объявление без интерактивных функций.
- Bulk Extensions - Импорт/Экспорт экстеншенов из CSV файла.
- Extensions - Используется для создания экстеншенов.
- FreePBX Follow Me - Follow Me - Следуй за мной
- FreePBX 13 Conferences - Многоканальные телеконференции.
- FreePBX DISA - Прямой доступ в систему
- FreePBX IVR - Интерактивное голосовое меню.
- FreePBX Очереди - Queues - Очереди обработки вызовов.
- FreePBX Группы Вызова - Ring Groups - Группы приема вызовов
- Time Conditions - Условия обработки вызовов в зависимости от текущего времени.
- Time Groups - Временные периоды.
Connectivity
Документация по модулям входящих исходящих соединений FreePBX.
- FreePBX 13 входящая маршрутизация - Наведение входящих вызовов , DID.
- FreePBX 13 исходящая маршрутизация. - Маршрутизация исходящих вызовов по заданным линиям (транкам).
- Zap Channel DIDs - Назначение DIDдля конкретных DAHDIканалов.
- Trunks - Управляет DAHDI, SIPпротокол, IAXканалами для выхода в общую телефонную сеть, или соединения АТС.
Settings Modules
Документация по модулям глобальных настроек каналов и приложений FreePBX
- FreePBX Advanced Settings - Глобальные настройки
- advanced_settings_details - Параметры отображение настроек.
- asterisk_manager - Настройки AMI.
- dahdi_configuration_module - Конфигурация DAHDI.
- device_settings - Настройки устройств.
- dialplan_and_operational - План набора и операции.
- Asterisk SIP Settings - Настройки SIP [general]
UCP
Примеры
Уязвимости
Устаревшее
- General Settings - Основные системные установки.
- Day/Night Control - Дневной / Ночной режимы.
Downloads
Downloads
Asterisk
Libpri
Dahdi
Скачать Asterisk NOW
Скачать Asternic Call Center Stats Lite
Asternic CDR Stats freePBX Module
Скачать Chan_dongle
Скачать FreePBX
Скачать FreePBX Distro
Скачать Софтфоны
WinprintHylafax
Установка Asterisk
Установка Asterisk
Подробные мануалы по установке Asterisk и FreePBX на Ubuntu, CentOS и Debian.
Установка Asterisk 14 + Freepbx 13 Ubuntu 16.04
Установка Asterisk 13 + FreePBX 12 Ubuntu 14
Установка Asterisk 13 на Debian 8
Установка Asterisk 13 + FreePBX 13 на CentOS 7
Основные требования к системе
- Для инсталляции и запуска Asterisk не требуется никакого специального оборудованиия.
- Перед установкой Asterisk должны быть установлены программные пакеты:
- Исходники ядра (kernel sources)
- Заголовочные .h файлы для Вашего ядра (kernel headers)
- bison (необходим для обработки выражений в файле extensions.conf)
- Пакеты: openssl и openssl-dev или libssl-dev
Исходники Asterisk
Asterisk - ядро основной программы
Asterisk-addons - дополнительные файлы
Libpri - PRI - библиотеки
Dahdi (zaptel) - драйверы телефонии
cd /usr/src/
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4.15.tar.gz wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-12-current.tar.gz
Lame
tar zxvf lame-3.98.4.tar.gz cd lame-3.98.4 ./configure make make install cd ..
Компиляция Libpri
cd /usr/src/libpri-VERSION make make install
Компиляция DAHDI
cd /usr/src/dahdi-linux-complete-VERSION make all make install make config
Компиляция Asterisk
cd /usr/src/asterisk-VERSION ./configure make menuselect make make install make samples make progdocs make config
Компиляция Asterisk-addons
Начиная с версии 1.8 Asterisk-addons входят в состав core не не требуют отдельной компиляции.
cd /usr/src/asterisk-addons-VERSION ./configure make make install
Запуск и остановка Asterisk
/usr/sbin/asterisk: Файл запускающий Asterisk
Если Вы установили Asterisk, можно запустить его командой:
/usr/src/asterisk -vvvgc
Остановить Asterisk из CLIможно командой 'stop now'.
Командой без аргументов, Asterisk запускается как демон.
/usr/sbin/asterisk
Подключится к командному интерфейсу (CLI) можно используя аргумент 'r'.
/usr/sbin/asterisk -r
Запуск Asterisk из под не - root пользователя. По умолчанию Asterisk запускается из под root, что может быть небезопасно. Для изменения пользователя раскомментируйте строки в файле /etc/init.d/asterisk.
AST_USER="asterisk" AST_GROUP="asterisk"
Создайте группу и пользователя asterisk.
/usr/sbin/groupadd asterisk /usr/sbin/useradd -d /var/lib/asterisk -g asterisk asterisk
Измените права на использование следующих файлов:
chown --recursive asterisk:asterisk /var/lib/asterisk chown --recursive asterisk:asterisk /var/log/asterisk chown --recursive asterisk:asterisk /var/run/asterisk chown --recursive asterisk:asterisk /var/spool/asterisk chown --recursive asterisk:asterisk /usr/lib/asterisk ## Если Вы используете Zaptel chown --recursive asterisk:asterisk /dev/zap ## Если Вы используете DAHDI chown --recursive asterisk:asterisk /dev/dahdi #---------------------------------------------------- chmod --recursive u=rwX,g=rX,o= /var/lib/asterisk chmod --recursive u=rwX,g=rX,o= /var/log/asterisk chmod --recursive u=rwX,g=rX,o= /var/run/asterisk chmod --recursive u=rwX,g=rX,o= /var/spool/asterisk chmod --recursive u=rwX,g=rX,o= /usr/lib/asterisk ## Если Вы используете Zaptel chmod --recursive u=rwX,g=rX,o= /dev/zap ## Если Вы используете DAHDI chmod --recursive u=rwX,g=rX,o= /dev/dahdi #---------------------------------------------------- chown --recursive root:asterisk /etc/asterisk chmod --recursive u=rwX,g=rX,o= /etc/asterisk
/etc/init.d/asterisk restart
Автозагрузка Asterisk
Различные операционные системы имеют разные способы запуска программ во время загрузки. В директории с исходниками /usr/src/asterisk-VERSION/contrib/init.dсодержатся скрипты для запуска в archlinux, debian, gentoo, mandriva, redhat, slackware, suse.
Для систем, которые все еще используют inittab, просто добавьте следующую строку в /etc/inittab:
as:2:respawn:/usr/sbin/asterisk -f
Для Redhat окружения выполните
cd /usr/src/asterisk-VERSION make config
Это скопирует скрипт из contrib/init.d/rc.redhat.asterisk в /etc/rc.d/init.d/asterisk и выполните команду:
/sbin/chkconfig --add asterisk
Директории Asterisk
- /usr/lib/asterisk/modules: Содержит бинарные файлы (модули. кодеки)
- /var/lib/asterisk: Содержит переменные данные(звуки. скрипты и т.д.).
- /var/spool/asterisk: Файлы создаваемые в процессе работы (голосовые сообщения, исходящие вызовы и т.д.)
- /var/log/asterisk: Логи. информация о вызовах.
- /etc/asterisk; Конфигурационные файлы Asterisk.
Asterisk настройка
Asterisk настройка
Подробные руководства и справочные материалы по настройке Asterisk. Документация постоянно обновляется и дополняется.
Установка
Asterisk работает под управлением операционных систем Linux и FreeBSD.
Доступны установка из бинарных файлов и компиляция из исходного кода.
Также существует множество дистрибьютивов Linux с уже готовым к работе предустановленным Asterisk и FreePBX.
Инструкции по установке Asterisk для различных дистрибьютивов Linux:
Конфигурационные файлы Asterisk
Большинство настроек Asterisk контролируются с помощью конфигурационных файлов, расположенных в директории /etc/asterisk. Синтаксис конфигурационных файлов Asterisk разработан для редактирования вручную и имеет простую и понятную структуру. Категории или по иному контексты группируют свойства объектов и отделяют их друг от друга именами в квадратных скобках по принципу наследования. Все, что записано после имени контекста относится к нему, пока не появится следующее имя контекста в квадратных скобках. Практически в каждом кофиге встречается категория [general], которая задает параметры для всех объектов конфигурационного файла. Параметры объектов имеют приоритет над глобальными параметрами, если одинаковый параметр, может быть назначен, как глобально, так и конкретному объекту. Некторые конфиги имеют только заранее определенные секции, например asterisk.confотвечающий за общие настройки pbx. Но в большинстве случаев, для назначения объектов, создаются контексты и задаются их имена. Приведенные ниже примеры конфигов Asterisk 14 с описанием параметров, переведены и дополнены авторами сайта.
Realtime архитектура Asterisk
Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени. Существует два типа конфигурации - статический и динамический: - Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей. - Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов
Каналы связи в Asterisk
SIP
Под каналами связи в Asterisk подразумевается набор драйверов для взаимодействия с устройствами и протоколами связи.
Так как Asterisk в первую очередь VoIPАТСключевое значение имеют драйвера взаимодействия с VoIPпротоколами, в частности с SIPпротоколом.
Изначально в Asterisk был один драйвер SIPпротокола chan_sip. Но его реализация была неполной и в конкуренции с FreeSWITCH, который имел более продвинутый SIPдрайвер, в Asterisk начиная с версии 12, был включен новый драйвер SIP - chan_pjsip.
Поддержка старого драйвера сохраняется и оба драйвера могут действовать совместно.
Однако предпочтительней использовать новый драйвер PJSIP.
IAX
Также в Asterisk реализован собственный VoIPпротокол - IAX (Inter Asterisk Exchange). Как и следует из названия, он в первую очередь ориентирован на создание каналов связи между серверами Asterisk. IAXимеет упрощенную структуру, используя один и тот же порт для сигнализации и медиа, что в теории упрощает прохождение NATи экономит трафик, однако в современных условиях и с появлением PJSIP его преимущества не завоевали ему популярности.
h323
Поддержка устаревшего VoIPпротокола h323 может понадобиться для интеграции с устаревшими АТС, например Avaya CSI.
DAHDI
Драйвер DAHDIподдерживает большую линейку устройств, таких как платы потоков ISDN PRI E1, FXO, FXS и GSM интерфейсов.
Local
Прокси - псевдо канал Asterisk, позволяющий вызывать канал любой технологии без явного ее указания.
NAT SIP Asterisk
Руководства по настройке Asterisk для работы за NAT.
План набора Asterisk
Для понимания Asterisk очень важен - диалплан (dialplan).
Диалплан направляет каждый звонок от его источника, с помощью различных приложений,
в пункт назначения. Все вызовы, будь-то голосовая почта, конференция, меню автосекретаря
или вызов телефона, определяются логикой и концепцией диалплана.
Русская документация мануал по dialplan Asterisk
Команды диалплана Asterisk
Функции диалплана Астериск
Asterisk Dialplan functions
Функции Asterisk используются в диалплане. Это не командыдиалпланаи не могут быть использованы прямо. Функции возвращают значение для дальнейшего использования в логике диалплана.
Очереди и Агенты Asterisk
Очередями в Asterisk называется механизм ACD (automated call distribution) для распределения входящих вызовов между агентами колл центра. Конфигурация очередей осуществляется в файле Asterisk настройка очереди - queues.conf, имена очередей вызовов используются в качестве аргумента команды Queueв файле конфигурации плана набора extensions.conf. Интерфейсы операторов назначаются параметром очереди - member.Агенты, которые обрабатывают вызовы, поступающие в очередь, могут быть заданы в файле Asterisk: agents.conf.
Шифрование в Asterisk
Конференции Asterisk
Asterisk позволяет организовать телеконференции с неограниченным числом пользователей.
Абонентские функции Asterisk
В файле features.conf назначаются пользовательские коды абонентских функций Asterisk и опции абонентских функций, такие как:
Переадресация вызова(transfer), перехват вызова (pickup), запись по требованию (record on demand), таймауты между набора и переадресации (digit timeout), паркинг (park) и др.
Отчеты о звонках Asterisk
Детализированный отчет о звонках (CDR) backend для сохранения данных о входящих, исходящих и внутренних вызовах Asterisk. Полное описание на русском языке CDR, MySQL, ODBC etc.
Логи в Asterisk
CLI - интерфейс командной строки Asterisk.
Командная строка является мощным инструментом для мониторинга и управления работой Asterisk PBX
Asterisk AMI
Asterisk manager Interface - интерфейс управления.