0

asterisk

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

В данной статье рассматриваются инструменты, советы с примерами по переходу от устаревшего канального драйвера 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

Игра системный администратор

docker run -p 8080:8080 -p 3390:3389 –name play-adobe-flash-after-eol jchprj/play-adobe-flash-after-eolзайти localhost:8080, и открыть эту страницу, или https://serveradmin.ru/files/sysadmin.swf

Что делать, когда на сервере кончаются файловые дескрипторы (inode)

Нередки случаи, когда причиной проблем на сервере становится переполнение файловых дескрипторов (inode). Симптомы точно такие же, как при переполнившемся диске, только вот диск при этом может оказаться свободным. Количество inode каждой файловой системы определяется при разворачивании ОС.

CI/CD для начинающих: деплой React-приложения

Следующий шаг после разработки веб-приложения — размещение его на сервере. Независимо от сложности проекта или используемой инфраструктуры, общий процесс остается одинаковым: нужно «упаковать» код в CI/CD-конвейер и отправить на сервер. В тексте рассмотрим,

Настройка iptables в Linux от Selectel

Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables. Эта инструкция — часть курса «Введение в сетевую безопасность». Смотреть весь курс Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables

nginx и apache на одном сервере

В этом руководстве мы рассмотрим процедуру установки и настройки работы двух web-серверов с целью использования преимуществ каждого из них, где Nginx – как frontend и Apache – как backend. Установка и настройка
Go toTop