Добавление SIP клиентов в Asterisk

SIP клиенты в Asterisk указываются в файле sip.conf, поэтому откроем его например в текстовом редакторе nano (Ctrl+X для выхода из редактора, y или n для сохранения или отмены изменений):

sudo nano /etc/asterisk/sip.conf

Сначала укажем следующий параметр, запретив принимать анонимные звонки:

allowguest=no

Теперь в самом конце файла добавим клиента:

[operator1]
type=friend
secret=password 
nat=yes
host=dynamic
username=operator1
dtmfmode=rfc2833
disallow=all
allow=ulaw
context=sip-dialout
callerid=6000

Кратко опишу параметры которые я указывал:
operator1 — имя клиента.
type — тип клиента, может быть user (идентификация по паролю), peer (идентификация по адресу хоста), fried (либо по паролю, либо по хосту).
secret — пароль пользователя.
nat=yes — указывает, что клиент может быть за NAT.
host=dynamic — нет привязки клиента к адресу хоста.
username=operator1 — имя пользователя, используется в настройках SIP клиента.
dtmfmode=rfc2833 — метод передачи dtmf тонов набора номера.
disallow=all — запрет всех кодеков.
allow=ulaw — разрешим только кодек ulaw
context=sip-dialout — имя диалплана (он описывается в extensions.conf)
callerid=6000 — внутренний номер телефона клиента.

После добавления клиента подключимся к Asterisk и обновим конфигурацию sip:

sudo asterisk -r
sip reload

Посмотреть список клиентов можно командой:

sip show users

Теперь уже можно подключится добавленному клиенту к серверу Asterisk используя например программу X-Lite, Zoiper или VoIP телефон, но звонить пока некуда, поэтому добавим для теста второго клиента в sip.conf:

[operator2]
type=friend
secret=password
nat=yes
host=dynamic 
username=operator2
dtmfmode=rfc2833
disallow=all
allow=ulaw
context=sip-dialout
callerid=6001

Откроем в редакторе файл extensions.conf:

sudo nano /etc/asterisk/extensions.conf

И укажем в его конце следующие строки, чтобы пользователи могли звонить друг другу:

[sip-dialout]
exten => 6000,1,Dial(SIP/operator1)
exten => 6001,1,Dial(SIP/operator2)

Перезапустим Asterisk чтобы применить изменения:

sudo service asterisk restart

Все, мы добавили двух пользователей и они могут звонить друг другу.

Решение ошибки 0x80070570. Windows не удается установить необходимые файлы

Встретил как-то при установке Windows ошибку следующего содержания:

Установка отменена
Изменения, выполненные на компьютере в процессе установки, сохранены не будут.
Windows не удается установить необходимые файлы. Возможно, файл поврежден или отсутствует. Убедитесь, что имеются все файлы, необходимые для установки, и перезапустите установку. Код ошибки: 0x80070570

Пробовал несколько раз — ошибка появлялась. Запустил с флешки утилиту для теста оперативной памяти (ОЗУ), и увидел кучу ошибок, как оказалось проблема была в ней.

После замены ОЗУ установка прошла успешно.

Access-Control-Allow-Origin (CORS)

CORS (совместное использование ресурсов между разными источниками) — технология браузеров, позволяющая предоставить веб-странице доступ к ресурсам другого домена.

Чтобы включить CORS в Apache2, нужно сначала активировать модуль headers, в Ubuntu Server это можно сделать командой:

sudo a2enmod headers

Потом нужно включить в конфигурации для конкретного сайта в секции VirtualHost либо в файле .htaccess добавив следующую строку:

Header set Access-Control-Allow-Origin "*"

Проверить можно например на этом сайте:
http://www.webconfs.com/http-header-check.php

Если на сервере используется HAProxy, то нужно также выполнить настройки, добавить одну строку в конце секции frontend:

capture request header origin len 128

И вторую в конце секции backend:

http-response set-header Access-Control-Allow-Origin %[capture.req.hdr(0)]

Все.

Решение ошибки Unknown Object Identifier (Index out of range: XXX (ifIndex))

Сегодня решил сделать шаблон Zabbix для рисования графиков трафика с портов GPON плат на Huawei SmartAX MA5683T.

Из Linux посмотрел индексы интерфейсов командой:

snmpwalk -v2c -c public 192.168.0.101 ifDesc

Получил ответ что-то в виде (где 4194336768 индекс нулевого порта GPON платы):

IF-MIB::ifDescr.4194336768 = STRING: Huawei-MA5600-V800R008-GPON_UNI
… и т.д.

Соответственно по этому индексу должен считываться и трафик, поэтому выполнил команду:

snmpwalk -v2c -c public 192.168.0.101 ifInOctets.4194336768

Но в итоге получил ответ:

.1.3.6.1.2.1.2.2.1.13.4194336768: Unknown Object Identifier (Index out of range: 4194336768 (ifIndex))

Решить проблему помогло добавления ключа -Ir в команду:

snmpwalk -v2c -Ir -c public 192.168.0.101 ifInOctets.4194336768

В ответ:

IF-MIB::ifInOctets.4194336768 = Counter32: 2686914701

Но, так как в Zabbix негде указать дополнительные опции к SNMP запросам, то пришлось написать скрипт:

snmpwalk -v2c -Ir -c public 192.168.0.101 ifInOctets.4194336768 | sed -e 's/.*Counter32: //g'

В конце команды редактором SED я отрезал лишний текст чтобы на выходе была только цифра.
В Zabbix потом изменим элемент данных, где Тип: Внешняя проверка, Ключ: ИмяСкрипта.sh, Тип информации: Числовой (с плавающей точкой), Хранение значения: Дельта (скорость в секунду).

Установка и настройка HAProxy в Linux

HAProxy — прокси-сервер для балансировки нагрузки TCP и HTTP приложений, методом распределения на несколько серверов.

Команда установки HAProxy в Ubuntu/Debian:

sudo apt-get install haproxy

Посмотреть установленную версию можно командой:

haproxy -v

Проверим будет ли он автоматически запускаться при включении системы, должно быть ENABLED=1 (в редакторе nano CTRL+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/default/haproxy

Сделаем копию конфигурационного файла на всякий случай:

sudo cp /etc/haproxy/haproxy.cfg{,.original}

Откроем в редакторе основной конфигурационный файл:

sudo nano /etc/haproxy/haproxy.cfg

Приведу пример конфигурации:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    contimeout     5000
    clitimeout     50000
    srvtimeout     50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http
    retries 3
        
listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    stats auth user:password
    maxconn 5000
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.88.50:80 check
    server webserver02 192.168.88.51:80 check

Параметр maxconn 5000 определяет максимальное количество одновременных соединений, 0 используется для снятия лимита, если не указывать то будет стандартно 2000.

Например чтобы использовать Apache2 на этой же локальной машине, изменим в /etc/apache2/ports.conf и /etc/apache2/sites-enabled/ конфигурационных фалйах номер его порта с 80 например на 81, а в /etc/haproxy/haproxy.cfg укажем:

server webserver01 0.0.0.0:81 check

Каждый раз после изменений конфигурации необходимо выполнять перезапуск:

sudo service apache2 restart
sudo service haproxy restart

На этом установка и основная настройка HAProxy завершена.

Установка Asterisk в Ubuntu Server 16.04 LTS

Приведу пример быстрой установки Asterisk на Ubuntu Server 16.04 LTS.

Сначала проверим есть ли обновления для системы и установим их:

sudo apt-get update
sudo apt-get upgrade

Выполним установку Asterisk и необходимых компонентов:

sudo apt-get install asterisk dahdi asterisk-dahdi asterisk-mp3 asterisk-mysql asterisk-core-sounds-ru asterisk-core-sounds-ru-g722 asterisk-core-sounds-ru-gsm asterisk-dev asterisk-core-sounds-ru-wav lame

Посмотреть запущен ли Asterisk и его версию можно командами:

ps aux | grep asterisk
asterisk -V

Подключится к консоли Asterisk можно командой:

sudo asterisk -vvr

На этом установка Asterisk завершена, так как мы не ставили лишних веб-интерфейсов для управления, а для опытных пользователей и тонкой настройки они и не нужны, то все настройки необходимо выполнять в конфигурационных файлах которые находятся в директории /etc/asterisk/.

Читайте другие мои статьи о настройках.

Как сделать загрузочную флешку с Ubuntu

Чтобы сделать загрузочную флешку с Ubuntu выполним несколько действий:

1) Скачаем образ Ubuntu с официального сайта http://www.ubuntu.com/download

2) Скачаем установщик Universal USB Installer

3) Подключим флешку к компьютеру и запустим установщик Universal USB Installer. В нем согласимся с лицензионным соглашением нажав «I Agree«, во втором окне где «Step 1:» выберем «Ubuntu» или «Ubuntu Server Installer» если записать нужно Ubuntu Server, где «Step 2» нажмем «Browse» и укажем на скачанный образ Ubuntu. В «Step 3:» выберем букву флешки, поставим галочку на «Format» (это переразметит таблицу файловой системы и сотрет все данные на флешке).
«Step 4:» можно не трогать если вы в дальнейшем хотите только установить Ubuntu с флешки. Если изменить (это немного продлит процесс создания загрузочной флешки) можно по необходимости использовать указанное место на флешке для сохранения пользовательских данных, например если загружаться с флешки и запускать Ubuntu вместо установки, все сделанные настройки в системе будут сохранены (например закладки в браузере, установленные компоненты).

4) Жмем «Create» и ждем завершения процесса.