Asterisk pjsip.conf
Описание параметров настройки pjsip в Asterisk.
Подробное руководство на русском. Примеры и сравнения.
pjsip vs sip. pjsip cli.
PJSIP - драйвер канала SIP в Asterisk
Что такое PJSIP
PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами.
Формат файла pjsip.conf
Pjsip.conf обычный текстовый файл, как и все конфигурационные файлы Asterisk, состоит из секций. Каждая секция (раздел) определяет конфигурацию объекта res_pjsip. Секции отделены друг от друга именами, заключенными в квадратные скобки [какая неожиданность] и содержат одну или более конфигурационную опцию и её значение отделенное знаком равно.
[ SectionName ] ConfigOption = Value ConfigOption = Value
Имена секций pjsip.conf
В большинстве случаев имена секций могут быть произвольными, однако в случае с типами ENDPOINT и AOR имена должны совпадать со заголовком SIP URI«To» для идентификации входящих SIP запросов. Каждая секция имеет обязательную опцию type=, которой определяется назначение секции в конфигурации объектов res_pjsip.
Типы секций pjsip.conf
Ниже перечислены типы секций res_pjsipи простейшие примеры конфигурации.
Варианты и значения по умолчанию
Как узнать возможные варианты значений и параметры по умолчанию? В этом поможет встроенная справка интерфейса командной строки (CLI).
"config show help res_pjsip <configobject> <configoption>"
ENDPOINT
Модуль ENDPOINT определяет многочисленные параметры SIP, а также связь с другими модулями - AUTH, AOR и TRANSPORT.
Секция ENDPOINT должна быть обязательно связана с одной или несколькими секциями AOR.
По сути дела, ENDPOINT является основным профилем SIP телефона или SIP транка в res_pjsip, аналогично пиру в
sip.conf.
Только если там определялись почти все параметры, то здесь часть ключевых свойств вынесены в специальные секции (модули),
которые и будут рассмотрены ниже.
Простой пример конфигурации секции 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.
По умолчанию, для применения настроек транспортного уровня недостаточно перечитать конфиги. Потребуется рестартовать Asterisk, если не задано allow_reload=true (по умолчанию - false)
простой пример конфигурации секции TRANSPORT
[udp-transport] type=transport protocol=udp bind=0.0.0.0
или TLS транспорт:
[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 могут использовать одну и ту же секцию аутентификации, если требуется.
Простой пример секции 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:777@192.168.1.21;transport=UDP> запись в именах секций AOR – в нашем прмере [777]
Простейший пример секции AOR
[777] type=aor max_contacts=1
Опция max_contact=1 значит, что только один SIP User Agent может быть одновременно зарегистрирован через эту запись AOR. Можно указать и 10, если потребуется.
[777] type=aor contact=sip:777@192.168.1.21:5060
Во втором примере мы не ожидаем запроса на регистрацию от SIP UA,
а указываем вручную постоянный контакт для этой записи.
Можно не беспокоится о кол-ве подключений, адрес все равно один.
[siptrunk] type=aor contact=sip:123.123.1.1:5060
В последнем примере пропущен username, что позволяет использовать данную запись для исходящей связи,
определяя вызываемый номер при помощи диалплана «Dial(PJSIP/${EXTEN}@siptrunk)».
REGISTRATION
Секция регистраций отвечает за исходящие регистрации. Используется для регистрации в удаленных системах, будь то другой Asterisk или транк от провайдера.
Пример секции REGISTRATION
[siptrunk] type=registration transport=udp-transport outbound_auth=siptrunk server_uri=sip:123.123.1.1:5060 client_uri=sip:username@192.168.1.1:5060 retry_interval=60
Для регистрации понадобится определить используемый транспорт и секцию аутентификации.
Помимо этого, наверняка, потребуется указать контакт для входящих вызовов.
[providertrunk] type=registration transport=udp-transport outbound_auth=providertrunk server_uri=sip:sip.example.com client_uri=sip:1234567890@sip.example.com retry_interval=60
Пример регистрации транка провайдера.
DOMAIN_ALIAS
Псевдоним домена. [Имя] данной секции является псевдонимом, а конфигурационная опция domain=, доменным именем, которому сопоставлен псевдоним.
Пример секции DOMAIN_ALIAS
[example2.com] type=domain_alias domain=example.com
ACL
Модуль не привязан к какой-либо точке ENDPOINTs и управляет всеми входящими SIP коммуникациями с использованием res_pjsip. Установки ACl (Access Control Lis) могут быть назначены в самой секции, или в файле acl.confна который будет ссылаться секция.
Простые примеры 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-адреса источника.
Пример identity
[777] type=identify endpoint=777 match=123.0.112.1
CONTACT
Контакты являются одним из способов не указывать явно SIP URIв плане набора (диалплане).
Отношения объектов конфигурации 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:1234567890@sip.example.com 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.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:778@192.168.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:1234@203.0.113.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:myname@123.0.112.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