Итак, 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
В примере по 3 симки, т.к. на момент создания скриншотов остальные использовались для создания предыдущей статьи.
Сходу меняем пароли админа и настройки сети.
Создаем группы портов для облегчения последующей маршрутизации
Разделяем на 2 группы соответственно вставленным симкам.
Настроим основные параметры SIP (System Configuration => Service Parameter)
Я ратую за безопасность, поэтому неавторизованные звонки не разрешаю.
Далее, настроим соединение с SIp-сервером(System Configuration => SIP Parameter):
Настроим параметры авторизации портов. Можно настраивать, чтобы каждый порт авторизовался на сервере как отдельный пир, я сделал 1 пиром (маршрутизация на сервере будет). Используем вкладку System Configuration => Port Parameter
Обязательно указываем 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
С группы портов №1 с любым префиксом отпуливать на сип-сервер.
Аналогично — для второй группы портов.
Routing Configuration => IP->Tel routing
Все звонки с сип-сервера с префиксом 066 выпускаем через портгруппу МТС
Аналогично для остальных направлений МТС. Можно было вообще сделать 1 хитрое правило вида (066|050|095|099)xxxxxxx, но я решил сделать отдельно — чуть больше действий, зато нагляднее и проще в последующем управлении.
То же самое делаем с Киевстар, только указываем его портгруппу.
Я дополнительно прописал номера сервисных служб, чтобы иметь возможность дозвониться на них при необходимости.
Также создал дефолтное направление, через все порты — на всякий случай, почему это нормально-увидите чуть ниже.
Теперь добавим разрешения для вызовов внутрьнаружу
Внутрь: Operation => Tel->IP operation
Разрешаем любые звонки с портгруппы МТС. С Киевстар аналогично.
Наружу: Operation =>IP-> Tel operation
Указываем префикс и разрешающее действие
Я создал разрешающие правила для МТС и Киевстар, а также запрещающие-для всех остальных.
Работает, как оказалось, по принципу Iptables, единственное замечание — порядок действий (Index) имеет значение (что в общем-то достаточно логично).
Все, в принципе после этого шлюз готов к работе.
Впечатление от железки-сугубо положительное — все достаточно просто, интерфейс интуитивно понятен. Есть множество полезных штучек, как-то:
CDR:
BCCH (показывает данные о БС, с которыми работают симки):
Отправкапросмотрудаление SMS
Работает отправка и прием USSD (не все, увы, переадресации и вторую линию отключал все равно через телефон, но счет проверитьномер узнать можно)
Плюс, интеллектуальная система распределения звонков — звонок пойдет через первый свободный канал.
Аппарат, при стоимости в 15 000 грн (для сравнения, GoIP стоит 12 000) однозначно оправдывает себя как по надежности, так и по функционалу.
З.Ы. На написание этой инструкции я потратил больше времени, чем на настройку самого аппарата.
Плюс, интеллектуальная система распределения звонков — звонок пойдет через первый свободный канал.
Добрый день, подскажите, а есть ли возможность подключиться не как один пир и не как каждый порт отдельно, а как два пира mts-trunk-gsm и ks-trunk-gsm? Цель — вести счетчики активных каналов на каждом транке и запрещать исходящий звонок если счетчик достигает числа симок в транке.
Можно, почему же нет.
Плюс, интеллектуальная система распределения звонков — звонок пойдет через первый свободный канал.
Добрый день, подскажите, а есть ли возможность подключиться не как один пир и не как все отдельно, а как два пира mts-trunk-gsm и ks-trunk-gsm? Цель — вести счетчики активных каналов на каждом транке и запрещать исходящий звонок если счетчик достигает числа симок в транке.
Скажите пож-та настроили все хорошо,звонит. Но часто жалуются на обрывы связи. Как посмотреть его логи. Так как астериск пишет что оборвался Транк. Главный вопрос как выяснить обрыв оператора или шлюза?
Настроить syslog, например. Tools -> Management parametres.
Ну и второй вопрос — что подразумевается под обрывом шлюза?
Если речь о пропадании связи asterisk-dinstar — можно включить на астериске sip debug и поглядеть — если пакеты идут в одну сторону, а оттуда тишина — обрыв сети.
Если речь о том, что шлюз по какой-то причине разрывает соединение (пропал сигнал от gsm, например) — можно опять же включить sip debug и посмотреть с каким статусом разрывает соединение.
включается коммандой sip set debug peer имяпира
Извините, но не могли ли бы подсказать как решить проблему начало отсчета времени?
Когда я звоню со своего мобильного на шлюз, шлюз все успешно переводит на астериск, и как только у меня начинает звонить софтфон, у меня на мобильном начинается отсчет времени, а при этом еще идут гудки вызова, и софтфон у меня звонит. Все ок. НО!!! Отсчет времени я ожидал что будет после того, как я подниму трубку софтфона, а не просто как только звонок поступит в астериск.
Очень прошу помочь, заранее благодарен.
System Configuration => Service Parametres => Do Not Answer GSM Imcoming Call for Hotline => No
Не отвечать на входящие звонки для хотлайнов — НЕТ. Как это по-русски.
Проверил у себя Do Not Answer GSM Imcoming Call for Hotline => No. ТОесть стоит нет. Но все равно начинается отсчет. Может ли это быть проблема в самом астериске?
Может, если у Вас в диалплане стоит конструкция типа:
exten => _x.,1,Answer
exten => _x.,2,< поиск свободного оператора либо Dial на звонилку>
То бишь, когда вы сначала отвечаете, а потом звоните
Либо посмотрите по стоящим у Вас в функции Dial параметрам — некоторые из них действуют аки поднятие трубки (в частности, на разных астерисках иногда m (musiconhold) поднималш трубку, иногда нет)
Там проще отследить по астериску:
asterisk -vvvvvr | grep < номертелефона>
если отсчет начинается ДО прихода звонка — значет ANSWER делает шлюз, если после — астер.
К сожалению у меня дистрибутив Asterisk Now 3,0 И все конфигурирую с FreePBX. Выполнил в консоли астериска поиск по входящему номеру тел., но так как все происходит мгновенно, то непонятно кто сделал ответ. У меня при звонке с мобильного первый гудок, как обычно, на втором гудке, на мобилке начинается отсчет, и сразу же моментально звонок приходит в мой софт фон. То есть уловит по времени «на глаз» не возможно, так как звонок моментально приходит в софтфон, вместе с началом отсчета на мобилке.
Сделал несколько раз наблюдение в консоли, по моим субъективным ощущениям, (так как это происходит на промежутке времени менее 1 секунды), как мне показалось, сначала мобилка, дает сигнал об начале отсчета времени, тут же появляется лог в консоли, и тут же происходит звонок софтфона.
А что в консоли-то пишет?
можно в файл и на почту (sigillite@gmail.com). Правда, посмотреть смогу уже завтра.
Вот лог без поднятия трубка софтфона, номер свой закрыл.
[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
В Астериске экстеншен — это номер НА КОТОРЫЙ звонят. Соответственно, интересен grep на входящий экстеншен.
[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’
Dial(“SIP/5001-00000614″, “SIP/2025,,Ttr”)
из описания:
r: Генерировать сигналы вызова звонящему абоненту (ложный КПВ). Audio потоки не соединяются с вызываемым каналом до тех пор, пока хотя бы на одном из вызываемых каналов не ответят на вызов. Используйте этот параметр с осторожностью и не вставляйте его где попало в эту команду, т.к. при этом состояние вызова будет уже как бы «соединенное», и для вызывающего абонента, если, например, звонок междугородний и тарифицируется, уже будет отсчитываться время разговора и, соответственно, деньги.
Сделал 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’
Может Wireshark-ом можно будет что-то отследить?
Добрый день.
У меня проблема с исходящий доз вон с симок которые установлены в шлюз. Подскажите как реализовать исходящий дозвон с сим карт средствами pbx используя данный шлюз