Хочу сделать себе АТС
, которая будет развернута дома, связана с внешним доменным именем через 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
, продолжение следует.