Консольная настройка АТС на базе Asterisk

Posted by

Сколько я уже раз говорил, что только сам смогу изучить и понять как работает лишь разобрав весь процесс от и до, ни на кого нельзя надеяться, пусть напыщенные все знайки останутся на своем и говорить, — «Да ладно там все просто, в интернете полно руководств, мне некогда». От таких людей, а еще больше коллег по ремеслу меня если честно бесит. Ну да ладно, уже это слышать если честно не в первой, а потому я просто перестал спрашивать у них. Первоначальное мнение от том какой человек я уже научился составлять инстиктивно. И вот я просто взял множество различных курсов, статей, книг и пошел по пути новичка с практической отработкой всех непонятных мне моментов, как делаю и что делаю я документирую. Проще работать с наработками чем вот так сразу окунуться в задачу, но кому как. Я знаю одного своего хорошего друга так он вообще ничего не ведет — все помнит и знает/может разобраться взять и настроить, каждому свое. Ну да ладно, начну повествование всего того что сам знаю (а мне напоминалка на будущее использование):

— я поставил из репозитариев

/etc/asterisk/

  • sip.conf — описание настроек как работать по SIP протоколу

[название1](!) — это шаблон

[название2](!,название1) — это шаблон вложенный в другой шаблон

  • extensions.conf — правило совершения звонков
  • indications.conf — конфигурационный файл содержащий звуки которые слышит абонент при совершении звонков (Занята, Трубка Свободна и т.д)

Создадим подключение для двух SIP устройств задействовав дефолтные шаблоны: natted-phone & basic-options.

ekzorchik@srv-host:~$ sudo nano /etc/asterisk/sip.conf

;дефолтный шаблон который включает в себя параметры из шаблона basic-options

[basic-options](!)

; Можно выбрать: inband, rfc2833, info или auto: Как клиент обрабатывает сигнализацию DMTF.

dtmfmode=rfc2833

;контекст работы совершения звонков в файле extensions.conf

context=from-office

;SIP — запись для совершения звонков: peer — только исходящие, user — только входящие, friend — объединение user & peer

type=friend

[natted-phone](!,basic-options)

; Запрещает перенаправление трафика, все RTP потоки проходят через Asterisk

directmedia=no

;разрешаем логин с разных IP адресов

host=dynamic

; 101 — имя, ассоциируемое с SIP клиентом

; для этого имени используем настройки из шаблона [natted-phone]

[101](natted-phone)

;пароль для SIP имени клиента

secret = pbx101

[102](natted-phone)

secret = pbx102

Далее создаем свой DIAL план опираясь на который будут совершаться звонки через текущую АТС:

ekzorchik@srv-host:~$ sudo nano /etc/asterisk/extensions.conf

;настраиваем правила для контекста from-office

[from-office]

;здесь звонки только с номеров 101 и 102

exten => 101,1,Dial(SIP/101)

exten => 102,1,Dial(SIP/102)

На заметку:

Синтаксис Dial(): Dial(type/identificator,timeout,options,ULR)

Для справки вот этот документ: http://asterisk.ru/knowledgebase/Asterisk+cmd+Dial

type = тип канала

identification — номер телефона который вызывается через этот канал

timeount — необязателен, если задан то определяет максимальное время в секундах, сколько времени команда Dial будет ждать ответа на вызов

options — необязателен.

Затем заходим в консоль Asterisk с некоторым уровнем детализации с целью вывода на консоль информации работы и обновляем внесенные изменения в конфигурационные файлы выше:

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

srv-host*CLI> core reload

Теперь настраиваем либо софтфон (Ubuntu — это ekiga, Windows — X-Lite, Android — Zoiper) либо аппарат поддерживающий SIP протокол (к примеру: Grandstream GP715,ATCOM и т.д)

ekzorchik@navy:~$ sudo apt-get install ekiga -y

Ubuntu 12.04.5 Desktop amd64 (Gnome Classic) — Приложения — Интернет — Програмный телефон Ekiga — Правка — Учетные записи — Учетные записи — Добавить учетную запись SIP:

Имя: 101

Регистратор: IP-адрес сервера с развернутым сервисом Asterisk (у меня 192.168.1.174), по умолчанию используется порт 5060 его можно не указывать, если же Вы специально его изменили то указываем его после IP&DNS:5060

Аутентификация пользователя: SIP-номер, т. е. 101

Пользователь: 101

Пароль: pbx101

Задержка: 3600 — оставляю по умолчанию

Включить учетную запись: отмечаю галочкой

По окончании создания настроек подключения нажимаю кнопку OK

Теперь на другой системе (можно и этой но с использование другого софтфон клиента) из этой же сети по такому же принципу настраиваю SIP номер 102

Итак оба SIP-номера зарегистрированы, проверим так ли это на самом деле:

— Registered SIP ‘101’ at 192.168.1.181:5060

> Saved useragent «Ekiga/3.3.2» for peer 101

srv-host*CLI>

srv-host*CLI> sip show peers

Name/username Host Dyn Forcerport Comedia ACL Port Status Description

101/101 192.168.1.181 D Auto (No) No 5060 Unmonitored

102 (Unspecified) D Auto (No) No 0 Unmonitored

или не заходя в Консоль Asterisk:

ekzorchik@srv-host:~$ sudo asterisk -rx"sip show peers"

,как видно один SIP-номер успешно зарегистрирован (значит Host & Port) на текущем сервере Asterisk, также по авторизованному соединению можно получить более детальную информацию:

srv-host*CLI> sip show peer 101

* Name : 101

Description :

Secret : <Set>

MD5Secret : <Not set>

Remote Secret: <Not set>

Context : from-office

Record On feature : automon

Record Off feature : automon

Subscr.Cont. : <Not set>

Language :

Tonezone : <Not set>

AMA flags : Unknown

Transfer mode: open

CallingPres : Presentation Allowed, Not Screened

Callgroup :

Pickupgroup :

Named Callgr :

Nam. Pickupgr:

MOH Suggest :

Mailbox :

VM Extension : asterisk

LastMsgsSent : 0/0

Call limit : 0

Max forwards : 0

Dynamic : Yes

Callerid : «» <>

MaxCallBR : 384 kbps

Expire : 3553

Insecure : no

Force rport : Auto (No)

Symmetric RTP: No

ACL : No

DirectMedACL : No

T.38 support : No

T.38 EC mode : Unknown

T.38 MaxDtgrm: 4294967295

DirectMedia : No

PromiscRedir : No

User=Phone : No

Video Support: No

Text Support : No

Ign SDP ver : No

Trust RPID : No

Send RPID : No

Path support : No

Path : N/A

TrustIDOutbnd: Legacy

Subscriptions: Yes

Overlap dial : No

DTMFmode : rfc2833

Timer T1 : 500

Timer B : 32000

ToHost :

Addr->IP : 192.168.1.181:5060

Defaddr->IP : (null)

Prim.Transp. : UDP

Allowed.Trsp : UDP

Def. Username: 101

SIP Options : (none)

Codecs : (ulaw|alaw|gsm|h263)

Auto-Framing : No

Status : Unmonitored

Useragent : Ekiga/3.3.2

Reg. Contact : sip:101@192.168.1.181:5060

Qualify Freq : 60000 ms

Keepalive : 0 ms

Sess-Timers : Accept

Sess-Refresh : uas

Sess-Expires : 1800 secs

Min-Sess : 90 secs

RTP Engine : asterisk

Parkinglot :

Use Reason : No

Encryption : No

Сейчас текущие два номера могут звонить друг другу и разговаривать, что по сути является как можно выразится домашняя АТС, только пока нет возможности вызова внешних номеров и звонков из вне на них. Но это дело будущих настроек, обо всем по порядку.

Пример №2: Конфигурация Asterisk для совершения звонков между внутренними номерами. Также когда создаем SIP аккаунты на текущем сервере Asterisk можно не использовать дефолтные настройки описания, а создать свои, чем я сейчас и займусь:

На заметку: советую использовать шаблоны описаний настроек SIP аккаунтов дабы не вводить одно и тоже по сто раз, да и приобщаться к правильному также нужно.

ekzorchik@srv-host:~$ sudo nano /etc/asterisk/sip.conf

;удаляем все содержимое (лучше сделать копию), буду создавать все с нуля самим.

;ekzorchik@srv-host:~$ sudo tar cfP etc_asterisk.tar /etc/asterisk/

;создаю свой шаблон

[sip-profile](!)

;возможность совершать, как входящие так и исходящие звонки

type = friend

;контекст правил вызова в файле /etc/asterisk/extensions.conf

context = office

;любое устройство (динамический IP адрес) может быть зарегистировано на Asterisk

host = dynamic

;запретить все кодеки (а ниже указываются список разрешенных кодеков)

; информация по кодекам: http://asterisk.ru/knowledgebase/Asterisk+codecs

disallow = all

;кодек G.711

allow = alaw

;кодек G711

allow = ulaw

;код языка, которые предопределены в файле indications.conf — где определяется язык приветствия и специфичные для каждой страны настройки сигналов телефонов

language = ru

;определяет группу вызовов (call group) для вызовов через это устройство

callgroup = 1

;Группа для «pickup» вызовов поступающих вашим сослуживцам, используя комбинацию «*8» и приложение Pickup() для работы с екстеншеном *8.

pickupgroup = 1

;Периодическая проверка доступности клиента.

qualify = yes

;Если инициируется вызов по протоколу SIP, тогда в сообщении INVITE содержиться информация, куда должен отправляться медиапоток: http://asterisk.ru/knowledgebase/Asterisk+sip+canreinvite

canreinvite = yes

;Ограничение на кол-во вызовов для пользователя.

call-limit = 4

;переменная изменяет образ действия сервера Asterisk для клиентов находящихся за файрволом с трансляцией адресов (NAT)

nat = no

Теперь создаю SIPаккаунты:

[101](sip-profile)

;действительный экстеншен для этого пира

regexten = 101

;пароль на аккаунт 101

secret = pbx101

;Получение или установка полей из/в CallerID. (http://asterisk.ru/knowledgebase/Asterisk+func+callerid)

callerid = <101>

[102](sip-profile)

;действительный экстеншен для этого пира

regexten = 102

;пароль на аккаунт 102

secret = pbx102

;Получение или установка полей из/в CallerID. (http://asterisk.ru/knowledgebase/Asterisk+func+callerid)

callerid = <102>

Далее создаю контекст на совершение звонков: (план набора)

ekzorchik@srv-host:~$ sudo nano /etc/asterisk/extensions.conf

[office]

exten => 101,1,Dial(SIP/101)

exten => 102,1,Dial(SIP/102)

Теперь нужно чтобы Asterisk перечитал внесенные изменения в конфигурационный файл:

ekzorchik@srv-host:~$ sudo asterisk -r

srv-host*CLI> core reload

либо так:

ekzorchik@srv-host:~$ sudo asterisk -rx "core reload"

На заметку: при анализе что и как работает советую держать вторую консоль открытую с выводом диагностической информации чтобы наглядно видеть все что происходит с Asterisk

ekzorchik@srv-host:~$ sudo asterisk -r

[sudo] password for ekzorchik:

Asterisk 13.7.2~dfsg-0~ppa1, Copyright (C) 1999 — 2014, 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.

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

Connected to Asterisk 13.7.2~dfsg-0~ppa1 currently running on srv-host (pid = 809)

srv-host*CLI>

Теперь также настраиваю либо 2 софтфона, либо же подключаем к текущему Asterisk два аппаратных телефона или VOIP-шлюз, мне же проще подключить VOIP-шлюз D-Link DVG-5008SG (за образец) где на первом порту настройки SIP аккаунта для номера 101, а на втором порта настройки SIP аккаунта для номера 102. После того как аккаунты зарегистируются (об этом будет ясно видно из статуса по подключениям на voip-шлюзе) проверяем информация по подключения из консоли Asterisk.

Зарегистрированные SIP аккаунты на VOIP шлюзе

Так порты с присвоенными им номерами успешно зарегистрировались на АТС Asterisk. В еще одной открытой консоли Asterisk появились строки, что номера 101 & 102 успешно зарегистрированы:

[Mar 24 07:17:00] NOTICE[1002]: chan_sip.c:23945 handle_response_peerpoke: Peer ‘101’ is now Reachable. (57ms / 2000ms)

[Mar 24 07:17:00] NOTICE[1002]: chan_sip.c:23945 handle_response_peerpoke: Peer ‘102’ is now Reachable. (3ms / 2000ms)

ekzorchik@srv-host:~$ sudo asterisk -rx "sip show peers"

Name/username Host Dyn Forcerport Comedia ACL Port Status Description

101/101 10.7.8.127 D No No 5060 OK (4 ms)

102/102 10.7.8.127 D No No 5060 OK (5 ms)

2 sip peers [Monitored: 2 online, 0 offline Unmonitored: 0 online, 0 offline]

Отлично я могу звонить как с номера 101 на 102, так и наоборот.

Теперь двигаюсь дальше в понимании как настраивать и управлять Asterisk. На этом первая часть закончена, с уважением автор блога — ekzorchik.