0

asterisk

Миграция с SIP на PJSIP в Asterisk

09.02.2023

В данной статье рассматриваются инструменты, советы с примерами по переходу от устаревшего канального драйвера chan_sip на новый chan_pjsip/res_pjsip, который был добавлен, начиная с версии Asterisk 12. По сути будет выполнена миграция SIP на PJSIP.

Скрипт преобразования

В загрузочном файле Asterisk содержится скрипт Python sip_to_pjsip.py, находящийся в подкаталоге contrib/scripts/sip_to_pjsip, который обеспечивает базовое преобразование конфигурации sip.conf в конфигурацию pjsip.conf (Миграция sip на pjsip). Он не предназначен для работы для каждого сценария или конфигурации. Для основных конфигураций это хороший пример того, как можно преобразовывать в конфигурацию для pjsip.conf.

Чтобы убедиться, что скрипт может читать любые файлы #include’d, запустите его из каталога /etc/asterisk или в другом месте с копией файла sip.conf и с включенными файлами. Входным файлом по умолчанию является sip.conf, а выходным файлом по умолчанию является pjsip.conf. Любые включенные файлы также будут преобразованы и записаны с префиксом pjsip_, если только они не были изменены с параметром –prefix = xxx.

Использование командной строки

# /path/to/asterisk/source/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py –help

Usage: sip_to_pjsip.py [options] [input-file [output-file]]

input-file defaults to ‘sip.conf’

output-file defaults to ‘pjsip.conf’

Options:

-h, –help show this help message and exit

-p PREFIX, –prefix=PREFIX

output prefix for include files

Пример:

# cd /etc/asterisk

# /path/to/asterisk/source/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py

Reading sip.conf

Converting to PJSIP…

Writing pjsip.conf

Примеры использования конфигураций sip.conf и pjsip.conf

Эти примеры содержат только конфигурацию, требуемую для sip.conf / pjsip.conf. Конфигурация для других файлов должна быть такой же, за исключением операторов Dial в вашем extensions.conf.

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

Пример конфигурации для SIP-аккаунта

В этом примере показана конфигурация, необходимая для:

  • два SIP-телефона должны совершать звонки на Asterisk или через него, мы также хотим иметь возможность звонить на них из Asterisk;
  • чтобы их можно было идентифицировать как пользователей (в старом chan_sip) или конечных точках (в новом res_sip / chan_pjsip);
  • оба устройства должны использовать аутентификацию по имени пользователя и паролю;
  • 6001 настроен для разрешения регистрации в Asterisk, а 6002 настроен для статического хоста.
sip.confpgsip.conf
[general] udpbindaddr=0.0.0.0 [6001] type=friend host=dynamic disallow=all allow=ulaw context=internal secret=1234 [6002] type=friend host=192.0.2.1 disallow=all allow=ulaw context=internal secret=1234[simpletrans] type=transport protocol=udp bind=0.0.0.0 [6001] type = endpoint context = internal disallow = all allow = ulaw aors = 6001 auth = auth6001 [6001] type = aor max_contacts = 1 [auth6001] type=auth auth_type=userpass password=1234 username=6001 [6002] type = endpoint context = internal disallow = all allow = ulaw aors = 6002 auth = auth6002 [6002] type = aor contact = sip:6002@192.0.2.1:5060 [auth6002] type=auth auth_type=userpass password=1234 username=6001

Пример конфигурации для SIP-транка

Этот пример показывает конфигурацию для организации SIP-транка, который обычно предоставляется провайдером SIP-телефонии. Это регистрация на удаленном сервере, аутентификация на нем и настройка одноранговой / конечной точки для разрешения входящих вызовов от поставщика услуг.

  • SIP-провайдер требует регистрации на своем сервере с именем пользователя «myaccountname» и паролем «1234567890»;
  • SIP-провайдер требует регистрации на своем сервере по адресу 203.0.113.1:5060;
  • SIP-провайдеру требуются исходящие вызовы на их сервер с тем же адресом регистрации, а также с использованием тех же данных аутентификации;
  • SIP-провайдер позвонит на ваш сервер с именем пользователя «mytrunk». Их трафик будет приходить только с 203.0.113.1.
sip.confpjsip.conf
[general] udpbindaddr=0.0.0.0 register => myaccountname:1234567890@203.0.113.1:5060 [mytrunk] type=friend secret=1234567890 username=myaccountname host=203.0.113.1 disallow=all allow=ulaw context=from-external[simpletrans] type=transport protocol=udp bind=0.0.0.0 [mytrunk] type=registration outbound_auth=mytrunk server_uri=sip:myaccountname@203.0.113.1:5060 client_uri=sip:myaccountname@203.0.133.1:5060 [mytrunk] type=auth auth_type=userpass password=1234567890 username=myaccountname [mytrunk] type=aor contact=sip:203.0.113.1:5060 [mytrunk] type=endpoint context=from-external disallow=all allow=ulaw outbound_auth=mytrunk aors=mytrunk [mytrunk] type=identify endpoint=mytrunk match=203.0.113.1

Отключение res_pjsip и chan_sip

Возможно, вы захотите продолжать использовать chan_sip в течение короткого времени в Asterisk 12+, пока вы переходите на res_pjsip. В этом случае лучше отключить res_pjsip, если вы не понимаете, как настроить их вместе.

Есть несколько способов отключить или удалить модули в Asterisk. Какой метод лучше всего, зависит от ваших намерений.

Если вы создали Asterisk с модулями PJSIP, но не собираетесь использовать их в данный момент, вы можете рассмотреть следующие методы:

Метод 1

Шаг 1. Отредактируйте файл modules.conf в вашем каталоге конфигурации Asterisk. (обычно /etc/asterisk/)

noload => res_pjsip.so

noload => res_pjsip_pubsub.so

noload => res_pjsip_session.so

noload => chan_pjsip.so

noload => res_pjsip_exten_state.so

noload => res_pjsip_log_forwarder.so

Наличие noload для вышеупомянутых модулей должно (на момент написания этой статьи) предотвратить загрузку любых связанных с PJSIP модулей.

Шаг 2. Перезапустите Asterisk!

# systemctl restart asterisk.service

Метод 2

  • Удалите все модули PJSIP из каталога модулей (обычно это /usr/lib/asterisk/modules)
  • Удалить файл конфигурации (pjsip.conf)
  • Удалите и переустановите Asterisk без модулей, связанных с PJSIP.
  • Если вы хотите использовать chan_pjsip вместе с chan_sip, вы можете изменить порт или интерфейс привязки вашего транспорта chan_pjsip в pjsip.conf

Трансляция сетевых адресов (NAT)

При настройке с помощью chan_sip одноранговые узлы, которые расположены (относительно Asterisk) за NAT, настраиваются с использованием параметра nat . В версии 1.8 и выше Asterisk доступны следующие параметры nat:

ЗначениеОписание
noНе выполняется обработка NAT, отличная от RFC 3581 .
force_rportЕсли параметр rport отсутствует, ответы все равно будут отправлены на исходный IP-адрес и порт, как если бы присутствовал параметр rport.
comediaОтправка media на адрес и порт, с которого Asterisk получил его, независимо от того, где SDP указывает, что его следует отправить
auto_force_rportАвтоматически разрешить отправку ответов на исходный IP-адрес и порт, как если бы присутствовал rport, если Asterisk обнаружит NAT. По умолчанию.
auto_comediaАвтоматически отправлять носитель на порт, с которого Asterisk получил его. Независимо от того, где SDP указывает, что его следует отправить, если Asterisk обнаружит NAT.

В chan_pjsip параметры endpoint, которые управляют поведением NAT:

  • rtp_symmetric – отправляет media на адрес и порт, с которого Asterisk его получает. Независимо от того, где SDP указывает, что его следует отправить;
  • force_rport – отправляет ответы на исходный IP-адрес и порт, как если бы порт присутствовал, даже если это не так;
  • rewrite_contact – переписать SIP. Контакт с адресом источника и портом, чтобы последующие запросы перешли на этот адрес и порт.

Таким образом, аналогично следующее:

chan_sip (sip.conf)chan_pjsip (pjsip.conf)
[mypeer1] type=peer nat=yes ;… [mypeer2] type=peer nat=no ;… [mypeer3] type=peer nat=never ;… [mypeer4] type=peer nat=route ;…[mypeer1] type=endpoint rtp_symmetric=yes force_rport=yes rewrite_contact=yes ;… [mypeer2] type=endpoint rtp_symmetric=no force_rport=no rewrite_contact=no ;… [mypeer3] type=endpoint rtp_symmetric=no force_rport=no rewrite_contact=no ;… [mypeer4] type=endpoint rtp_symmetric=no force_rport=yes rewrite_contact=yes ;…

На этом миграция sip на pjsip выполнена.

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

ports
Previous Story

Проверка занятости порта сервисом в Linux

gitlab docker
Next Story

GitLab-сервер в docker compose

Latest from Blog

How to Install Proxmox Virtual Environment on Debian 11

Introduction Proxmox Virtual Environment is an open-source virtualization management program. It provides a single platform to manage services and functions like KVM Hypervisor, Linux Containers (LXC), storage & networking. In addition, it

Настройка Wireguard VPN на своем сервере

Настройка серверной части После успешного подключения я напишу несколько команд и описание того что они производят для понимания процесса: Обновляем список пакетов в репозиториях apt update Обновим сами пакеты apt upgrade -y

Установка Zabbix 7 c NGINX + PostgreSQL + TimescaleDB на Ubuntu Server или Debian

Сервер Zabbix предполагает достаточную вариативность в выборе СУБД и веб-сервера, поэтому многое тут будет зависеть от персональных предпочтений. Однако расширение TimescaleDB позволяет поддерживать высокий уровень производительности и масштабирования при работе с временными

Настройка простого беспроводного репитера на устройстве MikroTik

При развертывании беспроводных сетей достаточно часто возникают ситуации, когда в некоторых местах квартиры или офиса мощность Wi-Fi сигнала недостаточна для уверенной работы. Конечно, наиболее действенным решением является создание централизованно управляемой сети и

Настройка и использование Redis

В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется. Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных
Go toTop