Yate — SIP-телефония дома или в офисе за 5 минут!

    Все вокруг обсуждают Asterisk и его форки, для крупных компаний предлагают использовать Cisco или Avaya, но почему-то практически нигде нет информации о Yate — простом и удобном, но, в то же время, очень функциональном решении для IP-телефонии.

    В этой статье я хотел бы кратко рассказать о сборке Yate под Linux, а также его первоначальной настройке для работы с SIP.

    Yate Logo
    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, постараюсь помочь чем смогу :)
    Поделиться публикацией
    Комментарии 44
      +3
      Спасибо за обзор. Заглянул по сайт и с удовольствием обнаружил, что разработка не остановилась на 2.0.
      Из плюсов еще наиболее стабильная, на мой взгляд, реализация H.323, что позволяет использовать в кач-ве внешнего конвертера H.323SIP.
        +1
        Да, есть такое :) просто мне h323 в принципе не нужен, поэтому я особо в подробности не вникал.

        Кстати, у них есть еще самописный веб-интерфейс: www.freesentral.com/ — но, к сожалению, возможности и желания проверить не было :)
          0
          У всех бесплатных проектов одна реализация h.323 — т.н. OpenH323
            –2
            >yate -vvvvvvvvvv
            ну ОЧЕНЬ кое-что напоминает, не находите ((:
            >низкое потребление ресурсов (при 4 клиентах…
            простите, вы RTP в обе стороны гнали или о чем именно речь?

            читал на voip-inof что диалпланы на Yate еще более замороченые, чем у *
              0
              Если честно, то напоминает лишь tcpdump :) речь о том, что при 4 одновременно подключенных клиентах, которые общаются время от времени, не используется более 5 мбайт оперативной памяти (впрочем, процессор тоже ничуть не нагружается)

              насчет диалпланов сложно сказать, дело привычки, может быть?
                0
                asterisk -vvvvvv — консолька Астериск. Юзайте ngrep вместо tcpdump, по функционалу и возможностям оно ширше. А насчет диалпланов — так это не только мое личное мне (:
                  0
                  Насчет диалпланов было изначально понятно, что мнение не ваше (читал на ...) ;)
              0
              У Asterisk как минимум несколько реализаций канала h323.
                0
                И три из четырёх базируются на OpenH323. :)
            +2
            а как оно по сравнению с freeswitch?
            за статью спасибо!
              +1
              Честно говоря, не подскажу, не было опыта работы с FreeSWITCH :)
                0
                Про фрисвитч на хабре вот писали: habrahabr.ru/tag/freeswitch/ — может, там можно почерпнуть нужную информацию.
                +1
                Подкиньте человеку кармы, пусть в коллективный блог перенесет.
                  +1
                  подкинул кармы, переносите в профильный блог.
                    0
                    Спасибо, добрый человек! :)
                      0
                      и форматирование подправьте, тег h4 вложен друг в друга, от чего в моем браузере всё после четвертой части большими буковками ;)
                        0
                        Поправил, спасибо :)
                      0
                      я тоже сегодня занимался Yate, с нулевыми конфигами её настраивать проще, я делал отсюда — yate.null.ro/pmwiki/index.php?n=PmWiki.IntroductionExample1

                      у меня есть несколько вопросов:
                      1. при добавлении пользователя приходится рестартовать весь yate, можно сделать как нибудь это без рестарта?
                      2. если первое реализуемо, то хотелось бы вынести базу юзеров в мускул, но я так и не нашел как это сделать.
                        0
                        1. Можно, есть rmanager (через telnet который), ему надо сказать reload :)
                        2. Надо разработчиков попинать на тему структуры базы, я тоже не нашел ее.
                        –5
                        f
                          –3
                          offtop: простите за кривой коммент.

                          по теме -синтаксис конфигов очень похож на asterisk. не вижу никакого смысла рассматривать как полноценную замену, ибо поддержка оборудования никакая.
                            0
                            Какое оборудование имеется ввиду? Null Team (разработчики Yate) сами предлагают оборудование: www.null.ro/hardware.html
                              –1
                              небольшой да выбор по сравнению с этим siper.ru/index.php?action=digimap? и потрудитесь зайти на www.digium.com/en/. откроете для себя много нового, например, что компания Компания Digium Inc. — разработчик платформы IP-телефонии Asterisk.
                              +1
                              Еще один аргумент всегда брать Сангому. Помимо того, что у драйверов к этим платам больше возможностей, всегда можно отвязаться от Астериска и перейти на альтурнативу типа Yate.
                              0
                              То есть если бы синтаксис был не как у астериска, то имело бы?
                                –1
                                дочитайте мой коммент до конца
                                  0
                                  Вы как бы его так написали, что смысл весьма смазался — надо после точки с большой буквы писать, а то подсознательно интерпретируется как запятая. И тем не менее — у вас как то узко с темой, вот у FreeSWITCH конфиги не как у астериска, это все, что можно о нем сказать?
                                    –1
                                    вы все про конфиги? ))(и все же дочитайте коммент до конца. точку считать началом предложения).

                                    если вы считаете, что организация нескольких крупных кол центров — это у меня узко с темой, то спасибо что просветили. может для меня отказаться от астериск — вопрос религии. может быть…

                                    freeswitch — ну так и скажите что нибудь — а мы послушаем.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                  +1
                                  Yate в некоторых моментах стабильнее Asterisk. Многие используют его в связке с Asterisk как softswitch
                                    0
                                    _некоторых_?
                                0
                                Есть 2 вопроса:
                                1) я могу указать а) глобально(для всех пользователей) б) локально (для конкретных пользователей) настройки кодеков как например в том же * это можно сделать.

                                2) как ведет себя эта ip-pbx если клиенты за натом?
                                  0
                                  1) а) глобально можно, в файле ysipchan.conf
                                  б) не смотрел, не знаю :(

                                  2); nat: bool: Enable automatic NAT support
                                  ;nat=enable
                                  в том же файле, но как работает тоже не подскажу — пользоваться не приходилось :)
                                  0
                                  хабраэффект кстати )
                                    0
                                    > yate -vvvvvvvvvv
                                    Простите это клавиша запала или действительно столько букв надо набрать?
                                      +1
                                      там debug level от 0 до 10 :) если неинтересно смотреть полностью все логи, то можно меньше «v» сделать :)
                                      0
                                      YATE хорош и архитектура красивая. Он, кстати, был единственным софтсвичом в моих опытах, который обеспечил нормальную работу native bridging (т.е. когда голосовой трафик идёт напрямую между абонентами, мимо сервера) для клиентов за NAT. Это, правда, достигается некоторыми хаками, что не всем нравится. Что не понравилось — как вы верно написали, документации мало, причём не просто мало — а ОЧЕНЬ мало; написание IVR очень сложно (нужно хорошо знать внутреннюю архитектуру); простые вещи, как call-limit, реализуются странными способами (запись и чтение из базы).
                                      Но в целом, вещь хорошая. А если вы программист — так и вообще идеальная.
                                        0
                                        Engadget?
                                          +2
                                          Участвовал в довольно долгом допиливании YaTE под нужды компании.

                                          Общее впечатление после (в сравнении с asterisk):
                                          — Очень удобная message-based архитектура, добавлять новые модули / изменять поведение старых, не меняя их код, просто и практично.
                                          — Читабельный и самоописывающий код основного движка (что компенсирует нехватку доков), и нефиговое количество эзотерики в коде модулей (что заставляет страдать о нехватке доков)
                                          — Стабильность и надёжность, в целом, уступают asterisk (довольно много времени пришлось потратить, чтобы добиться постоянного аптайма на большой загрузке, а от ошибок valgrind-drd окончательно избавиться так и не удалось)
                                          — канал #yate на irc.freenode.net — отличный источник помощи, если что-то непонятно / сломалось, авторы проекта там постоянно бывают и отвечают вполне оперативно.

                                          Что забавно, некоторые вещи делаются _очень просто_ добавлением модулей / правкой кода — а вот решения на основе кофигурации я бы сходу и не предложил. ( как выше упоминавшийся вопрос про базу юзеров ).
                                            0
                                            Отсутствие поддержки SIP через TCP/TLS ставит крест на среднем бизнесе. Поиграться если только.
                                              0
                                              Оно уже в разработке, в 2.2 скорее всего будет :) кстати, в Asterisk SIP over TCP помечен как экспериментальная функция.
                                                0
                                                т.е. нужно договаривать с провайдером по поводу открытия портов?!
                                                –2
                                                м сейчас ворвется ваш спаситель! Используйте Druid OS. Это самый адекватный форку астериска. Есть бесплатная опенсорсная версия. Очень удобный вэб интерфейс.

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое