Совсем недавно я опубликовал свою практическую инструкцию как развернуть будь-то собственная АТС (для малой сети или для домашнего использования), см.заметку:

И там я вскользь упомянул, что можно с помощью подключенного пакета услуг от Мегафона — пакет Мультифон получить свой собственный SIP номерТак вот в этой заметке я практически разберу все шаги которые нужно проделать Вам чтобы организовать такую схему:

Интернет — SIP (номер) — ATC (Asterisk+FreePBX) – базовая станция (Gigaset C620Hс переносными трубками) или SIP телефон, к примеру (ATCOM AT610,620 и многие другие) , по сути получится, что можно будет иметь внутренний номер, к примеру 101 и с него совершать звонки по тарифу значительно экономящему Ваши деньги, и даже иметь несколько номеров, допустим в каждой комнате будет свой номер:

  • Кухня — 101
  • Спальня — 102
  • Детская — 103

Можно звонить друг другу не тратя деньги — звонки то идут по локальной сети нежели использовать мобильную связь.

Что понадобиться:

 

  • Интернет (нужно чтобы у Вас была подключен интернет на квартиру или дом)
  • Интернет-центр через который осуществляется раздача интернета на внутренние домашние устройства, т. е. Организация домашней локальной сети, в роли интернет центра в моем случае выступает: Zyxel Keenetic Giga 2
  • ATC (Asterisk + FreePBX) поднята по заметке
  • Телефон с SIM картой Мегафон на котором буду подключать опциюМультифон
  • IP телефон с поддержкой подключения через SIP (в моем случае это ATCOMAT 610)

Ладно теперь перехожу к практическому описанию всех шагов для достижения задуманного.

Подключаю опцию Мультифон на своем мобильнике с SIM картой от Мегафона,набираю:

* 137 * 1 # после приходит SMSчто опция подключена в которой значится, чтоSIP IP номер — это номер вашего телефона, в моем случае это (7926XXXXXXX@multifon.ruи пароль: <PASSWORD>

В ходе прочтения информации по подключенной опции выясняется, что можно управлять режимом работы, т. е. Осуществлять установку режима входящих звонков.

Режимы могут быть следующими:

0 — звонки только на мобильный (как есть сейчас)

1 — звонки только через SIP (либо установлен на рабочей станции программный телефон либо настроен SIP телефон)

2 – звонки идут, как на мобильный так и на SIP телефон, вот этот режим работы я и буду применять на связку с Asterisk+FreePBX

Управлять режимами просто, проще всего через простой командный запрос, где необходимо будет указать login услуги Мультифон (был получен по sms),password (пароль) и режим приема входящих вызовов.

Для получения кода текущего режима приёма входящих вызовов:

ekzorchik@srv-serv:~$ curl --silent "https://sm.megafon.ru/sm/client/routing?login=7926XXXXXXX@multifon.ru&password=PASSWORD"

<?xml version=»1.0″ encoding=»UTF-8″?>

<response>

<result>

<code>200</code>

<description>OK</description>

</result>

<routing>0</routing>

</response>

Из вывода видно, что текущий режим — это 0 — звонки только на мобильные телефоны.

<code200</code> — данные введены корректно, также могут быть и другие коды

<code>101</code> — проверьте корректность указанного пароля

<code>102</code> — нельзя изменять настройку входящих вызовов (не подключена опция Мультифон)

<code>404</code> — указанного пользователя не существует (проверьте, что указываете в соответствии с полученным в SMS сообщении)

Для установки другого режима входящих вызовов (мне как раз нужен второй), запрос имеет вид:

ekzorchik@srv-serv:~$ curl --silent "https://sm.megafon.ru/sm/client/routing/set?login=7926XXXXXXX@multifon.ru&password=PASSWORD&routing=2"

<?xml version=»1.0″ encoding=»UTF-8″?>

<response>

<result>

<code>200</code>

<description>OK</description>

</result>

</response>

Проверяю, что режим поменялся — вижу что поменялся:

ekzorchik@srv-serv:~$ curl --silent "https://sm.megafon.ru/sm/client/routing?login=7926XXXXXXX@multifon.ru&password=PASSWORD&routing=2" | grep routing

<routing>2</routing>

Теперь плавно перехожу к настройке Trunk в Asterisk+FreePBXоткрываю Webинтерфейс управления:

http://IP&DNS (Asterisk+FreePBX) – FreePBX Administration —

username = root

password = 712mbddr@

нажимаю Continueпосле перехожу по элементам меню:

Connectivity – Trunks – создаю новый Trunk (Add SIP Trunk) , настройки следующие:

Trunk Name: multifon

Outbound CallerID: 926XXXXXXX

CIP Options: Allow Any CID

Dialer Number Manipulation Rules (настраиваю правила вызова)

(prepend)+prefix|79XXXXXXXXX (девять иксов)

(7)+8|9XXXXXXXXXXX (одиннадцать иксов)

(7)+8|495XXXXXXX (семь иксов)

Dial Rules Wizards: (pick one)

Outgoing Settings:

Trunk Name: multifon-out

PEER Details:

dtmfmode=inband

username=7926XXXXXXX

type=peer

secret=PASSWORD

host=sbc.megafon.ru

fromuser=7926XXXXXXX

fromdomain=multifon.ru

port=5060

nat=yes

insecure=port,invite

Incoming Settings:

USER Context: multifon-in

USER Details:

type=peer

host=sbc.megafon.ru

dtmfmode=inband

Registration

Register String: (обязательный аргумент — строка регистрации у SIP провайдера)

7926XXXXXXX@multifon.ru:PASSWORD:7926XXXXXXX@sbc.megafon.ru:5060/7926XXXXXXX

А после нажимаем Submit Changes – Apply Config для применения настроек.

На заметку:

sm.megafon.ru — 80,443 TCP — для регистрации в услуге, изменения настроек;

sbc.megafon.ru — 5060 TCP+UDP (SIP) — для установки голосовых соединений, обмена статусами присутствия и текстовыми сообщениями;

sbc.megafon.ru — >6000 UDP (RTP) – для передачи голоса и видео;

im.megafon.ru — 80,443 TCP — для хранения настроек на сервере;

mms1.im.megafon.ru, mms2.im.megafon.ru — 80,443 TCP – для отправки MMS.

На заметку: мои правила набора описываю как работает исходящая связь:

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

Теперь проверяю прошла ли регистрация транка на сервере Megafon’напосредством подключения к Asterisk через консоль:

ekzorchik@srv-serv:~$ sudo asterisk -rx"sip show registry"

[sudo] password for ekzorchik:

Host dnsmgr Username Refresh State Reg.Time

sbc.megafon.ru:5060 N 7926XXXXXXX@ 165 Registered Wed, 28 Jan 2015 23:00:47

1 SIP registrations.

Если, как у меня значится статус Registered,Registrations – то все успешно.

Теперь на сервере с поднятой ATC создаю номер (Extensionдля телефонного аппарата:

http://IP&DNS (Asterisk+FreePBX) – Applications – Extensions —

Device (Generic SIP Device) и нажимаю Submitдля создания внутреннего телефонного номера потребуется определение следующих параметров:

User Extension: 101

Display Name: 101

SIP Alias: 101

secret:pbx101

все остальные параметры пока оставляю дефолтными т. е. Не изменяю.

После нажимаю Submit – Apply Config

Теперь нужно настроить ATC (Asterisk+FreePBX) так, чтобы исходящие звонки шли через настроенный выше Trunk (транк):

http://IP&DNS — Connectivity – Outbound Routes

Route Name: multifon-out

Dial Patterns that will use this Route

()+7|ZX./

Dial patterns wizards: (pick one)

Trunk Sequence for Matched Routes

выбираем созданный trunk с именем multifon

Сохраняем настройки: Submit Changes – Apply Config

Отлично, теперь перехожу к настройкам которые необходимо указать на IPтелефонеATCOM AT 610

Открываю Webинтерфейс:

http://IP&DNS (Asterisk+FreePBX)авторизуюсь, по дефолту:

Username: admin

Password: admin

Далее Logonпосле: VOIP и приводим настройки по аналогии с ниже представленным скриншотом для удобства:

  • Server Address – указываю IP адрес сервера где развернут Asterisk + FreePBX
  • Server Port – указываю порт по умолчанию 5060
  • Account Name – созданный выше Extension телефонного номера
  • Password – Пароль от созданного выше Extension телефонного номера
  • Phone Number – Именование созданного выше Extension
  • Display Name – как будет высвечиваться на телефоне (при наличии дисплея) именование номера.
  • Enable Register – ставим галочку, чтобы зарегистрировать телефонный номер назначенный IP телефону, а после не забывает нажать APPLY для сохранения настроек в телефоне.

Регистрируем номер на IP телефоне ATCOM AT 610

После чего Вы должны будете обратить внимание на выделенную надпись красным цветом:

Register Status: Registered

Означающую, что IP телефон успешно зарегистрировал внутренний номер на Вашей ATCтеперь с него можно звонить (через 78926XXXXXXX или 78495XXXXXXX или даже можно позвонить самому себе и звонок на мобильный телефон пройдет) и принимать звонки, но для этого нужно настроить правило, здесь все просто:

http://IP&DNS (Asterisk+FreePBX) – Connectivity – Inbound Routes

Description: 101

Set Destination – Choose one – Esxtensions и находим созданный внутренний номер,<101> ext 101по окончании настроек нажимаем Submit – Apply Config

Теперь при звонке из вне, с другого телефонного аппарата на номер с подключенной услугой Мультифон» звонок будет идти, как на мобильный так и на внутренний номер, но также есть но, сперва на Интернет-центре = Zyxel Keenetic Giga 2 нужно сделать правило доступа к данной ATC из интернета

Заходим на Web – интерфейс управления интернет центром:

http://IP&DNS – авторизуемся — Безопасность — Трансляция сетевых адресов (NAT) – Добавить правило

  • Описание: SIP
  • Интерфейс: Broadband connection (ISP) через который интернет центр подключен к провайдеру
  • Протокол: UDP/5060 – Интернет-телефония (SIP)
  • Перенаправить на адрес: 192.168.1.52
  • Новый номер порта назначения: 5060

Как только все настроена нажимаем Сохранить» для узаконивания изменений.

Когда мне звонят на мобильный (с подключенной услугой Multifon” и режимом 2,то звонок проходит как на SIP телефон так и мой мобильный.

Если у Вас что-то из описанного выше не заработало, то искать причину следует из логов работы Asterisk:

ekzorchik@srv-serv:~$ sudo asterisk -rvvvv

Asterisk 1.8.10.1~dfsg-1ubuntu1, Copyright (C) 1999 — 2012 Digium, Inc. and others.

Created by Mark Spencer <markster@digium.com>

Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show warranty’ for details.

This is free software, with components licensed under the GNU General Public

License version 2 and other licenses; you are welcome to redistribute it under

certain conditions. Type ‘core show license’ for details.

=========================================================================

== Parsing ‘/etc/asterisk/asterisk.conf': == Found

== Parsing ‘/etc/asterisk/extconfig.conf': == Found

Connected to Asterisk 1.8.10.1~dfsg-1ubuntu1 currently running on srv-serv (pid = 1103)

Verbosity was 0 and is now 4

== Using SIP RTP TOS bits 184

== Using SIP RTP CoS mark 5

— Executing [7926XXXXXXX@from-trunk-sip-multifon-out:1] Set(«SIP/multifon-in-00000009″, «GROUP()=OUT_1″) in new stack

— Executing [7926XXXXXXX@from-trunk-sip-multifon-out:2] Goto(«SIP/multifon-in-00000009″, «from-trunk,7926XXXXXXX,1″) in new stack

— Goto (from-trunk,7926XXXXXXX,1)

— Executing [7926XXXXXXX@from-trunk:1] Set(«SIP/multifon-in-00000009″, «__FROM_DID=7926XXXXXXX») in new stack

— Executing [7926XXXXXXX@from-trunk:2] NoOp(«SIP/multifon-in-00000009″, «Received an unknown call with DID set to 7926XXXXXXX») in new stack

— Executing [7926XXXXXXX@from-trunk:3] Goto(«SIP/multifon-in-00000009″, «s,a2″) in new stack

— Goto (from-trunk,s,2)

— Executing [s@from-trunk:2] Answer(«SIP/multifon-in-00000009″, «») in new stack

— Executing [s@from-trunk:3] Wait(«SIP/multifon-in-00000009″, «2») in new stack

[Jan 30 18:15:30] NOTICE[2499]: channel.c:4149 __ast_read: Dropping incompatible voice frame on SIP/multifon-in-00000009 of format ulaw since our native format has changed to 0x8 (alaw)

— Executing [s@from-trunk:4] Playback(«SIP/multifon-in-00000009″, «ss-noservice») in new stack

— <SIP/multifon-in-00000009> Playing ‘ss-noservice.gsm’ (language ‘en’)

== Spawn extension (from-trunk, s, 4) exited non-zero on ‘SIP/multifon-in-00000009′

— Executing [h@from-trunk:1] Macro(«SIP/multifon-in-00000009″, «hangupcall,») in new stack

— Executing [s@macro-hangupcall:1] GotoIf(«SIP/multifon-in-00000009″, «1?theend») in new stack

— Goto (macro-hangupcall,s,3)

— Executing [s@macro-hangupcall:3] ExecIf(«SIP/multifon-in-00000009″, «0?Set(CDR(recordingfile)=)») in new stack

— Executing [s@macro-hangupcall:4] Hangup(«SIP/multifon-in-00000009″, «») in new stack

== Spawn extension (macro-hangupcall, s, 4) exited non-zero on ‘SIP/multifon-in-00000009′ in macro ‘hangupcall’

== Spawn extension (from-trunk, h, 1) exited non-zero on ‘SIP/multifon-in-00000009′

srv-serv*CLI> Ctrl + C (чтобы выйти из режима вывода на консоль информации по работе)

Disconnected from Asterisk server

Executing last minute cleanups

Так я искал проблему, что мне не хватало опции allow=alaw в настройках Trunk и на этапе переадрессации на внутренний номер 101 неправильно был забит пункт:CallerID Number – я поставил 101, а это было неправильно. Вообще если не совсем корректно представляешь себе как все это должно работать, то сперва нужно собрать максимум информации из имеющейся, а уже потом после набросок плана приступать к его практической реализации. И, как правило, все сразу же становится понятным или понятным что нужно разобрать сперва прежде чем план воплотиться в завершенный план. У меня же так всегда. Этой заметкой я практически показал, как используя дополнительную возможность от Мегафонапознакомиться с работой IP телефонии так сказать дома. В последующих заметках я постараюсь показать что-нибудь еще внедренное и используемое у меня на работе.

На заметку: Данной заметкой я не претендую на полное и развернутое описание всех полей что и за чем, я прежде всего выкладываю на свой блог для себя, а уже кто хочет — применяет мои наработки под свои задачи.