Офисная телефония на Asterisk+FreePBX

Предыстроия

По неким политическим причинам передо мной встала задача по переводу телефонии нашего офиса с гибридной аналоговой АТС Panasonic KX-TDA200 на SIP. Упрощало задачу наличие в офисе СКС, а усложняло использование операторами панелей с кнопочками для быстрого переключения звонков.

Рассматривались варианты:
  • Проапгрейдить АТС до серии KX-TDE
  • Купить что-нибудь железное, например Cisco или Avaya
  • Поставить Asterisk

Будучи сторонником свободного ПО, я уговорил начальство принять третий вариант. Тем более, что у меня как раз освободился сервер, который можно было задействовать под эту задачу.

Закупки и подготовка

Для связи с городскими телефонными сетями была приобретена плата OpenVox DE130E. Телефоны были закуплены фирмы Grandstream.

На сервер я поставил:
  • Актуальную версию debian
  • dhcp3-server — для раздачи адресов и параметров телефонам
  • ntp — для предоставления телефонам актуального времени
  • tftp — для предоставления телефонам прошивок и конфигураций
  • mysql,apache,php — для FreePBX
  • build-essential — для сборки Asterisk

Сборка

Asterisk я решил брать не из пакета, а собрать из исходников, так как не было уверенности, что из пакета она заработает с платой OpenVox.

Драйвер DAHDI для OpenVox

Инструкция по сборке и настройке DAHDI драйвера выложена на сайте openvox (PDF). Никаких засад встречено не было. Железяка сразу же увидела поток.

Asterisk

Asterisk я взял версии 10.9.0 (да, они недавно сменили принцип нумерации версий). Скачал, распаковал, сказал ./configure; make menuconfig, совсем как в былые времена для ядра. Засада первая — для menuconfig нужны ncurses, newt или GTK. Причем, так как мы собираем из исходников, нужны -dev версии библиотек (это актуально и для всех остальных доставляемых в процессе пакетов).
menuconfig у asterisk понятный и удобный, если какой-то компонент не может собраться, то написано, что нужно добавить, чтобы сборка получилась. Так, например, для факса пришлось доставить libspandsp-dev. Не забываем после доустановки библиотек перезапускать ./configure. Если для сборки требуется скачать дополнительные файлы, они будут скачаны автоматически.

Для работы FreePBX необходимо, чтобы у Asterisk присутствовал manager interface. Этот модуль надо не забыть включить, и перед установкой FreePBX поставить вменяемый пароль и разрешения в файле /etc/asterisk/manager.conf.

Итак, все компоненты выбраны, можно запускать стандартные make; make install. Установка FreePBX потребует от нас уже запущенного asterisk'а, так что скажем еще и make samples.

Внимание! После этого при запуске вы получите абсолютно живой asterisk в конфигурации «для примера», которая не является образцом безопасности. Иными словами — перекройте файрвол.

FreePBX требует, чтобы Asterisk и Apache крутились от одного и того же пользователя, так что создаем юзера и группу asterisk, прописываем их в конфиг апачу. Пермишены на файлы FreePBX откорректирует самостоятельно.

FreePBX

На удивление, никаких граблей не появилось. Скачал, строго по инструкции создал базу, пользователя, прогнал скрипты, запустил. Можно идти на интерфейс настройки.

Настройка


Начальная настройка

На первом же экране интерфейса администрирования в области «FreePBX Notices» вывалилась куча сообщений о том, что в /etc/asterisk лежит множество конфигурационных файлов, которыми должен управлять сам FreePBX. Я удалил эти файлы (сохранил копии). При нажатии большой красной кнопки «Apply Config» FreePBX сгенерировал нужные файлы сам.

Выбор модулей FreePBX

Пошел в «Admin — Module Admin». Отметил репозитории Basic, Extended и на всякий случай Unsupported. Нажал на «Check Online» и получил возможность набрать себе модулей. Помимо установленных по умолчанию, я выбрал:
  • Call Recording — для записи разговоров
  • Conferences — для организации конференций с паролями и т.д.
  • Ring Groups — для групповой обработки звонков (секретари)
  • PBX End Point Manager — для создания конфигураций телефонов
  • Fax Configuration — для настройки факса


Подготовка настроек телефонов

Групповые настройки телефонов очень удобно делаются при помощи End Point Manager.

В Connectivity — End Point Configuration надо выбрать производителя и модели телефонов, которые у нас используются. Только для начала стоит кликнуть «Check for Updates», так как проект довольно живой и постоянно выпускает новые модели.

Потом в Connectivity — End Point Advanced Settings надо прописать путь к каталогу, откуда tftp раздает файлы. И вот теперь есть несколько вариантов:
  • Можно подключить все телефоны, дождаться загрузки и просканировать сеть из «Connectivity — End Point Device List»
  • Можно при вводе устройства заполнить раздел End Point Manager, указав MAC адрес и модель устройства
  • Можно добавлять устройства по одному

Я прописал по одному телефону каждой модели, отредактировал шаблоны настроек, а дальше при вводе каждого устройства указывал его MAC адрес и выбирал модель и шаблон. После этого End Point Manager сгенерировал правильные cfgMAC файлы и положил их в каталог для раздачи по tftp.

Настройка DHCP

Чтобы телефоны правильно подхватывали свои конфиги, надо сообщить им об этом. Вот кусочек из файла /etc/dhcp/dhcpd.conf:
subnet 192.168.xxx.0 netmask 255.255.255.0 {
  range 192.168.xxx.10 192.168.xxx.240;
  server-name "192.168.xxx.1";
  option domain-name "my.domain";
  option domain-name-servers 192.168.xxx.1;
  option domain-search "my.domain";
  option routers 192.168.xxx.1;
  option nntp-server 192.168.xxx.1;
  option tftp-server-name "192.168.xxx.1";
  next-server 192.168.xxx.1;
}

Обратите внимание на то, где есть кавычки, а где нет. 192.168.xxx.1 — адрес сервера, на котором крутится вся система.

Окончание настройки

Для настройки линий связи с внешним миром служит экран «Connectivity — Trunks». Там прописываются и ваши связи с SIP провайдерами, и, в моем случае, поток через плату OpenVox.
Чтобы расписать, как будут обрабатываться входящие звонки, настраивайте «Connectivity — Inbound Routes». У меня там для потока указано, на какие входящие номера куда отправлять звонок (в каком формате будет приходить DID номер уточняйте у оператора).
Чтобы расписать, как обрабатывать исходящие звонки, используйте «Connectivity — Outbound Routes». Здесь можно настроить, например, межгород через sipnet, или выбор оператора по набираемому префиксу.

Дополнительные вкусности

FreePBX автоматически генерирует все конфигурационные файлы, но что же делать, если хочется странного? К счастью, разработчики предусмотрели и такие желания. В каждом используемом контексте, макросе или подпрограмме, есть обязательное включение элемента имяэлемента-custom.
Помещать свои дополнительные фишки надо в файл /etc/asterisk/extensions_custom.conf. Я. например, добавил вот что:
; Talking clock for Russian
[sub-hr24format-custom]
exten => ru,1,Playback(at-tone-time-exactly)
exten => ru,n,SayUnixTime(${FutureTime},,kM)
exten => ru,n,Return()

; Directed FAX
[app-fax-custom]
exten => 667,1,Set(FAX_FOR_NUM=${CONNECTEDLINE(num)})
exten => 667,n,NoOp(Directed call transfer from ${CALLERID(all)} for ${FAX_FOR_NUM})
exten => 667,n,GoTo(ext-fax,${FAX_FOR_NUM},1)

С первым блоком все понятно, из коробки просто нет настройки для русского языка часов. А вот второй блок может оказаться интересным. По умолчанию системный факс находится на номере 666 (да, авторы FreePBX явно считают факсы злом). При соединении с этим номером факс принимается и отправляется на e-mail, указанный в системе как «системный получатель факса» (у меня это общая папка в Exchange, но туда кроме спама обычно ничего не попадает). А что делать, если факс в ручном режиме хочет принять наш главбух Иван Иванович? И светить его в общей папке он, разумеется, не хочет. У меня в настройках телефона Ивана Ивановича стоит:
Fax: Enabled
Fax Email: Ivan.Ivanov@my.domain

И теперь, если Иван Иванович переводит звонок на номер 667, то принятый факс будет отправлен на его личную почту. Не забудьте только поставить GhostScript, чтобы бедный Иван Иванович не мучился, пытаясь открыть tiff.

Выводы

  • FreePBX оказался очень удобным инструментом для настройки Asterisk. Рутинные задачи решаются просто, а для нестандартных проблем предусмотрена возможность ручного написания конфигов.
  • Проблем с платой OpenVox не оказалась абсолютно никаких. Взлетела моментально.
  • Телефоны Grandstream оказались, с одной стороны, удобными и легко настраиваемыми. С другой стороны качество сборки — просто ужас. Сдал по гарантии больше 10% аппаратов — у всех не работала трубка, у некоторых динамик, у других микрофон. Отдельно не рекомендую их DECT телефон DP715.


Планы на будущее

Поставить hylafax и отправлять факсы, а не только принимать.
Поставить модуль Phonebook, сделать общеофисную телефонную книгу и показывать не только номер, но и имя звонящего при входящих звонках.
Поставить TAPI драйвер и дать людям возможность звонить по контактам прямо из Outlook'а.

Многие очевидные для меня подробности я в этой статье опустил, с удовольствием отвечу на вопросы.

Похожие публикации

Средняя зарплата в IT

113 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 5 444 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 26

    +1
    1. Все что вы описали делается за час максимум. Звучит так «качаем последний Elastix, ставим, автоматически определяем плату, все работает! ». Ваш вариант можно пройти как квест для общего развития, чтобы знать как это все работает.
    2. Какие именно грандстримы были бракованные? Ставим их уже год, ни одного бракованного не было. Глюки с софтом есть, но лечатся и если знаешь их, то жить не мешают.
    3. Чем не угодили D715? Тоже уже штук 5 поставил… Как декты не работают без fork режима, но пока не напрягает. Хотя есть в планах победить.
      +1
      Или тот же AsteriskNOW, который качается дольше, чем ставится, обновляется и настраивается вебмордой, в консоли требуется одна команда yum update для обновления пакетов, пакеты и компоненты Asterisk'а доставляются через вебморду.
        0
        AsteriskNow ставится, если я не ошибаюсь, на железо. Меня это не устроило.
          0
          А вы куда ставили? Железо или виртуалка кстати разницы нет.
            0
            А я ставил на установленный любимый дистрибутив. Который планирую использовать, в том числе, и для других целей.
            А как у AsteriskNow в виртуалке дела с OpenVox и прочим железом?
            0
            Они все в теории ставятся на виртуалки, если не планируется аппаратных плат. и прекрасно работают при правильном приготовлении
          +1
          0. Disclaimer. Я не работаю установщиком астерисков или специалистом по ip телефонии.
          1. Зависит от количества устанавливаемых телефонов, наверное. И, в придачу, я до этого ставил Астериск только из пакета и настаивал только руками, а тут решил попробовать с интерфейса, чтобы настраивать мог неквалифицированный человек. Ну и удобный автопровизионинг для меня был внове.
          2. Из 35 аппаратов (2110, 1405, 2124) в замену поехали четыре 1405 и один 2110. Диагноз у всех, как я и написал, трубка. Насчет знания глюков — ресурсик подскажите, не сидите на тайных знаниях. Я пока видел infinite reboot у 2110 при одновременном обновлении прошивки и провизионинге.
          3. D715 (взял 2 штуки и трубок к ним) постоянно подвисают на пару секунд. Астериск паникует, ставит в unreachable. Таймауты я поднял, но если база подвисает при разговоре, то все плохо. Прошивка последняя с сайта. Ну и дальнобойность декта никакая, по сравнению с любым бытовым дект-фоном.
            +1
            Соглашусь, качество Grandstream-ов резко съехало вниз за последнее время.

            У нас буквально с одной из партий телефонов можно было наблюдать заметный даунгрейд качества, причем всего: пластик стал более тонким и более вонючим, проблема с трубками, проблема с проводами для трубок, те трубки что работают — простите, пердят. Возвращаемся обратно на Cisco.
          0
          вот вопрос у меня возник, если без проблем купить железку (причем не из «последних»), зачем софтовое решение?
            0
            Спасибо, железка у меня уже была. У старого Панасоника была плата H323, которую я успешно связал с астериском и подключил к сип провайдеру. У железок мне не нравится недостаточная гибкость при решении нестандартных задач. Чем мне и понравился FreePBX — если хочется странного, можно ручками написать всегда.
            Ну и Аваевское жлобство «купите лицензии на каждый сип аппарат, если он не Авая» вызвало острое нежелание иметь дело с продукцией этой фирмы.
            +2
            Asterisk очень часто используют для такого рода апгрейдов аналоговых АТС.
            Описанный метод лучше подходит для станций, на которых уже много аналоговых аппаратов. Для других случаев бывает целесообразнее заменить станцию на недорогие многопортовые TDMoE шлюзы.

            Я не так давно написал подробную статью с описанием всех преимуществ и недостатков разных вариантов модернизации аналоговых АТС с Asterisk, кому интересно — велкам.
              0
              Да я, как раз, наоборот, все телефоны поменял.
                0
                Ну это — самый классный вариант. Самый дорогой, но и самый классный.
                К сожалению, не во всех компаниях готовы на такие радикальные меры. Вы — молодцы!
                0
                Не подскажете какие шлюзы вы использовали в статьей (те которые по 30 портов).
                Так как не сильного хорошо знаю это направление, не могу выбрать наиболее оптимальные для себя.
                  0
                  Речь была о шлюзах Parabel Asteroid.

                  Про них — важное дополнение: они работают по TDMoE, а не SIP. Это значит, что они для Asterisk-а выглядят также, как и карта с аналоговыми портами от Digium, т.е. на уровне DAHDI.

                  Чем это хорошо — работа с ними несколько удобнее, шлюзы безопаснее (т.к. нет у них даже IP-адреса), шлюзы минимальны по цене за порт, поддаются тонкому тюнингу на уровне DAHDI (в т.ч. эхоподавлению). Чем плохо — работают только в том-же сегменте сети, что и сервер, не дружат с виртуализацией, несколько сложнее в настройке по сравнению с SIP-шлюзами в первый раз работы с ними (потом — наоборот легче).

                  Про настройку этих шлюзов я тоже в свое время не поленился написать инструкцию.
                    0
                    А если SIP шлюзы?
                      0
                      Тогда — Eltex, либо Grandstream.
                      У Eltex в комплекте отсутствует блок питания (48В 5А), это нужно учесть. Grandstream тоже неплох, но я бы выбрал Eltex.
                      Как видите, эти шлюзы уже дороже, и несколько сложнее в настройке — сначала конфигается номер на Астериске, потом он же конфигается на шлюзе. Двойная работа.
                        0
                        А еще вопрос.
                        В основном все эти аналоговые телефоны будут в клиентских номерах.
                        А от клиентских номеров требуется билинг.
                        Можно ли его спокойно организовать при использовании SIP шлюзов?
                          0
                          Для Asterisk нет никакой разницы — будь то IP-телефон, аналоговый шлюз SIP или TDMoE. Биллинг работает на основе добавочного номера абонента или поля accountcode,
                            0
                            Спасибо за ответы.
                      0
                      Ну насчет «того же сегмента сети» — в сервер всегда можно вторую сетевушку вставить.
                      А импульсный набор эти Асетроиды понимают? И как у них с факсами, лучше чем SIP или хуже?
                        0
                        В общем-то да.

                        Импульсный понимают. С факсами — получше чем в SIP в некотором плане. Особенно, если до этого факс прибежал тоже в TDM или в аналоге.
                          0
                          Нет, у меня смысл такой — подключить железный факс-аппарат к Астериску. Внешние линии у меня через E1 поток. Если я факс цепляю через SIP-шлюз, то никакой вариант кодеков меня не спасает — половина факсов не проходит. Вот, подумал, если через такой шлюз подключить, не лучше ли будет, за счет исключения лишнего преобразования аналог-цифра.
                  0
                  Я вот убеждаю начальство отказаться от услуг провайдерского древнего бизнесфора эриксона и поднять астерикс + sip+пару gsm usb модемов. А то львиная доля звонков идет на мобильное направление.
                  В итоге получится около 40 офисных номеров + 100 гостевых номеров.
                  Вот только самый дорогой момент в бюджете это шлюзы на аналоговые телефоны. Ибо прокладывать скс в старые номера нет смысла.
                    0
                    Parabel с шумодавом обойдется в 1000р за порт примерно. Дорого?
                    0
                    «FreePBX требует, чтобы Asterisk и Apache»
                    Разруливается по правам на каталоги.

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

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