====== Установка рабочего узла (Ubuntu Server 18.04) ====== ==== Установка ==== 1. Берем свеже установленный Ubuntu Server 18.04 обновляем его: $ apt update && apt upgrade 2. Отключаем встроенный ресолвер: $ systemctl disable systemd-resolved.service $ service systemd-resolved stop $ rm /etc/resolv.conf $ touch /etc/resolv.conf $ cat > /etc/resolv.conf < 3. Изменить имя на minipbx-nodeX mcedit /etc/hostname 4. Добавление репозитория minipbx $ apt install gnupg $ wget -O - https://deb.minipbx.ru/keyFile | sudo apt-key add $ echo 'deb [arch=amd64] https://deb.minipbx.ru/ bionic contrib' > /etc/apt/sources.list.d/mpbx-repo.list $ apt update 5. Установка комплекса и зависимостей: $ apt install asterisk-minipbx $ apt install minipbx minipbx-excodecs 6. Настройка /etc/mpbxd/mpbxd.ini. Если узел новый, то не забыть добавить его в БД. [main] nodeident=nodeX [db] Database= Username= Password= Server= 7. Если SNMP нужен, устанавливаем его: $ apt install snmpd иначе нужно запретить загрузку модуля res_snmp.so. В файле **/etc/asterisk/modules.conf** убрать комментарий со строке: noload => res_snmp.so 8. Настройка SNMP. 8.1. Создать файл /etc/snmp/snmpd.conf agentAddress udp:0.0.0.0:161 view asterisk included .1.3.6.1.2.1.1.1 view asterisk included .1.3.6.1.2.1.1.2 view asterisk included .1.3.6.1.2.1.1.4 view asterisk included .1.3.6.1.2.1.1.5 view asterisk included .1.3.6.1.2.1.1.6 view asterisk included .1.3.6.1.4.1.22736 rocommunity public -V asterisk syslocation sysContact admin master agentx agentXSocket /var/agentx/master agentXPerms 0660 0775 asterisk asterisk 8.2. В случае добавления к существующему файлу: Для отключения поднятия каких то лишних, причем случайных портов, в /etc/snmp/snmpd.conf закомментировать **trapsink** и **trap2sink**. 8.3. Добавим права на чтение для каталога /var/agentx: chmod 755 /var/agentx/ 8.4. Проверка: snmpwalk -v2c -c public enterprises.22736.1.2.5.0 8.5. Каждый раз когда SNMP клиент подключается snmpd пишет об этом в лог. Чтобы это изменить нужно исправить в файле /lib/systemd/system/snmpd.service, параметр ExecStart: ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null ... ExecStart=/usr/sbin/snmpd -LSwd -Lf /dev/null ... после этого выполнить: systemctl daemon-reload systemctl restart snmpd ps -ax|grep snmpd Последняя команда дает возможность проверить, изменились ли опции запуска.\\ НО! вообще то этот параметр должен браться из файла /etc/default/snmpd - похоже ошибка в ubuntu 18.04. 9. Настройка отправки электронной почты:\\ 9.1. Настройка отправки через обычный SNMP сервер\\ $ cpan MIME::QuotedPrint MIME::Base64 Mail::Sendmail Проверка: $ perl -c /usr/voice/sendmail-dialog.pl 9.2. Настройка отправки через gmail: $ apt install make libcrypt-ssleay-perl libauthen-sasl-perl $ cpan Email::Send::SMTP::Gmail Проверка: $ perl -c /usr/voice/sendmail-gmail.pl 10. Установка кодеков g723 и g729: $ apt install minipbx-excodecs 11. Установка ntp клиента: $ apt install ntpdate Добавим в /etc/crontab */30 * * * * root /usr/sbin/ntpdate 192.168.50.94 >/dev/null 2>&1 12. Установка звуковых файлов: $ apt install minipbx-snd-en $ apt install minipbx-snd-ru Проверить наличие стандартных звуковых файлов: $ ls -l /var/lib/asterisk/sounds Отсутствие файлов приведет к проблемам! Например, **без файлов pbx-transfer и beep не будет работать перевод вызовов**!\\ 13. Настройка рабочих IP адресов X. Перерезапуск и проверка сервисов ==== Полное удаление ==== apt purge minipbx mpbxd asterisk-minipbx minipbx-excodecs ==== Тонкая настройка ==== 1. Отключить ipv6: in /etc/sysctl.conf # Disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 # for each interface (eth0, eth1, ...) net.ipv6.conf..disable_ipv6 = 1 В каждом интерфейсе, файла /etc/netplan/01-netcfg.yaml, должно быть что то типа (последние 2 строки): eth1: dhcp4: no dhcp6: no accept-ra: no link-local: [ ] 2. Включить src routing: in /etc/sysctl.conf # Controls IP packet forwarding net.ipv4.ip_forward = 1 net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.default.forwarding = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.eth0.rp_filter=0 net.ipv4.conf.eth1.rp_filter=0 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 В каждом интерфейсе (кроме основного), файла /etc/netplan/01-netcfg.yaml, должно быть что то типа (последние 2 секции): eth3: dhcp4: no dhcp6: no accept-ra: no link-local: [ ] addresses: - 80.89.xxx.9/26 routes: - to: 0.0.0.0/0 via: 80.89.xxx.10 table: 103 routing-policy: - from: 80.89.xxx.9 table: 103 - to: 80.89.xxx.9 table: 103 3. Установка дополнительных пакетов: apt install zabbix-agent vsftpd 4. Особенности настройки asterisk за NAT: Иногда необходимо установить рабочий узел за NAT сервер (например так предоставляет подключение провайдер Яндекс). Для этого необходимо добавить (или отредактировать) набор параметров типа Узел, добавив в шаблон что то типа: localnet=10.130.0.27/255.255.255.255 externip=84.201.168.24 media_address=84.201.168.24 где * localnet - это внутренняя сеть (или внутренний адрес вашего сервера); * externip - это внешний адрес вашего сервера, который будет использован в SIP заголовках; * media_address = это внешний адрес вашего сервера, который будет использован для приема RTP (голосового) трафика; Этот пример работает без дополнительной настройки в случае One-to-One NAT (один внешний адрес, жестко соответствует одному внутреннему). Для других видов NAT потребуется проброс портов (SIP и RTP). 5. Настройка очистки службы журнала: Для удаления записей журнала старше одной недели, добавить в **crontab**: 0 4 * * 0 root journalctl --vacuum-time=1weeks 6. Если, по каким то причинам, мы не хотим чтобы при обновлении обновлялось ядро системы (например потому что требуется перезапуск), то выполним: apt-mark hold linux-generic linux-image-generic linux-headers-generic Включение обновлений: apt-mark unhold linux-generic linux-image-generic linux-headers-generic ==== Включение событий о готовности записи разговора ==== Многие CRM системы могут хранить у себя запись разговора. К сожалению, из за архитектурных особенностей Asterisk, выполнение каких либо операций с записью происходит асинхронно. Поэтому, если существует необходимость интеграции с CRM, необходимо включить отправку сообщений о готовности записи разговоров: mpbxd -record_events enable Также вы можете отключить эту, уже включенную возможность, выполнив команду: mpbxd -record_events disable При включении этой возможности, создается файл с именем **record_events**, обычно располагаемый в каталоге **/etc/mpbxd**. Внутри этого файла содержится 3 строки: * идентификатор узла; * параметры подключения к БД; * базовый путь хранения записей разговоров (должен заканчиваться символом разделителя пути, например **"/"**). ==== Увеличение максимального количества открытых файлов ==== При хорошей загрузке (более 10 каналов), может возникнуть ситуация с нехваткой файловых дескрипторов. Часто такая ситуация может произойти при использовании asterisk из стандартных deb пакетов. Лимит файлов там по умолчанию равен 1024. Проблема выражается в сообщениях вида: ast_alertpipe_init: Failed to create alert pipe with eventfd(), falling back to pipe(): Too many open files Для решения ситуации выполните: - Определим PID процесса asterisk (**ps ax**, **top**) - Кол-во открытых файлов в текущий момент: **lsof -p |wc -l** - Максимальное кол-во: **cat /proc//limits |grep files** Расширить можно в 3х местах (в зависимости от системы): - Если система с init.d, то смотрим файл **/etc/init.d/asterisk** ищем параметр **MAXFILES** - Если используется safe_asterisk, то **whereis safe_asterisk** и также ищем параметр **MAXFILES** - Если система с systemd, то смотрим файл **/etc/systemd/system/asterisk.service** или **/lib/systemd/system/asterisk.service** ищем параметр **LimitNOFILE** Какое значение выбрать? Тут определяйте со своей нагрузкой, к примеру, если проблемы возникли при нагрузке 100 каналов, то разумно заложить четырех кратный запас и установить значение в 4096 === sngrep - утилита захвата звонков (типа tcpdump) ==== * Установим пакет: apt install sngrep * В /etc/bashrc или (/etc/bash.bashrc) добавим (в самый конец): alias sngrep="sudo NCURSES_NO_UTF8_ACS=1 /usr/bin/sngrep $@" * В /etc/sudoers добавим право для выполнения нужным пользователям или группам, например так %support ALL=(ALL) NOPASSWD:SETENV: /usr/bin/sngrep