Александр Михеенко
24.04.2020
890363

PJSIP: Подключение абонентов. Идеология конфига

Мы продолжаем цикл статей по библиотеке PJSIP, в этой статье будет подключение абонентов на примере FreePBX Distro 15 (Asterisk 16).  Статьи по PJSIP: Установка Asterisk 16 на centos 8 TLS SRTP для драйвера PJSIP в Asterisk 15 Pjsip. Базовая настройка. Идеология настройки. Описание параметров конфигурации PJSIP в Asterisk с примерами Работа PJSIP за NAT Вопросы […]

Мы продолжаем цикл статей по библиотеке PJSIP, в этой статье будет подключение абонентов на примере FreePBX Distro 15 (Asterisk 16). 

Статьи по PJSIP:

Установка Asterisk 16 на centos 8

TLS SRTP для драйвера PJSIP в Asterisk 15

Pjsip. Базовая настройка. Идеология настройки.

Описание параметров конфигурации PJSIP в Asterisk с примерами
Работа PJSIP за NAT

Вопросы безопасности канала PJSIP в Asterisk

Настройка realtime для PJSIP на Centos 7

Приступим к подключению абонентов и по ходу разберём конфигурацию.

Добавление внутренних номеров задаётся в файле pjsip.conf по умолчанию расположен он в каталоге /etc/asterisk/. Файл внутри условно поделен  на секции, а Freepbx разделяет секции на отдельные .conf  файлы. Внутри секции разделяются именами, которые заключены в [квадратные скобки]. После идёт конфигурация содержащая в себе опцию и её значение через знак = равно. 

Консоль сервера с FreePBX каталог etc/asterisk | grep pjsip
Консоль сервера с FreePBX каталог etc/asterisk | grep pjsip

Файлы pjsip в каталоге /etc/asterisk

Конфигурационный файл pjsip.conf в FreePBX
Конфигурационный файл pjsip.conf в FreePBX
Важно отметить, что редактировать файлы с пометкой "Do NOT edit this file as it is auto-generated by FreePBX." действительно не стоит, лучше перейти на веб-интерфейс и там производить настройку. Такие файлы обычно включают в себя кастомный аналог  *название файла*custom.conf , который можно настраивать по своему желанию.

Для подключения нам понадобятся секции endpoint, auth, aor и transport.

Transport

Секция transport. Настраивает протоколы для передачи данных. UDP, TCP, WebSockets (WS, WSS) и методы шифрования TLS/SSL.

В FreePBX настройка производится в settings — Asterisk SIP settings — SPI Settings [chan_pjsip]

Веб-интерфейс FreePBX вкладка Asterisk SIP Settings
Веб-интерфейс FreePBX вкладка Asterisk SIP Settings

Есть важное ограничение при создание секций транспорта:

Они не могут использовать одну и ту же комбинацию IP + порт или IP + протокол. То есть каждая секция, которая связывается с тем же IP-адресом, что и другая, должна использовать отличный порт или протокол.

Для простого звонка нам будет достаточно и базовых настроек FreePBX.

Веб-интерфейс FreePBX вкладка
Веб-интерфейс FreePBX вкладка

Отмечу, что при изменение настроек протоколов для их применения необходимо перезагрузить Asterisk.

Можно обойтись и без перезагрузки если выставить опцию на транспорте allow_reload=yes, однако он приводит  к сбросу вызова и еще ряду проблем.    

Сделать это лучше через консоль :

systemctl stop asterisk — останавливаем asterisk

systemctl status asterisk — проверяем его статус

systemctl start asterisk — запускаем asterisk

systemctl status asterisk — проверяем что он запустился

Перезагрузка Asterisk в консоли сервера
Перезагрузка Asterisk в консоли сервера

Можно перезагрузить и через интерфейс CLI командой

freepbx*CLI> core restart now

Чтобы войти в интерфейс CLI на сервере введите

asterisk -r

Посмотрим в CLI изменился ли транспорт для этого вводим команду

freepbx*CLI> pjsip show transports

Интерфейс Asterisk CLI
Интерфейс Asterisk CLI

Отлично, теперь рассмотрим конфигурацию этой секции на нашем примере.

[tcp-transport]

type=transport

protocol=tcp

bind=0.0.0.0:5060

external_media_address=98.76.54.32

external_signaling_address=98.76.54.32

allow_reload=no

tos=cs3

cos=3

local_net=192.168.32.0/24

type                 — тип секции

protocol          — используемый протокол

bind                — привязывает IP адрес и порт, которые будет использовать эта секция

external_media_address — указывает внешний ip-адрес АТС при нахождении ее за NAT для RTP протокола

external_signaling_address — указывает внешний ip-адрес АТС при нахождении ее за NAT для SIP сигнализации

tos=0               — включает TOS по умолчанию 0

cos=0              — включает COS по умолчанию 0

local_net         — указывается локальная сеть, используется если есть NAT

Как узнать возможные варианты значений и параметры по умолчанию?

В этом поможет встроенная справка интерфейса командной строки (CLI):

config show help res_pjsip <секция> <опция>

Секция Endpoint

Endpoint определяет многочисленные параметры SIP , а также связь с такими секциями как auth, aor, transport. Endpoint по сути профиль для конечной точки, такой как телефон или удаленный сервер.

В FreePBX настраиваются сразу все эти секции. Для этого переходим в Applications — Extensions , чтобы добавить номер выбираем Add Extension — Add New SIP [chan_pjsip] Extension 

Веб-интерфейс FreePBX вкладка Extension
Веб-интерфейс FreePBX вкладка Extension

Во вкладке General

Add Extension

User Extension: 101                         — Задаём номер данному пользователю

Display Name: Phonerlite                 — Имя пользователя

Secret: <пароль пользователя>       — генерируется автоматически, можно задать свой.

Этих настроек будет достаточно для простых звонков внутри локальной сети, да и для звонков через транк тоже вполне хватит.
Применяем настройки кнопкой Submit затем Apply Config.

После применения настроек, можно подключать нашего первого абонента.

Как настроить и установить софтфон или IP телефон можно найти у нас на сайте.

Веб-интерфейс FreePBX вкладка Add Extension
Веб-интерфейс FreePBX вкладка Add Extension

В CLI можно посмотреть настройки extensions с помощью команды

freepbxCLI> pjsip show endpoints — показывает все заведенные endpoints freepbxCLI> pjsip show endpoint 101 — покажет 101 endpoint

Теперь рассмотрим файл конфигурации endpoint, который был автоматически сгенерирован и выделим только самое необходимое, для создания вызова.

Веб-интерфейс FreePBX вкладка Add Extension
Веб-интерфейс FreePBX вкладка Add Extension

type                 — тип здесь указывается, что эта секция endpoint

context            — контекст диалплана, за него отвечает файл extensions.conf

disallow          — запрещает медиа кодеки, можно запретить несколько (ulaw&g729)

allow               — разрешает медиа кодеки

transport         — тип транспортного протокола для этого пользователя

aors                 — AoR используемая ENDPOINT

auth                 — Объект аутентификации соотнесенный с endpoint

;=====EXTENSION=====

[101]

type=endpoint

context=from-internal

disallow=all

allow=alaw

transport=tcp-transport

auth=auth-101

aors=101

Секция AUTH

Отвечает за аутентификацию содержит в себе опции и полномочия для входящих и исходящих регистрации.  Разные endpoint и registrations могут использовать одну и ту же секцию auth.

Задаём тип авторизации, пароль и логин.

type                      —  тип auth
auth_type                 —  тип аутентификации (md5 или userpass)
password                  — пароль для аутентификации пользователя

username                  — имя абонента

[auth-101]

type=auth

auth_type=userpass

password=44cb21465ce223ee02265348bcabdd5b

username=101

Секция AOR (Address of Record)

Определяет как Asterisk будет связываться с endpoint. Если не задана секция AOR Asterisk не сможет подключиться к точкам быть то телефон или транк. Здесь также задаются соответствия голосовой почте, MWI, продолжительность действия регистрации -expiration и настройки qualify (периодической отправки SIP сообщений OPTIONS для мониторинга состояния устройств)

type     — тип секции

max_contacts             — максимальное число контактов SIP User Agent  , которые могут быть подключены к этому aor.  Если у вас например 3 устройства, но нужен только 1 внутренний номер.

qualify_frequency      — время отправки keep alive на устройство

[101]

type=aor

max_contacts=1

qualify_frequency=60

Для применения настроек придется перезагрузить Asterisk.

В ClI это команда:

freepbx*CLI> core reload

Перезагрузить из консольный строки Linux

asterisk -rx «core reload»

Создадим ещё одного абонента с номером 102, он будет за NAT

При создании Extension, открываем вкладку Advanced

RTP Symmetric: Yes           — отправляет носитель на адрес и порт, с которого Asterisk получает его, независимо от того, где SDP указывает, что его следует отправить.

Rewrite Contact: Yes           — отправлять ответы на исходный IP-адрес и порт, как если бы порт присутствовал, даже если это не так

Force rport: Yes                   — переписать SIP. Контакт с адресом источника и портом запроса, чтобы последующие запросы перешли на этот адрес и порт.

Эти опции нужно добавить в секцию endpoint к нужному абоненту.

rtp_symmetric=yes

rewrite_contact=yes

force_rport=yes

Секцию transport мы уже подготовили для NAT и её можно не изменять.

Подробнее о Работе PJSIP за NAT

Веб-интерфейс FreePBX вкладка Add Extension - Advanced
Веб-интерфейс FreePBX вкладка Add Extension — Advanced

В софтфоне MicroSIP создаю аккаунт 102 . Так как я подключаюсь к роутеру на котором стоит проброс порта с 60101 на 5060 до Asterisk. В настройках аккаунта адрес сервера указываю с портом. PhonerLite 101 подключается напрямую. После успешного подключения, делаю вызов. Отвечаю на звонок, звук есть в обоих направлениях.

Тестовый звонок
Тестовый звонок
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

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

Надежен в эксплуатации.

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

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

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

Отличная масштабируемость.

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

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

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