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

Подключение к провайдеру с регистрацией и без по PJSIP

Как подключить провайдера по PJSIP с регистрацией или без неё? На этот вопрос я дам ответ в статье на примере подключения к популярным провайдерам. Статья входит в цикл статей по PJSIP: Установка Asterisk 16 на centos 8 TLS SRTP для драйвера PJSIP в Asterisk 15 Pjsip. Базовая настройка. Идеология настройки. Описание параметров конфигурации PJSIP в […]

Как подключить провайдера по PJSIP с регистрацией или без неё? На этот вопрос я дам ответ в статье на примере подключения к популярным провайдерам.

Статья входит в цикл статей по PJSIP:

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

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

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

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

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

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

Раскрывать секреты подключения транков по PJSIP будем на FreePBX Distro 15 с Asterisk 16.

Транк в Asterisk настраивается в текстовом файле /etc/asterisk/pjsip.conf , который внутри поделён на так называемые секции. В FreePBX pjsip.conf разделён на отдельные файлы по основным секциям через опцию include. Для подключения к провайдеру нужно прописать настройки в секциях transports, endpoint, aor, auth, registration, identify.

Начнём с transports

Она отвечает за то по какому протоколу будет осуществляться подключение доступные UDP, TCP, WebSockets (WS, WSS) и методы шифрования TLS/SSL.

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

 Страница SIP Settings в FreePBX
Страница SIP Settings в FreePBX

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

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

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

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

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

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

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

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

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

freepbx*CLI> core restart now

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

asterisk -r

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

freepbx*CLI> pjsip show transports

Файл pjsip.transports.conf который был автоматически сгенерирован FreePBX, имеет теперь вот такую секцию транспорт

[0.0.0.0-tcp]

type=transport

protocol=tcp

bind=0.0.0.0:5060

external_media_address=98.76.54.321

external_signaling_address=98.76.54.321

allow_reload=no

tos=cs3

cos=3

local_net=192.168.32.0/24

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

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

Транспортный протокол задан можно переходить к созданию транка. Создадим его в веб-интерфейсе FreePBX, а затем посмотрим что там произошло в файлах.

Итак в браузере открываем веб-интерфейс нашей станции.

Если вы не знаете как перейти на веб-интерфейс, то окно приветствия вам напомнит.

Консольное окно сервера с FreePBX
Консольное окно сервера с FreePBX

Переходим Connectivity — Trunks

Начальная страница в веб-интерфейсе FreePBX
Начальная страница в веб-интерфейсе FreePBX

На странице Trunk жмём кнопку  Add Trunk — Add SIP (chan_pjsip) Trunk

Подключение к оператору Zadarma

Откроется окно Add Trunk вкладка General.

Заполняем:

  • Trunk Name  – Имя транка (обычно <название оператора>_<номер транка>) может быть любым
  • Hide CallerID – спрятать CID при исходящем вызове.
  • Outbound CallerID – CallerID для исходящего вызова.
  • CID Options – определяет какие CID  будут разрешены в этом транке – разрешить все, запретить иностранные и т.д.
  • Maximum Channels – максимальное количество одновременных  исходящих  вызовов для этого транка. Пустое значение без ограничений.
  • Asterisk Trunk Dial Options – параметры команды Dial, которые будут использоваться при вызове этого транка. Для переопределения параметров по умолчанию, установите флажок в значение «Override», а затем обратно
  • Continue if Busy – если Yes перенаправляет вызов на следующий транк даже если канал сообщает «BUSY» или «INVALID NUMBER».
  • Disable Trunk – отключает транк.
  • Monitor Trunk Failures – если установлен параметр в значение Yes, возможно указать пользовательский сценарий AGI, который будет вызываться для отчетов, журналов, электронной почты или других действий при падении транка или в случаях таких ошибок как NOANSWER, CANCEL.
Страница добавления транка в FreePBX
Страница добавления транка в FreePBX

Я заполнил только название транка, т.к. на этом транке Outbound CallerID будет заменен оператором на иной, а остальные опции мне не нужны.

Переходим к вкладке pjsip Settings, в ней ещё 3 подвкладки General, Advanced, Codecs. Идём по порядку General в ней указываем: 

  • Username        – сюда указываем тот логин что выдает оператор
  • Secret             – пароль выданный оператором для этого транка
  • Authentication – тип аутентификации обычно Outbound, меняйте только если этого требует оператор. Если вы выберете «None», все вызовы с или на указанный SIP-сервер не проходят аутентификации. Установка «None» может быть небезопасной!
  • Registration   – как регистрируемся на сервере оператора и нужно ли его регистрировать. Обычно операторы не отвечают на наш запрос о регистрации, так что оставляйте Send. Если только оператор не требует иного.
  • Language Code  – язык для стандартных голосовых подсказок.
  • SIP Server  – SIP адрес оператора, обычно выдается вместе с логином и паролем
  • SIP Server Port  – SIP порт сервера          
  • Context  – контекст для входящего звонка
  • Transport  –  выбираем транспортный протокол, из тех что мы задали ранее.
Вкладка pjsip Setting в Add Trunk
Вкладка pjsip Setting в Add Trunk

Подвкладка Advanced здесь много настроек не бойтесь, нам нужны не все, а только вот такие:

  • Contact User – сюда указываем тот логин что выдает оператор
  • From Domain – имя домена, используемое в заголовке поля From в запросах к этому транку.
  • From User – всё тот же логин, что выдаёт провайдер.
  • Client URI – URI SIP-клиента, используемый при попытке исходящей регистрации. Этот параметр автоматически генерируется УАТС, если оставить его пустым. Формат: sip:[username]@[ip]:[port].
  • Server URI – URI SIP-сервера регистрации. Этот параметр генерируется автоматически, если оставить его пустым. Формат: sip:[username]@[ip]:[port].
  • AOR Contact – Постоянный контакт AoR для регистрации endpoint.

Support Path – Если этот параметр включен, исходящие запросы REGISTER объявят о поддержке заголовка, чтобы промежуточные прокси-сервера могли добавлять их в свои заголовки по необходимости.

Вкладка Advanced в pjsip Setting
Вкладка Advanced в pjsip Setting

В подвкладке Codecs по умолчанию стоят кодеки ulaw и alaw т.к. их поддерживают большинство (если не все) IP-телефонов и софтфонов оставим без изменения.

Жмём Submit , затем Apply Config.

Проверим подключился ли транк. Можно перейдя нажав вверху вкладку Reports — Asterisk info. Либо через интерфейс CLI командой

freepbx*CLI> pjsip show registrations 

Вкладка Reports - Asterisk info
Вкладка Reports — Asterisk info

Если вы не видите заветного Registered

  1. Перезагрузите Asterisk через консоль ещё разок.
  2. Проверьте правильно ли заполнены поля настроек транка и нету ли там ошибок. Не тот пароль, лишний символ в названии, пробел в домене и т.п.
  3. Посмотрите свой Firewall, как на сервере так и на роутере, разрешен ли на нём домен, IP-адрес, порт до оператора и обратно. 
  4. Если и это не помогает смотрите на нашем сайте статьи по траблшутингу — Оперативная диагностика SIP в консоли Asterisk каналы PJSIP и CHAN_SIP

Ну вот можно теперь можно посмотреть как наш транк сконфигурирован в файлах.

Файл pjsip.registration.conf отвечает за исходящую регистрацию

[Zadarma]

type=registration

transport=0.0.0.0-tcp

outbound_auth=Zadarma

retry_interval=60

fatal_retry_interval=30

forbidden_retry_interval=30

max_retries=10000

expiration=3600

line=yes

endpoint=Zadarma

auth_rejection_permanent=no

contact_user=691515

server_uri=sip:sip.zadarma.com

client_uri=sip:[email protected]

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

[Zadarma]

type=auth

auth_type=userpass

password=PassWord0123

username=691515

Файл pjsip.aor.conf определяет как Asterisk будет связываться с endpoint. Если не задана секция AOR Asterisk не сможет подключиться к точкам будь то телефон или транк.

[Zadarma]

type=aor

qualify_frequency=60

contact=sip:sip.zadarma.com

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

[Zadarma]

type=endpoint

transport=0.0.0.0-tcp

context=from-pstn

disallow=all

allow=ulaw,alaw

aors=Zadarma

send_connected_line=false

language=ru

outbound_auth=Zadarma

from_domain=sip.zadarma.com

from_user=691515

contact_user=691515

user_eq_phone=no

t38_udptl=no

t38_udptl_ec=none

fax_detect=no

trust_id_inbound=no

t38_udptl_nat=no

direct_media=no

rtp_symmetric=yes

dtmf_mode=auto

Файл pjsip.identify.conf определяет endpoint с помощью IP-адреса источника.

[Zadarma]

type=identify

endpoint=Zadarma

match=sip.zadarma.com

Если сейчас попробовать сделать звонок на ATC скорее всего ничего не получится. Так-как нужно настроить входящие и исходящие маршруты, а также подключить абонентов.
Настройка и управление исходящей маршрутизации во FreePBX 13

Настройка и управление входящей маршрутизации во FreePBX 13 — Voxlink

Подключение к оператору Zadarma по IP адресу

Теперь подключим zadarma с авторизацией по IP адресу. Для этого у вас Asterisk должен быть на “белом” IP адресе. И сделать соответствующие настройки в личном кабинете Zadarma.

В личном кабинете, в разделе «Настройки — Подключение по SIP» внизу страницы нажмите «Добавить SIP-транк».

Укажите название для SIP-транка и выберите один из существующих сип-логинов, он будет идентификатором SIP-транка и станет недоступен для регистрации(приема входящих звонков).

Добавьте ваш статический IP адрес или несколько IP адресов (Например если к вашей АТС подведен основной интернет-канал и резервный).

Теперь создаём новый либо редактируем уже существующий (как в моём случае).

Открываем Connectivity — Trunks — <ваш транк> — pjsip Settings

Подвкладка General

Включаем в Authentication и Registration значение None.

SIP Server sip.zadarma.com

Вкладка General в Add/Edit Trunk
Вкладка General в Add/Edit Trunk

Подвкладка Advanced

Так как регистрируемся по IP адресу нам понадобятся указать для endpoint From Domain, для AOR указать contact и для секции identify match в которой будут сравниваться IP адреса. Zadarma указывает, что для подключения по IP-адресу нужны следующие сравнения.

match=sip.zadarma.com

match=sipurifr.zadarma.com

match=sipurims.zadarma.com

match=sipuriny.zadarma.com

Указываем их через запятую.

Вкладка Advanced в Add/Edit Trunk
Вкладка Advanced в Add/Edit Trunk

После сохранения настроек необходимо позвонить на номер 8888 с этого транка для подтверждения нашего IP-адреса.

В конфигурационных файлах на сервере по этому транку секции должны быть в aor, endpoint и identify. 

[Zadarma]

type=aor

qualify_frequency=60

contact=sip:sip.zadarma.com

[Zadarma]

type=endpoint

transport=0.0.0.0-tcp

context=from-pstn

disallow=all

allow=ulaw,alaw

aors=Zadarma

send_connected_line=false

language=ru

from_domain=sip.zadarma.com

user_eq_phone=no

t38_udptl=no

t38_udptl_ec=none

fax_detect=no

trust_id_inbound=no

t38_udptl_nat=no

direct_media=no

rtp_symmetric=yes

dtmf_mode=auto

[Zadarma]

type=identify

endpoint=Zadarma

match=sipurifr.zadarma.com,sipurims.zadarma.com,sipuriny.zadarma.com

Подключение к оператору MSM.ru

Оператор нам выдал следующие данные
логин: 1077077
пароль: password123

домен для подключения: sip.ipport.net

порт стандартный 5060

Добавляем новый транк Connectivity — Trunks — <ваш транк> — pjsip Settings

Даем имя нашему транку в Trunk Name:  MSM.ru

Открываем pjsip Settings, подвкладка General здесь всё как и для Zadarma см.в.

Username:       1044077

Secret:             password123

Authentication: Outbound

Registration:   Send

SIP Server:      sip.ipport.net

SIP Server Port:         5060

Вкладка General в Add/Edit Trunk
Вкладка General в Add/Edit Trunk

Двигаемся дальше Advanced.

Contact User: 1044077

From Domain: sip.ipport.net

From User: 1044077

Client URI: sip:[email protected]

Server URI: sip:sip.ipport.net

AOR Contact: sip:sip.ipport.net

Вкладка Advanced в Add/Edit Trunk
Вкладка Advanced в Add/Edit Trunk

Сохраняем, а затем и применяем настройки.
Проверим подключился ли транк.

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

Подключение к оператору Mango Office

У нас есть:

Строка регистрации выданная оператором hrid:[email protected]
Отлично всё что нужно одной строкой.

Поясню hrid это логин. символы после “:” двоеточия и до “@” это пароль, домен вполне очевиден braslet24.mangosip.ru

По привычному маршруту заходим в Connectivity — Trunks — Add Trunk — Add SIP (chan_pjsip) Trunk

Задаём название транку и открываем pjsip Settings.

Заполняем:

Username:       hrid

Secret:             password123

Authentication: Outbound

Registration: Send

SIP Server:                 braslet24.mangosip.ru

SIP Server Port:         5060

Вкладка General в Add/Edit Trunk
Вкладка General в Add/Edit Trunk

Подвкладка Advanced заполняем:

Contact User:             hrid

From Domain:                        braslet24.mangosip.ru

From User:                 hrid

Client URI:                sip:[email protected]

Server URI:                sip:braslet24.mangosip.ru

AOR Contact:                        sip:braslet24.mangosip.ru

Вкладка Advanced в Add/Edit Trunk
Вкладка Advanced в Add/Edit Trunk

Проверяем регистрацию.

Интерфейс Asterisk CLI
Интерфейс Asterisk CLI
Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Василий
Василий
01.04.2021 10:05

Просто потрясающее объяснение! Спасибо большое! Наконец-то решил свою проблему.

Сергей
Сергей
08.10.2021 20:37

Очень доступно, спасибо. Но есть вопрос.
Если оператор для регистрации выделяет порт не 5060, а например 5061, то как быть? Транспорт же указан 0.0.0.0:5060. И в браузер для pjsip вроде бы нет возможности добавить ещё один транспорт.

Александр
Александр
11.10.2021 11:40
Ответить на  Сергей

Добрый день, транспорт на Вашей АТС, это то, что вы слушаете (Bind Port). Если провайдер указал порт 5061, то его нужно указать в настройках транка к нему (SIP Server Port).

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

Я - Першин Артём, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.