Использование asterisk в качестве домашней АТС

()

Обычно Asterisk позиционируется как решение для IP-PBX. То есть для обслуживания нужд офисов с достаточно хитрой системой обработки входящих звонков и сложной внтуренней номерацией, однако в ряде случаев asterisk окажется удобен для использования и в домашних условиях. Пример такого использования будет показан далее.

Никого уже не удивишь тем, что домашний телефон заходит в квартиру не "лапшой", а по тому же кабелю что и интернет в цифровом виде. Чаще всего используя протокол SIP. Разные SIP-провайдеры предлагаю разные условия и разные тарифы на разные направления, так что наиболее выгодным будет использование одновременно нескольких SIP-провайдеров, "разруливая" исходящие звонки между каналами с учётом их стоимости.

Для примера возьмём казанского SIP-оператора «Мэлт» и федерального оператора «Мегафон» с его услугой «Мультифон», которая технически представляет собой тот же SIP.

Итак, у нас есть номер от «Мэлта» "2009111" с паролем "pass1" и номер от «Мегафона» "+79271111111" с подключенной услугой «Мультифон» и паролем от ней "pass2". Задача: поднять на домашнем сервере asterisk, завести на нём SIP-аккаунт для домашнего телефона, "зацепить" внешние транки и настроить следующее:

  • Все входящие звонки для обоих транков попадают на домашний телефон;
  • Исходящие звонки внутри города идут через «Мэлт»;
  • Исходящие звонки на мобильные номера и межгород идут через «Мегафон«

На сервере у нас установлена Ubuntu Server 11.04. Установим asterisk:

apt-get install asterisk

Для начала создадим SIP-аккаунт для домашнего телефона. Логин будет "200" и пароль "p4ssw0rd". Для этого приведём файл "/etc/asterisk/users.conf" к виду:

[general]
fullname = New User
userbase = 6000
hasvoicemail = yes
vmsecret = 1234
hassip = yes
hasiax = yes
hasmanager = no
callwaiting = yes
threewaycalling = yes
callwaitingcallerid = yes
transfer = yes
canpark = yes
cancallforward = yes
callreturn = yes
callgroup = 1
pickupgroup = 1


[200]
secret = p4ssw0rd
nat = yes
host = dynamic
username = home
fullname = Home Phone
vmsecret = p4ssw0rd
hassip = yes
hasiax = no
hash323 = no
hasmanager = no
callwaiting = no
context = international
host = dynamic
context=sip-dialout
hasvoicemail = yes

Теперь настроим внешние транки. Для этого в файл "/etc/asterisk/sip.conf" добавим строки:

register => 2009111:pass1@voice.melt.ru/2009111
register => 79271111111@multifon.ru:pass2:79271111111@sbc.megafon.ru:5060/79271111111

[melt]
type=friend
secret=pass1
username=2009111
host=voice.melt.ru
dtmfmode=rfc2833
canreinvite=no
disallow=all
allow=ulaw
allow=alaw
allow=gsm
insecure=port,invite
fromdomain=voice.melt.ru
context=incoming

[multifon]
type=peer
username=79271111111
secret=pass2
host=sbc.megafon.ru
dtmfmode=inband
canreinvite=no
allow=all
insecure=port,invite
fromdomain=multifon.ru
fromuser=79271111111
context=incoming-multifon
;transport=tcp
nat=yes
port=5060

Теперь в настройках планов дозвона ("dialplans") настроим соответствующие контексты. Эти настройки выполняются в файле "/etc/asterisk/extensions.conf". Для этого допишем следующие строки:

;===============================================================================
; Этот контекст описывает исходящие звонки
[sip-dialout]
; Звонки на семизначные номера, начинающиеся на 2 или 5
exten => _[25]XXXXXX,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Melt)
exten => _[25]XXXXXX,n,Dial(SIP/melt/${EXTEN},60)
exten => _[25]XXXXXX,n,Playtones(congestion)
exten => _[25]XXXXXX,n,Hangup()

; Тоже самое, но с указанием кода города (в данном случае Казани)
exten => _[78]843[25]XXXXXX,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Melt)
exten => _[78]843[25]XXXXXX,n,Dial(SIP/melt/${EXTEN:4},60)
exten => _[78]843[25]XXXXXX,n,Playtones(congestion)
exten => _[78]843[25]XXXXXX,n,Hangup()

; Межгород и мобильные
exten => _[78]XXXXXXXXXX,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Multifon)
exten => _[78]XXXXXXXXXX,n,Dial(SIP/multifon/7${EXTEN:1},60)
exten => _[78]XXXXXXXXXX,n,Playtones(congestion)
exten => _[78]XXXXXXXXXX,n,Hangup()

;===============================================================================
; В этом контексте описаны входящие звонки, пришедшие через Мэлт
[incoming]
exten => 2009456,1,Log(NOTICE, Incoming call from ${CALLERID(all)})
exten => 2009456,2,Dial(SIP/200,20,t)
exten => 2009456,3,Voicemail(200@home, u)
exten => 2009456,4,Hangup()

;===============================================================================
; В этом контексте описаны входящие звонки, пришедшие через Мегафон
[incoming-multifon]
exten => 79271111111,1,Log(NOTICE, Incoming call from ${CALLERID(all)})
exten => 79271111111,2,Dial(SIP/200,20,t)
exten => 79271111111,3,Voicemail(200@home, u)
exten => 79271111111,4,Hangup()

Теперь надо "все" входящие на мегафон на SIP, для этого нужно выполнить команду:

curl https://sm.megafon.ru/sm/client/routing?login=79271111111@multifon.ru\&password=pass2

На этом настройка закончена и можно перезапустить asterisk:

invoke-rc.d asterisk restart

Теперь остаётся только настроить SIP-клиент (или SIP-адаптер) для подключения к нашему asterisk и можно пользоваться. Чтобы проверить состояние внешних транков нужно ввести команду:

asterisk -rx 'sip show registry'

А для просмотра всех SIP-соединений:

asterisk -rx 'sip show peers'

Более детальную информацию по работе с asterisk можно найти в официальной документации. На этом всё. Приятной работы!

Ключевые слова: asterisk, multifon, megafon, melt, sip.

Комментарии:

Anonymous 2011-09-04 15:36:24 (#)

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

Anonymous 2011-10-20 11:22:15 (#)

астериск != кривые руки настройщика

Windows 2012-02-12 18:29:01 (#)

MooSE, по-моему вот здесь -
[200]
secret = p4ssw0rd
nat = yes
host = dynamic
username = home
fullname = Home Phone
vmsecret = p4ssw0rd
hassip = yes
hasiax = no
hash323 = no
hasmanager = no
callwaiting = no
context = international
host = dynamic
context=sip-dialout
hasvoicemail = yes

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

context = international
нужно заменить на
context = sip-dialout

?

ilya1801 2012-02-24 22:59:08 (#)

а как можно зарегистрировать в мэлте сип номер через freepbx???

MooSE 2012-02-28 16:50:18 (#)

Цитата:

а как можно зарегистрировать в мэлте сип номер через freepbx???


Это же вроде как морда к астериску? Ты пытаешься через неё настроить? Я хз. Не пользуюсь мордами.

Anonymous 2012-04-10 21:49:04 (#)

в FreePBX есть раздел Trunks. Там настраиваются провайдеры (Метл и Мегафон в данной статье)
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE