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.com
Asterisk 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


Навигация: