Сегодня моя задумка на развернутой связке Ubuntu 22.04 + Asterisk 20 + FreePBX 16 сделать так чтобы по умолчанию протокол работы был не PJSIP, а SIP. Создать два внутренних номера, один номер подключен с смартфона Honor 9X + приложение GS Wave через OpenVPN, а другой номер с телефонного аппарата Yealink T21P E2 через OpenVPN и проверить что связь через SIP протокол осуществляется, какие возникнут нюансы настройки на FreeBPX, вообщем как это все происходит. Т.к. я уже довольно таки давно с FreePBX дело не имел. Плюс данная заметка будет той от которой в последствии будут другие темы, которые мне интересно разобрать.

Шаг №1: У меня на систему Ubuntu 22.04 Server установлен Asterisk 20 + FreePBX 16 опираясь на заметку: "Настраиваем связку FreePBX 16 + Asterisk 20 на Ubuntu 22.04"

Шаг №2: Чтобы использовать протокол SIP, а не PJSIP нужно сделать следующее: проверяем, что модуль chan_sip.so установлен и его видит консольный Asterisk:

ekzorchik@srv-pbx:~$ sudo asterisk -rx "module show like chan_sip.so"
Module                         Description                              Use Count  Status      Support Level
0 modules loaded

Проверяю после наличие самого модуля в каталоге modules:

ekzorchik@srv-pbx:~$ sudo ls /usr/lib/asterisk/modules/ | grep chan_sip
ekzorchik@srv-pbx:~$

так, а где модуль?

Как оказалось, я не отметил при установке модуль chan_sip, отмечаю и нажимаю Save & Exit

ekzorchik@srv-pbx:~$ cd /usr/src/asterisk-20.6.0/
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ sudo make menuselect
  • Channel Drivers: вижу что модуль chan_sip не отмечен звездочкой ("*") через клавишу "ENTER", отмечаю, а с модуля chan_pjsip через клавишу "ENTER" отметку снимаю

и нажимаю Save & Exit

Компилирую Asterisk 20 с модулем chan_sip.

ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ sudo make -j$((`nproc`+1))
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ sudo make install
ekzorchik@srv-pbx:~$
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ cd ~
ekzorchik@srv-pbx:~$

После проверяю что в каталоге modules появился модуль chan_sip.so:

ekzorchik@srv-pbx:~$ sudo ls -l /usr/lib/asterisk/modules/ | grep chan_sip
-rwxr-xr-x 1 root root 3344616 Feb 22 11:45 chan_sip.so
ekzorchik@srv-pbx:~$

из вывода выше вижу, что модуль теперь присутствует.

Подгружаю модуль chan_sip (в самом конце файла modules.conf добавляю нижеуказанную строку):

ekzorchik@srv-pbx:~$ sudo nano /etc/asterisk/modules.conf
load = chan_sip.so

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора).

ekzorchik@srv-pbx:~$ sudo asterisk -rx "module load chan_sip.so"
Loaded chan_sip.so

Применяю полученные изменения в Asterisk & FreePBX:

ekzorchik@srv-pbx:~$ sudo systemctl restart apache2 asterisk

Проверяю, что Asterisk видит модуль chan_sip:

ekzorchik@srv-pbx:~$ sudo asterisk -rx "module show like chan_sip.so"
Module                         Description                              Use Count  Status      Support Level
chan_sip.so                    Session Initiation Protocol (SIP)        0          Running        deprecated
1 modules loaded
ekzorchik@srv-pbx:~$

Шаг №3: Изменяю работу FreePBX с PJSIP на SIP:

http://IP&DNS - user&pass - Settings - Advanced Settings - (Dialplan and Operational)

  • Country Indication Tones: Russian Federation
  • SIP Channel Driver: вместо chan_pjsip ставлю chan_sip

и нажимаю Submit, Apply Config.

Шаг №4: Расширенные настройки CHAN_SIP делаются теперь в меню: Asterisk SIP Settings

http://IP&DNS - user&pass - Settings (Настройки) - Asterisk SIP Settings (Установки Asterisk для SIP)

вкладка General SIP Settings

  • Allow Anonymous Inbound SIP Calls: No
  • Allow SIP Guests: No
  • RTP Port Ranges: Start (10000) End (20000)
  • Codecs: ulaw, alaw, g722

и нажимаю Submit, Apply Config.

вкладка SIP Legacy Settings [chan_sip]

  • NAT: yes
  • IP Configuration: Static IP
  • Override External IP: определился мой WAN-ip адрес
  • Default Context: from-sip-external
  • Bind Address: пока оставляю по умолчанию, т.е. 0.0.0.0
  • Bind Port: 5160
  • Enable SRV Lookup: Yes

и нажимаю Submit, Apply Config.

Шаг №5: Создаю внутренний номер через интерфейс FreePBX 16:

http://IP&DNS - user&pass - Applications - Extensions — вкладка SIP (Legacy) [chan_sip] Extensions — нажимаю на Add New SIP (Legacy) [chan_sip) Extension

вкладка General

  • User Extension: 1001
  • Display Name: 1001
  • Outbound CID: 1001
  • Secret: Aa1234567

вкладка Advanced

  • DTMF Signaling: RFC 2833
  • Can Reinvite: Yes
  • Context: from-internal
  • Host: dynamic
  • Connection Type: friend
  • Session Timers: Accept
  • NAT Mode: Yes - (force_rport,comedia)
  • Port: 5160
  • Qualify: Yes
  • Qualify Frequency: 60
  • Transport: All - UDP Primary
  • Dial: SIP/1001
  • Deny: 0.0.0.0/0.0.0.0
  • Permit: 10.9.0.0/255.255.255.0

и нажимаю Submit, Apply Config.

по аналогии создаю и для номера 1002

На заметку:

  • qualify — запрещает/разрешает периодический опрос устройства сервером
  • dial — строка соединения
  • deny — запрет на подключение из указанных подсетей
  • permit — подсети из которых разрешено подключение
  • type — тип подключения (принимает три значения: friend, peer, user)
  • canreinvite — включение/отключение функции прямого вызова

Шаг №6: Чтобы посмотреть через консоль Asterisk все настройки Extensions нужно сделать следующее:

ekzorchik@srv-pbx:~$ sudo asterisk -rx "sip show peer 1001"
* Name       : 1001
Description  :
Secret       : <Set>
MD5Secret    : <Not set>
Remote Secret: <Not set>
Context      : from-internal
Record On feature : automon
Record Off feature : automon
Subscr.Cont. : <Not set>
Language     : en
Tonezone     : <Not set>
AMA flags    : Unknown
Transfer mode: open
CallingPres  : Presentation Allowed, Not Screened
Callgroup    :
Pickupgroup  :
Named Callgr :
Nam. Pickupgr:
MOH Suggest  :
Mailbox      :
VM Extension : *97
LastMsgsSent : 0/0
Call limit   : 2147483647
Max forwards : 0
Dynamic      : Yes
Callerid     : "1001" <1001>
MaxCallBR    : 384 kbps
Expire       : 3419
Insecure     : no
Force rport  : Yes
Symmetric RTP: Yes
ACL          : Yes
ContactACL   : No
DirectMedACL : No
T.38 support : No
T.38 EC mode : Unknown
T.38 MaxDtgrm: 4294967295
DirectMedia  : Yes
PromiscRedir : No
User=Phone   : No
Video Support: No
Text Support : No
Ign SDP ver  : No
Trust RPID   : Yes
Send RPID    : Yes
Path support : No
Path         : N/A
TrustIDOutbnd: Legacy
Subscriptions: Yes
Overlap dial : Yes
DTMFmode     : rfc2833
Timer T1     : 500
Timer B      : 32000
ToHost       :
Addr->IP     : 10.9.0.10:47090
Defaddr->IP  : (null)
Prim.Transp. : UDP
Allowed.Trsp : UDP
Def. Username: 1001
SIP Options  : (none)
Codecs       : (ulaw|alaw|g722)
Auto-Framing : No
Status       : OK (106 ms)
Useragent    :
Reg. Contact : sip:1001@10.9.0.10:47090
Qualify Freq : 60000 ms
Keepalive    : 0 ms
Sess-Timers  : Accept
Sess-Refresh : uas
Sess-Expires : 1800 secs
Min-Sess     : 90 secs
RTP Engine   : asterisk
Parkinglot   :
Use Reason   : No
Encryption   : No
RTCP Mux     : No
ekzorchik@srv-pbx:~$
ekzorchik@srv-pbx:~$ sudo asterisk -rx "sip show peers"
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description
1000/1000                 10.9.0.14                                D  Yes        Yes         A  5060     OK (56 ms)
1001/1001                 10.9.0.10                                D  Yes        Yes         A  47090    OK (106 ms)
2 sip peers [Monitored: 2 online, 0 offline Unmonitored: 0 online, 0 offline]
ekzorchik@srv-pbx:~$

Шаг №7: Правило совершения звонков не создаю, т.к я по умолчанию использую контекст from-internal, посмотреть что он из себя представляет можно через консоль:

ekzorchik@srv-pbx:~$ sudo nano /var/www/html/admin/modules/core/etc/extensions.conf

На заметку: Данный файл нельзя редактировать, т.к. она создается автоматически FreePBX и все изменения вносятся в план(ы) управлениями вызовами исключительно через Web-интерфейс FreePBX.

Шаг №8: Проверяю звонком, что с номера 1001 могу позвонить на номер 1000, но вызов не проходит, на консоль Asterisk

ekzorchik@srv-pbx:~$ sudo asterisk -rvvv
Asterisk 20.6.0, Copyright (C) 1999 - 2022, Sangoma Technologies Corporation and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Running as user 'asterisk'
Running under group 'asterisk'
Connected to Asterisk 20.6.0 currently running on srv-pbx (pid = 15279)
[2024-02-28 14:35:32] WARNING[11134][C-00000007]: pbx.c:2928 pbx_extension_helper: No application 'Macro' for extension (from-internal, 1001, 3)
== Spawn extension (from-internal, 1001, 3) exited non-zero on 'SIP/1000-00000005'
[2024-02-28 14:35:32] WARNING[11134][C-00000007]: pbx.c:2928 pbx_extension_helper: No application 'Macro' for extension (from-internal, h, 1)
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/1000-00000005'
srv-pbx*CLI>

из ошибки выше понимаю, что нужно скомпилировать и подгрузить модуль app_macro.so

ekzorchik@srv-pbx:~$ cd /usr/src/asterisk-20.6.0/
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ sudo make menuselect
  • Applications: отмечаю клавишей "ENTER" app_macro и нажимаю Save & Exit
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ sudo make -j$((`nproc`+1))
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ sudo make install
ekzorchik@srv-pbx:~$
ekzorchik@srv-pbx:/usr/src/asterisk-20.6.0$ cd ~
ekzorchik@srv-pbx:~$

После проверяю что в каталоге modules появился модуль app_macro.so:

ekzorchik@srv-pbx:~$ sudo ls /usr/lib/asterisk/modules/ | grep app_macro.so
app_macro.so
ekzorchik@srv-pbx:~$

из вывода выше вижу, что модуль теперь присутствует.

Подгружаю модуль app_macro (в самом конце файла modules.conf добавляю нижеуказанную строку):

ekzorchik@srv-pbx:~$ sudo nano /etc/asterisk/modules.conf
load = app_macro.so

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора).

ekzorchik@srv-pbx:~$ sudo asterisk -rx "module load app_macro.so"
Loaded app_macro.so
ekzorchik@srv-pbx:~$

Применяю полученные изменения в Asterisk & FreePBX:

ekzorchik@srv-pbx:~$ sudo systemctl restart apache2 asterisk

Проверяю, что Asterisk видит модуль app_macro:

ekzorchik@srv-pbx:~$ sudo asterisk -rx "module show like app_macro.so"
Module                         Description                              Use Count  Status      Support Level
app_macro.so                   Extension Macros                         0          Running        deprecated
1 modules loaded
ekzorchik@srv-pbx:~$

Шаг №9: Возвращаюсь к проверке совершения и приема звонков между внутренними абонентами:

звонок прошел с номера 1000 на 1001 и наоборот, голос идет в обе стороны, слышимость хорошая.

Итого, я в связке Asterisk 20 + FreePBX 16 на Ubuntu 22.04 Server изменил протокол с PJSIP на SIP, подключил два внутренних номера, которые подключены к серверу телефонии через OpenVPN и звонки в обе стороны совершаются, на слышимость не жалуюсь.

Пока на этом заметку завершу, с уважением автор блога Олло Александр aka ekzorchik.