суббота, 17 марта 2018 г.

Asterisk подключение к СУБД используя ODBC.

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

apt-get install unixodbc unixodbc-dev libmyodbc

Затем отредактировать файл (он есть в системе, но пуст):
nano /etc/odbcinst.ini
следующим образом:
[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup           = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage       = 1


Изменение диалплана нажатием клавиш на телефонном аппарате.

Мне приходится работать в организации, которая помимо других сфер деятельности, также является и Интернет-провайдером. Как и у любого провайдера у нас бывают проблемы на сети. В таком случае, в саппорт сразу поступает большое количество звонков, и чтобы сообщить абонентам, что их проблема известна, над ее решением уже работают, был использован нехитрый набор действий. Суть в том, что в диалплан скриптом вставляется строчки, которые запускают проигрывание файла сообщающего о проблеме, при устранении проблемы, так же скриптом строчка убирается.

Диалплан:

Контекст сервисного номера:


.................................

[internal]
exten = 7934,1,Goto(Problem_ISP,s,1)

.................................

[Problem_ISP]
exten => s,1,NoOp(- Problem_ISP -)
exten => s,n,Authenticate(8725)
exten => s,n(service),Background(problem_ISP) ;тут голосовое меню - типа если есть проблема нажмите "1", если нет проблемы, и надо вернуть как было прежде нажмите "2"
exten => s,n,WaitExten(5)
exten => 1,1,System(/home/change/change.sh) ;скрипт меняющий диалплан
exten => 2,1,System(/home/change/unchange.sh) ;скрипт убирающий изменения
exten => t,1,Hungup()
.................................

Сами скрипты:
change.sh

#!/bin/bash
sed -i 's/exten => i,1,Playback(please_wait_on_line2)/exten => i,1,Playback(problem)/g' /etc/asterisk/extensions.conf
sed -i 's/exten => t,1,Playback(please_wait_on_line2)/exten => t,1,Playback(problem)/g' /etc/asterisk/extensions.conf
sed -i 's/exten = 1,1,Playback(please_wait_on_line2)/exten = 1,1,Playback(problem)/g' /etc/asterisk/extensions.conf
sed -i 's/exten = 2,1,Playback(please_wait_on_line2)/exten = 2,1,Playback(problem)/g' /etc/asterisk/extensions.conf
/usr/sbin/asterisk -rx 'dialplan reload'


unchange.sh

#!/bin/bash
sed -i 's/exten => i,1,Playback(problem)/exten => i,1,Playback(please_wait_on_line2)/g' /etc/asterisk/extensions.conf
sed -i 's/exten => t,1,Playback(problem)/exten => t,1,Playback(please_wait_on_line2)/g' /etc/asterisk/extensions.conf
sed -i 's/exten = 1,1,Playback(problem)/exten = 1,1,Playback(please_wait_on_line2)/g' /etc/asterisk/extensions.conf
sed -i 's/exten = 2,1,Playback(problem)/exten = 2,1,Playback(please_wait_on_line2)/g' /etc/asterisk/extensions.conf
/usr/sbin/asterisk -rx 'dialplan reload'

ну и выставим права:

cd /home/change
chown asterisk:asterisk change.sh
chown asterisk:asterisk unchange.sh
chmod 755 change.sh
chmod 755 unchange.sh



Самое главное, не забыть вернуть все как было после устранения проблемы.
Впрочем, можно добавить задание в крон на определенное время возвращающее диалплан дефолт.


вторник, 13 марта 2018 г.

Multicast вещание

Multicast вещание нескольких видео файлов на multicast IP-адреса 239.255.1.1 и 239.255.1.2

0. apt-get install vlc

Вещаем по RTP, консоль сервера:
===========
1. vlc --ttl 12 --color -I telnet --telnet-password 123

2. Открываем вторую консоль на том же хосте
telnet localhost 4212

3.
> new channel1 broadcast enabled
> setup channel1 input /path/to/file_1.avi
> setup channel1 output #rtp{mux=ts,dst=239.255.1.1,sap,name="Channel1"}
> new channel2 broadcast enabled
> setup channel2 input /path/to/file_2.avi
> setup channel2 output #rtp{mux=ts,dst=239.255.1.2,sap,name="Channel2"}
> control channel1 play
> control channel2 play

На клиенте:
========
запускаем vlc проигрыватель
нажимаем «Инструменты» -> «Настройки», там, в нижнем левом углу жмем в «Показывать настройки» на «Все», затем раскрываем «Вывод потока», а там ищем «Модули вывода», в поле «Интерфейс вывода IPv4 multicast» пишем IP-адрес, который прописан на вашей сетевой карте ( смотрящей в сторону сервера вещающего поток), жмем «Сохранить»

Для просмотра потока по RTP:

После того как выполнили настройки: «Файл» ->«Открыть URL»
в строке MRL пишем:
rtp://@239.255.1.1:5004 (что бы посмотреть видео из файла file_1.avi)
или
rtp://@239.255.1.2:5004 (что бы посмотреть видео из файла file_2.avi соответственно)

Источник:
http://subnets.ru/blog/?p=12

среда, 27 декабря 2017 г.

Белый список для Asterisk

Черный список для Asteriska я уже делал дома (кстати, довольно успешно - те, кто беспокоили меня звонками уже не беспокоят). Теперь, на работе руководство поставило задачу оградить сотрудников IT, от звонков сотрудников, кроме определенного круга приближенных. Эти звонки должны уходить в ринг-группу технической поддержки.

Используем AstDB, создаем список разрешенных номеров:

asterisk -rx 'database put allow_for_it 343 1'

asterisk -rx 'database put allow_for_it 344 1'

и т.д.

Удалить номер из базы так:

asterisk -rx 'database del allow_for_it 343'

В диалплане:

exten = 343,1,ExecIf($["${DB(allow_for_it/${CALLERID(num)})}" != "1"] ?Goto(ringroup-IT,s,1))
exten = 343,n,Dial(SIP/343,20,t)



вторник, 19 сентября 2017 г.

Проброс порта для доступа к локальным ресурсам по внешнему адресу.

Допустим, в сети имеется шлюз, и внутри сети, за шлюзом находится ресурс имеющий внутренний адрес напр. 192.168.1.7. Доступ из Интернет к 192.168.1.7 организован с помощью проброса портов с шлюза имеющего внешний адрес напр. 1.2.3.4. Также из Интернета доступ к серверу возможен по имени name.ru.
Но что будет если мы обратимся из внутренней сети с ip 192.168.1.9 к серверу по имени name.ru? Нашим хостом будет проигнорирован ответ с name.ru, т.к. он придет с адреса 192.168.1.7, а не 1.2.3.4. Для того чтобы хосты понимали друг-друга нужно правило на шлюзе заменяющее адрес хоста-клиента (192.168.1.9) на внутренний адрес шлюза напр. 192.168.1.1, в таком случае пакеты от 192.168.1.7 пойдут через шлюз и на 192.168.1.9 придут с адреса 1.2.3.4.

iptables -t nat -A POSTROUTING --dst 192.168.1.7 -p tcp -m tcp --dport 443 -j SNAT --to-source 192.168.1.1

Для того чтобы получить доступ к name.ru с сервера, который являетя шлюзом необходимо следующее правило:

iptables -t nat -A OUTPUT --dst 1.2.3.4 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.7

Если мы используем прокси-сервер на 192.168.1.1 то достаточно добавить name.ru в исключения прокси.

суббота, 5 августа 2017 г.

Радиоприемник на громкой связи. Asterisk. В двух вариантах.

Суть простая - набираешь цифру, а потом выбираешь радиостанцию, которая звучит из потока.

Ver.1

В вашем внутреннем контескте в extensions.conf:

exten => 9,1,NoOp(=radio=)
exten => 9,n,Answer()
exten => 9,n,Background(beep)
exten => 9,n,WaitExten(3)
exten => 1,1,MusicOnHold(radio1)
exten => 2,1,Set(VOLUME(TX)=5) ;поток тихо звучал, поднял ему громкость
exten => 2,2,MusicOnHold(radio2)
exten => t,1,Hangup()


В musiconhold.conf:

[radio1]
mode=custom
application=/usr/bin/mpg123 -q -s --mono -r 8000 -f 4096 -Z http://address1/stream.mp3

[radio2]
mode=custom
application=/usr/bin/mpg123 -q -s --mono -r 8000 -f 4096 -Z http://address2/stream.mp3

В консоли asteriska делаем:

dialplan reload

и

module reload res_musiconhold.so

Ver.2
Все же решил сделать без musiconhold. Так как musiconhold постоянно тянет поток из Интернет, вне зависимости от того слушаете вы его или нет. Мне не очень нравится, что нагрузка на сеть и железо (пусть и небольшая) осуществляется без необходимости.
Если используется CDR, можно добавить NoCDR по желанию, я добавил

Достаточно этого (перед MP3Player обязательно должен быть Answer или Progress!):

exten => 9,1,NoCDR()
exten => 9,n,NoOp(=radio=)
exten => 9,n,Answer()
exten => 9,n,Background(beep)
exten => 9,n,WaitExten(10)
exten => 9,n,Hangup()
exten => 1,1,MP3Player(http://stream1.com.mp3)
exten => 2,1,MP3Player(http://stream2.com.mp3)
exten => 3,1,MP3Player(http://stream3.com.mp3)
exten => t,1,Hangup()

и

dialplan reload

Потоки можно ТУТ поискать.