Сегодня моя задумка на развернутой связке 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

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 FederationSIP 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: NoAllow SIP Guests: NoRTP Port Ranges: Start (10000) End (20000)Codecs: ulaw, alaw, g722
и нажимаю Submit, Apply Config.
вкладка SIP Legacy Settings [chan_sip]
NAT: yesIP Configuration: Static IPOverride External IP: определился мой WAN-ip адресDefault Context: from-sip-externalBind Address: пока оставляю по умолчанию, т.е. 0.0.0.0Bind Port: 5160Enable 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: 1001Display Name: 1001Outbound CID: 1001Secret: Aa1234567
вкладка Advanced
DTMF Signaling: RFC 2833Can Reinvite: YesContext: from-internalHost: dynamicConnection Type: friendSession Timers: AcceptNAT Mode: Yes - (force_rport,comedia)Port: 5160Qualify: YesQualify Frequency: 60Transport: All - UDP PrimaryDial: SIP/1001Deny: 0.0.0.0/0.0.0.0Permit: 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.