Asterisk pjsip.conf
PJSip - драйвер канала SIP в Asterisk 12.
Что такое 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имена должны
совпадать со заголовком SIPURI«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), или создать уникальный транспортный уровень для конкретной точки.
Для применения настроек транспортного уровня недостаточно перечитать конфиги. Потребуется рестартовать Asterisk
простой пример конфигурации секции TRANSPORT
[udp-transport] type=transport protocol=udp bind=0.0.0.0
или TLS транспорт:
[tls-transport] type=transport protocol=tls bind=0.0.0.0 ;various TLS specific options below: cert_file= privkey_file= ca_list_file= cipher= method=Каждый транспорт в вашей системе должен иметь уникальный порт (также как и в sip_profilesво FreeSWITCH)
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. Множество точек и регистраций могут использовать одну и ту же секцию аутентификации, если требуется.
Простой пример секции 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:username@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
Контакты являются одним из способов не указывать явно SIPURIв плане набора (диалплане).
Отношения объектов конфигурации 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
- Эти объекты не имеют направленных связей с другими объектами.
Примеры
Пример 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=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)
Диалплан extensions.conf
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)
От старого к новому - 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 = sudp-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 => myaccountname:1234567890@203.0.113.1:5060 [mytrunk] type=friend secret=1234567890 username=myaccountname 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:myaccountname@123.0.112.1:5060 [mytrunk] type=auth auth_type=userpass password=1234567890 username=myaccountname [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 |