Моя цель, получить практические навыки администрирования телефонии на базе Asterisk 22 (теперь только chan_pjsip, chan_sip больше не поддерживается) если операционная система Ubuntu 24.04 LTS Server.
Лучше брать последнюю LTS-ветку — сейчас это Asterisk 22 LTS.
Почему именно LTS:
- 4+ года поддержки
- исправления безопасности
- стабильность
- используется в боевом окружении
- без устаревшего chan_sip
❌ Что НЕ стоит брать
- 16 LTS — уже морально устарел
- 18 LTS — ещё встречается, но постепенно уходит
- 20 — можно, но если уж начинать, то лучше 22
- всё ниже 16 — только если поддержка legacy
Хочу получить конкурентное преимущество в плане своей работы, уйти в удаленку. К тому же это интересно, а то сколько раз начинал и все что-то да отвлекало либо не до конца реализовывал задуманное. Будет исправляться, т.е. 2026 год должен стать переломным моментом.
В качестве тестового полигона выступит стенд на базе Debian 12 + Proxmox 8.2 где материнская плата: Gigabyte C246-WU4 + 32Gb оперативной памяти.
Под стенд обучения Asterisk создаю виртуальную машину:
OS: Ubuntu 24.04 LTS ServerCPU: 2RAM: 4GbNetwork: bridge network, лучше отдельныйVLANчтобы проще анализировать черезtcpdump. Это чуть позже.Role: Asterisk 22собирать буду из исходников дабы понимать как что и как.
Лабораторию Asterisk буду строить, как связка, ну а там посмотрим.
- 1 VM — Asterisk
- 1 VM — SIP (нагрузка)
- 1–2 софтфона (вроде я разбирал клиенты на Android)
- отдельная сеть (это чуть позже)
- включённый tcpdump
Шаг №1: Произвожу (это на мой взгляд) первоначальные настройки операционной системы перед дальнейшим использованием:
sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
ekzorchik@srv-s2404a:~$ sudo visudo
ekzorchik ALL=(ALL) NOPASSWD:ALL
sudo rm -Rf /var/lib/apt/lists
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
sudo locale-gen en_US.UTF-8
echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale
echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale
echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale
sudo lvextend -l +100%Free /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
sudo apt-get install -y qemu-guest-agent
Шаг №2: Устанавливаю зависимости для сборки Asterisk из исходников:
ekzorchik@srv-s2404a:~$ sudo apt-get install -y build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev git curl autoconf automake libtool cmake autoconf-archive unzip subversion net-tools
Шаг №3: Собираю Asterisk 22 из исходников:
ekzorchik@srv-s2404a:~$ cd /usr/src/
ekzorchik@srv-s2404a:/usr/src$
ekzorchik@srv-s2404a:/usr/src$ sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
ekzorchik@srv-s2404a:/usr/src$ file asterisk-22-current.tar.gz
asterisk-22-current.tar.gz: gzip compressed data, was "asterisk-22.8.2.tar", last modified: Thu Feb 5 16:50:48 2026, from Unix, original size modulo 2^32 64225280
ekzorchik@srv-s2404a:/usr/src$ sudo tar zxf asterisk-22-current.tar.gz
ekzorchik@srv-s2404a:/usr/src$ cd asterisk-*/
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo contrib/scripts/get_mp3_source.sh
A addons/mp3
A addons/mp3/layer3.c
A addons/mp3/interface.c
A addons/mp3/MPGLIB_TODO
A addons/mp3/mpg123.h
A addons/mp3/mpglib.h
A addons/mp3/decode_ntom.c
A addons/mp3/MPGLIB_README
A addons/mp3/common.c
A addons/mp3/huffman.h
A addons/mp3/tabinit.c
A addons/mp3/Makefile
A addons/mp3/README
A addons/mp3/decode_i386.c
A addons/mp3/dct64_i386.c
Exported revision 204.
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo contrib/scripts/install_prereq install
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo ./configure
На заметку: Важно чтобы терминал был разрешением не менее 80 на 21 иначе sudo make menuselect не запустится.
На заметку: Устанавливать буду пока только следующие звуковые форматы alau,ulaw,g722 (как всегда, если в процессе будут нужны другие, то я их до установлю, т.к. мой принцип лучше столкнуться с ошибкой и осознать, что нужно чем ставить все и вся)
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo make menuselect
Add-ons: отмечаю клавишей "ENTER" format_mp3Applications: оставляю все по дефолтуBridging Modules: оставляю все по дефолтуCall Detail Recording: оставляю все по дефолтуChannel Event Logging: оставляю все по дефолтуChannel Drivers: оставляю все по дефолтуCodec Translation: а вижу что уже все кодеки отмечены для установки, просто раньше их нужно было выбирать, оставляю все по дефолту, а именно: codec_a_mu,codec_adpcm,codec_alaw,codec_codec2,codec_g722,codec_g726,codec_gsm,codec_ilbc,codec_lpc10,codec_resample,codec_speex,codec_ulawFormat Interpreters: оставляю все по дефолтуDialplan Functions: оставляю все по дефолтуPBX Modules: оставляю все по дефолтуResource Modules: оставляю все по дефолту, но пробегаюсь что есть дабы проверить что вот эти модули отмечены к установке-
res_pjsipres_pjsip_authenticator_digestres_pjsip_endpoint_identifier_ipres_pjsip_outbound_registration
Test Modules: оставляю все по дефолтуAlternate Channel Storage Backend: не отмечаю пока во всяком случаеCompiler Flags: не отмечаю пока во всяком случаеUtilities: не отмечаю пока во всяком случаеAGI Samples: не отмечаю пока во всяком случаеCore Sound Packages: отмечаю CORE-SOUNDS-EN-ULAW,CORE-SOUNDS-EN-ALAW,CORE-SOUNDS-EN-G722, CORE-SOUNDS-RU-ULAW,CORE-SOUNDS-RU-ALAW,CORE-SOUNDS-RU-G722Music On Hold File Packages: отмечаю MOH-OPSOUND-ULAW,MOH-OPSOUNG-ALAW,MOH-OPSOUND-G722Extras Sound Packages: отмечаю EXTRA-SOUNDS-EN-ULAW,EXTRA-SOUNDS-EN-ALAW,EXTRA-SOUNDS-EN-G722
И нажимаю "Save & Exit"
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo make -j$((`nproc`+1))
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo make install
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo make progdocs
Generating C-API documentation. This will take a while.
warning: Tag 'HTML_TIMESTAMP' at line 39 of file 'doc/Doxyfile' has become obsolete.
To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
тут жду, ничего не нажимаю, процесс сам завершиться строкой ниже, т.е. не прерываем думая что подвисло.
Generation complete. Any warnings are in ./doxygen.log.
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo make samples
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo make config
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ sudo ldconfig
ekzorchik@srv-s2404a:/usr/src/asterisk-22.8.2$ cd $HOME
ekzorchik@srv-s2404a:~$
Шаг №4: Изменяю работу сервиса Asterisk в сторону что его работа должна вестись не от имени суперпользователя root, а от специально созданного под этот сервис, в моем окружении именовать учетная запись будет, как Asterisk:
ekzorchik@srv-s2404a:~$ sudo groupadd asterisk
ekzorchik@srv-s2404a:~$ sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
ekzorchik@srv-s2404a:~$ sudo usermod -aG audio,dialout asterisk
ekzorchik@srv-s2404a:~$ sudo chown -R asterisk.asterisk /etc/asterisk
chown: warning: '.' should be ':': ‘asterisk.asterisk’
ekzorchik@srv-s2404a:~$ sudo chown -R asterisk:asterisk /etc/asterisk
ekzorchik@srv-s2404a:~$ sudo chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
ekzorchik@srv-s2404a:~$ sudo chown -R asterisk:asterisk /usr/lib/asterisk
ekzorchik@srv-s2404a:~$ sudo nano /etc/default/asterisk
AST_USER="asterisk"
AST_GROUP="asterisk"
ekzorchik@srv-s2404a:~$ sudo nano /etc/asterisk/asterisk.conf
runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.
Шаг №5: Настал этап запуска развернутого сервиса Asterisk:
ekzorchik@srv-s2404a:~$ sudo systemctl enable asterisk
asterisk.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable asterisk
ekzorchik@srv-s2404a:~$ sudo systemctl restart asterisk.service && sudo systemctl status asterisk.service | head -n5
● asterisk.service - LSB: Asterisk PBX
Loaded: loaded (/etc/init.d/asterisk; generated)
Active: active (running) since Thu 2026-03-05 09:08:35 MSK; 14ms ago
Docs: man:systemd-sysv-generator(8)
Process: 70455 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)
ekzorchik@srv-s2404a:~$
Проверяю, а могу ли я подключиться к консоли Asterisk:
ekzorchik@srv-s2404a:~$ sudo asterisk -rvv
Asterisk 22.8.2, Copyright (C) 1999 - 2025, 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 22.8.2 currently running on srv-s2404a (pid = 70470)
srv-s2404a*CLI> quit
Asterisk cleanly ending (0).
Executing last minute cleanups
ekzorchik@srv-s2404a:~$
Отлично, вроде как работает.
Шаг №6: Осталось проверить, если отправить систему Ubuntu 24.04 LTS Server в перезагрузку после поднимется ли сервис Asterisk:
ekzorchik@srv-s2404a:~$ sudo reboot
ekzorchik@srv-s2404a:~$ sudo systemctl status asterisk.service | head -n5
● asterisk.service - LSB: Asterisk PBX
Loaded: loaded (/etc/init.d/asterisk; generated)
Active: active (running) since Thu 2026-03-05 09:10:34 MSK; 17s ago
Docs: man:systemd-sysv-generator(8)
Process: 788 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)
ekzorchik@srv-s2404a:~$ sudo netstat -tulpn | egrep asterisk
udp 0 0 0.0.0.0:4520 0.0.0.0:* 814/asterisk
udp 0 0 0.0.0.0:4569 0.0.0.0:* 814/asterisk
udp 0 0 0.0.0.0:5000 0.0.0.0:* 814/asterisk
udp 0 0 0.0.0.0:60618 0.0.0.0:* 814/asterisk
udp6 0 0 :::43222 :::* 814/asterisk
ekzorchik@srv-s2404a:~$
Ну пока делаю вывод, что сервис после перезагрузки поднимается, порты ожидают подключения. Что ж будет приобщаться к использованию Asterisk 22 отталкиваясь от текущей заметки строя новые.
На этом заметка завершена, с уважением автор блога ekzorchik, продолжение следует.