Меню Рубрики

Установка и настройка opensips

Установка и начальная настройка Opensips 2.2

Opensips это прямой конкурент kamailio, на текущий момент времени на мой взгляд, opensips развивается лучше и активнее чем kamailo. Оба продукта функционально схожи и конфигурируются одинаково. Решения в коде для kamailio с не большими изменениями можно использовать для opensips и наоборот. В этой статье будет приведен пример установки, начального конфигурирования opensips, кроме того будут приложены полноценные файлы маршрутизации. Конструктивно локальный вызов будет выглядеть как путь прохождения метода INVITE от UA(A) через opensips1 в сторону opensips2 который будет релеить INVITE в сторону медиасерверов Asterisk, Asterisk будет разворачивать вызов к opensips2, opensips2 вернет INVITE opensips1 и приземлит вызов к UA(B).

Схема работы:
__________________________________________________________________________
UA(A) —> Opensips1 —> Opensips2 —>Asterisk —
|
UA(B) Установка и настройка opensips:
Готовим сервер
apt-get install net-tools tcpdump sngrep mc dnsutils git-core htop

Скачиваем версию LTS
cd /usr/local/src
git clone -b 2.2 https://github.com/OpenSIPS/opensips.git opensips_2_2

Зависимости для сборки
apt-get install gcc build-essential make bison flex dh-systemd libconfuse-dev libcurl4-gnutls-dev libdb-dev libexpat1-dev libgeoip-dev libhiredis-dev
libjson-c-dev libldap2-dev liblua5.1-dev libmemcached-dev libmicrohttpd-dev libncurses5-dev libpcre3-dev libperl-dev libpq-dev librabbitmq-dev libradcli-dev
libsctp-dev libsnmp-dev libsqlite3-dev libssl-dev libxml2-dev python unixodbc-dev xsltproc python-dev libdbi-perl libdbd-pg-perl libfrontier-rpc-perl libterm-readline-gnu-perllibberkeleydb-perl default-libmysqlclient-dev libboost-regex-dev openssl ssl-cert

Создаем необходимые файлы и директории
mkdir /var/run/opensips
cd packaging/debian/common
cp opensips.default /etc/default/opensips
cp opensips.init /etc/init.d/opensips
chmod 755 /etc/init.d/opensips
adduser —quiet —system —group —disabled-password —shell /bin/false —gecos «Opensips» —home /var/run/opensips opensips
set ownership to /var/run/opensips
chown opensips:opensips /var/run/opensips
update-rc.d opensips defaults 99
nano /root/.bash_profile
PATH=$PATH:/usr/local/sbin
export PATH
touch /var/log/opensips.log
chown root:opensips /var/log/opensips.log

Собираем opensips
make menuconfig, выбрал
— aaa_radius
b2b_logic
cached_memcached
carrierroute
compression
cpl_c
db_postgres
dialplan
regex
— identity
json
lua
mmgeoip
perl
proto_sctp
proto_tls
presence
presence_dialoginfo
presence_mwi
presence_xml
python
snmpstats
tls_mgm
xcap
Собираем
make

Соберем пакет для debian
Готовим архив
tar -czvf opensips_2.2.5.orig.tar.gz opensips-2.2.5/
apt-get install dh-make
dh_make —createorig
nano debian/control (descriptions)
Description: Opensips-2.2.5-TLS-MAIN
dpkg-buildpackage –rfakeroot
dpkg –I пакет opensips

Подготовка окружения opensips
mkdir /etc/opensips-2.2.5-TLS
ln -s /usr/local/etc/opensips/ /etc/opensips-2.2.5-TLS/cfg
ln -s /usr/local/lib64/opensips/modules/ /etc/opensips-2.2.5-TLS/modules
ln -s /usr/local/sbin/opensips/ /etc/opensips-2.2.5-TLS/command
mkdir console
ln -s /usr/local/sbin/opensips /etc/opensips-2.2.5-TLS/console/opensips
ln -s /usr/local/sbin/opensipsctl /etc/opensips-2.2.5-TLS/console/opensipsctl
ln -s /usr/local/sbin/opensipsdbctl /etc/opensips-2.2.5-TLS/console/opensipsdbctl
ln -s /usr/local/sbin/opensipsunix /etc/opensips-2.2.5-TLS/console/opensipsunix
ln -s /usr/local/sbin/osipsconfig /etc/opensips-2.2.5-TLS/console/osipsconfig
ln -s /usr/local/sbin/osipsconsole /etc/opensips-2.2.5-TLS/console/osipsconsole
ln -s /etc/default/opensips /etc/opensips-2.2.5-TLS/cfg/opensips_default
mkdir help
эта команда будет проверять конфиг opensips
nano chk
#!/bin/bash
/usr/local/sbin/opensips -C /usr/local/etc/opensips.cfg
ln -s /usr/local/share/doc/opensips /etc/opensips-2.2.5-TLS/help/opensips
ln -s /usr/local/share/man/ /etc/opensips-2.2.5-TLS/help/man5-8
chown -R root:opensips /etc/opensips-2.2.5-TLS/
chown -R root:opensips /usr/local/sbin/
chown -R root:opensips /usr/local/etc/
chmod 640 /usr/local/etc/opensips/opensipsctlrc
chmod 640 /usr/local/etc/opensips/osipsconsolerc
chmod 755 /etc/init.d/opensips
chown root:opensips /etc/init.d/opensips
chown -R root:opensips /usr/local/lib64/opensips/modules/
ln -s /var/log/opensips.log /etc/opensips-2.2.5-TLS/log
chmod 664 /var/log/opensips.log
chmod 664 /etc/default/opensips
chown root:opensips /etc/default/opensips

Настройка и запуск
nano /etc/default/opensips
RUN_OPENSIPS=yes
USER=opensips
GROUP=opensips
S_MEMORY=2048
P_MEMORY=128

nano /etc/init.d/opensips
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/opensips
NAME=opensips
DESC=opensips
CFGFILE=/usr/local/etc/opensips/opensips.cfg
M4CFGFILE=/usr/local/etc/opensips/opensips.m4
M4ARCHIVEDIR=/usr/local/etc/opensips/archive
HOMEDIR=/var/run/opensips
P > DEFAULTS=/etc/default/opensips
RUN_OPENSIPS=yes

systemctl daemon-reload
systemctl status opensips
ps -ef | grep opensips
netstat -alnp | grep opensip

Настроим логи
nano /etc/rsyslog.conf
local0.* -/var/log/opensips.log
service rsyslog restart
apt-get install logrotate
cd /etc/logrotate.d
touch opensips
/var/log/opensips.log
<
rotate 90
daily
missingok
notifempty
delaycompress
compress
create 660 root opensips
postrotate
/etc/init.d/opensips force-reload
endscript
>
logrotate -d /etc/logrotate.d/opensips
logrotate -v -f /etc/logrotate.d/opensips
nano /etc/logrotate.d/rsyslog
/var/log/messages – rotate 7

# Наш SIP домен
SIP_DOMAIN=sbc.example.ru

# Директория песочницы
# $CHROOT_DIR=»/path/to/chrooted/directory»

# Тип базы даных работающей с OPENSIPS
DBENGINE=PGSQL

# Порт базы данных PostgreSQL=5432
DBPORT=5432

# Имя хоста с базой данных
DBHOST=dbhost

# Имя базы данных
DBNAME=opensips

# Пользователь для r.w из базы
DBRWUSER=opensips

# Пароль пользователя для r.w из базы
DBRWPW=»opensips»

# Супер пользователь базы данных
DBROOTUSER=»postgres»

# Колонка с именем пользователя
USERCOL=»username»

# Какие дополнительные таблицы будем устанавливать, и определение как устанавливать таблицы:
# ask — интерактивная установка
# yes — устанавливать
# no — не устанавливать

# Установить таблицы для дополнительных модулей
INSTALL_EXTRA_TABLES=ask

# Установить таблицы для модулей определения местоположения
INSTALL_PRESENCE_TABLES=ask

# Определение, какие таблицы — стандартные, дополнительные
#
# Стандартные модули
STANDARD_MODULES=»standard acc domain group permissions registrar usrloc msilo alias_db uri_db speeddial avpops auth_db dialog dispatcher dialplan drouting nathelper load_balancer»

# Дополнительные модули
EXTRA_MODULES=»imc cpl siptrace domainpolicy carrierroute userblacklist b2b registrant call_center fraud_detection cachedb_sql»

# Тип используемых псевдонимов
# DB — псевдонимы базы данных; UL — usrloc
# default: none
ALIASES_TYPE=»DB»

# Подключение через FIFO или UNIXSOCK
# default FIFO

# Путь до FIFO файла
OSIPS_FIFO=»/var/run/opensips/opensips_fifo»

# Принмать команды коннектором — MI_CONNECTOR control engine: FIFO, UNIXSOCK, UDP, XMLRPC
MI_CONNECTOR=FIFO:/var/run/opensips/opensips_fifo

# Альтернативно, в т.ч с хост машин
# MI_CONNECTOR=UNIXSOCK:/var/run/opensips/opensips.sock
# MI_CONNECTOR=UDP:192.168.2.133:8000
# MI_CONNECTOR=XMLRPC:192.168.2.133:8000

# Проверять имена ACL; default on (1); off (0)
VERIFY_ACL=1

# Если VERIFY_ACL установлена, принимать имена из списка
# ACL_GROUPS=»local ld int voicemail free-pstn»

Читайте также:  Установка депарафинизации скважин принцип работы

# Включить дебаг — default ‘0’
# VERBOSE=1

# Пароли пользователей в таблице
# do (1) or don’t (0) store plaintext passwords
# in the subscriber table — default ‘1’
STORE_PLAINTEXT_PW=0

# Не отображать вывод в консоль
# NOHLPRINT=1

# Опции старта процессов OPENSIPS
# пример: start opensips with 64MB share memory: STARTOPTIONS=»-m 64″
# STARTOPTIONS=

# Наш SIP домен
SIP_DOMAIN=sbc.example.ru

# Директория песочницы
# $CHROOT_DIR=»/path/to/chrooted/directory»

# Тип базы даных работающей с OPENSIPS
DBENGINE=PGSQL

# Порт базы данных PostgreSQL=5432
DBPORT=5432

# Имя хоста с базой данных
DBHOST=dbhost

# Имя базы данных
DBNAME=opensips

# Пользователь для r.w из базы
DBRWUSER=opensips

# Пароль пользователя для r.w из базы
DBRWPW=opensips

# Супер пользователь базы данных
DBROOTUSER=»postgres»

# Какие дополнительные таблицы будем устанавливать, и определение как устанавливать таблицы:
# ask — интерактивная установка
# yes — устанавливать
# no — не устанавливать

# Установить таблицы для дополнительных модулей
INSTALL_EXTRA_TABLES=ask

# Установить таблицы для модулей определения местоположения
INSTALL_PRESENCE_TABLES=ask

# Определение, какие таблицы — стандартные, дополнительные
#
# Стандартные модули
STANDARD_MODULES=»standard acc domain group permissions registrar usrloc msilo alias_db uri_db speeddial avpops auth_db dialog dispatch$

# Дополнительные модули
EXTRA_MODULES=»imc cpl siptrace domainpolicy carrierroute userblacklist b2b registrant call_center fraud_detection cachedb_sql»

# Тип используемых псевдонимов
# DB — псевдонимы базы данных; UL — usrloc
# default: none
ALIASES_TYPE=»DB»

# Принмать команды коннектором — MI_CONNECTOR control engine: FIFO, UNIXSOCK, UDP, XMLRPC
MI_CONNECTOR=FIFO:/var/run/opensips/opensips_fifo

# Альтернативно, в т.ч с хост машин
# MI_CONNECTOR=UNIXSOCK:/var/run/opensips/opensips.sock
# MI_CONNECTOR=UDP:192.168.2.133:8000
# MI_CONNECTOR=XMLRPC:192.168.2.133:8000

# Проверять имена ACL; default on (1); off (0)
VERIFY_ACL=1

# Если VERIFY_ACL установлена, принимать имена из списка
# ACL_GROUPS=»local ld int voicemail free-pstn»

# Включить дебаг — default ‘0’
# VERBOSE=1

# Пароли пользователей в таблице
# do (1) or don’t (0) store plaintext passwords
# in the subscriber table — default ‘1’
STORE_PLAINTEXT_PW=0

# Не отображать вывод в консоль
# NOHLPRINT=1

источник

Расширенные средства SIP телефонии

Про Asterisk, думается, слышал чуть ли не каждый админ — он встречается буквально на каждом шагу, будь то офисная АТС или нечто связанное с телекомом. Но если в первом случае его применение практически всегда оправданно, то во втором могут иметь место некоторые проблемы. Существуют ли альтернативы Asterisk?

SIP: Краткое введение

Прежде всего стоит разобраться, как работает SIP в принципе и что это вообще за протокол. Итак, SIP — Session Initiation Protocol, служащий исключительно для целей установления и завершения сессии. Обмен пакетами от установления соединения до его завершения называется диалогом. Медиапоток по данному протоколу не передается — для этого есть протокол RTP. Инкапсулированный же в пакете SIP SDP (Session Description Protocol) определяет, в частности, и параметры медиапотока, такие как используемый кодек и тип данных.

Важно понимать, что прохождение этих двух потоков — SIP/SDP и RTP (или, как говорят связисты, сигнализации и данных) — совершенно независимо друг от друга. Посмотрим, что происходит при нормальном вызове (очень упрощенно, правда).

  • Вызывающая сторона инициирует соединение, посылая SIP-пакет INVITE, в нем же инкапсулирован и SDP с информацией о желаемых параметрах RTP. Этот пакет может пройти через несколько SIP-прокси — о них чуть ниже.
  • В зависимости от того, проходит ли вызов через SIP-прокси или нет, вызывающая сторона получает либо ответ от SIP-прокси TRYING (а уж прокси тем временем направляет INVITE вызываемой стороне) и следом RINGING, либо сразу RINGING. Пакет RINGING означает, что вызываемая сторона посылает сигнал абоненту «звоню» и теперь нужно ожидать, условно говоря, «поднятия трубки».
  • Как только вызываемая сторона поднимает трубку, она посылает SIP-пакет с кодом 200 «OK». В этот пакет снова инкапсулирована нагрузка SDP, содержащая параметры, которые поддерживаются этой стороной. Вызывающая же сторона, если параметры совпадают, посылает ответный пакет ACK.
  • Клиенты соединяются по протоколу RTP напрямую независимо от того, проходил ли предыдущий обмен пакетами SIP через SIP-прокси или нет. Происходит разговор.
  • При отбое отбивающая сторона посылает SIP-пакет BYE, а вторая сторона посылает опять же пакет ACK. Соединение завершено.

Теперь стоит разобраться с устройством сети SIP — какие логические сущности в ней вообще имеются.

  • UAC и UAS — User Agent Client и User Agent Server. Очень условно их можно назвать вызывающей и вызываемой стороной. В SIP-терминалах и программных клиентах реализуется как UAC, так и UAS.
  • SIP-прокси занимается в основном маршрутизацией.
  • SIP-регистратор сохраняет информацию о логическом местоположении UAC/UAS.
  • SIP-редиректор предоставляет UAC/UAS информацию о маршрутизации и в случае необходимости перенаправляет вызов в другое место.
  • Сервер местоположения на самом деле представляет собой базу данных, где указано, какой адрес или какие адреса соответствуют тому или иному SIP URI. Фактически это лишь удобная абстракция.
  • B2BUA может находиться на месте SIP-прокси, но им не является. В случае с прокси терминал устанавливает соединение с другим терминалом напрямую (хоть оно и проходит через прокси, но лишь до определенного этапа. И прокси в общем случае не изменяет заголовки и тело SIP-пакета). В случае с B2BUA терминал сначала устанавливает с ним соединение, затем B2BUA устанавливает соединение с вызываемым терминалом, и в дальнейшем весь процесс происходит исключительно через него, с использованием двух независимых сессий — вызывающий терминал-B2BUA и B2BUA-вызывающий терминал. Применение B2BUA дает гораздо большую гибкость, нежели применение обычного SIP-прокси, — хотя бы потому, что он позволяет изменять тело SIP-пакета. Кроме того, по названным выше причинам его применяют и при тарификации вызовов. Но есть у него и недостаток — большее потребление памяти.
Читайте также:  Установки тросовые на камаз

Стоит отметить, что зачастую логические сущности объединяются в одном ПО. Так, SIP-прокси чаще всего объединяется с регистратором и редиректором.

SIP-прокси существуют двух типов — stateless и stateful.Если ты знаком с iptables, думаю, объяснять их различия нет необходимости. А если нет… Stateful SIP-прокси хранит со-стояние транзакции, то есть знает, какому пакету INVITE соответствует тот или иной пакет ACK. Stateless-прокси же ничего этого не знает и тупо передает пакет куда следует.

И тут мы плавно переходим к вопросу, какие еще свободные средства для работы с SIP-протоколом (помимо Asterisk,о котором знают все) существуют в *nix-системах. На данный момент есть два проекта, предназначенные для этой цели, —Kamailio и OpenSIPS. Они имеют общего предка, так что подробно описывать их различия смысла нет. В статье будет рас-смотрен OpenSIPS.

ЧТО ТАКОЕ OPENSIPS? УСТАНОВКА

OpenSIPS обеспечивает функциональность практически всех серверных компонентов, которые были упомянуты выше, —от SIP-прокси до B2BUA. Отличие же его от Asterisk’а заключается, во-первых, в том, что OpenSIPS манипулирует паке-тами и сессиями SIP на более низком уровне, чем это делаетAsterisk, а во-вторых, Asterisk по сути является комбайном,например содержит в себе, помимо SIP, медиа сервер. Кроме того, Asterisk не поддерживает масштабирование.

OpenSIPS имеет давнюю историю: как минимум он (если считать и его предшественников) не младше Asterisk, а с учетом того, что SIP для последнего неродной, возможно, даже и старше. Он также поддерживает и модульную архитектуру,при этом модулей там предостаточно. В настоящий момент с нуля разрабатывается ветка 2.0, которая будет иметь другую архитектуру, — текущая закладывалась без учета части современных реалий, которые в те времена еще и не прогнозировались. Однако данная ветка находится в состоянии активной разработки, а я предпочитаю стабильные версии,поэтому здесь будет описана версия 1.11.3, которая, кстати,является LTS.

Итак, поехали устанавливать:

НАЧАЛЬНАЯ НАСТРОЙКА OPENSIPS

В файле /etc/opensips/opensipsctlrc нужно настроить имя или адрес SIP-домена:

Имя SIP-домена не обязательно должно совпадать с DNS-именем хоста, на котором запущен OpenSIPS, однако некоторые SIP-терминалы не позволяют указывать его отдельно.В тестовом случае это не настолько критично, но, если сервер будет находиться в продакшене, этот момент лучше учесть.Также для нормальной работы все равно рекомендуетсяDNS-сервер со сконфигурированными полями NAPTR и SRV.В общем-то, базовая настройка на этом закончена, пора пере-ходить к написанию скрипта маршрутизации.

СКРИПТ МАРШРУТИЗАЦИИ

Основной конфигурационный файл OpenSIPS (в моем случае он был расположен по пути /etc/opensips/opensips.cfg) делится на три части:

  • Глобальные параметры, такие как логирование с отладкой,адреса, на которых OpenSIPS слушает, настройка количества дочерних процессов.
  • Параметры модулей. Сюда относятся путь к каталогу с мо-дулями, список самих загружаемых модулей и их параметры, например для модуля транзакций tm предусмотрена настройка самых разнообразных таймеров.
  • Наконец, логика маршрутизации. Именно здесь находитсясамая вкусная часть OpenSIPS. Каждый SIP-пакет, приходящий на (и проходящий через) OpenSIPS, обрабатывает-ся в соответствии с данной логикой. Разумеется, именно поэтому она может быть достаточно сложной. Как правило, здесь имеются несколько маршрутов — основной, аналогичный точке входа в какую-либо программу и несколь-ко дополнительных, направление на которых вызывается из основного. Дополнительные маршруты аналогичны функциям в процедурных языках программирования.

В принципе, для создания базового конфигурационного файла можно использовать команду osipsconfig, но его, темне менее, придется править ручками. Ниже будут приведены наиболее важные части из файла конфигурации с комментариями (к слову, допустимы как однострочные комментариив *nix-стиле, так и многострочные в стиле C++). Итак, часть секции глобальных параметров:

А теперь посмотрим некоторые параметры модулей:

Пожалуй, стоит обратить внимание на данные модули.Первым загружается модуль sl, который отвечает за stateless-прокси. Параметры его мы не трогаем. Следующая строчказагружает модуль tm, который отвечает за stateful-прокси, —и уж тут как раз некоторые параметры нужно изменить. Рас-смотрим, что они означают:

  • fr_timeeout — интервал между запросом и предварительным ответом (таким как trying). Транзакция на моментпредварительного ответа еще не завершена. Этот тайм-аут истекает, если нет никакого ответа, при наличии жепредварительного ответа он сбрасывается. В секундах;
  • fr_inv_timeout — интервал между предварительным и окончательным ответом. Тайм-аут истекает, если с моментаполучения предварительного ответа окончательного таки не пришло. Опять же в секундах;• restart_fr_on_each_reply — указывает, должен ли fr_timeoutначинать отсчет сначала, если вызываемая сторона регу-лярно шлет предварительные ответы. Нулевое значение —false, любое другое — true;
  • onreply_avp_mode — как будут обрабатываться AVP(Atribute-Value pair) в маршруте Reply. Если не вдаватьсяв подробности, 1 означает, что AVP, относящиеся к данно-му маршруту, можно будет видеть и использовать и в не-которых других ветвях скрипта маршрутизации. Это, тем не менее, снижает производительность.
Читайте также:  Установка депарафинизации и обезмасливания

Модуль SIGNALING представляет собой обертку вокруг мо-дулей tm и sl для удобства работы.

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

Первым идет так называемый main route block, в который попадают все пакеты. Как уже говорилось выше, этот блок аналогичен точке входа в стандартные программы. Рассмотрим, что он делает:

  1. Пакет входит в данный блок, и происходят некоторые проверки.
  2. Если пакет не предназначен нам, мы его направляем в блокrelay.
  3. А если же он пришел к нам, мы, в зависимости от нужд,совершаем какие-то действия. Отмечу, что здесь можно направлять поток обработки в другие блоки, аналогично тому, как в программе на си из функции main() можно вызывать другие функции, описанные в коде программы.

Кроме блока типа route (к которому относится и названный выше и который обрабатывает входящие запросы), существует еще несколько типов блоков маршрутизации. Опишу неко-торые из них:

• branch_route — позволяет задавать действия в пределаходной транзакции. Понятно, что это актуально лишь в слу-чае stateful-маршрутизации;

• failure_route — обрабатывает полученные отрицатель-ные (с кодом большим или равным 300) ответы — при-чем ответы как приходящие извне, так и генерируемыесамим OpenSIPS. Опять же актуально только для stateful-маршрутизации;

• onreply_route — обрабатывает все нормальные ответы.Может быть как stateful — в случае если мы специальноуказываем, что ответ принадлежит какой-либо транзак-ции, так и stateless — если указываем, что маршрутизацияглобальная;

• error_route — обрабатывает ошибки при парсинге SIP-пакетов.

Поскольку даже самый простой скрипт маршрутизации,который почти ничем не занимается (реализует только базовый регистратор и редиректор), достаточно сложен, мы его разберем по косточкам:

По завершении конфигурирования нужно проверить конфиг на наличие синтаксических ошибок с помощью следующей команды:

Конфигурация учетной записи в Linphone

Создание профиля в Twinkle

Затем включаем возможность запуска OpenSIPS в файле

Можно приступать к тестированию.

ТЕСТИРОВАНИЕ КОНФИГУРАЦИИ

Для тестирования используем два клиента, запущенныена двух машинах. Я использовал Linphone и Twinkle. В пер-вом для добавления учетной записи открываем настройки(Linphone → Preferences) и переходим на вкладку Manage SIPAccounts, где и добавляем с помощью кнопки Add.

В поле YourSIP identity ставим SIP-идентификатор (вида sip:имя_пользо-вателя@SIP-домен), а в поле SIP Proxy address пишем адрес(не SIP-домен!) SIP-прокси.В случае же с Twinkle при первом запуске будет пред-ложено создать учетную запись. Назови профиль и выберитип Wizard для создания учетной записи. Далее вбиваем всенужное. Единственное отличие от Linphone состоит в том,что в Twinkle имя пользователя пишется отдельно от домена.

После регистрации, чтобы убедиться, что клиенты доступ-ны, можно посмотреть список местоположений пользователей на сервере, для чего нужно набрать MI-команду:

Эта команда вызывает функцию MI (интерфейса управления) модуля usrloc — ul_dump, которая и выводит список пользователей, фактически зарегистрированных на сервере.
После этого уже можно звонить. С этим не должно возник-нуть особых проблем, но если они все-таки будут — используй функцию xlog() для логирования и tcpdump/Wireshark для ис-следования пакетов.

ЗАКЛЮЧЕНИЕ

OpenSIPS позволяет манипулировать с пакетами SIP чрезвычайно гибко. Однако порог вхожденияв него достаточно высокий — тре-буется не только досконально знатьпротокол, но и понимать, что дела-ет та или иная функция, и иметьпредставление, для чего в общемможет понадобиться какой-либомодуль, даже сам список которыхвыглядит внушительно.

В статье, разумеется, был за-тронут лишь самый минимумиз того, что умеет OpenSIPS, —не были рассмотрены ни автори-зация при регистрации, ни акка-унтинг, ни, тем более, настройкаOpenSIPS в качестве B2BUA. Темне менее общее представлениео возможностях OpenSIPS и о син-таксисе его файла конфигурацииу тебя должно сложиться. Ну а в том случае, если тебе это нуж-но, — дальше сможешь разобраться и сам.

источник

Добавить комментарий