Настройка GSM-шлюза Dinstar DWG2000-16GSM

Итак, Dinstar DWG2000-16GSM:

Солидная такая 1U-железка

В комплект поставки входит:

  • Железко — 1 шт
  • Шнур питания — 1 шт
  • Патч-корд — 1 шт
  • Антеннки 6дБ — 16 шт

На морде устройства располагаются:

  • 2 отсека под блоки SIM-карт (SIM-banks) — у меня в каждом отсеке стоит симбанк на 8 карточек.
  • Отсек под панель с интерфейсными портами (у меня это LAN и CONSOLE-порты, есть варианты с Е1 портом)
  • Антеннки — небольшие 6дБ с магнитиком на ножке для облегчения крепления на металлическом корпусе девайса.

Приступим к настройке »

Вставляем сим-карты. Для этого откручиваем 2 винтика и достаем сим-банк. Я поставил в 1й банк 8 карт МТС, во второй-8 карт Киевстара. На всех симках предварительно отключена вторая линия и установлена переадресация по «занято» на следующую карту стека.Вставляем банки на место, фиксируем винтами, подключаем питание и патч-корд к порту LAN, и заходим по адресу 192.168.11.1

Dinstar 1

В примере по 3 симки, т.к. на момент создания скриншотов остальные использовались для создания предыдущей статьи.

Сходу меняем пароли админа и настройки сети.

Dinstar 2Dinstar 3

Создаем группы портов для облегчения последующей маршрутизации

Dinstar 4

Разделяем на 2 группы соответственно вставленным симкам.

Dinstar 5

Настроим основные параметры SIP (System Configuration => Service Parameter)

 Dinstar 6 Dinstar 7

Я ратую за безопасность, поэтому неавторизованные звонки не разрешаю.

Далее, настроим соединение с SIp-сервером(System Configuration => SIP Parameter): Dinstar 8 Dinstar 9

Настроим параметры авторизации портов. Можно настраивать, чтобы каждый порт авторизовался на сервере как отдельный пир, я сделал 1 пиром (маршрутизация на сервере будет). Используем вкладку System Configuration => Port Parameter

Dinstar 10

Обязательно указываем To VOIP hotline — это экстеншен на сервере, в который попадет звонок.

В sip.conf сервера указываю следующее:

[vbb-trunk-gsm]
secret=ххххххх
context=incoming-from-gsm
type=friend
username=vbb-trunk-gsm
insecure=invite
canreinvite=no
dtmfmode=rfc2833
host=dynamic
permit=178.150.ххх.ххх/255.255.255.255
port=5060
disallow=all
allow=alaw
allow=ulaw
qualify=yes

ну и экстеншен:

[incoming-from-gsm]
exten => _gsm.,1,Goto(outgoing-vbb-trunk-callcentre,380577201010,1)
exten => _gsm.,2,HangUp[outgoing-to-gsm]exten => _3809[56789]XXXXXXX,1,Dial(SIP/${EXTEN:2}@vbb-trunk-gsm,60)
exten => _3809[59]XXXXXXX,2,HangUp
exten => _3806[67]XXXXXXX,1,Dial(SIP/${EXTEN:2}@vbb-trunk-gsm,60)
exten => _38066XXXXXXX,2,HangUp
exten => _38050XXXXXXX,1,Dial(SIP/${EXTEN:2}@vbb-trunk-gsm,60)
exten => _38050XXXXXXX,2,HangUp
exten => _XXX,1,Dial(SIP/${EXTEN}@vbb-trunk-gsm,60)

применяем — пир зарегистрировался на сервере без проблем.

Теперь приступим к настройке маршрутизации. Тут все значительно проще и нагляднее, чем в GoIP-е:

Настроим входящие:

Routing Configuration => Tel->IP routing

Dinstar 11С группы портов №1 с любым префиксом отпуливать на сип-сервер.

Аналогично — для второй группы портов.

Dinstar 12Настроим исходящие:

Routing Configuration => IP->Tel routing

Dinstar 13Все звонки с сип-сервера с префиксом 066 выпускаем через портгруппу МТС

Аналогично для остальных направлений МТС. Можно было вообще сделать 1 хитрое правило вида (066|050|095|099)xxxxxxx, но я решил сделать отдельно — чуть больше действий, зато нагляднее и проще в последующем управлении.

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

Я дополнительно прописал номера сервисных служб, чтобы иметь возможность дозвониться на них при необходимости.

Dinstar 14Также создал дефолтное направление, через все порты — на всякий случай, почему это нормально-увидите чуть ниже.

Теперь добавим разрешения для вызовов внутрьнаружу

Внутрь: Operation => Tel->IP operation

Dinstar 15Разрешаем любые звонки с портгруппы МТС. С Киевстар аналогично.

Dinstar 16

Наружу: Operation =>IP-> Tel operation

Dinstar 17Указываем префикс и разрешающее действие

Dinstar 18Я создал разрешающие правила для МТС и Киевстар, а также запрещающие-для всех остальных.

Работает, как оказалось, по принципу Iptables, единственное замечание — порядок действий (Index) имеет значение (что в общем-то достаточно логично).

Все, в принципе после этого шлюз готов к работе.

Впечатление от железки-сугубо положительное — все достаточно просто, интерфейс интуитивно понятен. Есть множество полезных штучек, как-то:

CDR:

Clipboard10BCCH (показывает данные о БС, с которыми работают симки):

Clipboard13

Отправкапросмотрудаление SMS

Работает отправка и прием USSD (не все, увы, переадресации и вторую линию отключал все равно через телефон, но счет проверитьномер узнать можно)

Плюс, интеллектуальная система распределения звонков — звонок пойдет через первый свободный канал.

Аппарат, при стоимости в 15 000 грн (для сравнения, GoIP стоит 12 000) однозначно оправдывает себя как по надежности, так и по функционалу.

 

З.Ы. На написание этой инструкции я потратил больше времени, чем на настройку самого аппарата.

Comments

  1. Плюс, интеллектуальная система распределения звонков — звонок пойдет через первый свободный канал.

    Добрый день, подскажите, а есть ли возможность подключиться не как один пир и не как каждый порт отдельно, а как два пира mts-trunk-gsm и ks-trunk-gsm? Цель — вести счетчики активных каналов на каждом транке и запрещать исходящий звонок если счетчик достигает числа симок в транке.

  2. Плюс, интеллектуальная система распределения звонков — звонок пойдет через первый свободный канал.

    Добрый день, подскажите, а есть ли возможность подключиться не как один пир и не как все отдельно, а как два пира mts-trunk-gsm и ks-trunk-gsm? Цель — вести счетчики активных каналов на каждом транке и запрещать исходящий звонок если счетчик достигает числа симок в транке.

  3. Скажите пож-та настроили все хорошо,звонит. Но часто жалуются на обрывы связи. Как посмотреть его логи. Так как астериск пишет что оборвался Транк. Главный вопрос как выяснить обрыв оператора или шлюза?

    1. Настроить syslog, например. Tools -> Management parametres.

    2. Ну и второй вопрос — что подразумевается под обрывом шлюза?
      Если речь о пропадании связи asterisk-dinstar — можно включить на астериске sip debug и поглядеть — если пакеты идут в одну сторону, а оттуда тишина — обрыв сети.
      Если речь о том, что шлюз по какой-то причине разрывает соединение (пропал сигнал от gsm, например) — можно опять же включить sip debug и посмотреть с каким статусом разрывает соединение.
      включается коммандой sip set debug peer имяпира

  4. Извините, но не могли ли бы подсказать как решить проблему начало отсчета времени?
    Когда я звоню со своего мобильного на шлюз, шлюз все успешно переводит на астериск, и как только у меня начинает звонить софтфон, у меня на мобильном начинается отсчет времени, а при этом еще идут гудки вызова, и софтфон у меня звонит. Все ок. НО!!! Отсчет времени я ожидал что будет после того, как я подниму трубку софтфона, а не просто как только звонок поступит в астериск.
    Очень прошу помочь, заранее благодарен.

    1. System Configuration => Service Parametres => Do Not Answer GSM Imcoming Call for Hotline => No
      Не отвечать на входящие звонки для хотлайнов — НЕТ. Как это по-русски.

  5. Проверил у себя Do Not Answer GSM Imcoming Call for Hotline => No. ТОесть стоит нет. Но все равно начинается отсчет. Может ли это быть проблема в самом астериске?

    1. Может, если у Вас в диалплане стоит конструкция типа:
      exten => _x.,1,Answer
      exten => _x.,2,< поиск свободного оператора либо Dial на звонилку>

      То бишь, когда вы сначала отвечаете, а потом звоните

      Либо посмотрите по стоящим у Вас в функции Dial параметрам — некоторые из них действуют аки поднятие трубки (в частности, на разных астерисках иногда m (musiconhold) поднималш трубку, иногда нет)

      Там проще отследить по астериску:
      asterisk -vvvvvr | grep < номертелефона>
      если отсчет начинается ДО прихода звонка — значет ANSWER делает шлюз, если после — астер.

  6. К сожалению у меня дистрибутив Asterisk Now 3,0 И все конфигурирую с FreePBX. Выполнил в консоли астериска поиск по входящему номеру тел., но так как все происходит мгновенно, то непонятно кто сделал ответ. У меня при звонке с мобильного первый гудок, как обычно, на втором гудке, на мобилке начинается отсчет, и сразу же моментально звонок приходит в мой софт фон. То есть уловит по времени «на глаз» не возможно, так как звонок моментально приходит в софтфон, вместе с началом отсчета на мобилке.

  7. Сделал несколько раз наблюдение в консоли, по моим субъективным ощущениям, (так как это происходит на промежутке времени менее 1 секунды), как мне показалось, сначала мобилка, дает сигнал об начале отсчета времени, тут же появляется лог в консоли, и тут же происходит звонок софтфона.

    1. можно в файл и на почту (sigillite@gmail.com). Правда, посмотреть смогу уже завтра.

  8. Вот лог без поднятия трубка софтфона, номер свой закрыл.
    [root@localhost ~]# asterisk -vvvvvr | grep 098XXXXXXX
    — Executing [50015001@from-trunk:3] ExecIf(«SIP/5001-00000610», «0 ?Set(CALLERID(name)=+38098XXXXXXX)») in new stack
    — Executing [s@macro-user-callerid:2] Set(«SIP/5001-00000610», «AMPUSER=+38098XXXXXXX») in new stack
    — Executing [s@macro-user-callerid:4] ExecIf(«SIP/5001-00000610», «1?Set(REALCALLERIDNUM=+38098XXXXXXX)») in new stack
    — Executing [s@macro-user-callerid:26] Set(«SIP/5001-00000610», «CALLERID(number)=+38098XXXXXXX») in new stack
    — Executing [s@macro-user-callerid:28] Set(«SIP/5001-00000610», «CDR(cnum)=+38098XXXXXXX») in new stack
    — Executing [s@sub-record-check:20] Set(«SIP/5001-00000610», «__FROMEXTEN=+38098XXXXXXX») in new stack
    — Executing [s@sub-record-check:21] Set(«SIP/5001-00000610», «__CALLFILENAME=exten-2025-+38098XXXXXXX-20131225-233824-1388007504.1556») in new stack
    — Executing [exten@sub-record-check:11] GosubIf(«SIP/5001-00000610», «0?record,1(exten,2025,+38098XXXXXXX)») in new stack
    — Executing [ctset@macro-dial-one:1] Set(«SIP/5001-00000610», «DB(CALLTRACE/2025)=+38098XXXXXXX») in new stack
    — Executing [50015001@from-trunk:3] ExecIf(«SIP/5001-00000612», «0 ?Set(CALLERID(name)=+38098XXXXXXX)») in new stack
    — Executing [s@macro-user-callerid:2] Set(«SIP/5001-00000612», «AMPUSER=+38098XXXXXXX») in new stack
    — Executing [s@macro-user-callerid:4] ExecIf(«SIP/5001-00000612», «1?Set(REALCALLERIDNUM=+38098XXXXXXX)») in new stack
    — Executing [s@macro-user-callerid:26] Set(«SIP/5001-00000612», «CALLERID(number)=+38098XXXXXXX») in new stack
    — Executing [s@macro-user-callerid:28] Set(«SIP/5001-00000612», «CDR(cnum)=+38098XXXXXXX») in new stack
    — Executing [s@sub-record-check:20] Set(«SIP/5001-00000612», «__FROMEXTEN=+38098XXXXXXX») in new stack
    — Executing [s@sub-record-check:21] Set(«SIP/5001-00000612», «__CALLFILENAME=exten-2025-+38098XXXXXXX-20131225-234009-1388007609.1558») in new stack
    — Executing [exten@sub-record-check:11] GosubIf(«SIP/5001-00000612», «0?record,1(exten,2025,+38098XXXXXXX)») in new stack
    — Executing [ctset@macro-dial-one:1] Set(«SIP/5001-00000612», «DB(CALLTRACE/2025)=+38098XXXXXXX») in new stack

    1. В Астериске экстеншен — это номер НА КОТОРЫЙ звонят. Соответственно, интересен grep на входящий экстеншен.

  9. [root@localhost ~]# asterisk -vvvvvr | grep 2025
    — Executing [50015001@from-trunk:6] Goto(«SIP/5001-00000614», «from-did-direct,2025,1») in new stack
    — Goto (from-did-direct,2025,1)
    — Executing [2025@from-did-direct:1] Set(«SIP/5001-00000614», «__RINGTIMER=15») in new stack
    — Executing [2025@from-did-direct:2] Macro(«SIP/5001-00000614», «exten-vm,novm,2025,0,0,0») in new stack
    — Executing [s@macro-exten-vm:3] Set(«SIP/5001-00000614», «__EXTTOCALL=2025») in new stack
    — Executing [s@macro-exten-vm:4] Set(«SIP/5001-00000614», «__PICKUPMARK=2025») in new stack
    — Executing [s@macro-exten-vm:8] Gosub(«SIP/5001-00000614», «sub-record-check,s,1(exten,2025,)») in new stack
    — Executing [s@sub-record-check:21] Set(«SIP/5001-00000614», «__CALLFILENAME=exten-2025-+38098XXXXXXX-20131225-235645-1388008605.1560») in new stack
    — Executing [exten@sub-record-check:11] GosubIf(«SIP/5001-00000614», «0?record,1(exten,2025,+38098XXXXXXX)») in new stack
    — Executing [s@macro-exten-vm:9] Macro(«SIP/5001-00000614», «dial-one,,Ttr,2025») in new stack
    — Executing [s@macro-dial-one:1] Set(«SIP/5001-00000614», «DEXTEN=2025») in new stack
    — Executing [dstring@macro-dial-one:2] Set(«SIP/5001-00000614», «DEVICES=2025») in new stack
    — Executing [dstring@macro-dial-one:7] Set(«SIP/5001-00000614», «THISDIAL=SIP/2025») in new stack
    — Executing [zap2dahdi@macro-dial-one:5] Set(«SIP/5001-00000614», «THISPART2=SIP/2025») in new stack
    — Executing [zap2dahdi@macro-dial-one:6] ExecIf(«SIP/5001-00000614», «0?Set(THISPART2=DAHDI/2025)») in new stack
    — Executing [zap2dahdi@macro-dial-one:7] Set(«SIP/5001-00000614», «NEWDIAL=SIP/2025&») in new stack
    — Executing [zap2dahdi@macro-dial-one:10] Set(«SIP/5001-00000614», «THISDIAL=SIP/2025») in new stack
    — Executing [dstring@macro-dial-one:9] Set(«SIP/5001-00000614», «DSTRING=SIP/2025&») in new stack
    — Executing [dstring@macro-dial-one:12] Set(«SIP/5001-00000614», «DSTRING=SIP/2025») in new stack
    — Executing [ctset@macro-dial-one:1] Set(«SIP/5001-00000614», «DB(CALLTRACE/2025)=+38098XXXXXXX») in new stack
    — Executing [s@macro-dial-one:42] Dial(«SIP/5001-00000614», «SIP/2025,,Ttr») in new stack
    — Called SIP/2025
    — SIP/2025-00000615 is ringing
    == Spawn extension (from-did-direct, 2025, 2) exited non-zero on ‘SIP/5001-00000614’

    1. Dial(“SIP/5001-00000614″, “SIP/2025,,Ttr”)

      из описания:
      r: Генерировать сигналы вызова звонящему абоненту (ложный КПВ). Audio потоки не соединяются с вызываемым каналом до тех пор, пока хотя бы на одном из вызываемых каналов не ответят на вызов. Используйте этот параметр с осторожностью и не вставляйте его где попало в эту команду, т.к. при этом состояние вызова будет уже как бы «соединенное», и для вызывающего абонента, если, например, звонок междугородний и тарифицируется, уже будет отсчитываться время разговора и, соответственно, деньги.

  10. Сделал override в системе для Asterisk Dial Options — прописал Tt.
    Ситуация не изменилась. Вот лог, после изменения.
    [root@localhost ~]# asterisk -vvvvvr | grep 2025
    — Executing [50015001@from-trunk:6] Goto(«SIP/5001-00000006», «from-did-direct,2025,1») in new stack
    — Goto (from-did-direct,2025,1)
    — Executing [2025@from-did-direct:1] Set(«SIP/5001-00000006», «__RINGTIMER=15») in new stack
    — Executing [2025@from-did-direct:2] Macro(«SIP/5001-00000006», «exten-vm,novm,2025,0,0,0») in new stack
    — Executing [s@macro-exten-vm:3] Set(«SIP/5001-00000006», «__EXTTOCALL=2025») in new stack
    — Executing [s@macro-exten-vm:4] Set(«SIP/5001-00000006», «__PICKUPMARK=2025») in new stack
    — Executing [s@macro-exten-vm:8] Gosub(«SIP/5001-00000006», «sub-record-check,s,1(exten,2025,)») in new stack
    — Executing [s@sub-record-check:21] Set(«SIP/5001-00000006», «__CALLFILENAME=exten-2025-+38098XXXXXXX-20131226-003514-1388010914.6») in new stack
    — Executing [exten@sub-record-check:11] GosubIf(«SIP/5001-00000006», «0?record,1(exten,2025,+38098XXXXXXX)») in new stack
    — Executing [s@macro-exten-vm:9] Macro(«SIP/5001-00000006», «dial-one,,Tt,2025») in new stack
    — Executing [s@macro-dial-one:1] Set(«SIP/5001-00000006», «DEXTEN=2025») in new stack
    — Executing [dstring@macro-dial-one:2] Set(«SIP/5001-00000006», «DEVICES=2025») in new stack
    — Executing [dstring@macro-dial-one:7] Set(«SIP/5001-00000006», «THISDIAL=SIP/2025») in new stack
    — Executing [zap2dahdi@macro-dial-one:5] Set(«SIP/5001-00000006», «THISPART2=SIP/2025») in new stack
    — Executing [zap2dahdi@macro-dial-one:6] ExecIf(«SIP/5001-00000006», «0?Set(THISPART2=DAHDI/2025)») in new stack
    — Executing [zap2dahdi@macro-dial-one:7] Set(«SIP/5001-00000006», «NEWDIAL=SIP/2025&») in new stack
    — Executing [zap2dahdi@macro-dial-one:10] Set(«SIP/5001-00000006», «THISDIAL=SIP/2025») in new stack
    — Executing [dstring@macro-dial-one:9] Set(«SIP/5001-00000006», «DSTRING=SIP/2025&») in new stack
    — Executing [dstring@macro-dial-one:12] Set(«SIP/5001-00000006», «DSTRING=SIP/2025») in new stack
    — Executing [ctset@macro-dial-one:1] Set(«SIP/5001-00000006», «DB(CALLTRACE/2025)=+38098XXXXXXX») in new stack
    — Executing [s@macro-dial-one:42] Dial(«SIP/5001-00000006», «SIP/2025,,Tt») in new stack
    — Called SIP/2025
    — SIP/2025-00000007 is ringing
    — SIP/2025-00000007 is busy
    == Spawn extension (from-did-direct, 2025, 2) exited non-zero on ‘SIP/5001-00000006’

  11. Добрый день.
    У меня проблема с исходящий доз вон с симок которые установлены в шлюз. Подскажите как реализовать исходящий дозвон с сим карт средствами pbx используя данный шлюз

Добавить комментарий

Войти с помощью: