Добавление SIP клиента во FreePBX

Чтобы добавить SIP клиента во FreePBX, откроем меню «Applications» — «Extensions«, выберем например «Generic CHAN SIP Device» и укажем основные параметры:

User Extension: 6000 (номер SIP)
Display Name: Operator (любое имя для отображения)
Secret: ПАРОЛЬ
и нажмем «Submit«.

Все, SIP добавлен, по указанному номеру и паролю он может уже регистрироваться.

Как добавить SIP в конфигурационном файле я описывал в этой статье — Добавление SIP клиентов в Asterisk

Настройка SIP Trunk в Asterisk от Укртелеком

Приведу пример настройки SIP Trunk в Asterisk, то есть Asterisk будет в роли SIP клиента.
От провайдера Укртелеком получены данные: номер, пароль и адрес сервера телефонии (sip.ukrtel.net).
SIP номер брался чтобы сделать многоканальность не обычном городском номере, путем переадресации в случае занятости линии.
Настраивать буду на Linux сервере с реальным IP без использования NAT, а также на другом с NAT (во втором случае нужно nat=no изменить на nat=yes и закомментировать canreinvite).

Сначала пропишем в файле /etc/asterisk/sip.conf, в секции [general] строку регистрации SIP:

register => НОМЕР:ПАРОЛЬ@sip.ukrtel.net
defaultexpiry=30
registerexpired=3600
registertimeout=20
registerattempts=0
registerretry403=yes

Далее, пропишем контекст для SIP в sip.conf или users.conf, я предпочитаю прописывать транки в users.conf, в sip.conf пишу только свои SIP номера:

[ukrtelecom1]
secret=ПАРОЛЬ
remotesecret=ПАРОЛЬ
defaultuser=НОМЕР
trunkname=ukrtelecom1
host=sip.ukrtel.net
context=from-ukrtelecom1
insecure=invite
fromuser=НОМЕР
fromdomain=sip.ukrtel.net
type=peer
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=gsm
canreinvite=no
dtmfmode=rfc2833
nat=no
qualify=yes
qualifyfreq=30

В /etc/asterisk/extensions.conf пропишем контекст для входящих звонков:

[from-ukrtelecom1]
exten => s,1,DIAL(SIP/205,60)
exten => s,n,Hangup()

Приведу пример шаблона исходящих звонков:

exten => _380892XXXXXX,1,Dial(SIP/ukrtelecom1/${EXTEN},60)
exten => _097XXXXXXX,1,Dial(SIP/ukrtelecom1/${EXTEN},60)
exten => _095XXXXXXX,1,Dial(SIP/ukrtelecom1/${EXTEN},60)
и т.д.

Зарегистрировался ли SIP Укртелекома можно посмотреть в консоли Asterisk:

asterisk -rvv
sip show peers
sip show registry
quit

В случае проблем с соединением, можно указать IP адрес вместо домена sip.ukrtel.net.

Заметил что иногда отваливается соединение и при исходящих звонках отображается ошибка (входящие звонки при этом работают):

Received response: "Forbidden" from '<sip:38089XXXXXXX@sip.ukrtel.net>

Если выполнить «sip reload», то звонки вновь можно совершать.
По этому я указал в конфигурации IP-адрес вместо sip.ukrtel.net и добавил в cron ежечасно выполнять скрипт:

nano /etc/crontab
0 * * * * root /dir/sip_ukrtel_register.sh > /dev/null 2>&amp;1

Содержимое скрипта (если статус не «Registered», то выполняется команда «sip reload»):

#!/bin/sh
asterisk -rx 'sip show registry' | grep ':5060' | awk '{print $5}' | grep -v 'Registered' && asterisk -rx 'sip reload'

Чтобы скрипт выполнялся возможно придется еще указать live_dangerously=yes в asterisk.conf.

Решение ошибки при компиляции Asterisk «‘pjsip_tcp_transport_cfg’ has no member named ‘sockopt_params’»

Компилировал однажды Asterisk версии 13.13.1 и при выполнении make заметил следующую ошибку:

‘pjsip_tcp_transport_cfg’ has no member named ‘sockopt_params’

pjproject-2.2.1 уже был скомпилирован.

Решил проблему собрав поновее версию pjproject-2.4.5

cd /usr/src
wget http://www.pjsip.org/release/2.4.5/pjproject-2.4.5.tar.bz2
tar -xjvf pjproject-2.4.5.tar.bz2
cd pjproject-2.4.5
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr
make dep
make
make install

После этого, ошибка исчезла.

Решение проблемы Asterisk — нет звука при звонке через NAT

Заметил недавно что нет звука при звонке с IP-телефона на другой IP-телефон которые оба находились за одним и тем же NAT (роутером).

По этому в конфигурации sip.conf для этих аккаунтов нужно указать что они за NAT, указав параметр:

nat=force_rport,comedia

Хочу заметить что значение yes для nat уже устарело начиная с версии Asterisk 11, по этому правильно будет как указанно выше.

И указать также на no для параметра directmedia, чтобы Asterisk не отправлял пакеты на тот же порт из которого их получил (что в моём случае и произошло, оба телефона подключались к Asterisk с одного IP, с одинаковыми портами):

directmedia=no

Все.

Добавление SIP клиентов в Asterisk

SIP клиенты в Asterisk указываются в файле sip.conf, поэтому откроем его например в текстовом редакторе nano (Ctrl+X для выхода из редактора, y или n для сохранения или отмены изменений):

sudo nano /etc/asterisk/sip.conf

Сначала укажем следующий параметр, запретив принимать анонимные звонки:

allowguest=no

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

[6000]
type=friend
secret=ПАРОЛЬ 
nat=no
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=ulaw
context=sip-dialout
callerid=6000
deny=0.0.0.0/0
permit=192.168.0.10/32

Кратко опишу параметры которые я указывал:
type — тип клиента, может быть user (идентификация по паролю), peer (идентификация по адресу хоста), fried (либо по паролю, либо по хосту).
secret — пароль пользователя.
nat=no — указывает, что клиент может быть за NAT, смотрите мою статью по поводу этого Звонок через NAT.
host=dynamic — нет привязки клиента к адресу хоста.
dtmfmode=rfc2833 — метод передачи dtmf тонов набора номера.
disallow=all — запрет всех кодеков.
allow=ulaw — разрешим только кодек ulaw
context=sip-dialout — имя диалплана (он описывается в extensions.conf)
callerid=6000 — внутренний номер телефона клиента.
deny=0.0.0.0/0 — запрещаем подключение со всех IP адресов.
permit=192.168.0.10/32 — разрешаем подключение только с указанного IP адреса.

После добавления клиента подключимся к Asterisk и обновим конфигурацию sip:

sudo asterisk -r
sip reload

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

sip show users

Для выхода из консоли Asterisk наберем:

quit

Теперь уже можно подключится добавленному клиенту к серверу Asterisk используя например программу X-Lite, Zoiper или VoIP телефон, но звонить пока некуда, поэтому добавим для теста второго клиента в sip.conf:

[6001]
type=friend
secret=ПАРОЛЬ
nat=no
host=dynamic 
dtmfmode=rfc2833
disallow=all
allow=ulaw
context=sip-dialout
callerid=6001
deny=0.0.0.0/0
permit=192.168.0.10/32

Откроем в редакторе файл extensions.conf:

sudo nano /etc/asterisk/extensions.conf

И укажем в его конце следующие строки, чтобы пользователи могли звонить друг другу:

[sip-dialout]
exten => 6000,1,Dial(SIP/6000)
exten => 6001,1,Dial(SIP/6001)

Перезапустим Asterisk чтобы применить изменения:

sudo service asterisk restart

Все, мы добавили двух пользователей и они могут звонить друг другу.

Смотрите также:
Добавление SIP клиента во FreePBX