CentOS & Asterisk. Часть 1. Установка и местные звонки.
20.11.2018
Всех приветствую! А давайте-ка замутим свой телефонный сервер! Естественно на базе системы «Asterisk». В качестве Linux дистрибутива будем использовать CentOS 7. Рассмотрим инсталляцию и настройку согласно официальной wiki от сайта asterisk.org.
Начнём мы конечно с того что установим CentOS на виртуальную машину. Напоминаю что скачать ISO можно отсюда. Я буду использовать - CentOS-7-x86_64-Minimal-1804.iso. Даю виртуалке 2GB оперативы и 15GB диска и самое главное сетевой адаптер с выходом-мостом в реальную сеть. Язык при установке я оставляю английский.
Включаем сетевой интерфейс на этапе установки (раздел NETWORK & HOST NAME):
Далее нам нужно указать часовой пояс, согласиться с разметкой диска, прописать статический IP адрес (если необходимо), имя хоста и просто нажать «Done». Тогда кнопка «begin installation» станет активной:
Далее задаём пароль пользователя root и наблюдаем окончание установки.
Далее в загруженной системе мы вводим логин «root» и пароль который задавали.
Проверить IP адрес, который получила система мы можем командой:
ip addr
или так:
ifconfig -a
Если пишет, что команда не обнаружена – ставим пакет сетевых инструментов:
sudo yum -y install net-tools.x86_64
В моём случае сервер получил адрес 192.168.3.92
Зная адрес, мы можем теперь подключиться к нашему серверу удалённо через «PuTTY» - Качаем PuTTY. Создаём новое соединение, используя наш адрес и порт 22 – и вот мы можем управлять нашим сервером удалённо с любой машины. А также мы теперь можем вставлять команды в терминал из буфера.
Нюансы пользования окном Putty:Чтобы скопировать из терминала: SHIFT + левый клик
Чтобы вставить в терминал: правый клик
Первым делом, отключим улучшенную систему безопасности «SELinux» и перезагрузим сервер:
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
reboot
Теперь для того чтобы софтовый телефон "X-Lite" мог конектиться к нашему серверу нужно отключить файрвол Centos, который в седьмой версии называется «firewalld», вводим команды:
systemctl stop firewalld
systemctl disable firewalld
После чего проверяем статус:
systemctl status firewalld
Кстати после сего действа нужно тоже обязательно перезагрузить сервер!
sudo reboot
Далее, в качестве хорошего тона настройки серверов, мы приведём в порядок время:
yum install -y ntp && ntpdate pool.ntp.org && \ chkconfig ntpd on && service ntpd start
Обновим систему и перезагрузим:
yum update -y && reboot
Помимо того, что у нас есть основной пользователь root, книга «Asterisk: The Definitive Guide» советует нам создать дополнительного пользователя «asteriskpbx»:
adduser asteriskpbx && passwd asteriskpbx && \ yum -y install sudo && visudo
Далее два раза набираем пароль для нового пользователя – у меня «123».
Устанавливаем нужные пакеты и зависимости:
sudo yum -y install gcc gcc-c++ make wget subversion libxml2-devel ncurses-devel openssl-devel
sudo yum -y install libnewt-devel mc nano vim-enhanced bzip2
sudo yum -y install sqlite-devel libuuid-devel patch jansson-devel
Скачиваем исходник астериска (будем пробовать версию 15.6.2):
Создаём каталог «asterisk» в каталоге «asterisk-complete», который будет в каталоге «src» - и переходим в него:
mkdir -p ~/src/asterisk-complete/asterisk
cd ~/src/asterisk-complete/asterisk
wget https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-15.6.2.tar.gz
Распакуем архив с исходником астериска:
tar -zxvf asterisk*
Командой «ls» удостоверимся что теперь в каталоге «asterisk» помимо архива «asterisk-15.6.2.tar.gz» также появился каталог «asterisk-15.6.2». И переходим туда:
cd asterisk*
Запускаем компиляцию:
Для x64 систем:
./configure --libdir=/usr/lib64
Для x86 систем:
./configure
Далее собираем дистрибутив:
make
Проведём установку собранного дистрибутива:
sudo make install
Проведём конфигурацию установленного дистрибутива (она проходит быстро и в фоне):
sudo make config
Устанавливаем «Extra Sounds Packages» они в самом низу списка, кстати можно ещё что-нибудь установить. Раскрываем окно терминала на весь экран:
cd ~/src/asterisk-complete/asterisk/asterisk*
make menuselect
Нажмите «h» для справки:
В общем в конце нужно нажать «x».
Кстати процесс не быстрый. Но если всё таки вы что-то выбрали для установки, то после всех скачиваний нужно повторно выполнить команду "sudo make install". Но напомню, что если вы ничего не выбрали и просто нажали "x", то повторная команда "make install" не нужна. После этого мы можем посмотреть сколько осталось свободного дискового пространства в нашей системе:
df -hГенерируем конфиги астериска, они кстати нальются в «/etc/asterisk/»:
make samples && make config
Далее нам надо сказать астериску что он должен запускаться не от «root» а от пользователя «asteriskpbx». Для этого редактируем конфиг «asterisk.conf». Найдём строки runuser и rungroup – раскоментируем и приведём к такому виду: runuser=asteriskpbx, rungroup=asteriskpbx.
nano /etc/asterisk/asterisk.conf
;;;;;
runuser=asteriskpbx
rungroup=asteriskpbx
;;;
А давайте-ка кстати рассмотрим по подробнее принцип работы с текстовым редактором «Nano». Выделить текст можно либо мышью, либо с клавиатуры. С клавиатуры выделение происходит так: сначала отмечается начало выделения - Alt-A или Ctrl-^. Далее выделенный текст можно удалить или скопировать в буффер. Удаляет комбинация Ctrl-K (или F9), а копирует в буффер обмена — комбинация Alt-6. Ещё мы можем вставить текст из буффера обмена — Ctrl-U или F10. Для вставки текста из другого файла используется кнопка Ins. После завершения редактирования жмём «CTRL+o» - произойдёт сохранение изменений и дальше «CTRL+x» - выход. И ещё один интересный момент - если вам нужно скопировать текст из редактора nano в буфер машины, из пот которой запущен сеанс "PuTTY" - просто выделите его мышью и всё - он уже в буфере! А на случай если вам нужно удалить всё после курсора и до конца файла - жмём Alt+t.
Далее делаем владельцем рабочих каталогов астериска нашего созданного пользователя «asteriskpbx» с паролем «123».sudo chown -R asteriskpbx:asteriskpbx /var/lib/asterisk/
sudo chown -R asteriskpbx:asteriskpbx /var/spool/asterisk/
sudo chown -R asteriskpbx:asteriskpbx /var/log/asterisk/
sudo chown -R asteriskpbx:asteriskpbx /var/run/asterisk/
sudo chown asteriskpbx:asteriskpbx /etc/asterisk
Сделаем перезагрузку чтобы астериск запустился как служба (демон):
reboot
Проверяем командой «systemctl status asterisk» - если пишет "Active running" значит служба работает!
А теперь переходим к более интересному – работа с конфигуратором каналов – он же «sip.conf»! В конфиге «sip.conf» мы объявляем наших абонентов, настраиваем им разные параметры а в конфиге «extensions.conf» мы прописываем правила по которым работают наши абоненты – он же «DIAL PLAN».
Делаем дубликат файла «sip.conf» и затем переходим к его редактированию:
cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.origin
nano /etc/asterisk/sip.conf
В самое начало файла вставляем описание наших абонентов:
[100]
type=friend
regexten=100
secret=100
context=localcalls
host=dynamic
callerid="100" <100>
disallow=all
allow=alaw
allow=ulaw
language=ru
callgroup=1
pickupgroup=1
qualify=yes
canreinvite=yes
call-limit=4
nat=no
[101]
type=friend
regexten=101
secret=101
context=localcalls
host=dynamic
callerid="101" <101>
disallow=all
allow=alaw
allow=ulaw
language=ru
callgroup=1
pickupgroup=1
qualify=yes
canreinvite=yes
call-limit=4
nat=no
[102]
type=friend
regexten=102
secret=102
context=localcalls
host=dynamic
callerid="102" <102>
disallow=all
allow=alaw
allow=ulaw
language=ru
callgroup=1
pickupgroup=1
qualify=yes
canreinvite=yes
call-limit=4
nat=no
[103]
type=friend
regexten=103
secret=103
context=localcalls
host=dynamic
callerid="103" <103>
disallow=all
allow=alaw
allow=ulaw
language=ru
callgroup=1
pickupgroup=1
qualify=yes
canreinvite=yes
call-limit=4
nat=no
После завершения редактирования жмём «CTRL+o» - произойдёт сохранение изменений и дальше «CTRL+x» - выход. Как вы могли заметить мы задали сразу 4 абонента – 100,101,102,103 с паролями аналогичными их номерам.
А ещё заметьте, что у каждого абонента есть параметр «language=ru». Это означает что сервисные голосовые сообщения от самого астериска должны быть на русском языке. Но для этого ещё нужно скачать и развернуть в системе нужные звуковые файлы. Для начала создадим каталог «ru» в директории где хранятся эти самые голосовые сервисные файлы:
mkdir /var/lib/asterisk/sounds/ru
Переходим туда:
cd /var/lib/asterisk/sounds/ru
Качаем пакет звуков:
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-alaw-current.tar.gz
Распаковываем:
tar xfz asterisk-core-sounds-ru-alaw-current.tar.gz
Далее нам надо зафиксировать наш контекст («Dial Plan») «localcalls» в конфиге «extensions.conf»:
cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.origin
nano /etc/asterisk/extensions.conf
И пишем в конце конфига вот это:
[localcalls]
exten => _XXX,1,Dial(SIP/${EXTEN},,m)
Обращаю внимание на количество иксов в строке с «exten» - три икса заточены на звонки на трёхзначные номера! И если вы сделаете только 4х значный шаблон то не сможете дозвониться на 3х значные номера.
После завершения редактирования жмём «CTRL+o» - произойдёт сохранение изменений и дальше «CTRL+x» - выход.Нужно объяснить, что эти два конфига общаются между собой через параметр «context=» - то есть в sip.conf у каждого номера есть «context=localcalls» а сам этот «localcalls» описан в диал плане в extensions.conf.
Чтобы писать команды самому астериску сначала нужно ввести команду «asterisk –r»:
Даём команды астериску:
asterisk –r
Далее вводим:
core reload
Давайте посмотрим, как сделать статический адрес в системе CentOS 7:
Для этого нам надо отредактировать файл «ifcfg-eth0»
nano /etc/sysconfig/network-scripts/ifcfg-eth0
Где нам надо значение «BOOTPROTO=dhcp» сменить на «BOOTPROTO=static» и ниже прописать наши параметры:
IPADDR=192.168.3.248
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=1.0.0.1
DNS2=1.1.1.1
DNS3=8.8.4.4
В данном примере я поменял адрес на 192.168.3.248. После этого можно перезагрузиться или воспользоваться вот этой командой:
/etc/init.d/network restart
Как сменить хостнэйм?
Чтобы увидеть имя хоста в CentOS 7 можно воспользоваться командой:
hostname
или более развёрнутой
hostnamectl
Поменяем имя хоста на atsast:
hostnamectl set-hostname atsast
Чтобы перезапустить сервис systemd-hostnamed можно перезагрузиться либо нужна команда:
systemctl restart systemd-hostnamed
Далее мы настраиваем IP Телефон под номер 100 – нам нужно ввести следующие данные:
SIP/Domain: 192.168.3.248 //либо хост нейм
Login/User ID: 100 так как - «regexten=100» в sip.conf
Пароль: 100 так как - «secret=100» в sip.conf
По умолчанию asterisk слушает udp порт 5060 - убедиться в этом можно этой командой:
sudo netstat -lntup | grep "asterisk"
Ну а если под рукой нет IP аппарата. То можно поставить софтфон на Windows. Мы будем использовать программу «X-lite». Скачать можно тут.
Открываем программу – идём в верхнее меню – SoftPhone – Account Settings – и далее в диалоговом окне заполняем всё что нужно.
После загрузки сервера смотрим на подключение устройств – всё работает!
Кстати, чтобы удостовериться что Asterisk нормально функционирует можно использовать команду:
systemctl status asterisk
Если команда выдала Active: active (running) в зелёном цвете, то всё нормально!
Теперь настраиваем X-lite на другой машине и пробуем звонить. Получилось? Ура!
Немного о нюансах – Если вам захотелось сменить пароль root пользователя, то вот команда:
passwd
В скриншоте ниже я поменял пароль на «123», хотя система ругается что пароль меньше 8 символов, но поменять всё равно даёт.
Для того чтобы посмотреть потребление ресурсов системы набираем команду "top":
Для выхода жмём "q"
А вот примеры команд самого астериска:
asterisk -r:
перезагрузка ядра / применить изменения в конфах
core reload
показать регистрацию у провадера
sip show registry
показывает данные о заведённых номерах/паролях/транках
sip show peers
sip show users
Для выхода из CLI набиреам exit
Кстати, на случай, если после перезагрузки не работает команда «asterisk -r». Но команда «systemctl status asterisk» говорит нам что астериск запущен. Дело тут в том, что теперь у пользователя "root" нет прав на каталог "/var/run/asterisk/", значит надо сменить пользователя:
su - asteriskpbx
И под пользователем "asteriskpbx" мы даём такие команды:
asterisk
asterisk -r
Теперь команда "asterisk -r" работает.
Чтобы вернуться на root:
su root
И после того как мы запустили "CLI" (asterisk -r) хотя бы один раз под "asteriskpbx" - Теперь "asterisk -r" будет работать и из под root, но только до следующей перезагрузки!
Все ссылки для данного проекта:
Пакет русских сервисных сообщений (asterisk-core-sounds-ru-alaw-current) asterisk-core-sounds-ru-alaw-current drive.google.comAsterisk CDR Viewer https://github.com/g613/asterisk-cdr-viewer drive.google.com
Ease Audio Converter http://audiotool.net/EaseAudioConverter/index.htm
Adobe Audition https://www.adobe.com/ru/products/audition.html
WinSCP https://winscp.net/eng/download.php
CentOS-7-x86_64-Minimal-1804.iso https://www.centos.org/download drive.google.com
Исходник asterisk-15.6.2 https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15.6.2.tar.gz drive.google.com
Исходник dahdi-linux: https://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-current.tar.gz drive.google.com
Исходник libpri-current: https://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz drive.google.com
X-lite: https://www.counterpath.com/x-lite-download/ drive.google.com
Официальная wiki https://wiki.asterisk.org/wiki/display/AST/Home