вторник, 14 апреля 2015 г.

Настройка GSM-шлюза GoIP4 в Elastix

Данный мануал содержит информацию о подключении GSM-шлюза на 4 SIM-карты к IP-АТС Elastix 2.5 в качестве транка для входящих/исходящих звонков.


Итак, имеем замечательный китайский GSM-шлюз GoIP4. За пару лет работы данный девайс показал себя с наилучшей стороны в плане стабильности работы (возможно, что это из-за наличия одной "волшебной" функции, о ней чуть ниже). Что называется "поставил и забыл". На моём конкретном экземпляре установлена и работает прошивка версии GS-4.01-76. Стоит сразу заметить, что на старых версиях прошивки некоторые пункты меню сгруппированы и называются несколько иначе, но их суть от этого не меняется.

Первый этап. Настройка GoIP4.

Идём прямо по пунктам меню.
В первую очередь идём в Status - GSM и убеждаемся, что GSM-шлюз видит установленные SIM-карты и они зарегистрировались в сети оператора.
После этого приступаем к настройке и переходим в раздел Configurations.
Настройки сетевых интерфейсов я здесь описывать не буду, т.к. это дело сугубо индивидуальное. Перейду сразу собственно к VoIP.

1. Basic VoIP

Config mode: Config by Line (будем делать для каждой SIM-карты свой транк на Elastix)
Настройки для первой SIM-карты откроются автоматически (Line 1), для выбора других SIM-карт просто переставляем переключатель на Line2, Line3, Line4.
Предположим, что у нас есть SIM-карта с номером (916) 123-45-67 (вместо этого нужно подставить свой номер, хотя это всё условно - заработает и так, просто будет путаница). Тогда параметры будут такие:
Phone number: 9161234567
Display name: 9161234567
Authentication ID: 9161234567
Password: VeRyStRoNgPassW0rD
Routing prefix: 10
Sip proxy: <IP-адрес Elastix>
Sip registrar: <IP-адрес Elastix>


Повторяем настройки для каждой установленной SIM-карты. При этом соответствующим образом меняем логины, пароли и Routing prefix.
Routing prefix - это префикс, по которому GoIP будет определять через какую SIM-карту совершать исходящий вызов. Этот префикс подставляется к набранному номеру при выходе через транк в Elastix и обрезается GoIP при отправке звонка в GSM. В моём примере префикс для первой SIM-карты 10, для второй 11 и так далее. В общем случае он может быть любым.

2. Advance VoIP

Здесь меняем только один параметр:
DTMF Signaling: Inband
Он означает, что любые DTMF-сигналы будут передаваться в RTP-потоке вместе во всем остальным голосовым трафиком (полная имитация ТФОП). DTMF-сигналы используются как правило при донаборе, вводе ПИН-кодов и т.д. и на первоначальное установление соединения никак не влияют (так как при этом вся информация передаётся в заголовках SIP).


Если будет использоваться кодек отличный от G.711 (alaw), то установка Inband не рекомендуется, т.к. узкая полоса пропускания кодеков с высокой степенью сжания может привести к тому, что Inband DTMF будет неверно распознан на принимающей стороне. В этом случае параметр DTMF Signaling следует установить в Outband и указать доп. параметры, разъяснение которых выходит за рамки моего мануала.

3. Media

Открываем Audio Codec Preference и отключаем все кодеки кроме alaw. Если есть необходимость в использовании других кодеков включаем и их, но не забываем о DTMF (см. пункт 2)


4. Call Out

Здесь указываем один параметр:
Dial Plan: 10:-10
Этим мы заставляем обрезать GoIP тот самый префикс который мы указали в разделе Basic VoIP (см. пункт 1) перед отправкой звонка в GSM-сеть. Этот параметр нужно настроить для каждой SIM-карты (CH1, CH2, CH3, CH4).


5. Call In

В этой группе параметров описываются правила обработки входящих звонков (поступивших из GSM-сети на установленные SIM-карты).
CID Forward Mode: Use CID as SIP Caller ID
Этот параметр заставит в качестве CallerID на пользовательских терминалах высвечивать реальный номер с которого пришёл звонок.
Forwarding to VoIP Number: 05999
Здесь указываем номер входящего маршрута (Inbound Route) на Elastix. В моём случае номер Inbound route на Elastix будет 05999.
Эти настройки делаются для каждой SIM-карты (CH1, CH2, CH3, CH4)


Теперь о той самой "волшебной" функции о которой я упомянул в самом начале.
В разделе Preferences есть опция Auto Reboot. По умолчанию она включена и настроена на 4:00. Она в 4 утра ежедневно ребутит шлюз. Отключать не пробовал, но полагаю, что ежедневная перезагрузка может от чего-то и спасать. Китай он и есть Китай :)
 
На этом настройка GoIP4 закончена и можно приступать к настройке Elastix.

Второй этап. Настройка Elastix.

Для совершения исходящих звонков через GSM-шлюз, на Elastix нужно создать транк и исходящий маршрут.

1. Создаём транк для первой SIM-карты.

Идём в меню Trunks - Добавить SIP-транк. 
В разделе Основные настройки указываем Название транка: 9161234567
В разделе Правила для манипуляции набранными номерами указываем Префикс выхода на линию: 10.
Этот префикс будет прицепляться в начале набранного номера перед отправкой звонка на GoIP4. Это тот префикс, который мы указали ранее в настройках GSM-шлюза.
В разделе Исходящие настройки указываем следующие параметры:
Название транка: 9161234567
Опции для Peer:
username=9161234567
host=dynamic
secret=VeRyStRoNgPassW0rD
type=friend
port=5060
nat=no
qualify=yes
canreinvite=no
insecure=very
dtmfmode=auto
disallow=all
allow=alaw
Сохраняем настройки и применяем изменения. После этого GoIP4 зарегистрируется на Elastix как транк.

Для каждой установленной SIM-карты нужно создать свой транк.

2. Создаём исходящий маршрут.

Для совершения звонков через созданный транк, на Elastix требуется создать маршрут.
Идём в меню Outbound routes - Добавить маршрут.
Название маршрута: Mobile (например, будем через созданный транк звонить только на мобильные телефоны)
Шаблоны номеров, используемые на этом маршруте: 89XXXXXXXXX
В разделе Последовательность транков для совпавших маршрутов перечисляем транки для всех SIM-карт на GoIP в нужной последовательности (по приоритету).


Сохраняем настройки и применяем изменения. После этого звонки на номера, попадающие под правило созданного исходящего маршрута будут попадать на GoIP4.

3. Создаём входящий маршрут.

В процессе настройки GoIP4 в разделе Call In в качестве входящего номера на Elastix был указан 05999. Теперь под этим номером нужно создать входящий маршрут.
Идём в меню Inbound Routes - Добавить входящий маршрут.
Описание: Вводим любое понятное описание этого маршрута
Номер DID: 05999
В разделе Установить направление указываем любое внутреннее назначение для приёма звонка. Это может быть IVR, очередь, внутренний номер и т.п.

В итоге, после проведения всех вышеописанных настроек мы имеем возможность совершать звонки через GSM-шлюз и принимать звонки, поступившие на установленные в него SIM-карты.

21 комментарий:

  1. Отличная статья. Использовал ее для своей конфигурации. Большое спасибо!

    ОтветитьУдалить
    Ответы
    1. Благодарю за отзыв! Рад, что мой опыт был полезен.

      Удалить
  2. Доброго времени суток! Имеются два шлюза GoIP8 и один шлюз GoIP 16 и сервер Elastix. Входящую маршрутизацию настроил по вашей статье, в Inboud Routes создав номера, указав направления на определенные внутренние номера. За счет этого смог подключить записную книгу. Но есть проблема по входящей маршрутизации. Транки при входящих звонках выбираются в хоатичном порядке. И как следствие если, кто-то пытается позвонить через свою линию, а при этом происходит входящий звонит и случается коллизия, что необходимый транк занят входящим звонком, то человек получает в ответ в трубке сообщение о том, что все линии заняты. Можно ли с Вами как-то связаться по email для консультации? Или сталкивались с такой проблемой и знаете, где и что можно подправить

    ОтветитьУдалить
    Ответы
    1. Здравствуйте! Если я правильно понял, у Вас каждая из сим-карт привязана к конкретному внутреннему номеру (при направлении звонка GSM->SIP) и каждый из внутренних номеров должен совершать исходящие звонки через свою сим-карту (направление звонка SIP->GSM).
      Если нужно чтобы каждый внутренний номер выходил только через свой транк, то необходимо в Elastix для каждого внутреннего номера создать свой Outbound Route, где для каждого шаблона (match pattern) Вы должны вписать конкретный внутренний номер (которому можно выходить через эту sim-карту) в поле CallerID и далее указать соответствующий этому внутреннему номеру транк (sim-карту) для совершения исходящего звонка.

      Если не угадал, пишите на ch_pavel [собака] hotmail.com

      Удалить
  3. Здравствуйте, большое спасибо за статью. По указанной выше настройке все работает.
    Подскажите, если GOIP стоит в другой локальной сети, какие настройки транка будут

    ОтветитьУдалить
  4. Разобрался необходимо в эластиксе в sip.conf прописать еще одну локальную сеть

    ОтветитьУдалить
  5. Добрый день!
    Использовал Вашу инструкцию по настройке, но шлюз почему-то не регистрируется на Elastix (в меня Status - Summary в столбце VoIP на всех линиях светится N).

    Логины и пароли естественно перепроверил и перевбил методом copy-paste - без результата.
    Не подскажете куда смотреть?

    ОтветитьУдалить
    Ответы
    1. Здравствуйте! GoIP в той же сети, что и Elastix или между ними есть NAT и/или маршрутизатор?
      Посмотрите консоль астериска. Что туда выводится при попытках регистрации?

      Удалить
    2. Все в одной сети. Маршрутизаторов нет.
      У меня Elastix, как там увидеть консоль?

      Удалить
  6. Все настроил по аналогии, но есть проблема с входящими вызовами. Они поступают не на те транки. То есть звонок идет, например, на первую симку (номер транка 2131), а в эластиксе он проходит на транк четвертой (номер транка 2134).
    -- Executing [2131@from-trunk:1] SIPAddHeader("SIP/2134-00002571", "X-Channel: 2131") in new stack
    В чем причина?

    ОтветитьУдалить
    Ответы
    1. Скорее всего, ваш случай это особенность астериск. Вот здесь это хорошо описано http://igorg.ru/2012/02/22/sip-trank-neskolko-uchyotok/

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. Решал на Elastix
      Добавить в Trunk name/PEER Details

      callbackextension=trunk name

      Удалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить
  8. Здравствуйте, не могли бы написать подобную инструкцию, но только для связки шлюза с чистым астериском?
    Хотя на самом деле быть это излишне, просто у меня не как формируется понимание, разве нельзя все симки при входящих звонках натравить на один extension?
    И обязательно ли использование префиксов и как их использовать в extensions.conf?

    ОтветитьУдалить
    Ответы
    1. Здравствуйте! В разделе Call In в GoIP есть параметр Forwarding to Voip Number. Просто укажите там один и тот же номер для всех SIM-карт и тогда входящий звонок на любую из них будет поступать на этот номер (в контексте этого мануала - DID в Inbound Route).
      Как подключить GoIP к чистом астериск я постараюсь написать при наличии свободного времени.

      Удалить
  9. Спасибо! Очень просто все и сразу завелось. Причем недели две бился по другим примерам и как говорят, курил мануалы :)
    Конечно есть вопрос: многоканальность. Как лучше на Ваш взгляд? Силами шлюза или установить переадресацию в случае занятости на самих симках?

    ОтветитьУдалить
    Ответы
    1. Я думаю, что проще на сим-картах установить переадресацию. Хотя, полагаю, что если это сделать при помощи шлюза, то всё равно это будет сделано силами оператора, т.к. по сути когда мы устанавливаем переадресацию на любом устройстве, на коммутатор оператора отправляется некая инструкция и эту переадресацию видно потом в личном кабинете. Но конкретно с GoIP я это не проверял. Только на телефонах так делал.

      Удалить
  10. Привет люди добрые ...
    Помогите пожалуйста ...купил Гоип 4 из USA а на нем стоит странная прошивка не харатерная для Goip 4 и ни как немогу прошивать

    ОтветитьУдалить
  11. Будьте добры, еще вопрос. По Forwarding to VoIP Number: 05999
    Это какой то внутр Ваш номер или это любой придуманный номер для входящей маршрутизации?

    ОтветитьУдалить
  12. Не могу решить одну проблему: при исходящем звонке, если 1-я линия в очереди занята, через вторую и следующие не проходит. Сбрасывает.
    Вот лог:
    == Using SIP RTP TOS bits 184
    == Using SIP RTP CoS mark 5
    -- Called SIP/goip2/*289998887766
    -- Got SIP response 603 "Decline" back from 192.168.0.123:5060
    -- SIP/goip2-000003cc is busy
    == Everyone is busy/congested at this time (1:1/0/0)
    -- Executing [s@macro-dialout-trunk:23] NoOp("SIP/209-000003cb", "Dial failed for some reason with DIALSTATUS = BUSY and HANGUPCAUSE = 21") in new stack
    -- Executing [s@macro-dialout-trunk:24] GotoIf("SIP/209-000003cb", "0?continue,1:s-BUSY,1") in new stack
    -- Goto (macro-dialout-trunk,s-BUSY,1)
    -- Executing [s-BUSY@macro-dialout-trunk:1] NoOp("SIP/209-000003cb", "Dial failed due to trunk reporting BUSY - giving up") in new stack
    -- Executing [s-BUSY@macro-dialout-trunk:2] PlayTones("SIP/209-000003cb", "busy") in new stack
    -- Executing [s-BUSY@macro-dialout-trunk:3] Busy("SIP/209-000003cb", "20") in new stack
    == Spawn extension (macro-dialout-trunk, s-BUSY, 3) exited non-zero on 'SIP/209-000003cb' in macro 'dialout-trunk'
    == Spawn extension (from-internal, 89998887766, 5) exited non-zero on 'SIP/209-000003cb'
    -- Executing [h@from-internal:1] Hangup("SIP/209-000003cb", "") in new stack
    == Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/209-000003cb'
    == Extension Changed 209[ext-local] new state Idle for Notify User 0xbb37b0 (queued)

    ОтветитьУдалить