Лабораторная работа №1 по курсу Asterisk Advanced

Цели:

  • Настроить IP телефон для работы с Asterisk.
  • Ознакомиться с базовым синтаксисом и поведением диалплана.
  • Использовать несколько стандартных команд CLI.
  • Понять важность директивы "context" в pjsip.conf

Телефонная станция без телефонов не особо полезна. Поэтому первую лабораторную вы начнете с настройки IP-телефона для работы с Астериском, и набора нескольких простых экстеншенов. Для того, чтобы телефон смог звонить вы должны указать одинаковые настройки логина и пароля в Астериске и в телефоне.

Шаг 1: Настройка телефона Digium D60

Вы будете настраивать IP-телефон через веб-интерфейс и для того, чтобы это сделать, нужно узнать IP-адрес своего телефона. Прочитайте инструкцию к IP-телефону или спросите у преподавателя как это сделать. Можно также воспользоваться методом «научного тыка».

Откройте браузер и введите IP-адрес телефона. Логин / пароль по умолчанию admin / 789. В соответствующие поля веб-интерфейса внесите следующие настройки:

  • User ID/Extension: 7001
  • Authorization Name: XX_sip_phone. Вместо "XX" используйте номер вашей станции (см. маркировку компьютера).
  • Password: digium. В продакшине используйте только сильные пароли! (утилиты вроде apg вам в помощь).
  • Register: Yes
  • Primary Host: IP-адрес вашей рабочей станции.

Чтобы узнать IP-адрес вашего лабораторного сервера, наберите в консоли Linux:

$ ip address
Вы получите что-то вроде:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:30:53:f0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.107/24 brd 192.168.101.255 scope global eth0
    inet6 fe80::20c:29ff:fe30:53f0/64 scope link 
       valid_lft forever preferred_lft forever

Вам нужен адрес, следующий за «inet» - это IP-адрес вашего компьютера.

После того, как все настройки сохранены, не забудьте применить их (Apply / Submit).

Шаг 2: Создание SIP аккаунта

Теперь IP-телефон настроен на общение с Астериском, но Астериск еще не настроен на работу с этим телефоном. В терминале наберите:

student@01:~$ sudo -i
Пароль: 
root@01:~# 

Теперь вы суперпользователь (root). Asterisk на ваших станциях уже запущен и ждетm, чтобы вы к нему подключились: asterisk -rvvv

Вы увидите в CLI сообщения о том, что телефон, который вы настроили, пытается зарегистрироваться. Но сообщения "No matching endpoint found»" означают, что эти попытки безуспешны.

В целях безопасности Asterisk по умолчанию отвергает сообщения от неизвестных устройств.

В CLI Астериск наберите:

*CLI> pjsip show endpoints
No objects found.

Видите, на текущий момент не определено ни одного устройства в качестве endpoint'а.

Далее, вы настроите учетную запись для Digium телефона в файле /etc/asterisk/pjsip.conf. Вы можете использовать любой знакомый вам текстовый редактор, для вас установлены: mc, vim, nano, а также графический редактор gedit. Рекомендуем vim, на сервере есть шпаргалка по его использованию: http://trainingserver/pub/extras/Vim_guide.pdf.

Редактировать файлы конфигурации рекомендуется в отдельном терминале (или в отдельном окне текстового редактора) для ускорения рабочего процесса. Вам придется много раз переключаться между редактированием конфигурационных файлов и CLI Asterisk. И каждый раз тратить время на подключение/отключение к консоли Asterisk и открытие/закрытие конфигурационных файлов совсем не эффективно.

Файл pjsip.conf не совсем пустой, но там пока совсем немного. Для ясности, из него было удалено все лишнее. После лабораторной вы можете взглянуть на дефолтный pjsip.conf.sample, который поставляется вместе с исходниками Asterisk в субдиректории configs/samples — там много опций и комментариев к ним. Все исходники на вашей рабочей станции расположены в расположены в директории /usr/src/.

Также, для вашего удобства создана символическая ссылка: /etc/asterisk/samples -> /usr/src/asterisk-x.x.x/configs/samples/

Пока можете проигнорировать секции [global] и [dpma_endpoint], но не удаляйте их. Заметьте, что секция с типом transport уже добавлена:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

Данный транспорт привязывается ко всем IP-адресам станции (0.0.0.0 означает все адреса), порт по умолчанию 5060, и использует протокол UDP для SIP сигнализации.

Далее вы создадите другие секции, необходимые для SIP устройства, и свяжите их вместе в секции с типом endpoint. Каждая секция типа endpoint должна ссылаться на секцию типа transport, aor и auth (если нужна аутентификация).

ЗАМЕТКА: секции различных типов могут иметь одинаковые имена. В рамках данного курса мы будем использовать именно такой подход.

Добавьте в pjsip.conf следующие строчки:

[7001]
type=aor
max_contacts=1
[7001]
type=auth
auth_type=userpass
password=digium
username=XX_sip_phone
[7001]
type=endpoint
transport=transport-udp
aors=7001
auth=7001
disallow=all
allow=ulaw,gsm
context=features

Тип секции aor означает "address of record" и определяет адрес местонахождения SIP устройства. max_contacts=1 означает, что не более чем одно устройство может зарегистрироваться под этой учетной записью в один момент времени. Asterisk будет сохранять в своей базе данных этот адрес, для отслеживания местонахождения устройства.

Секция типа auth используется для аутентификации запросов на регистрацию и при совершении клиентом звонков. auth_type=userpass означает аутентификацию по логину и паролю.

Секция типа endpoint описывает характеристики оконечного оборудования и собирает в себе всю необходимую информацию для взаимодействия Asterisk с SIP устройством. Строчки aors= и auth= ссылаются на секции соответствующего типа. Опции disallow и allow управляют разрешенными кодеками. Опция context= задает входящий контекст. Когда с телефона приходит входящий вызов, набранный номер должен будет совпасть с экстеншеном в контексте features.

Сохраните изменения и возвращайтесь в консоль Asterisk. Теперь нужно применить изменения командой pjsip reload

Если конфигурация с обеих сторон корректна, то при следующей попытке телефон успешно зарегистрируется. Возможно вы увидите сообщение WARNING в консоли про то, что у телефона не настроен mailbox. Но после того, как телефон зарегистрирован, все готовo для совершения звонка. Регистрацию SIP-телефона можно проверить, выполнив команду pjsip show endpoints

Вы должны увидеть один настроенный endpoint. Если телефон уже зарегистрирован, в выводе команды вы заметите адрес телефона, включая IP-адрес, в формате SIP URI, например:

Contact:  7001/sip:7001@192.168.102.1:5060

Если телефон не зарегистрировался, строка Contact будет отсутствовать. По-другому SIP регистрацию можно проверить командой database show. Астериск добавляет в AstDB отдельную запись для каждого зарегистрированного устройства. Если ваш телефон зарегистрирован, вы увидите что-то вроде:

/registrar/contact/7001;@d330dd21222257e800361e66a5189717: {..."uri":"sip:7001@192.168.101.61:5060;ob"...}

Шаг 3: Обзор диалплана

На предыдущих этапах мы настроили IP-телефон и SIP конфигурацию Астериска , чтобы они могли "говорить" друг с другом. Осталось настроить диалплан.

Открывайте в отдельном окне или вкладке редактора файл extensions.conf вашим любимым текстовым редактором. Отдельно, потому что к pjsip.conf вам придется в дальнейшем часто обращаться, так же как и к "extensions.conf".

Вы видите секции [general] и [globals] и несколько контекстов. В секции [default] нет ничего, кроме одной строчки с командой Hangup(). Это в целях безопасности. При некоторых обстоятельствах Астериск обращается к контексту [default] в поисках подходящего экстеншена. Отвергая автоматически все звонки в нем мы перестраховываемся от неожиданной обработки вызова.

В контексте [features] определен один экстеншен.

[features]        
exten => 8001,1,Playback(demo-congrats) 
 same => n,Hangup()  

Адрес диалплана определяется как extension@context, в нашем случае это 8001@features. По этому адресу Астериск первой выполняет команду Playback() с аргументом demo-congrats. Следующей выполняется команда Hangup(), завершающая вызов. Вам нужно усвоить синтаксис диалплана на данном этапе, так как в дальнейшем он будет только усложняться. Если нужны пояснения — обращайтесь к инструктору.

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

Шаг 4: Первый звонок

В CLI Астериска выполните

*CLI> dialplan show 8001@features

[ Context 'features' created by 'pbx_config' ]
  '8001' =>         1. Playback(demo-congrats)                    [pbx_config]
                    2. Hangup()                                   [pbx_config]

-= 1 extension (2 priorities) in 1 context. =-

Заметьте, как будет обработан вызов, когда он придет на данный экстеншен. Поглядывайте в CLI, когда звоните на номер 8001 с телефона.

*CLI>
-- Executing [8001@features:1] Playback("PJSIP/7001-00000000", "demo-congrats")
in new stack
-- <PJSIP/7001-00000000> Playing 'demo-congrats.gsm' (language 'en')
*CLI>

Вы должны услышать женский голос, произносящий “Congratulations…”. Пока вы его слушаете, наберите

*CLI> core show channels 
Channel              Location             State   Application(Data)             
PJSIP/7001-00000000  8001@features:1      Up      Playback(demo-congrats)       
1 active channel
1 active call
1 call processed
*CLI> 

Если вы не слышите голосового приветствия или сообщения существенно отличаются от приведенных выше, внимательно их прочитайте и постарайтесь понять, что они означают. Проверьте конфигурацию IP телефона и pjsip.conf и убедитесь, что нужные значения совпадают. Не забывайте сохранять изменения в конфигурационных файлах и применять их в Астериске соответствующими командами.

Команды, которые могут вам помочь обнаружить проблему:

*CLI> pjsip show aor 7001 
*CLI> pjsip show  auth 7001 
*CLI> pjsip show transport transport-udp
*CLI> pjsip show endpoint 7001
*CLI> dialplan  show  features 

Шаг 5: Команды CLI Asterisk

На данный момент у вас должен быть рабочий IP телефон с которого можно звонить в контекст [features]. В следующей лабораторной мы добавим еще одно SIP устройство, что бы можно было звонить между ними. Для завершения лабораторной, выполните следующие команды в CLI.

При наборе команд в CLI всегда пользуйтесь кнопкой Tab для автоматического дополнения набираемых команд. Это, во-первых, гарантирует вам отсутствие опечаток в команде, а во-вторых, вы легко найдете нужную вам команду, даже если не помните ее целиком.

*CLI> help
*CLI> core show channels
*CLI> core show uptime
*CLI> core show version
*CLI> core show license
*CLI> core show applications
*CLI> pjsip show channels (во время активного звонка)
*CLI> config show help res_pjsip
*CLI> config show help res_pjsip aor
*CLI> config show help res_pjsip aor max_contacts

Дополнительное задание

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

Настройте SIP клиента на вашем смартфоне и подключите его к Asterisk. Для Android рекомендуем использовать встроенный SIP клиент (при наличии) или CsipSimple. Для iPhone и других платформ — на ваш выбор (подойдет, например, Zoiper).