Настройка PJSIP в Asterisk

В этой статье я покажу примеры настройки PJSIP в Asterisk.
Так как chan_sip устарел, то я использую и рекомендую использовать PJSIP.

Допустим Asterisk установлен как я описывал в статье:
Установка Asterisk из исходного кода

Теперь откроем файл конфигурации в любом текстовом редакторе:

nano /etc/asterisk/pjsip.conf

Примеры настройки TRANSPORTS (для примера также оставил закомментированные строки):

;================================ TRANSPORTS ==
[transport-udp]
type=transport
protocol=udp    ;udp,tcp,tls,ws,wss,flow
bind=0.0.0.0

;[transport-udp-nat]
;type = transport
;protocol = udp
;bind = 0.0.0.0
; NAT settings
;local_net = 10.0.0.0/8
;external_media_address = 100.64.100.1
;external_signaling_address = 100.64.100.1

Перезапустим asterisk и проверим транспорты:

service asterisk restart
asterisk -rvv
pjsip show transports
pjsip show transport transport-udp
exit

Настроим шаблоны:

;===============ENDPOINT TEMPLATES
 
[endpoint-basic](!)
type=endpoint
transport=transport-udp
context=from-internal
;disallow=all
;allow=ulaw
allow = !all,alaw
;for NAT
direct_media=no
force_rport=yes
rewrite_contact=yes
rtp_symmetric=yes
 
[auth-userpass](!)
type=auth
auth_type=userpass
;password=ixnfo.com
 
[aor-single-reg](!)
type=aor
max_contacts=1
qualify_frequency=15
;remove_existing=yes

В шаблоне я указал несколько настроек для NAT, так как SIP телефоны клиентов находятся за NAT роутерами, а сервер Asterisk с белым IP адресом.

Для примера добавлю два номера, 221 и 222, для этого в файл /etc/asterisk/pjsip.conf додавим:

;===============EXTENSION 221
[221](endpoint-basic)
auth=auth221
aors=221
[auth221](auth-userpass)
password=ixnfo.com
username=221
[221](aor-single-reg)
 
;===============EXTENSION 222
[222]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=alaw
auth=auth222
aors=222
[auth222]
type=auth
auth_type=userpass
password=ixnfo.com
username=222
[222]
type=aor
max_contacts=1

На примере оба номера настроены одинаково, но в 221 повторяющиеся строки подтягиваются из шаблонов, а в номере 222 прописано без шаблонов, если номеров очень много, то конечно лучше использовать шаблоны чтобы сократить конфигурацию и сделать более читаемый вид.

Посмотрим текущие настройки:

pjsip show endpoints
pjsip show aors
pjsip show aor 221
pjsip show auths
pjsip show contacts

Просмотр справки по настройке и командам:

config show help res_pjsip
core show help pjsip

allow= (используемые кодеки, обычно я запрещаю все и разрешаю нужные, по умолчанию не указано)
AoR (Address of Record) — обязательная настройка связи с endpoints, голосовой почтой, qualify и т.д.

Чтобы 221 и 222 могли звонить друг другу, настроим from-internal

nano /etc/asterisk/extensions.conf

[from-internal]
;exten => _2XX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _2XX,n,Dial(PJSIP/${EXTEN},60,tT)
exten => _2XX,n,Hangup

Таким образом я записывал звонки:

[macro-recording]
exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "/srv/monitor/${fname}.wav"  "/srv/monitor/${fname}.mp3" && rm -f "/srv/monitor/${fname}.wav" && chmod o+r "/srv/monitor/${fname}.mp3");
exten => s,n,Set(CDR(userfield)=${fname}.mp3);
exten => s,n,MixMonitor(/srv/monitor/${fname}.wav,b,${monopt});
dialplan show

Пример настройки trunk от провайдера я опишу в другой статье.

pjsip show identifies
pjsip set logger on
pjsip show registrations

У некоторых клиентов были проблемы со звуком, по этому я отключил на их роутерах SIP ALG. Также за одним MikroTik было много SIP телефонов, которые перестали подключаться к серверу после обновления прошивки на MiroTik с RouterOS 6 на версию 7, решил проблему указанием на SIP телефонах разного исходящего порта, например 5060, 5061, 5062…

Смотрите также мои статьи:
Решение Unable to retrieve PJSIP transport в Asterisk
Добавление SIP клиентов в Asterisk

Оставьте комментарий

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