Информация к новости
  • Просмотров: 1396
  • Автор: sulicompany
  • Дата: 20-12-2012, 03:33
 (голосов: 0)
20-12-2012, 03:33

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

Категория: IT » Сети » IP-телефония (VoIP-телефония)


Обычно  позиционируется как решение для . То есть для обслуживания нужд офисов с достаточно хитрой системой обработки входящих звонков и сложной внтуренней номерацией, однако в ряде случаев 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:[email protected]/2009111
register => [email protected]:pass2:[email protected]: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([email protected], 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([email protected], u)
exten => 79271111111,4,Hangup()

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

curl https://sm.megafon.ru/sm/client/[email protected]\&password=pass2

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

invoke-rc.d asterisk restart

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

asterisk -rx 'sip show registry'

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

asterisk -rx 'sip show peers'

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