30.10.2021

Talant Blogs about VOIP

Alexey Kazantsev Blog

Igor Olhovsky

5.05.2021

freepbx 15 automatic sync for high availability. part 1.

Part 1
main aim is using internal features of freepbx to make sync between two PBXs. Automatic sync will be made by back&restore feature in FREEPBX.

STEP: 1. add asterisk public key from master FREEPBX to backup server. master public key for asterisk user you can find in menu “Backup&Restore -> Global Setting”

Master asterisk public key

Copy this key to /home/asterisk/.ssh/authorized_keys at Backup machine.

STEP: 2. Add new filestore with SSH connect to backup server

Create filestore with ssh access to backup server

STEP: 3. example of ssh parameters for ssh connect

STEP 4: create new backup in menu “Backup&Restore”. use any modules you need and set crontime you wish. for example i will be use one time per day. Better you set “Delete After Runs” 1 so only 1 file will be in backup server.

Now run it and check if new file with backup created in /home/asterisk dir at backup server.

STEP5: add cronjob at backup: something like that: crontab -u asterisk -e
0 1 * * * fwconsole backup –restore /home/asterisk/*.tar.gz

24.12.2020

asterisk 16. webrtc. sipml5

Основная статья по настройке на официальном сайте:

у меня не завелось сразу по причине:

подгружался модуль chan_sip , нужно добавить noload = chan_sip.so в modules.conf

И не стартовал внутренний https сервер астериска с сертификатами которые сгенерил астериск, решением может быть генерация через letsencrypt

короткая инструкция по установке:

for centos 7 only:
install asterisk 16 , apache and git use asterisk configuration files inside repository
repository with example and configuration files are in : 
cd /root git clone 
https://erewin@bitbucket.org/yooxy/webrtc-asterisk-example.git
download sipml5 into /var/www/html directory 
cd /var/www/html 
git clone https://github.com/DoubangoTelecom/sipml5.git
you have to add ssl for apache yum install mod_ssl
change ssl.conf to useing your certificates or use ssl.conf from repository
tune your codecs at asterisk side
remember that certificates are allowed for 3 months only then it have to be renewed
firewall setting you may check with 
firewall-cmd --info-zone=public

Tags: , , ,
| Posted in Asterisk | No Comments »
9.12.2020

sipdump per day. compressed. heplify.

Ниже представлен скрипт для установки сервиса systemd сбора sip пакетов в папку /var/log/sipdump по дням. в дальнейшем можно распаковать файлы и и пробежаться по ним sngrep.

!/usr/bin/sh
echo "Instaiiling sipdump have started: \n"
yum install wget git -y
apt install wget git -y
cd /usr/src/
mkdir sipdump
cd sipdump
wget https://github.com/sipcapture/heplify/releases/download/1.62/heplify
chmod 760 heplify
cp heplify /usr/bin
rm heplify
mkdir /var/log/sipdump
echo "
[Unit]
Description=Yooxy sipdump
After=network.target
ConditionPathExists=/var/log/sipdump
[Service]
WorkingDirectory=/var/log/sipdump
ExecStart=/usr/bin/heplify -dim OPTIONS,NOTIFY -wf /var/log/sipdump -rt 1440 -zf -sl
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=sipdump.service" > sipdump.service
chmod 664 sipdump.service
cp sipdump.service /etc/systemd/system/sipdump.service
rm sipdump.service
systemctl daemon-reload
systemctl start sipdump
echo "Script ending \n"

30.10.2020

Asterisk. hints. States.

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

Подключаемся по AMI: telnet 127.0.0.1 5038

Action: Login
ActionID: 1
Username: manager
Secret: password

получаем данные:

Action: Getvar
ActionID: 1
Variable: DEVICE_STATE(SIP/1000)

ответ:

ActionID: 1 
Variable: DEVICE_STATE(SIP/1003) 
Value: INUSE

24.09.2020

TCP\TLS NAT Zoiper

Столкнулся с проблемой, когда через sip прокси (opensips) не проходили пакеты (OPTIONS, NOTIFY, INVITE) в сторону uac при использовании TCP и TLS протоколов. при TLS opensips ругался 477/Send Error, при использовании TCP – 408 timeout. И действительно пакеты с opensips уходили, но не доходили до UAC.

Причина была в использовании STUN, если его отключить на Zoiper то связь работает хорошо в обе стороны.

19.12.2019

WEBRTC2SIP. KAMAILIO. RTPENGINE. CENTOS 7.

Полная статья по инсталляции webrtc2sip на centos 7 здесь. А тут видео.

В качестве основы эту статью и компиляцию вручную. В целом компиляция особых проблем не вызвала. Пакеты все которые надо ставятся.

Проблема возникла при инсталляции в качестве сервиса.

а) не стал разбираться с правами и запускаю от root,
б) необходимо убрать из rtpengine.services параметры из окружения,

Было:

ExecStart=/usr/sbin/rtpengine --config-file=${CFGFILE} --interface=${INTERFACE} --listen-ng=${LISTEN_UDP} --log-facility=${LOG_FACILITY} --log-level=${LOG_LEVEL}

Стало:

ExecStart=/usr/sbin/rtpengine --pidfile /run/rtpengine.pid --config-file /etc/rtpengine/rtpengine.conf --table 0

в) учесть имена pid файла, он должен совпадать в /etc/rtpengine/rtpengine.conf , /etc/sysconfig/rtpengine , rtpengine.service – последний файл можно найти командой systemctl status rtpengine.service.

Помощь с ошибками:

webrtc console:  Called with SDP without DTLS fingerprint. - для моей версии rtpengine, необходимо было использовать ICE=force, без этого флага rtpengine не добавлял fingerprint в SDP. возможно в новых версиях rtpengine всё уже в порядке. 

12.12.2019

callback+freepbx+AMD

Схема работы такая:

Любой разрешенный ip звонит на DID номер pbx, станция перезванивает с DID номера и соединяет с внутренним абонентом) показывая в качестве callerid номер на который осуществляется дозвон.

Особенности: минимум вмешательства в код freepbx чтобы можно было использовать весь функционал станции.

У вас уже установлена: Freepbx, callback модуль, правильно настроены callback и trunk в интерфейсе freepbx

Всё что нам нужно это добавить передачу переменной в callback модуль:

//define the args for Originate
$channel = "Local/".$callback_number."@from-internal";
$exten = $callback_exten;
$context = $callback_context;
$priority = $callback_priority;
$timeout = $callback_timeout;
$callerid = $callback_callerid;
$variable = "__MYVAR4=$callback_number";
$account = "";
$application = "";
$data = "";

затем поймать её в extension_custom.conf

[macro-dialout-one-predial-hook]
exten => s,1,set(CALLERID(all)=${MYVAR4})

[macro-AMD1]
exten => s,1,noop("Check of answering machine")
exten => s,n,background(silence/1)
exten => s,n,AMD()
exten => s,n,NoOp("AMD STATUS IS :"${AMDSTATUS}"…CAUSE:"${AMDCAUSE})
exten => s,n,Set(CDR(userfield)=${AMDSTATUS}|${AMDCAUSE})
exten => s,n,GotoIf($[${AMDSTATUS}=HUMAN]?human:mach)
exten => s,n(mach),Hangup()
exten => s,n(human),noop(This is Human continue)

How to use callback calls at freepbx

  1. Create callback application in menu. It will make you possible to send calls from callback to any registered extension \ Ring groups \ Queues \ IVR or something else.  In CallerID field you should set “${FROM_DID}” to send calls from your DID number. 
  1. Create Trunk for making outbound calls with AMD it may be any trunk but you should add “TM(AMD1)” in Dial options.
  2. Create inbound route for receive call from any IP and to specific DID number: you have example here in interface with number 55555. Choose destination as callback application created at step 1. 
  3. Create outbound route for route calls making by your freepbx (not only from callback app). You should set Dial Patterns to avoid making call to destinations that you don’t want to call. 
  4. Apply changes. That is all you need in web interface. 

29.11.2019

AMI FREEPBX NAMI SYSLOG NODEJS

В этом проекте нам нужно сохранять различные события в очередях Астериска через nodejs библиотеку NAMI. Сложности тут на первый взгляд только одна, это создания таблиц для сохранения событий. На самом деле нет, есть еще задача сохранения неудачного запроса, есть задача выполнения асинхронного запроса, чтобы не скрипт не тормозил.

В проект включены файлы:
tables.sql – который создает базу данных asterisk_logs и несколько табличек в ней,
table-ami-events.ods – excel файл с описанием событий по столбцам.

  1. создаем БД и таблички tables.sql,
  2. устанавливаем “npm install nami mysql modern-syslog”
  3. добавляем пользователя monit в manager_custom.conf
  4. прописываем учетные данные для mysql и asterisk manager в массивы db_config и namiConfig.
  5. Запускаем скрипт nami.js и если модули nodejs установлены верно, то скрипт запустится даже если у вас нет астериска и базы данных.

особенностью этого скрипта является то, что даже при пропадании подключения к mysql он будет пытаться реконнектится, при пропадании к астериску тоже. И если если подключение к астериску есть, а к mysql нет, то он будет сохранять готовые для импорта запросы в syslog.

фалы проекта можно скачать тут

29.11.2019

certbot ssl certificate for issabel manual installation

  1. install certbot (was installed by issabel)
  2. comment rewrite engine in /etc/httpd/issabel.conf
  3. add virtual host file “issabelmanual.conf” with 80 port into /etc/httpd/conf.d
<VirtualHost *:80>
 <Directory "/var/www/html">

 </Directory>
</VirtualHost>

3. restart httpd: systemctl restart httpd
4. run certbot and answer to questions
5. certbot will add new sertificate to your ssl.conf file and comment old ssl lines in this file
6. uncomment at step 2.
7. restart httpd: systemctl restart httpd.
8. add to cron renew certificate every month by command “crontab -e”
“@monthly certbot renew”