Исходный адрес статьи: https://asterisk-pbx.ru/wiki/asterisk/pjsip
PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами.
Pjsip.conf обычный текстовый файл, как и все конфигурационные файлы Asterisk, состоит из секций. Каждая секция (раздел) определяет конфигурацию объекта res_pjsip. Секции отделены друг от друга именами, заключенными в квадратные скобки [какая неожиданность] и содержат одну или более конфигурационную опцию и её значение отделенное знаком равно.
[ SectionName ]
ConfigOption = Value
ConfigOption = Value
В большинстве случаев имена секций могут быть произвольными, однако в случае с типами ENDPOINT и AOR имена должны совпадать со заголовком SIP URI «To» для идентификации входящих SIP запросов. Каждая секция имеет обязательную опцию type=, которой определяется назначение секции в конфигурации объектов res_pjsip.
Ниже перечислены типы секций res_pjsip и простейшие примеры конфигурации.
config show help res_pjsip <configobject> <configoption>
Например: config show help res_pjsip endpoint rewrite_contact
config show help res_pjsip endpoint rewrite_contact
[endpoint]
rewrite_contact = [Boolean] (Default: no) (Regex: false)
Allow Contact header to be rewritten with the source IP address-port
On inbound SIP messages from this endpoint, the Contact header or an
appropriate Record-Route header will be changed to have the source IP address
and port. This option does not affect outbound messages sent to this endpoint.
И видим. что параметр rewrite_contact имеет значение по умолчанию = no, тип значения Boolean, т.е. возможное значение = yes
Модуль ENDPOINT определяет многочисленные параметры SIP, а также связь с другими модулями - AUTH, AOR и TRANSPORT.
Секция ENDPOINT должна быть обязательно связана с одной или несколькими секциями AOR.
По сути дела, ENDPOINT является основным профилем SIP телефона или SIP транка в res_pjsip, аналогично пиру в sip.conf.
Только если там определялись почти все параметры, то здесь часть ключевых свойств вынесены в специальные секции (модули), которые и будут рассмотрены ниже.
[777]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=udp-transport
auth=auth777
aors=777
В данном примере мы видим тип секции: type=endpoint
контекст, разрешенные кодеки и также ассоциацию с другими секциями
transport=udp-transport, auth=auth777 и aors=777.
Насколько я понимаю, опции type и aors являются обязательными для работоспособности точки.
Для назначения Caller ID этому пиру(ENDPOINT), потребуется задать следующие параметры:
trust_id_outbound=yes
callerid=V Pupkin <777>
Настройка транспортного уровня res_pjsip. Используются протоколы UDP, TCP, WebSockets и методы шифрования TLS/SSL. Можно настроить одну транспортную секцию для использования множеством точек (ENDPOINT), или создать уникальный транспортный уровень для конкретной точки. Условно, можно сравнить TRANSPORT, с секцией [general] sip.conf.
allow_reload=true
(по умолчанию - false)[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
или TLS транспорт c ключами:
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5066
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
external_media_address=123.123.123.1
external_signaling_address=123.123.123.1
local_net=10.10.0.0/16
method=tlsv1
localhost*CLI> pjsip show transports
Transport: <TransportId........> <Type> <cos> <tos> <BindAddress....................>
=========================================================================================
Transport: udp-transport udp 0 0 0.0.0.0:5080
Transport: udp-transport-infra udp 0 0 192.168.1.110:5081
Transport: udp-transport-megafon udp 0 0 0.0.0.0:5060
Секция аутентификации содержит опции и полномочия для входящих и исходящих регистраций. С этой секцией ассоциируются такие секции как ENDPOINT и REGISTRATIONS.
Разные ENDPOINT и REGISTRATIONS могут использовать одну и ту же секцию аутентификации, если требуется.
[auth777]
type=auth
auth_type=userpass
password=password
username=777
с использованием MD5
[auth6001]
type=auth
auth_type=md5
md5_cred=5f4dcc3b5aa765d61d8327deb882cf99
username=777
Главная функция AoR (Address of Record) указать Asterisk, как связаться с ENDPOINT. Без соответствующей AOR секции, точка ENDPOINT будет недоступна для вызова. Здесь также задаются соответствия голосовой почте, MWI, продолжительность действия регистрации -expiration и настройки qualify (периодической отправки SIP сообщений OPTONS для мониторинга состояния устройств)
Когда Asterisk получает запрос на регистрацию от устройства, он в первую очередь ищет соответствующую SIP заголовку To: «777»<sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ;transport=UDP> запись в именах секций AOR – в нашем прмере [777]
[777]
type=aor
max_contacts=1
Опция max_contact=1 значит, что только один SIP User Agent может быть одновременно зарегистрирован через эту запись AOR. Можно указать и 10, если потребуется.
[777]
type=aor
contact=sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
:5060
Во втором примере мы не ожидаем запроса на регистрацию от SIP UA,
а указываем вручную постоянный контакт для этой записи.
Можно не беспокоится о кол-ве подключений, адрес все равно один.
[siptrunk]
type=aor
contact=sip:123.123.1.1:5060
В последнем примере пропущен username, что позволяет использовать данную запись для исходящей связи,
определяя вызываемый номер при помощи диалплана «Dial(PJSIP/${EXTEN}@siptrunk)».
Секция регистраций отвечает за исходящие регистрации. Используется для регистрации в удаленных системах, будь то другой Asterisk или транк от провайдера.
[siptrunk]
type=registration
transport=udp-transport
outbound_auth=siptrunk
server_uri=sip:123.123.1.1:5060
client_uri=sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
.1.1:5060
retry_interval=60
Для регистрации понадобится определить используемый транспорт и секцию аутентификации.
Помимо этого, наверняка, потребуется указать контакт для входящих вызовов.
[providertrunk]
type=registration
transport=udp-transport
outbound_auth=providertrunk
server_uri=sip:sip.example.com
client_uri=sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
retry_interval=60
Пример регистрации транка провайдера.
Псевдоним домена. [Имя] данной секции является псевдонимом, а конфигурационная опция domain=, доменным именем, которому сопоставлен псевдоним.
[example2.com]
type=domain_alias
domain=example.com
Модуль не привязан к какой-либо точке ENDPOINTs и управляет всеми входящими SIP коммуникациями с использованием res_pjsip. Установки ACl (Access Control Lis) могут быть назначены в самой секции, или в файле acl.conf на который будет ссылаться секция.
Настройки берутся из файла acl.conf:
[acl]
type=acl
acl=example_named_acl1
Настройки непосредственно в секции:
[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=123.12.123.0
permit=123.12.123.1
Конфиг разрешающий регистрацию на основе SIP заголовка, а не IP адреса.
[acl]
type=acl
contactdeny=0.0.0.0/0.0.0.0
contactpermit=123.12.123.0
contactpermit=123.12.123.1
Определяет конечные точки с помощью IP-адреса источника.
[777]
type=identify
endpoint=777
match=123.0.112.1
Контакты являются одним из способов не указывать явно SIP URI в плане набора (диалплане).
ENDPOINT
REGISTRATION
AOR
CONTACT
IDENTIFY
ACL, DOMAIN_ALIAS
exten => _6XXX,1,Dial(PJSIP/${EXTEN})
exten => _9NXXNXXXXXX,1,Dial(PJSIP/mytrunk/sip:${EXTEN:1}@203.0.113.1:5060)
exten => _9NXXNXXXXXX,1,Dial(PJSIP/${EXTEN:1}@mytrunk)
;===============TRANSPORT
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
;===============EXTENSION 777
[777]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=udp-transport
auth=auth777
aors=777
[auth777]
type=auth
auth_type=userpass
password=777
username=777
[777]
type=aor
max_contacts=1
;==============TRANSPORTS
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
;===============TRUNK
[siptrunk]
type=registration
transport=udp-transport
outbound_auth=siptrunk
server_uri=sip:sip.example.com
client_uri=sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
retry_interval=60
[siptrunk]
type=auth
auth_type=userpass
password=1234567890
username=1234567890
[siptrunk]
type=aor
contact=sip:123.0.112.1:5060
[siptrunk]
type=endpoint
transport=udp-transport
context=from-trunk
disallow=all
allow=alaw,ulaw
outbound_auth=siptrunk
aors=siptrunk
[siptrunk]
type=identify
endpoint=siptrunk
match=123.0.112.1
;===============TRANSPORT
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
;===============ENDPOINT TEMPLATES
[endpoint-basic](!)
type=endpoint
transport=udp-transport
context=from-internal
disallow=all
allow=alaw
[auth-userpass](!)
type=auth
auth_type=userpass
[aor-single-reg](!)
type=aor
max_contacts=1
;===============EXTENSION 777
[777](endpoint-basic)
auth=auth777
aors=777
[auth777](auth-userpass)
password=777
username=777
[777](aor-single-reg)
;===============EXTENSION 778
[778](endpoint-basic)
auth=auth778
aors=778
[auth778](auth-userpass)
password=778
username=778
[778](aor-single-reg)
;===============EXTENSION 779
[779](endpoint-basic)
auth=auth779
aors=779
[auth779](auth-userpass)
password=779
username=779
[779](aor-single-reg)
Сравнение конфигурации ENDPOINT
sip.conf | pjsip.conf |
---|---|
[general]
udpbindaddr=0.0.0.0
[777]
type=friend
host=dynamic
disallow=all
allow=alaw
context=from-internal
secret=1234
[778]
type=friend
host=192.168.1.2
disallow=all
allow=alaw
context=from-internal
secret=1234
|
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
[777]
type = endpoint
transport = udp-transport
context = from-internal
disallow = all
allow = alaw
aors = 777
auth = auth777
[777]
type = aor
max_contacts = 1
[auth777]
type=auth
auth_type=userpass
password=1234
username=777
[778]
type = endpoint
transport = udp-transport
context = from-internal
disallow = all
allow = alaw
aors = 778
auth = auth778
[778]
type = aor
contact = sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
.1.2:5060
[auth778]
type=auth
auth_type=userpass
password=1234
username=778
|
Сравнение конфигурации trunk
sip.conf | pjsip.conf |
---|---|
[general]
udpbindaddr=0.0.0.0
register => myname:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
.1:5060
[mytrunk]
type=friend
secret=1234
username=myname
host=123.0.112.1
disallow=all
allow=alaw
context=from-trunk
|
[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0
[mytrunk]
type=registration
transport=simpletrans
outbound_auth=mytrunk
server_uri=sip:@123.0.112.1:5060
client_uri=sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
.1:5060
[mytrunk]
type=auth
auth_type=userpass
password=1234
username=myname
[mytrunk]
type=aor
contact=sip:123.0.112.1:5060
[mytrunk]
type=endpoint
transport=simpletrans
context=from-trunk
disallow=all
allow=alaw
outbound_auth=mytrunk
aors=mytrunk
[mytrunk]
type=identify
endpoint=mytrunk
match=123.0.112.1
|
Connected to Asterisk 13.9.1 currently running on aster2 (pid = 17401)
asterisk*CLI> core show help pjsip
pjsip dump endpt -- Dump the res_pjsip endpt internals
pjsip export config_wizard primitives [to] -- Export config wizard primitives
pjsip list aors -- List PJSIP Aors
pjsip list auths -- List PJSIP Auths
pjsip list channels -- List PJSIP Channels
pjsip list ciphers -- List available OpenSSL cipher names
pjsip list contacts -- List PJSIP Contacts
pjsip list endpoints -- List PJSIP Endpoints
pjsip list identifies -- List PJSIP Identifies
pjsip list registrations -- List PJSIP Registrations
pjsip list transports -- List PJSIP Transports
pjsip qualify -- Send an OPTIONS request to a PJSIP endpoint
pjsip send register -- Registers an outbound registration target
pjsip send unregister -- Unregisters outbound registration target
pjsip set history {on|off|clear} -- Enable/Disable PJSIP History
pjsip set logger {on|off|host} -- Enable/Disable PJSIP Logger Output
pjsip show aors -- Show PJSIP Aors
pjsip show aor -- Show PJSIP Aor
pjsip show auths -- Show PJSIP Auths
pjsip show auth -- Show PJSIP Auth
pjsip show channels -- Show PJSIP Channels
pjsip show channel -- Show PJSIP Channel
pjsip show channelstats -- Show PJSIP Channel Stats
pjsip show contacts -- Show PJSIP Contacts
pjsip show contact -- Show PJSIP Contact
pjsip show endpoints -- Show PJSIP Endpoints
pjsip show endpoint -- Show PJSIP Endpoint
pjsip show history -- Display PJSIP History
pjsip show identifiers -- List registered endpoint identifiers
pjsip show identifies -- Show PJSIP Identifies
pjsip show identify -- Show PJSIP Identify
pjsip show registrations -- Show PJSIP Registrations
pjsip show registration -- Show PJSIP Registration
pjsip show settings -- Show global and system configuration options
pjsip show transports -- Show PJSIP Transports
pjsip show transport -- Show PJSIP Transport
pjsip show version -- Show the version of pjproject in use