Из-за перехода на удаленку в небольших компаниях часто возникают проблемы с телефонной связью. Обычно такие фирмы сидят в арендованных офисах, а услуги телефонии им оказывает бизнес-центр. О подключении сотрудников из дому придется позаботиться самостоятельно: самый недорогой способ это сделать — развернуть бесплатный сервер VoIP с открытым исходным кодом Asterisk на виртуальной машине. В статье для примера мы использовали Ubuntu 20.04, но этот рецепт подойдет и для других версий популярного дистрибутива — 18.04 и 18.10, а также (в теории, мы не проверяли) для актуальных версий Debian.
Asterisk + Ubuntu + VDS = IP-PBX
Существуют и другие серверы VoIP, при этом некоторые коммерческие продукты ограниченное время можно использовать бесплатно. Считается, что они гораздо проще в настройке, но требуют для работы Windows или установки с собственного дистрибутива Linux. Это сразу отсекает большинство недорогих VDS, а собственное железо с каналом передачи данных или аренда выделенного аппаратного сервера обходятся дороже. Бесплатный Asterisk разворачивается на любой виртуальной машине, к тому же внедрить его не так сложно. Для этого не потребуется даже сборка из исходных текстов. С помощью Asterisk нетрудно наладить телефонную связь между IP-телефонами (аппаратными и программными), а если подключиться к внешнему провайдеру VoIP, то за небольшую сумму денег вы получите полноценную IP АТС (IP-PBX). Если потребность в ней исчезнет, отказаться можно в любой момент — аренда выгоднее вложений в железо и софт.
Установка Asterisk
Для тестов мы взяли недорогую виртуальную машину, но боевая конфигурация зависит от потребностей заказчика. Здесь проявляется главное преимущество VDS: ресурсов можно заказать по минимуму, а потом добавить, если возникнет такая потребность. Обычно для полноценной работы АТС нужно не меньше 2 ГБ оперативной памяти, но если их будет много, отказаться от лишних ресурсов нетрудно.
Инсталляция сервера VoIP на Ubuntu 20.04 — самая простая часть квеста. Необходимый пакеты есть в официальном репозитории дистрибутива и добавляются в систему парой команд. В Ubuntu мы используем механизм повышения привилегий sudo, а в Debian он скорее всего не понадобится, поскольку там практикуются интерактивные сеансы с правами root:
sudo apt-get update
sudo apt-get install asterisk asterisk-dahdi
Запуск и остановка службы Asterisk производятся через systemd, а посмотреть ее статус после инсталляции можно с помощью команды
systemctl
:sudo systemctl status asterisk
Если все прошло удачно, результат будет примерно таким:
Для старта/остановки/перезапуска (например, после изменения конфигурационных файлов) службы в ручном режиме используются следующие команды:
sudo systemctl start asterisk
sudo systemctl stop asterisk
sudo systemctl restart asterisk
Пока все стандартно, но самая увлекательная часть нашего приключения впереди. Сервер VoIP нужно настроить.
Настройка Asterisk
Файлы конфигурации находятся в каталоге /etc/asterisk, причем их там огромное количество.
ls /etc/asterisk
Продукт настраивается очень гибко и обладает массой возможностей, но для решения простых задач большинство из них нам не понадобится. В этой статье мы ограничимся правкой двух конфигурационных файлов: /etc/asterisk/sip.conf и /etc/asterisk/extensions.conf. Предварительно стоит сделать их резервные копии:
sudo mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.b
sudo mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.b
Переходим к редактированию новых конфигурационных файла (самые любопытные могут изучить резервные копии дистрибутивных, там много интересного):
sudo nano /etc/asterisk/sip.conf
В файл нужно добавить минимум двух пользователей (внутренних абонентов) с номерами 1001 и 1002, а также задать для них пароли (параметр secret). На вашем сервере внутренние номера и пароли будут другими:
[general]
context=default
allowoverlap=no
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
[1001]
type=friend
host=dynamic
secret=1234
[1002]
type=friend
host=dynamic
secret=5678
Аналогично делаем новый extensions.conf:
sudo nano /etc/asterisk/extensions.conf
Его содержание будет следующим:
[general]
static=yes
writeprotect=no
priorityjumping=no
autofallthrough=yes
clearglobalvars=no
[default]
exten => 1001,1,Dial(SIP/1001,10)
exten => 1002,1,Dial(SIP/1002,10)
Меняем владельца и права доступа к файлам, поскольку там лежат, в частности, пароли пользователей нашей АТС
sudo chown asterisk:asterisk /etc/asterisk/sip.conf /etc/asterisk/extensions.conf
sudo chmod 640 /etc/asterisk/sip.conf /etc/asterisk/extensions.conf
Теперь нам остается только перезапустить службу и проверить ее работоспособность:
sudo systemctl restart asterisk
sudo systemctl status asterisk
На этом настройка IP АТС с возможностью телефонной связи между внутренними абонентами завершена. Перейдем к проверке ее работоспособности.
Подключение абонентов
Чаще всего для подключения к виртуальной АТС используют программные телефоны для настольных и мобильных операционных систем. Их существует великое множество, для тестов мы взяли бесплатный Linphone для iOS и Android. При первом запуске нужно будет выбрать опцию «ИСПОЛЬЗОВАТЬ SIP ПОЛЬЗОВАТЕЛЯ», а затем указать в настройках IP нашего сервера, логин и пароль. Учетную запись сервиса Linphone создавать не надо, у нас есть собственный.
После подключения к нашей АТС клиенты готовы общаться между собой. На рабочей станции с Linux и графическим окружением можно использовать тот же самый Linphone, доступный в официальном репозитории дистрибутива:
sudo apt-get install linphone
Настраивается он примерно так же. Теперь у нас есть виртуальная АТС, обеспечивающая связь между внутренними абонентами. Не бог весть какое достижение, но и трудозатраты на ее внедрение тоже невелики. В следующей статье мы научимся подключаться к SIP-провайдеру, звонить через него в мобильные и кабельные телефонные сети, принимать входящие внешние звонки, а также делать переадресацию и другие интересные штуки.
anonymous
Не проще ли развернуть FreePBX Distro из готового docker-образа для VDS? Там и развертывание проще, и настройка/обслуживание не в консоли
real_Master
потом три дня коммерческие модули придется отключать, совсем не проще…
А вот вопрос защиты надо бы хоть как то раскрыть, fail2ban что ли