Хочу сделать себе АТС, которая будет развернута дома, связана с внешним доменным именем через WireGuard туннель где уже на доменное имя будет завязана вся телефония + Если мне нужно будет оставить где-то номер телефона, то буду указывать внешний номер с голосовым ассистентом (секретарь), дабы не публиковать свой мобильный номер. Все обязательно логировать и те, кто спамят заносить в черный список. Просто где не оставь на нужную услугу мобильный номер буквально тут же начинаются звонки со всякими предложениями: Квартира в Ипотеку, пройти обследование, Развод и т.д. Надоело, пока я выход из данной ситуации для себя, как системный администратор вижу в том, чтобы поднять собственную АТС на базе Asterisk 20. Я могу это сделать, так почем еще не сделал это, ну ничего сделаем…

Разворачиваю виртуальную машину внутри гипервизора Debian 10 + Proxmox 6 моего боевого сервера (Supermicro SYS-5019S-M: Debian 10 + Proxmox 6, LVM-Thin разделы, 64Gb оперативной памяти (2 модуля 378A4G43MB1-CTD))

  • CPU = 1 sockets (4 cores)
  • RAM = 4096Mb
  • HDD = 50Gb (M.2 Storage or SSD Storage)
  • OS = Ubuntu 22.04 Server amd64

Шаг №1: Обновляю информацию об установленных пакетов и обновляю установленные пакеты до версии самых последних в текущем релизе Ubuntu 22.04 Server из стандартных репозитариев:

ekzorchik@srv-us2204a:~$ sudo rm -f /etc/localtime

ekzorchik@srv-us2204a:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-us2204a:~$ sudo nano /etc/update-manager/release-upgrades

[DEFAULT]

Prompt=never

ekzorchik@srv-us2204a:~$ sudo nano /etc/apt/apt.conf.d/02proxy

Acquire::http { Proxy "http://172.35.35.16:3142"; };

ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get dist-upgrade -y

ekzorchik@srv-us2204a:~$ sudo reboot

ekzorchik@srv-us2204a:~$ uname -a && lsb_release -a

Linux srv-us2204a 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 22.04.2 LTS

Release:        22.04

Codename:       jammy

ekzorchik@srv-us2204a:~$

ekzorchik@srv-us2204a:~$

На заметку: IP-адрес 172.35.35.16 – это виртуальная машина на моем сервере где работает сервис apt-cacher-ng цель которого кэшировать устанавливаемые пакеты дабы после обращаться к нему, а не в интернет.

Шаг №2: В дефолтных репозитариях имеется пакет Asterisk, но он не той версии которая мне нужна, я буду собирать из исходников дабы идти по книге выше:

ekzorchik@srv-us2204a:~$ apt-cache show asterisk | grep Version Version: 1:18.10.0~dfsg+~cs6.10.40431411-2

ekzorchik@srv-us2204a:~$

Шаг №3: Устанавливаю зависимости для сборки Asterisk из исходников:

ekzorchik@srv-us2204a:~$ 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 mc htop

Шаг №4: Собираю Asterisk 20 из исходников:

ekzorchik@srv-us2204a:~$ cd /usr/src

ekzorchik@srv-us2204a:/usr/src$ sudo curl -O http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz

ekzorchik@srv-us2204a:/usr/src$ sudo tar zxf asterisk-20-current.tar.gz

ekzorchik@srv-us2204a:/usr/src$ cd asterisk-*/

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo contrib/scripts/get_mp3_source.sh

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo contrib/scripts/install_prereq install

ekzorchik@srv-us2204a:/usr/src/asterisk-*$

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo ./configure

configure: Package configured for:

configure: OS type  : linux-gnu

configure: Host CPU : x86_64

configure: build-cpu:vendor:os: x86_64 : pc : linux-gnu :

configure: host-cpu:vendor:os: x86_64 : pc : linux-gnu :

ekzorchik@srv-us2204a:/usr/src/*$

На заметку: Важно чтобы терминал был разрешением не менее 80 на 21 иначе sudo make menuselect не запустится.

На заметку: выбираю звуковые форматы ULAW,ALAW & G722 (если в процессе нужны будут другие, то до установлю, а то порой не понятно, что нужно и что не нужно, лучше столкнуться с ошибкой и осознать, что нужно так я считаю полезнее для изучения).

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo make menuselect

Add-ons: отмечаю клавишей Enter format_mp3

Channel Drivers: оставляю по дефолту

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-g722

Music On Hold File Packages: отмечаю

  • MOH-OPSOUND-ULAW
  • MOH-OPSOUND-ALAW
  • MOH-OPSOUND-G722

Extras Sound Packages: отмечаю

  • EXTRA-SOUNDS-EN-ULAW
  • EXTRA-SOUNDS-EN-ALAW
  • EXTRA-SOUNDS-EN-G722

И нажимаю Save & Exit

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo make -j$((`nproc`+1))

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo make install

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo make progdocs

Generating C-API documentation. This will take a while.

Generation complete. Any warnings are in ./doxygen.log.

ekzorchik@srv-us2204a:/usr/src/asterisk-*$

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo make samples

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo make config

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ sudo ldconfig

ekzorchik@srv-us2204a:/usr/src/asterisk-*$ cd $HOME

Шаг №5: Как и всегда мой сервис Asterisk не будет использовать дефолтную работу от имени пользователя root. Значит создадим специального пользователя и укажем, что от имени него запускать и работать Asterisk'у:

sudo groupadd asterisk

sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk

sudo usermod -aG audio,dialout asterisk

sudo chown -R asterisk.asterisk /etc/asterisk

sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk

sudo chown -R asterisk.asterisk /usr/lib/asterisk

sudo nano /etc/default/asterisk

AST_USER="asterisk"

AST_GROUP="asterisk"

sudo nano /etc/asterisk/asterisk.conf

runuser = asterisk      ; The user to run as.

rungroup = asterisk     ; The group to run as.

Шаг №6: Запускаю сервис Asterisk:

ekzorchik@srv-us2204a:~$ sudo systemctl enable asterisk

asterisk.service is not a native service, redirecting to systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install enable asterisk

ekzorchik@srv-us2204a:~$ sudo systemctl restart asterisk && sudo systemctl status asterisk | head -n5

● asterisk.service - LSB: Asterisk PBX

     Loaded: loaded (/etc/init.d/asterisk; generated)

     Active: active (running) since Fri 2022-06-10 07:41:34 MSK; 14ms ago

       Docs: man:systemd-sysv-generator(8)

    Process: 76839 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)

ekzorchik@srv-us2204a:~$

ekzorchik@srv-us2204a:~$ sudo asterisk -rvv

Asterisk 20.3.1, 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.3.1 currently running on srv-us2204a (pid = 78591)

srv-us2204a*CLI>quit

Asterisk cleanly ending (0).

Executing last minute cleanups

ekzorchik@srv-us2204a:~$

Итого, сборка Asterisk успешно завершена именно 20 версии хочу освежить более подробно все уже примяющееся в новой версии

На заметку: Если мне понадобится какой-либо модуль, то я вернусь в каталог куда устанавливал и через команду sudo make menuselect отмечу его и заново произведу установку.

Шаг №7: Проверяю, что, если система Ubuntu 22.04 Server будет перезагружена, сервис Asterisk самостоятельно запустится:

ekzorchik@srv-us2204a:~$ sudo reboot

ekzorchik@srv-us2204a:~$ sudo systemctl status asterisk | head -n5

● asterisk.service - LSB: Asterisk PBX

     Loaded: loaded (/etc/init.d/asterisk; generated)

     Active: active (running) since Thu 2023-07-13 08:27:20 MSK; 34s ago

       Docs: man:systemd-sysv-generator(8)

    Process: 677 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)

ekzorchik@srv-us2204a:~$ sudo netstat -tulpn | egrep asterisk

udp        0      0 0.0.0.0:5000            0.0.0.0:*                           708/asterisk

udp        0      0 0.0.0.0:40586           0.0.0.0:*                           708/asterisk

udp        0      0 0.0.0.0:4520            0.0.0.0:*                           708/asterisk

udp        0      0 0.0.0.0:4569            0.0.0.0:*                           708/asterisk

udp6       0      0 :::38081                :::*                                708/asterisk

ekzorchik@srv-us2204a:~$

Ответ, да! сервис стартует и порты ожидают слушаются.

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