Шаблоны Joomla 2.5 здесь: http://joomla25.ru/shablony/

Asterisk pjsip.conf

Asterisk pjsip.conf

Описание параметров настройки pjsip в Asterisk. Подробное руководство на русском.

Примеры и сравнения. pjsip vs sip.

Что такое PJSIP

PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами.

Формат файла pjsip.conf

Pjsip.conf обычный текстовый файл, как и все конфигурационные файлы Asterisk, состоит из секций. Каждая секция (раздел) определяет конфигурацию объекта res_pjsip. Секции отделены друг от друга именами, заключенными в квадратные скобки [какая неожиданность] и содержат одну или более конфигурационную опцию и её значение отделенное знаком равно.

[ SectionName ] 
ConfigOption = Value 
ConfigOption = Value

В большинстве случаев имена секций могут быть произвольными, однако в случае с типами ENDPOINT и AOR имена должны совпадать со заголовком SIP URI «To» для идентификации входящих SIP запросов. Каждая секция имеет обязательную опцию type=, которой определяется назначение секции в конфигурации объектов res_pjsip.

Ниже перечислены типы секций res_pjsip и простейшие примеры конфигурации.

Варианты и значения по умолчанию

Как узнать возможные варианты значений и параметры по умолчанию?
В этом поможет встроенная справка интерфейса командной строки (CLI):
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

 

Секция System

System settings

 

Секция Global

Global settings.

 

ENDPOINT

Модуль ENDPOINT определяет многочисленные параметры SIP, а также связь с другими модулями - AUTH, AOR и TRANSPORT.
Секция ENDPOINT должна быть обязательно связана с одной или несколькими секциями AOR.
По сути дела, ENDPOINT является основным профилем SIP телефона или SIP транка в res_pjsip, аналогично пиру в sip.conf.
Только если там определялись почти все параметры, то здесь часть ключевых свойств вынесены в специальные секции (модули), которые и будут рассмотрены ниже.

 

ENPOINT все параметры

Простой пример конфигурации секции ENDPOINT
[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>

TRANSPORT

Настройка транспортного уровня res_pjsip. Используются протоколы UDP, TCP, WebSockets и методы шифрования TLS/SSL. Можно настроить одну транспортную секцию для использования множеством точек (ENDPOINT), или создать уникальный транспортный уровень для конкретной точки. Условно, можно сравнить TRANSPORT, с секцией [general] sip.conf.

 

TRANSPORT все параметры

  • async_operations=1 ; Number of simultaneous Asynchronous Operations (default: «1»)
  • bind= ; IP Address and optional port to bind to for this transport (default: «»)
  • ca_list_file= ; File containing a list of certificates to read TLS ONLY (default: «»)
  • ca_list_path= ; Path to directory containing certificates to read TLS ONLY. PJProject version 2.4 or higher is required for this option to be used. (default: «»)
  • cert_file= ; Certificate file for endpoint TLS ONLY. Will read .crt or .pem file but only uses cert, a .key file must be specified via priv_key_file. Since PJProject version 2.5: If the file name ends in _rsa, for example «asterisk_rsa.pem», the files «asterisk_dsa.pem» and/or «asterisk_ecc.pem» are loaded (certificate, inter- mediates, private key), to support multiple algorithms for server authentication (RSA, DSA, ECDSA). If the chains are different, at least OpenSSL 1.0.2 is required. (default: «»)
  • cipher= ; Preferred cryptography cipher names TLS ONLY (default: «»)
  • domain= ; Domain the transport comes from (default: «»)
  • external_media_address= ; External IP address to use in RTP handling (default: «»)
  • external_signaling_address= ; External address for SIP signalling (default: «»)
  • external_signaling_port=0 ; External port for SIP signalling (default: «0»)
  • method= ; Method of SSL transport TLS ONLY (default: «»)
  • local_net= ; Network to consider local used for NAT purposes (default: «»)
  • password= ; Password required for transport (default: «»)
  • priv_key_file= ; Private key file TLS ONLY (default: «»)
  • protocol=udp ; Protocol to use for SIP traffic (default: «udp»)
  • require_client_cert= ; Require client certificate TLS ONLY (default: «»)
  • type= ; Must be of type transport (default: «»)
  • verify_client= ; Require verification of client certificate TLS ONLY (default:«»)
  • verify_server= ; Require verification of server certificate TLS ONLY (default: «»)
  • tos=0 ; Enable TOS for the signalling sent over this transport (default: «0»)
  • cos=0 ; Enable COS for the signalling sent over this transport (default: «0»)
  • websocket_write_timeout=100 ; Default write timeout to set on websocket transports. This value may need to be adjusted for connections where Asterisk must write a substantial amount of data and the receiving clients are slow to process the received information. Value is in milliseconds; default is 100 ms.
  • allow_reload=no ; Although transports can now be reloaded, that may not be desirable because of the slight possibility of dropped calls. To make sure there are no unintentional drops, if this option is set to 'no' (the default) changes to the particular transport will be ignored. If set to 'yes', changes (if any) will be applied.

По умолчанию, для применения настроек транспортного уровня недостаточно перечитать конфиги. Потребуется рестартовать Asterisk, если не задано allow_reload=true (по умолчанию - false)
простой пример конфигурации секции TRANSPORT
[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

AUTH

Секция аутентификации содержит опции и полномочия для входящих и исходящих регистраций. С этой секцией ассоциируются такие секции как ENDPOINT и REGISTRATIONS.
Разные ENDPOINT и REGISTRATIONS могут использовать одну и ту же секцию аутентификации, если требуется.

 

config show help res_pjsip auth

Простой пример секции AUTH
[auth777]
type=auth
auth_type=userpass
password=password
username=777

с использованием MD5

[auth6001]
type=auth
auth_type=md5
md5_cred=5f4dcc3b5aa765d61d8327deb882cf99
username=777

AOR

Главная функция AoR (Address of Record) указать Asterisk, как связаться с ENDPOINT. Без соответствующей AOR секции, точка ENDPOINT будет недоступна для вызова. Здесь также задаются соответствия голосовой почте, MWI, продолжительность действия регистрации -expiration и настройки qualify (периодической отправки SIP сообщений OPTONS для мониторинга состояния устройств)

Когда Asterisk получает запрос на регистрацию от устройства, он в первую очередь ищет соответствующую SIP заголовку To: «777»<sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ;transport=UDP> запись в именах секций AOR – в нашем прмере [777]

 

config show help res_pjsip aor

Простейший пример секции AOR
[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)».

REGISTRATION

Секция регистраций отвечает за исходящие регистрации. Используется для регистрации в удаленных системах, будь то другой Asterisk или транк от провайдера.

 

config show help res_pjsip_outbound_registration registration

Пример секции REGISTRATION
[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_ALIAS

Псевдоним домена. [Имя] данной секции является псевдонимом, а конфигурационная опция domain=, доменным именем, которому сопоставлен псевдоним.

 

config show help res_pjsip domain_alias

Пример секции DOMAIN_ALIAS
[example2.com]
type=domain_alias
domain=example.com

ACL

Модуль не привязан к какой-либо точке ENDPOINTs и управляет всеми входящими SIP коммуникациями с использованием res_pjsip. Установки ACl (Access Control Lis) могут быть назначены в самой секции, или в файле acl.conf на который будет ссылаться секция.

 

config show help res_pjsip_acl acl

Простые примеры ACL

Asterisk res_pjsip_acl

Настройки берутся из файла 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

IDENTIFY

Определяет конечные точки с помощью IP-адреса источника.

 

config show help res_pjsip_endpoint_identifier_ip identify

Пример identity
[777]
type=identify
endpoint=777
match=123.0.112.1

CONTACT

Контакты являются одним из способов не указывать явно SIP URI в плане набора (диалплане).

 

config show help res_pjsip contact

Отношения объектов конфигурации pjsip.conf

ENDPOINT

  • Множество ENDPOINTs связываются с множеством AORs
  • Ноль или больше ENDPOINTs связаны с ноль или одной AUTHs
  • Ноль или больше ENDPOINTs связаны с как минимум одним TRANSPORT
  • Ноль или одна ENDPOINTs связана с определенной IDENTIFY

REGISTRATION

  • Ноль или больше REGISTRATIONs связаны с ноль или одной AUTHs
  • Ноль или больше REGISTRATIONs связаны с как минимум одним TRANSPORT

AOR

  • Множество ENDPOINTs связываются с множеством AORs
  • Множество AORs связаны с множеством CONTACTs

CONTACT

  • Множество CONTACTs связываются с множеством AORs

IDENTIFY

  • Ноль или больше ENDPOINTs связаны с определенным IDENTIFY объектом.

ACL, DOMAIN_ALIAS

  • Эти объекты не имеют направленных связей с другими объектами.

Примеры диалплана для вызова PJSIP пиров и екстеншенов.

   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)

Примеры

Пример ENDPOINT для одного SIP телефона с регистрацией на Asterisk.
;===============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
  • auth= используется для входящей аутентификации
  • max_contacts= установите кол-во регистраций, одну или более, разрешенных для этой учетной записи.
Пример SIP транка с исходящей регистрацией
;==============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
Пример регистрации множественных ENDPOINTs с использованием шаблонов
;===============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) 

От старого к новому - sip.conf к pjsip.conf сравнение примеров.

Сравнение конфигурации ENDPOINT

  • Два SIP телефона должны звонить и принимать вызовы через Asterisk.
  • В обоих случаях для аутентификации используются username и password.
  • 777 регистрируется с динамического IP, 778 со статического IP адреса.

1

sip.confpjsip.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.confpjsip.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

PJSIP CLI

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