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