Все вокруг обсуждают Asterisk и его форки, для крупных компаний предлагают использовать Cisco или Avaya, но почему-то практически нигде нет информации о Yate — простом и удобном, но, в то же время, очень функциональном решении для IP-телефонии.
В этой статье я хотел бы кратко рассказать о сборке Yate под Linux, а также его первоначальной настройке для работы с SIP.
Yate написан на C++, позволяет использовать модули и расширения, может быть установлен практически на любую операционную систему, поддерживает SIP, H.323, IAX и Jingle.
Т.к. на домашнем компьютере стоит Ubuntu, то далее инструкция вся будет адаптирована исключительно под данную ОС, но, в целом, для других систем она сильно отличаться не будет.
В репозиториях доступна лишь первая версия Yate, хотя официально уже существует 2.1, которая вышла в ноябре. Так что загружаем исходники и приступаем к действиям.
Для начала следует установить все необходимые для сборки пакеты (в данном случае для сборки кодеков):
После успешной установки можно приступать к сборке Yate:
Все! Сборка завершена и мы можем приступать к настройке сервера.
Настраивая Asterisk, мне был не совсем понятен его синтаксис. В Yate все оказалось намного проще: файлы конфигурации имеют структуру INI-файлов, все четко разделено по секциям, к каждой опции идет комментарий. По умолчанию префикс для установки — /usr/local, поэтому переходим в папку /usr/local/etc/yate, в которой нам будут нужны следующие файлы:
Далее по очереди:
Файл regfile.conf содержит информацию о пользователях, которым разрешено подключение. Состоит он из секции [general], в которой указаны общие настройки, а также из секций с именем пользователя. Для того, чтобы добавить нового пользователя, нам лишь нужно добавить следующие строки:
Таким образом, если я хочу подключаться как пользователь с именем 100 и паролем secret, то файл должен иметь следующее содержание (комментарии здесь и далее опущены):
В моем случае необходимо было настроить возможность исходящих вызовов через несколько провайдеров. Файл accfile.conf позволит настроить подключения к другим серверам. Добавляем необходимых нам провайдеров и получаем:
Несмотря на то, что сервер уже вполне может работать, нам все-таки необходимо прописать маршруты для исходящих вызовов, а также (при необходимости) для входящих. Для тех, кто уже работал с регулярными выражениями, это будет достаточно просто. Структура regexroute.conf позволяет нам определить через какого провайдера следует осуществлять звонки, а также куда следует направлять входящие вызовы. Здесь мне требовалось следующее: если номер начинается с 00, то следует направить звонки через первого провайдера, если 01 — через второго. Входящие звонки все следует направить на номер 100. В итоге получилось следующее:
Запуск сервера осуществляется простым вводом:
Если нам хочется посмотреть весь debug-вывод, то можно просто запустить:
Все! Теперь можно регистрироваться как SIP-клиент и звонить :)
Таким образом, люди даже малознакомые с телефонией могут настроить собственный сервер. Жаль, лишь документации по серверу слишком мало.
Несмотря на все минусы, авторов можно почти всегда найти на их канале в IRC. Также есть mailing list, в котором вы можете задать все интересующие вопросы. Плюс все-таки документация, пусть и неполная, но на сайте присутствует.
PS> моя первая статья, если есть замечания/предложения — с радостью выслушаю их
PPS> также если есть вопросы по Yate, постараюсь помочь чем смогу :)
В этой статье я хотел бы кратко рассказать о сборке Yate под Linux, а также его первоначальной настройке для работы с SIP.
Yate написан на C++, позволяет использовать модули и расширения, может быть установлен практически на любую операционную систему, поддерживает SIP, H.323, IAX и Jingle.
Часть 1. Сборка.
Т.к. на домашнем компьютере стоит Ubuntu, то далее инструкция вся будет адаптирована исключительно под данную ОС, но, в целом, для других систем она сильно отличаться не будет.
В репозиториях доступна лишь первая версия Yate, хотя официально уже существует 2.1, которая вышла в ноябре. Так что загружаем исходники и приступаем к действиям.
Для начала следует установить все необходимые для сборки пакеты (в данном случае для сборки кодеков):
apt-get install libspeex-dev libgsm1-dev libopencore-amrnb-dev
После успешной установки можно приступать к сборке Yate:
./configure; make; make install
Все! Сборка завершена и мы можем приступать к настройке сервера.
Часть 2. Настройка.
Настраивая Asterisk, мне был не совсем понятен его синтаксис. В Yate все оказалось намного проще: файлы конфигурации имеют структуру INI-файлов, все четко разделено по секциям, к каждой опции идет комментарий. По умолчанию префикс для установки — /usr/local, поэтому переходим в папку /usr/local/etc/yate, в которой нам будут нужны следующие файлы:
- regfile.conf
- accfile.conf
- regexroute.conf
Далее по очереди:
Часть 2.1. Настройка regfile.conf.
Файл regfile.conf содержит информацию о пользователях, которым разрешено подключение. Состоит он из секции [general], в которой указаны общие настройки, а также из секций с именем пользователя. Для того, чтобы добавить нового пользователя, нам лишь нужно добавить следующие строки:
[username]
password=secret
Таким образом, если я хочу подключаться как пользователь с именем 100 и паролем secret, то файл должен иметь следующее содержание (комментарии здесь и далее опущены):
[general]
[100]
password=secret
Часть 2.2. Настройка accfile.conf.
В моем случае необходимо было настроить возможность исходящих вызовов через несколько провайдеров. Файл accfile.conf позволит настроить подключения к другим серверам. Добавляем необходимых нам провайдеров и получаем:
[sip1]
enabled=yes
protocol=sip
username=user1
password=secret1
registrar=sip1.server.net
[sip2]
enabled=yes
protocol=sip
username=user2
password=secret2
registrar=sip2.server.net
Часть 2.3. Настройка regexroute.conf.
Несмотря на то, что сервер уже вполне может работать, нам все-таки необходимо прописать маршруты для исходящих вызовов, а также (при необходимости) для входящих. Для тех, кто уже работал с регулярными выражениями, это будет достаточно просто. Структура regexroute.conf позволяет нам определить через какого провайдера следует осуществлять звонки, а также куда следует направлять входящие вызовы. Здесь мне требовалось следующее: если номер начинается с 00, то следует направить звонки через первого провайдера, если 01 — через второго. Входящие звонки все следует направить на номер 100. В итоге получилось следующее:
[priorities]
[$once]
[$init]
[extra]
[contexts]
[default]
; опции для проверки работоспособности
^99991001$=tone/dial
^99991002$=tone/busy
^99991003$=tone/ring
^99991004$=tone/specdial
^99991005$=tone/congestion
^99991006$=tone/outoforder
^99991007$=tone/milliwatt
^99991008$=tone/info
; набираем 00<номер телефона>, выходим через первого провайдера
^00\(.*\)$=sip/sip:\1;line=sip1
; набираем 01<номер телефона>, выходим через второго провайдера
^01\(.*\)$=sip/sip:\1;line=sip2
; получен вызов от первого провайдера, направляем вызов на внутренний номер
^sip1$=route/100
^sip2$=route/100
Часть 3. Запуск сервера.
Запуск сервера осуществляется простым вводом:
yate -d
Если нам хочется посмотреть весь debug-вывод, то можно просто запустить:
yate -vvvvvvvvvv
Все! Теперь можно регистрироваться как SIP-клиент и звонить :)
Часть 4. Итоги. Плюсы и минусы.
Таким образом, люди даже малознакомые с телефонией могут настроить собственный сервер. Жаль, лишь документации по серверу слишком мало.
Плюсы
- простая настройка
- низкое потребление ресурсов (при 4 клиентах использует лишь 5 мбайт RAM)
- способность обслуживать большое количество клиентов (по заверениям авторов, до 10000)
- функциональность
Минусы
- мало документации
- отсутствие поддержки SIP через TCP/TLS
- малофункциональный telnet-интерфейс
Несмотря на все минусы, авторов можно почти всегда найти на их канале в IRC. Также есть mailing list, в котором вы можете задать все интересующие вопросы. Плюс все-таки документация, пусть и неполная, но на сайте присутствует.
PS> моя первая статья, если есть замечания/предложения — с радостью выслушаю их
PPS> также если есть вопросы по Yate, постараюсь помочь чем смогу :)