Хочу сделать себе АТС, которая будет развернута дома, связана с внешним доменным именем через 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 = 4096MbHDD = 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-ULAWCORE-SOUNDS-EN-ALAWCORE-SOUNDS-EN-g722CORE-SOUNDS-RU-ULAWCORE-SOUNDS-RU-ALAWCORE-SOUNDS-RU-g722
Music On Hold File Packages: отмечаю
MOH-OPSOUND-ULAWMOH-OPSOUND-ALAWMOH-OPSOUND-G722
Extras Sound Packages: отмечаю
EXTRA-SOUNDS-EN-ULAWEXTRA-SOUNDS-EN-ALAWEXTRA-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, продолжение следует.