Asterisk: подключение и использование транка от zadarma.com, Билайн и Ростелеком


Часто  для совершения междугородних и международных звонков удобно и дешево использовать сервис zadarma.com. После регистрации вы можете установить в качестве исходящего номера свой (потребуется подтвердить владение), что делает использование сервиса прозрачным для клиентов. Опишем как быстро подключить номер к вашему Asterisk.

Восстановление Linux web сервера из копии (rsync)

В этом посте мы рассмотрели как сделать полный бекап сервера с web сайтами. Теперь рассмотрим как развернуть копию на новом сервере сохранив все настройки:

  1. Ставим Ubuntu/Debian желательно той же версии новом сервере
  2. Устанавливаем mysql (чтобы не разбираться с отсутствующим /var/lib/mysql/). И сразу останавливаем его:
    apt-get install mysql-server
    service mysql stop

Кнопка звонка в Miranda NG через Asterisk AMI

В нашей компании используется связка Openfire (сервер) + Miranda (клиенты). Поскольку телефония у нас на базе Asterisk, появилась необходимость сделать кнопку "Позвонить" в меню контакта в Миранде. По этой кнопке мы будем инициировать звонок через Asterisk Management Interface (AMI). Это более правильный подход, чем использование call-файлов.

Когда сотрудников в компании больше 150, это довольно удобно - не искать каждый раз номер телефона человека.

Установка Asterisk 16 на Ubuntu 18 LTS Server из исходников

Статья рассчитана для новичков в установке астериск из исходников. В этом нет ничего трудного, как может показаться.

Итак, имеем установленную Ubuntu 18 LTS Server и цель установить Asterisk 16.X.X Communications Framework:
cd /usr/src/
sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
sudo tar zxvf asterisk-16-current.tar.gz
cd asterisk-16*/

Дифференциальный бекап VDS/VPS и MySql средствами rsync

Задача - иметь локальный бекап настроенного web-сервера (Ubuntu): ежедневный за последние 7 дней, еженедельный  за 4 недели и ежемесячный за 6 месяцев. Мы будем использовать rsync, это позволит нам копировать только добавленные и изменившиеся данные. Нам нужно настроить SSH авторизацию по ключам между серверами, написать скрипт бекапа и засунуть его в крон. Задача в общем-то тривиальная.

Asterisk AMI: получить список свободных операторов, php скрипт

Задача: обратившись к Asterisk получить список активных не занятых операторов. Нужно это было для того, чтобы отправить им сообщение из другой программы не отвлекая от разговора всплывающим окном, если оператор занят.

Как выяснилось, такую тривиальную задачу мне было трудно реализовать сходу. Пробовал разные команды AMI/AGI, пытался передавать данные из дайлплана, но все это не работало так как нужно.

Asterisk и Openfire/Jabber: XMPP сообщение о входящем звонке с именем и отделом из Active Directory

Нужно, чтобы Asterisk при входящем звонке сотруднику, отправлял ему в Jabber сообщение о том кто звонит. В случае, если это наш сотрудник заведенный в AD, помимо номера в сообщении будет его ФИО, должность и название отдела (если эти данные введены). Стоит заметить, что астериск сам умеет слать сообщения используя JabberSend, но по некоторым причинам мне этот способ не подошел, к тому же пришлось бы все равно использовать внешний скрипт для связи с AD.

Ubuntu: iptables базовая настройка для защиты web сервера

Есть обычный VDS на Ubuntu с установленными nginx/php-fpm/mysql и т.п. Нам требуется обеспечить минимальную безопасность ограничив сетевые подключения файрволом - закроем все входящие порты кроме перечисленных. Для этого создадим скрипт с командами iptables и настроим его запуск при поднятии сетевого интерфейса.
touch /etc/firewall.sh
chmod u+x /etc/firewall.sh
chmod 644 /etc/firewall.sh
nano /etc/firewall.sh

Zimbra: миграция на новый сервер, перенос почтового сервера

Для переноса Zimbra на новый сервер:

1. Поднимаем операционную систему на новом сервере и устанавливаем такую же версию Зимбры, как на старом. В моем случае 8.6.0. Установку запускаем с ключем -s. Соглашаемся на все, кроме проверки базы.

Удаляем пакет в Ubuntu при сообщении dpkg: ошибка при обработке пакета

Иногда в системе возникают ошибки при неправильной установке (конфигурировании) пакета. Обычно такое происходит, когда программа не была установлена до конца. После этого не помогает apt-get remove (purge). Самый простой способ справиться с проблемой, удалить секцию описывающую программу из /var/lib/dpkg/status, далее выполняем apt-get -f install и работаем далее.

Проверяем хост на доступность (ping) и пишем в файл (отправляем сообщение) при падении линка. Полезный скрипт мониторинга ресурсов.

Возникла простая задача, проверять удаленный роутер на доступность и вести статистику. Задача тривиальная и поднимать Zabbix или что-то подобное для одного хоста не решился. В итоге написал скрипт на bash, который пингует удаленный хост. Этот скрипт можно модифицировать и под другие задачи, когда требуется менять статус в зависимости от проверки чего-либо.

В случае если связь пропадает (или появляется) скрипт пишет статус и время в лог файл. То есть, в файле у нас фиксируются только изменения состояния подключения, что удобно, экономит место и наглядно показывает статистику.

Asterisk: простая очередь вызовов с голосовым меню

Мы приобрели виртуальный номер 8-800. Потребовалось настроить следующую логику работы: звонок поступает на asterisk, проигрывается приветственное сообщение, далее звонок передается операторам. В случае занятости операторов абонент удерживается на линии 60 секунд, после чего, если ему все еще не ответили - предлагаем нажать 1 для того, чтобы оставить голосовое сообщение со своим вопросом и номером для обратного звонка. При звонке в нерабочее время - проигрываем сообщение о времени работы операторов, после этого кладем трубку.

OpenVZ неправильное время в контейнерах

При отправке почты через почтовик Zimbra, выяснилось, что время получения письма сдвигается на 1 час. Проверил часовой пояс и обновил время средствами ntp, но ситуация не изменилась. Потом вспомнил, что почтовый сервер находится внутри контейнера OpenVZ. Как выяснилось, время можно устанавливать только на ноде, после чего оно синхронизируется на все контейнеры.
Открываю сервер OpenVZ и вижу, что часовой пояс хоть и выставлен корректно - время неправильное. Проблему решил обновлением пакета tzdata и синхронизацией через ntp сервер:
yum update -y tzdata
yum -y install ntp
ntpdate pool.ntp.org
К слову сказать, обновить часовой пояс на CentOS можно созданием символической ссылки из файла вашей зоны в /etc/localtime. Файлы с часовыми поясами находятся в папке /usr/share/zoneinfo/

Asterisk: быстрая настройка для небольшого офиса

В этот статье я опишу простую настройку IP телефонии в небольшом офисе. Мы объединим несколько отделов в одну сеть, сделаем доступной статистику разговоров через web-интерфейс, а также организуем запись внешних звонков. Надеюсь, эта статья поможет администраторам, начинающему работать с Asterisk Communications Framework. В сети вроде бы полно подобных статей, но я не встретил подробного описания рабочего решения.

Нам понадобится сервер с Ubuntu, IP телефоны (или софтофоны) на рабочих местах и данные от провайдера для подключения к внешним линиям (транкам).

nginx 301 redirect www to non-www

Потребовалось сделать редирект сайта со всеми поддоменами с адреса www.site.ru на site.ru. При этом к сайту привязано порядка 50 доменов 3его уровня. Есть доступ по http и по https, соответственно, нужен 301 редирект с сохранением изначального протокола. Чтобы не писать редирект для каждого отдельного домена, попробуем сделать все одним правилом для nginx. У меня получилось такое рабочее решение. В секций server в настройках хоста добавляем:
# www to no-www 301 redirect http(s)
    if ($host ~* www\.(.*)) {
    set $host_without_www $1;
    rewrite ^(.*)$ $scheme://$host_without_www$1 permanent;
    }

Оптимизация работы web-сервера nginx+php-fpm

 Оптимизация работы web-сервера nginx+php-fpm
Попросили оптимизировать скорость работы сайта на VDS (nginx, php-fpm,mysql). Эту заметку написал больше для себя, оптимизирую работу веб серверов не часто, что-то могу забыть.

Начинаем с самого элементарного, создаем нагрузку на сайт с любого другого компьютера посредством программы siege (50 одновременных подключений):
sudo apt-get install siege
siege -c 50 site.ru
На сервер открываем htop и смотрим нагрузку. Видим, что в основном сервер нагружает php-fpm а также медленно ворочается mysql. Для php-fpm проверяем, что тип пула dynamic, корректируем количество дочерних процессов (pm.max_children) в зависимости от количества памяти, проверяем, что работа идет через сокет (а не через порт) и включаем opcache. В целом этих мер должно быть достаточно. Далее - оптимизация СУБД.

Установка Google Chrome на AltLinux/RHEL/CentOS

Chrome на AltLinux RHEL CentOS
Установка Google Chrome на AltLinux/RHEL/CentOS 6 or 7.
При установке пакета на свежеустановленный AltLinux вылезла ошибкой неудовлетворенных зависимостей:
google-chrome-stable: Требует: libstdc++.so.6(GLIBCXX_3.4.18)(64bit)
Поиск в сети привел к сложным инструкциям с вытаскиванием необходимых файлов из разных пакетов. Чуть позже наткнулся на эту ссылку. Подготовленный скрипт для установки хрома:
wget https://chrome.richardlloyd.org.uk/install_chrome.sh
chmod u+x install_chrome.sh
./install_chrome.sh
После этого все получилось.

Также просто устанавливаем скайп:
wget --content-disposition http://www.skype.com/go/getskype-linux-beta-suse
apt-get install skype-preinstall skype-4.3.0.37-suse.i586.rpm 

Crontab: первая субботу каждого месяца

Понадобилось мне делать бекап файлов раз в месяц в первую субботу. Файлы пакуются почти сутки, поэтому требовалось делать это в нерабочее время. Как ни странно, но такую простую задачу не получилось решить средствами crontab, например строка:
0 20    1-7 * */6 root    /opt/Backup/baсkup_zip.sh > /dev/null 2>&1
выполнялась 15 раз в месяц.
В итоге, чтобы долго не заморачиваться добавил проверку дня недели в скрипт резервного копирования и исправил строку в кроне на выполнение с 1 по 7 день каждый месяц в 20:00:
0 20    1-7 * * root    /opt/Backup/baсkup_zip.sh > /dev/null 2>&1
В итоге в скрипт получился следующим:
# проверяем день недели, должна быть суббота
if [[ $(date +%u) -eq 6 ]] ; then
# выполняем архивирование
fi
# в противном случае ничего не выполняем
exit
Возможно, это решение пригодится вам, если требуется выполнять скрипт по крону в определенный день недели в начале месяца.

Репозиторий для установки последнего Asterisk для Ubuntu

Хотите последний Asterisk LTS на своей системе, но не хочется или не умеете собирать его руками?
Добавляем альтернативный репозиторий, обновляемся и устанавливаем астер:
sudo add-apt-repository ppa:lioncub/asterisk
sudo apt-get update
sudo apt-get install asterisk
Более подробно здесь.

Asterisk: определить оператора по набираемому номеру для выбора линии

Имеем настроенный сервер телефонии Asterisk и несколько GSM шлюзов с сим-картами разных операторов. Тарифы включают безлимитные звонки внутри своей сети.
Для экономии денег на исходящей связи мы будем определять сотового оператора по набираемому номеру и совершать вызов через симку зарегистрированную на него же.

Для актуализации номеров возьмем список номеров с сайта Россвязи. Далее отберем этот список по полю нужного сотового оператора, приведем в вид пригодный для диалплана астериска и выгрузим в файл конфигурации. После выгрузки в нужный конфиг, перечитаем диалплан.

Ubunut server: текстовый режим при проблемах с видеокартой или монитором

Решили дать вторую жизнь старому серверу установив и настроив на нем Linux. Проблемы начались после установки Ubuntu 16.4. Установка прошла успешно, но в первый запуск - черный экран и сразу монитор выдал"Out of rage".
Оказалось, что дело в старой видео-карте Rage XL PCI, которая уже давно не поддерживается, и новые драйвера AMD под неё давно не выпускает. Казалось бы, какая системе разница, если графического интерфейса на сервере не будет?
Все дело в заставке Splash Screen, которая, видимо, использует графический режим. Исправим это досадное недоразумение.

Монтируем папку через sftp на Ubuntu

SFTP
Потребовалось получить доступ к папке на сервере с Ubuntu, с возможностью примонтировать её на свой компьютер (тоже Ubuntu).

Чтобы не городить лишний софт и использовать шифрование, воспользуемся протоколом SFTP (SSH File Transfer Protocol), который входит в состав Openssh.

На сервере

Логинимся на сервер по ssh и создаем пользователя sftp-user, запрещаем ему локальный вход и возможность выходить за пределы своей домашней директории:
useradd -d /dev/null -M -s /bin/bash sftp-user
passwd sftp-user

Удаленный доступ к базе MySql

Нам нужно дать доступ к MySQL базе на удаленном сервере. При этом задействовать минимально возможные разрешения.

Разобьем задачу на 2 этапа: откроем доступ к mysql извне только для конкретного IP адреса и создадим пользователя, ограничив ему набор прав до работы с конкретными таблицами в БД.

Бесплатный SSL сертификат на сайт с автоматическим продлением

Открыл для себя интересный сервис позволяющий создавать SSL сертификаты для сайта без регистрации. Для него написаны различные боты автоматизирующие процесс создания и продления сертификатов. Называется сервис letsencrypt.com.

Мы будем использовать клиент Certbot для получения и обновления сертификатов. Выбираем свой веб-сервер, операционную систему и получаем ссылка на загрузку бота с этой страницы. Далее выполняем в консоли web сервера:

cd /root/
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto

Падает регистрация транков на Asterisk

На днях обнаружил, что на сервере телефонии падает регистрация одного из транков провайдера. Поднимается он только после перезапуска SIP модуля астериска.

Телефоны не звонят, сотрудники нервничают. Так как проблему нужно решить незамедлительно и времени анализировать логи не было, пришлось выкрутиться следующим временным решением (вместо username нужно подставить имя вашего sip канала).