На этой странице описаны некоторые базовые тесты вызовов для новой работы SIP в Asterisk.
- Конфигурация для тестов
- Тесты входящего вызова
- Номинальный путь
- Проверка исходящих вызовов
- Номинальные испытания
- Тесты двухсторонних звонков
- Номинальные испытания, инициированные Asterisk
- Нестандартные тесты, инициированные Алисой
- Off-nominal tests, Asterisk-initiated
- Установка и включение
- Подключение SIP-телефона
- Настройка пакетного фильтра
- Настройка тестовых номеров
- Тестовый номер 501. Эхо-тест
Конфигурация для тестов
Конфигурация для этих тестов будет сделана из базового шаблона. Некоторые тесты потребуют добавления конфигурации в шаблон. При необходимости это будет указано в тесте.
Тесты входящего вызова
Тесты входящих вызовов включают вызов, инициированный с конечной точки «Алиса» на Asterisk.
Номинальный путь
Все тесты номинального пути будут выполняться несколько раз. Каждая итерация теста подробно описана в таблице ниже.
Воспроизведение файлов
Условия прохождения: Убедитесь, что звук правильно доходит до Алисы Убедитесь, что Asterisk отправляет Алисе BYE
Тест 2
Все нештатные тесты нужно будет запускать несколько раз. Подробная информация о каждой итерации приведена ниже:
Обратите внимание, что если конкретный тест требует нескольких итераций, общее количество итераций теста будет произведением количества итераций теста на количество итераций в приведенной выше таблице.
Неизвестный источник
Условия прохождения: Убедитесь, что Asterisk отправляет 403 Кэрол
Ошибка аутентификации
Этот тест требует нескольких итераций. Различия в каждой итерации подробно описаны в таблице ниже
.
Условия прохождения: Убедитесь, что Asterisk отклоняет все INVITE с учетными данными с ошибкой 401.
Неизвестный пункт назначения
Условия прохождения: Убедитесь, что Asterisk отправляет 404 Алисе
Несовместимые кодеки
Условия прохождения: Убедитесь, что Asterisk отправляет 488 Алисе
Проверка исходящих вызовов
Все эти тесты описывают вызовы от Asterisk к конечной точке «bob».
Номинальные испытания
Условия прохождения: Убедитесь, что аудио передается от Asterisk к Бобу. Убедитесь, что Asterisk отправляет BYE Бобу после завершения воспроизведения
Процедура: Удалить Боба из сети. Инициируйте звонок от Asterisk Бобу.
Условия прохождения: убедитесь, что Asterisk корректно завершает созданный сеанс после истечения времени таймера B (по умолчанию 32 секунды)
Боб не отвечает
Процедура: Инициировать звонок от Asterisk Бобу. Боб звонит, но никогда не берет трубку.
Условия прохождения: Убедитесь, что Asterisk отменяет исходящий вызов по истечении времени ожидания набора.
Боб занят
Процедура: Инициируйте вызов от Asterisk Бобу. Боб отвечает занятым ответом.
Условия прохождения: Убедитесь, что Asterisk получает 486 от Боба и подтверждает его. Убедитесь, что это приводит к уничтожению исходящего сеанса.
Вызов отменен
Процедура: Инициировать звонок от Asterisk Бобу. Завершите исходящий вызов до того, как Боб ответит.
Условия прохождения: Убедитесь, что Asterisk отправляет Бобу ОТМЕНУ. Убедитесь, что это приводит к уничтожению исходящего сеанса.
Боб несовместим
Процедура: Инициировать звонок от Asterisk Бобу. Боб отвечает на звонок, но с кодеками, несовместимыми с тем, что мы предлагаем.
Условия прохождения: Убедитесь, что Asterisk немедленно отправляет BYE после подтверждения 200 OK от Боба.
Тесты двухсторонних звонков
Процедура: Алиса звонит Бобу через Asterisk. Боб отвечает на звонок. Алиса и Боб обмениваются звуками. Алиса вешает трубку через 5 секунд.
Условия прохождения: Убедитесь, что Алиса слышит звук Боба, а Боб слышит звук Алисы. Убедитесь, что Asterisk отправляет 200 OK на BYE Алисы Убедитесь, что Asterisk отправляет BYE Бобу
Боб вешает трубку
Процедура: Алиса звонит Бобу через Asterisk. Боб отвечает на звонок. Алиса и Боб обмениваются звуками. Боб кладет трубку через 5 секунд.
Условия прохождения: Убедитесь, что Алиса слышит звук Боба, а Боб слышит звук Алисы. Убедитесь, что Asterisk отправляет 200 OK на BYE Боба Убедитесь, что Asterisk отправляет BYE Алисе
Номинальные испытания, инициированные Asterisk
Процедура: Asterisk инициирует вызов Алисы и направляет принятый вызов Бобу. Боб отвечает на вызов. Алиса и Боб обмениваются звуками. Алиса вешает трубку через 5 секунд.
Процедура: Asterisk инициирует вызов Алисы и направляет принятый вызов Бобу. Боб отвечает на вызов. Алиса и Боб обмениваются звуками. Боб вешает трубку через 5 секунд.
Нестандартные тесты, инициированные Алисой
Процедура: Удалить Боба из сети. Alice places a call to Asterisk to Bob
Pass Conditions: Ensure that Asterisk tears down the outgoing session properly after timer B expires (32 seconds by default) Ensure that Asterisk sends an error response to Alice
Procedure: Alice places a call to Asterisk to Bob Bob rings but never answers the phone.
Pass Conditions: Ensure that Asterisk cancels the outgoing call to Bob after the Dial timeout is reached. Ensure that Asterisk sends an error response to Alice
Procedure: Alice places a call to Asterisk to Bob Bob responds with a busy response.
Pass Conditions: Ensure that Asterisk receives the 486 from Bob and ACKs it. Ensure that Asterisk sends an error response (preferably a 486) to Alice.
Procedure: Alice places a call to Asterisk to Bob. Alice hangs up the outbound call before Bob answers.
Pass Conditions: Ensure that Asterisk sends a CANCEL to Bob. Ensure that Asterisk sends a 200 OK to Alice’s CANCEL and a 487 to Alice’s INVITE
Procedure: Alice places a call to Asterisk to Bob. Bob answers the call but with codecs that are incompatible with what we offered.
Pass Conditions: Ensure that Asterisk sends an immediate BYE after ACKing the 200 OK from Bob. Ensure that Asterisk sends a BYE to Alice.
Off-nominal tests, Asterisk-initiated
Procedure: Remove Bob from the network. Asterisk originates a call to Alice and directs the answered call to Bob
Pass Conditions: Ensure that Asterisk tears down Bob’s session properly after timer B expires (32 seconds by default) Ensure that Asterisk sends a BYE to Alice
Procedure: Asterisk originates a call to Alice and directs the answered call to Bob Bob rings but never answers the phone.
Pass Conditions: Ensure that Asterisk cancels the outgoing call to Bob after the Dial timeout is reached. Ensure that Asterisk sends a BYE to Alice
Procedure: Asterisk originates a call to Alice and directs the answered call to Bob Bob responds with a busy response.
Pass Conditions: Ensure that Asterisk receives the 486 from Bob and ACKs it. Ensure that Asterisk sends a BYE to Alice
Procedure: Asterisk originates a call to Alice and directs the answered call to Bob Hang up the outbound call before Bob answers.
Pass Conditions: Ensure that Asterisk sends a CANCEL to Bob. Ensure that Asterisk sends a 200 OK to Alice’s BYE
Procedure: Asterisk originates a call to Alice and directs the answered call to Bob. Bob answers the call but with codecs that are incompatible with what we offered.
В прошлой заметке Автоматическая настройка голосового шлюза Cisco ATA 186 я рассказал о том, как можно сбросить настройки шлюза, автоматически настроить его при помощи DHCP- и TFTP-серверов, обновить прошивку и продиагностировать проблемы с помощью сетевого сниффера.
В этой заметке я рассмотрю первичную настройку Asterisk, подключение к системе голосового шлюза Cisco ATA 186 по протоколу SIP и настройку тестовых номеров для проверки связи между телефоном и Asterisk. Хочу сразу предупредить, что не имею опыта работы с Asterisk и поэтому приведённая здесь конфигурация может привести ко взлому телефонной системы, что при наличии подключения к сети телефонного оператора может вылиться в большие счета за международную связь.
Установка и включение
# apt-get install asterisk
Включим запуск asterisk при загрузке системы:
# systemctl enable asterisk.service
# systemctl start asterisk.service
Для подключения к консоли запущенного asterisk можно ввести следующую команду:
# asterisk -r
Подключение SIP-телефона
Для начала переименуем все имеющиеся файлы, настраивающие номерной план, чтобы имеющиеся в них настройки не мешали нам:
# cd /etc/asterisk/
# mv extensions.conf extensions.conf.sample
# mv extensions.lua extensions.lua.sample
# mv extensions.ael extensions.ael.sample
Создадим пустой номерной план в файле /etc/asterisk/extensions.conf:
Контексты globals и general являются специальными. Имена остальных контекстов — произвольные, но они могут состоять только из латинских букв и цифр, знаков подчёркивания и минусов. Пробелы в именах контекстов не допускаются. В контексте phones осуществляется включение всех настроек из контекста internal.
Чтобы новые настройки номерного плана вступили в силу, выполним такие команды:
# asterisk -rx ‘module unload pbx_lua.so’
# asterisk -rx ‘module unload pbx_ael.so’
# asterisk -rx ‘module reload pbx_config.so’
# asterisk -rx ‘dialplan reload’
Теперь переименуем файл /etc/asterisk/sip.conf, чтобы он не мешал нам:
# mv sip.conf sip.conf.sample
Вместо него создадим тестовый файл /etc/asterisk/sip.conf со следующим содержимым:
Реальный пароль я рекомендую сгенерировать, например, при помощи программы pwgen. Если пароль не будет вводиться человеком вручную, можно сгенерировать сразу длинный пароль. Следующая команда выдаст варианты 16-символьных паролей, один из которых можно выбрать:
$ pwgen 16
Для усиления безопасности в разделе general первой указана настройка allowguest=no, запрещающая Asterisk обрабатывать звонки от незарегистрированных в системе SIP-клиентов. По умолчанию Asterisk выдаёт разные ошибки для случая, когда SIP-клиент использовал несуществующее имя пользователя, и для случая, когда SIP-клиент использовал верное имя пользователя, но указал неправильный пароль. Такая настройка по умолчанию облегчает подбор имени пользователя и его пароля взломщику, поэтому второй настройкой alwaysauthreject=yes в разделе general мы задаём выдачу одинакового сообщения об ошибке в обоих случаях.
Чтобы новые настройки модуля sip вступили в силу, выполним команды:
# asterisk -rx ‘reload chan_sip.so’
# asterisk -rx ‘sip reload’
Настройка пакетного фильтра
Таким образом, чтобы клиенты из сети 169.254.254.0/24 через интерфейс br0 смогли работать с Asterisk, нужно выполнить такую команду:
# iptables -A INPUT -i br0 -s 169.254.254.0/24 -d 169.254.254.1 -p udp -m multiport —dports 5060,10000:20000 -j ACCEPT
Предполагается, что iptables настроен в режиме учёта состояния подключений, для чего где-то в начале правил должна быть настроена команда, которая умеет пропускать однажды разрешённый трафик и ответный трафик:
# iptables -I INPUT -m conntrack —ctstate RELATED,ESTABLISHED -j ACCEPT
После этого можно попробовать посмотреть список зарегистрированных на Asterisk SIP-клиентов:
Настройка тестовых номеров
Наш первый номер в номерном плане будет просто воспроизводить музыку позвонившему абоненту. Для этого сначала установим пакеты, содержащий музыкальные файлы:
# apt-get install asterisk-moh-opsound-gsm asterisk-moh-opsound-g722 asterisk-moh-opsound-wav
Теперь добавим в контекст internal номерного плана в файле /etc/asterisk/extensions.conf следующую строчку:
Она предписывает воспроизвести музыку абоненту, позвонившему на номер 500. Чтобы новые настройки вступили в силу, перезагрузим номерной план и модуль moh:
# asterisk -rx ‘dialplan reload’
# asterisk -rx ‘moh reload’
Теперь можно попробовать поднять трубку телефона и набрать номер 500. Если в трубке начала воспроизводиться музыка, то тест успешно пройден.
Тестовый номер 501. Эхо-тест
Второй тестовый номер будет воспроизводить фразу о начале эхо-теста, затем повторять с небольшой задержкой всё произнесённое в трубку. Чтобы завершить эхо-тест, можно сразу повесить трубку, а можно нажать клавишу с решёткой. В этом случае будет воспроизведена фраза о завершении эхо-теста, после чего телефонная станция повесит трубку. Для начала установим пакеты, содержащие голосовые файлы на русском языке:
# apt-get install asterisk-core-sounds-ru-gsm asterisk-core-sounds-ru-g722 asterisk-core-sounds-ru-wav
Теперь добавим в файл /etc/asterisk/sip.conf к настройкам SIP-клиента ещё одну строчку, которая задаёт язык абонента:
Добавим в контекст internal номерного плана ещё один тестовый номер:
Осталось перезагрузить модули, настройки которых изменялись:
# asterisk -rx ‘reload chan_sip.so’
# asterisk -rx ‘reload app_playback.so’
# asterisk -rx ‘dialplan reload’
# asterisk -rx ‘sip reload’
Теперь можно попробовать поднять трубку телефона и набрать номер 501. В трубке должна прозвучать фраза о начале эхо-теста. Потом, если всё настроено правильно, в трубке можно будет услышать эхо собственного голоса. Для завершения теста можно нажать решётку или повесить трубку.
На этом пока всё. Буду рад услышать конструктивную критику, замечания и предложения.

