Совсем недавно я опубликовал свою практическую инструкцию как развернуть будь-то собственная АТС (для малой сети или для домашнего использования), см. заметку:
И там я вскользь упомянул, что можно с помощью подключенного пакета услуг от Мегафона — пакет Мультифон получить свой собственный 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 (в моем случае это ATCOM AT 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 для сохранения настроек в телефоне.
После чего Вы должны будете обратить внимание на выделенную надпись красным цветом:
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 телефонии так сказать дома. В последующих заметках я постараюсь показать что-нибудь еще внедренное и используемое у меня на работе.
На заметку: Данной заметкой я не претендую на полное и развернутое описание всех полей что и за чем, я прежде всего выкладываю на свой блог для себя, а уже кто хочет – применяет мои наработки под свои задачи.
А пока все, с уважением автор блога — Олло Александр.