Если IP Телефония Астериск будет ставиться с консоли, то её необходимо будет локализовать.
В файле /etc/vconsole.conf правим строки:
- Код: выделить все
KEYMAP="ru"
FONT="cyr-sun16"
Чтобы активировать шрифт cyr-sun16, необходимо перезагрузить операционную систему
- Код: выделить все
systemctl reboot
Отключаем SELinux
В файле /etc/selinux/config правим строку:
- Код: выделить все
SELINUX=disabled
Накатываем все обновления и перезагружаем операционную систему
- Код: выделить все
yum update
systemctl reboot
Устанавливаем репозитории EPEL и PowerTools
- Код: выделить все
yum install epel-release.noarch
yum config-manager --set-enabled PowerTools
Устанавливаем MariaDB SQL Server. Создаем файл /etc/yum.repos.d/MariaDB.repo и в него прописываем следующие строки
- Код: выделить все
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Устанавливаем MariaDB SQL Server
- Код: выделить все
yum install MariaDB-server
Переводим MariaDB SQL Server на поддержку локализации UTF-8 В файле /etc/my.cnf.d/server.cnf добавляем строку
- Код: выделить все
[mysqld]
event_scheduler = on
character_set_server = utf8
Производим запуск MariaDB SQL Server
- Код: выделить все
systemctl enable mariadb
systemctl start mariadb
Заходим в консоль управления SQL Server и выполняем SQL команды
- Код: выделить все
mysql
CREATE DATABASE asterisk;
GRANT all ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'asterisk';
Устанавливаем распределённую систему управления версиями git
- Код: выделить все
yum install git
Скачиваем программный исходный код IP Телефонии Asterisk
- Код: выделить все
cd /usr/local/src
git clone -b 17.6 https://gerrit.asterisk.org/asterisk asterisk-17.6
Устанавливаем не достающие rpm пакеты, которые необходимы для сборки IP Телефонии Asterisk
- Код: выделить все
cd /usr/local/src/asterisk-17.6/contrib/scripts
./install_prereq install
Проверяем требования программных продуктов для IP Телефонии Asterisk
- Код: выделить все
cd /usr/local/src/asterisk-17.6
./configure
Используем MenuSelect для выбора параметров Asterisk В разделе "Core Sound Packages", выбираем русскую озвучку CORE-SOUNDS-RU-WAV
- Код: выделить все
make menuselect
Производим компиляцию программного исходного кода IP Телефонии Asterisk
- Код: выделить все
make
make install
make samples
make install-logrotate
make config
ldconfig
systemctl enable asterisk
systemctl start asterisk
Установка базовых таблиц RealTime
- Код: выделить все
yum install python3-pip-9.0.3-16.el8.noarch
pip3 install alembic
pip3 install mysqlclient
cd /usr/local/src/asterisk-17.6/contrib/ast-db-manage
cp config.ini.sample config.ini
Файле config.ini приводим к виду
- Код: выделить все
sqlalchemy.url = mysql://asterisk:asterisk@localhost/asterisk
Производим установку базовых таблиц RealTime в табличное пространство Asterisk MariaDB SQL Server
- Код: выделить все
alembic -c config.ini upgrade head
Производим установку базовой таблицы биллинга CDR в табличное пространство Asterisk MariaDB SQL Server
- Код: выделить все
cp cdr.ini.sample cdr.ini
Файл cdr.ini приводим к виду
- Код: выделить все
sqlalchemy.url = mysql://asterisk:asterisk@localhost/asterisk
- Код: выделить все
alembic -c cdr.ini upgrade head
Производим установку базовой таблицы постановки входящего вызова в очередь Queue в табличное пространство Asterisk MariaDB SQL Server
- Код: выделить все
cp queue_log.ini.sample queue_log.ini
Файл queue_log.ini приводим к виду
- Код: выделить все
sqlalchemy.url = mysql://asterisk:asterisk@localhost/asterisk
- Код: выделить все
alembic -c queue_log.ini upgrade head
Установка ODBC драйвера для MariaDB SQL Server
- Код: выделить все
cd /usr/local/src
mkdir odbc-3.1.7
cd odbc-3.1.7
wget
https://downloads.mariadb.com/Connectors/odbc/connector-odbc-3.1.7/mariadb-connector-odbc-3.1.7-ga-rhel8-x86_64.tar.gz
tar xvfz mariadb-connector-odbc-3.1.7-ga-rhel8-x86_64.tar.gz
cp lib64/libmaodbc.so /lib64
Конфигурация ODBC
В файле /etc/odbcinst.ini создаём
- Код: выделить все
[MariaDB]
Description = ODBC for MariaDB
Driver = /usr/lib/libmaodbc.so
Driver64 = /usr/lib64/libmaodbc.so
FileUsage = 1
В файле /etc/odbc.ini создаём
- Код: выделить все
[asterisk]
Description = MariaDB connection to 'asterisk' database
Driver = MariaDB
Server = localhost
Database = asterisk
UserName = asterisk
Password = asterisk
Socket = /var/lib/mysql/mysql.sock
Проверка доступности базы данных Asterisk через ODBC драйвер
isql asterisk
- Код: выделить все
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Подключения IP Телефонии Asterisk к дескриптору базы данных через ODBC драйвер, который настроили
Файл /etc/asterisk/res_odbc.conf приводим виду
- Код: выделить все
[asterisk]
enabled => yes
dsn => asterisk
username => asterisk
password => asterisk
pre-connect => yes
asterisk -rx reload
Проверка подключения IP Телефонии Asterisk к табличному пространству Asterisk MariaDB SQL Server
- Код: выделить все
asterisk -rx "odbc show"
ODBC DSN Settings
-----------------
Name: asterisk
DSN: asterisk
Number of active connections: 1 (out of 1)
Logging: Disabled
Настройка IP Телефонии Asterisk для загрузки его модуля ODBC на ранней стадии запуска
Файл /etc/asterisk/modules.conf приводим к такому виду
- Код: выделить все
preload => res_odbc.so
preload => res_config_odbc.so
noload => chan_sip.so
- Код: выделить все
systemctl restart asterisk
Подключение канального драйвера PJSIP к базе данных в режиме реального времени
Файл /etc/asterisk/sorcery.conf приводим к виду
- Код: выделить все
[res_pjsip]
aor=realtime,ps_aors
auth=realtime,ps_auths
contact=realtime,ps_contacts
domain_alias=realtime,ps_domain_aliases
endpoint_id_ip=realtime,ps_endpoint_id_ips
endpoint=realtime,ps_endpoints
global=realtime,ps_globals
registrations=realtime,ps_registrations
;resource_list=realtime,ps_resource_list
;subscription_persistence=realtime,ps_subscription_persistence
;systems=realtime,ps_systems
transport=realtime,ps_transports
[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips
[res_pjsip_outbound_publish]
outbound-publish=realtime,ps_outbound_publishes
[res_pjsip_pubsub]
inbound-publication=realtime,ps_inbound_publications
[res_pjsip_publish_asterisk]
asterisk-publication=realtime,ps_asterisk_publications
Файл /etc/asterisk/extconfig.conf приводим к виду
- Код: выделить все
[settings]
ps_aors => odbc,asterisk
ps_asterisk_publications => odbc,asterisk
ps_auths => odbc,asterisk
ps_contacts => odbc,asterisk
ps_domain_aliases => odbc,asterisk
ps_endpoint_id_ips => odbc,asterisk
ps_endpoints => odbc,asterisk
ps_globals => odbc,asterisk
ps_inbound_publications => odbc,asterisk
ps_outbound_publishes => odbc,asterisk
ps_registrations => odbc,asterisk
;ps_resource_list => odbc,asterisk
;ps_subscription_persistence => odbc,asterisk
;ps_systems => odbc,asterisk
ps_transports => odbc,asterisk
Установка OpenVPN
- Код: выделить все
yum install openvpn
cd /etc/openvpn/
mkdir /etc/openvpn/tun0
cd /etc/openvpn/tun0
git clone https://github.com/OpenVPN/easy-rsa.git
cd /etc/openvpn/tun0/easy-rsa/easyrsa3
cp vars.example vars
Файл /etc/openvpn/server/easy-rsa/easyrsa3/vars приводим к виду
- Код: выделить все
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Sity obl"
set_var EASYRSA_REQ_CITY "Sity"
set_var EASYRSA_REQ_ORG "LTD"
set_var EASYRSA_REQ_EMAIL "office@localhost"
set_var EASYRSA_REQ_OU "IT"
Настройка OpenVPN Сервиса
Файл /etc/openvpn/tun0/server.conf приводим к виду
- Код: выделить все
port 1194
proto udp
dev tun0
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1
crl-verify /etc/openvpn/tun0/easy-rsa/easyrsa3/pki/crl.pem
Создаём общий секретный ключ ta.key
- Код: выделить все
cd /etc/openvpn/tun0
openvpn --genkey --secret ta.key
Генерим серверные OpenVPN сертификаты
- Код: выделить все
cd /etc/openvpn/tun0/easy-rsa/easyrsa3
. ./vars
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa gen-req server nopass
./easyrsa sign-req server server
cp pki/ca.crt /etc/openvpn/tun0
cp pki/private/server.key /etc/openvpn/tun0
cp pki/issued/server.crt /etc/openvpn/tun0
cp pki/dh.pem /etc/openvpn/tun0/dh2048.pem
> pki/crl.pem
mkdir ../../ccd
cd /lib/systemd/system
cp openvpn-server\@.service openvpn-tun0\@server.service
В файле /lib/systemd/system/openvpn-tun0\@server.service корректируем строку
- Код: выделить все
WorkingDirectory=/etc/openvpn/tun0
Запускаем сервис OpenVPN
- Код: выделить все
systemctl enable openvpn-tun0@server
systemctl start openvpn-tun0@server
Готовим командный скрипт, который будет генерить клиентские OpenVPN сертификаты
- Код: выделить все
cd /etc/openvpn/tun0/easy-rsa/easyrsa3
yum install expect
mkdir ovpn
chmod 755 gen-cert-req gen-cert-sig
Создаём в папке easyrsa3 файл gen-certs
- Код: выделить все
#!/bin/bash
# Порция сертификатов, которая будет сгенерирована
PORTION=5
PHOVPN=/etc/openvpn/tun0
PHEASY=/easy-rsa/easyrsa3
cd $PHOVPN$PHEASY
. ./vars
NETWORK="`sed -rn 's/^server +(.*)/\1/p' $PHOVPN/server.conf`"
SEQPORTION=gen-cert-mem
MINA=`ipcalc --minaddr $NETWORK|sed -r 's/.*=(.*)/\1/'`
MAXA=`ipcalc --maxaddr $NETWORK|sed -r 's/.*=(.*)/\1/'`
ADDR=`ipcalc --addresses $NETWORK|sed -r 's/.*=(.*)/\1/'`
SUM=0;NCERT=0;IFS=.
[ -f $SEQPORTION ] && . ./$SEQPORTION || read -a MINADDR <<< "$MINA"
read -a MAXADDR <<< "$MAXA"
IFS=$'\n'
for IP1 in `seq ${MINADDR[0]} ${MAXADDR[0]}`;do
for IP2 in `seq ${MINADDR[1]} ${MAXADDR[1]}`;do
for IP3 in `seq ${MINADDR[2]} ${MAXADDR[2]}`;do
for IP4 in `seq ${MINADDR[3]} 4 ${MAXADDR[3]}`;do
[ $SUM -eq 0 ] && ((SUM=++SUM)) || {
echo -e "MINADDR=($IP1 $IP2 $IP3 $IP4)\nNCERT=$((++NCERT))">$SEQPORTION
FCERT=`printf "%0${#ADDR}d" $NCERT`
./gen-cert-req client-$FCERT
./gen-cert-sig client-$FCERT
cp pki/issued/client-${FCERT}.crt ovpn
cp pki/private/client-${FCERT}.key ovpn
cp pki/ca.crt ovpn/client-${FCERT}-ca.crt
cp $PHOVPN/ta.key ovpn/client-${FCERT}-ta.key
# Формирование сlient-XXX.ovpn конфигурационного файла
cat << EOF > ovpn/client-${FCERT}.ovpn
client
dev tun
proto udp
remote 128.71.188.17 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca client-${FCERT}-ca.crt
cert client-${FCERT}.crt
key client-${FCERT}.key
remote-cert-tls server
tls-auth client-${FCERT}-ta.key 1
cipher AES-256-CBC
verb 3
EOF
# Формирование сlient-XXX конфигурационного файла
cat << EOF > $PHOVPN/ccd/client-${FCERT}
ifconfig-push $IP1.$IP2.$IP3.$IP4 $IP1.$IP2.$IP3.$((IP4+1))
push "route 192.168.88.0 255.255.255.0"
EOF
[ $((SUM++)) -eq $PORTION ] && exit 0
}
done
done
done
done
Создаём в папке easyrsa3 файл gen-cert-sig
- Код: выделить все
#!/usr/bin/expect -f
set ncert [lindex $argv 0];
set timeout 3
spawn ./easyrsa sign-req client $ncert
expect "Confirm request details:\r"
send -- "yes\r"
expect eof
Создаём в папке easyrsa3 файл gen-cert-req
- Код: выделить все
#!/usr/bin/expect -f
set ncert [lindex $argv 0];
set pass [format %s%s%s $ncert mypaswd \r]
set timeout 3
spawn ./easyrsa gen-req $ncert
expect "Enter PEM pass phrase:\r"
send -- $pass
expect "Verifying - Enter PEM pass phrase:\r"
send -- $pass
send -- "\r"
expect eof
Делаем эти командные файлы выполняемыми
- Код: выделить все
chmod 770 gen-cert-req gen-cert-sig gen-certs
Запуск генерации клиентских OpenVPN сертификатов
- Код: выделить все
cd /etc/openvpn/tun0/easy-rsa/easyrsa3
./gen-certs
Описание результата работы командного файла gen-certs
1. Сертификаты client-XXX.crt, формируются в папке easyrsa3/pki/issued
2. Ключи client-XXX.key, формируются в папке easyrsa3/pki/private
3. Для каждого client-XXX формируется в папке /etc/openvpn/tun0/ccd конфигурационный файл, в котором прописан его IP адрес и доступные ему подсети
4. Конфигурационные файлы client-XXX.ovpn и принадлежащие ему сертификаты, ключи, формируются в папке easyrsa3/ovpn
Описание алгоритма формирования порции для каждого клиентского OpenVPN сертификата
Порция формирования сертификатов задаётся в командном файле gen-certs в строке PORTION=5. При окончании выполнения командного файла gen-certs, формируется конфигурационный файл gen-cert-mem. В нём сохраняется информация с какого IP и с какой порции начать следующее формирование группы сертификатов
Описание алгоритма формирования пароля для каждого клиентского OpenVPN сертификата
Формирования пароля для каждого клиентского сертификата OpenVPN, происходит в двух командных файлах:
1. В файле gen-certs в строке ./gen-cert-req client-$FCERT
2. В файле gen-cert-req в строке set pass [format %s%s%s $ncert mypaswd \r]
В итоге получается личный алгоритмический пароль для каждого клиентского сертификата:
client-XXXmypaswd
где XXX порядковый номер сертификат, длина которого зависит от назначаемой подсети серверной части сервиса OpenVPN
Пример:
Для конфигурационного файла client-001.ovpn для его сертификата будет сформирован пароль client-001mypaswd
Если клиентские сертификаты OpenVPN , будут генериться в ручном варианте, прилагается памятка назначения IP адресов:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]
Ограничения TAP драйвера OpenVPN
В настоящее время Android VPN API поддерживает только туннели в стиле TUN или маршрутизирующие туннели на Layer 3. Туннели в стиле TAP или мосты на Layer 2 невозможны на Android.
Это ограничение платформы Android.
Настройка меж сетевого экрана nftables
Останавливаем и отключаем текущий меж сетевой экран firewalld
- Код: выделить все
systemctl stop firewalld
systemctl disable firewalld
nft flush ruleset
Разрешаем проброс сетевых пакетов между интерфейсами операционной системы
Файл /etc/sysctl.conf приводи к виду
- Код: выделить все
net.ipv4.ip_forward = 1
Активируем этот динамический параметр ядра
- Код: выделить все
sysctl -p
Создаем файл /etc/nftables/ipv4-firewall.nft и в него добавляем строки
- Код: выделить все
flush ruleset
table ip filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iifname "lo" accept
ip protocol icmp accept
udp dport 1194 accept
ip saddr 10.8.0.0/24 iifname "tun0" udp dport { 5060, 10000-20000 } accept
ip saddr 192.168.88.0/24 iifname "enp0s3" tcp dport 22 accept
ip saddr 192.168.88.0/24 iifname "enp0s3" udp dport { 5060, 10000-20000 } accept
ip saddr 192.168.89.0/24 iifname "enp0s8" udp dport { 5060, 10000-20000 } accept
ip saddr 85.26.161.45 iifname "enp0s3" tcp dport 22 accept
ip saddr 10.8.0.5 iifname "tun0" tcp dport 22 accepts
counter drop
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state established,related accept
ip protocol icmp accept
udp dport { 5060, 10000-20000 } accept
counter drop
}
chain output {
type filter hook output priority 0; policy accept;
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
#ip saddr XXX.XXX.XXX.XXX iifname "enp0s3" udp dport { 5060, 10000-20000 } dnat 192.168.XXX.XX
}
chain input {
type nat hook input priority 100; policy accept;
}
chain output {
type nat hook output priority -100; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
#oifname "enp0s3" masquerade
}
}
Создаём файл /etc/sysconfig/nftables.conf и в него добавляем строки
- Код: выделить все
include "/etc/nftables/ipv4-firewall.nft"
Производим активацию правил межсетевого экрана nftables
- Код: выделить все
systemctl start nftables
systemctl enable nftables
Настройка роутера Микротик
- Код: выделить все
/ip route
add dst-address=10.8.0.0/24 gateway=192.168.88.2
/ip firewall nat
add action=masquerade chain=srcnat out-interface=l2tp-out1
add action=dst-nat chain=dstnat dst-address-list="" dst-port=22 in-interface=\
l2tp-out1 protocol=tcp src-address=85.26.161.45 src-port="" to-addresses=\
192.168.88.2 to-ports=22
add action=dst-nat chain=dstnat dst-port=1194 in-interface=l2tp-out1 protocol=\
udp to-addresses=192.168.88.2 to-ports=1194
Обязательно отключите сервис SIP в Микротике, иначе не будет двух стороннего голоса от провайдера
- Код: выделить все
/ip firewall service-port
set sip disabled=yes
Конфигурация внутренних номеров PJSIP IP Телефонии Asterisk RealTime
Разрешаем IP Телефонии Asterisk прослушивать со всех сетевых интерфейсов UDP пакеты
- Код: выделить все
mkdir -p /opt/asterisk/sql
cd /opt/asterisk/sql
Создаем командный файл transpors и приводим его к такому виду:
- Код: выделить все
#!/bin/bash
mysql asterisk << EOF
INSERT INTO ps_transports(id,bind,protocol)
VALUES('transport-udp','0.0.0.0','udp');
EOF
- Код: выделить все
asterisk -x reload
Делаем командный файл /opt/asterisk/sql/transpors, выполняемым и запускаем его
- Код: выделить все
chmod 750 transports
./transports
Проверка
- Код: выделить все
asterisk -x "pjsip show transports"
Создаём список ACL контроля доступа в IP Телефонию Asterisk, файл /etc/asterisk/acl.conf приводим к виду
- Код: выделить все
[vpn]
deny=0.0.0.0/0.0.0.0
permit=10.8.0.0/24
[office]
deny=0.0.0.0/0.0.0.0
permit=192.168.89.0/24
- Код: выделить все
asterisk -x "reload acl"
Проверка
- Код: выделить все
asterisk -x "acl show vpn"
asterisk -x "acl show office"
Для создании процедуры на стороне SQL Сервера MariaDB, которая будет формировать офисную и удалённую номерную ёмкость в IP Телефонии Asterisk. Приводим файл /opt/asterisk/sql/numPhones.sql к виду
- Код: выделить все
USE asterisk;
DELIMITER //
CREATE OR REPLACE PROCEDURE delPhone( IN num INT)
BEGIN
DELETE FROM ps_aors WHERE id=num;
DELETE FROM ps_auths WHERE id=num;
DELETE FROM ps_endpoints WHERE id=num;
END;
CREATE OR REPLACE PROCEDURE addPhone( IN num INT, IN acl VARCHAR(30))
BEGIN
SET @passwd='mypasswd';
SELECT @@GLOBAL.hostname into @realm;
INSERT INTO ps_aors(id, max_contacts) VALUES (num, 1);
INSERT INTO ps_auths(id, auth_type, realm, username, md5_cred)
VALUES(num, 'md5', @realm, num, MD5(CONCAT(num, ':', @realm, ':', @passwd)));
INSERT INTO ps_endpoints(id, transport, aors, auth, context, disallow, allow, direct_media, callerid, acl)
VALUES(num, 'transport-udp', num, num, CONCAT('from-', acl), 'all', 'ulaw', 'no', CONCAT(acl,' <', num, '>'), acl);
END;
//
DELIMITER ;
- Код: выделить все
cd /opt/asterisk/sql
mysql < numPhones.sql
Командный файл /opt/asterisk/sql/numPhones приводим к виду
- Код: выделить все
#!/bin/bash
for NUM in `seq 100 199`;do
mysql asterisk -e "CALL addPhone($NUM, 'office')"
done
for NUM in `seq 200 299`;do
mysql asterisk -e "CALL addPhone($NUM, 'vpn')"
done
cd /opt/asterisk/sql
./numPhones
Проверка
- Код: выделить все
asterisk -x "pjsip show endpoints"
Пример создания и удаления номера из IP Телефонии Asterisk
- Код: выделить все
mysql asterisk -e "CALL delPhone(100)"
mysql asterisk -e "CALL addPhone(101, 'office')"
mysql asterisk -e "CALL addPhone(102, 'vpn')"
Файл /etc/asterisk/extensions.conf приводим к виду
- Код: выделить все
[from-office]
exten => _[12]XX,1,NoOp(${EXTEN})
same => n,Dial(PJSIP/${EXTEN})
[from-vpn]
exten => _[12]XX,1,NoOp(${EXTEN})
same => n,Dial(PJSIP/${EXTEN})
- Код: выделить все
asterisk -x "dialplan reload"
Пример: вызова контекстной документации PJSIP параметра IP Телефонии Asterisk
- Код: выделить все
asterisk -r
vm1*CLI> config show help res_pjsip auth auth_type
[auth]
auth_type = [Custom] (Default: userpass) (Regex: false)
Authentication type
This option specifies which of the password style config options should be
read when trying to authenticate an endpoint inbound request. If set to
'userpass' then we'll read from the 'password' option. For 'md5' we'll read
from 'md5_cred'. If set to 'google_oauth' then we'll read from the
refresh_token/oauth_clientid/oauth_secret fields.
md5
userpass
google_oauth
vm1*CLI>
Для записи билинговых соединений CDR записей в MariaDB SQL Server, файл /etc/asterisk/cdr_adaptive_odbc.conf приводим к виду
- Код: выделить все
[first]
connection=asterisk
table=cdr
Отключаем в CDR время звонка в формате GMT, тет самым делаем его системным, файл /etc/asterisk/cdr.conf приводим к виду
- Код: выделить все
usegmtime=no
- Код: выделить все
systemctl restart asterisk
Организация планового удаления CDR файлов из базы данных SQL Server MariaDB
- Код: выделить все
mysql asterisk
MariaDB [asterisk]> CREATE OR REPLACE EVENT `cdr_schedule`
-> ON SCHEDULE EVERY 1 MONTH STARTS CURRENT_TIMESTAMP
-> ON COMPLETION PRESERVE
-> ENABLE
-> COMMENT 'Удаление записей CDR, которые по дате больше 60-ти месяцев'
-> DO DELETE FROM cdr WHERE `start` < DATE_ADD( SYSDATE(), INTERVAL - 60 MONTH )
-> ;
Query OK, 0 rows affected, 1 warning (0.002 sec)
MariaDB [asterisk]> exit
Русификация голосовых уведомлений, которые поставляются с IP Телефонией Asterisk
Файл /etc/asterisk/asterisk.conf, приводим к виду
- Код: выделить все
defaultlanguage = ru
Проверка
- Код: выделить все
[from-office]
exten => _[12]XX,1,NoOp(${EXTEN})
same => n,Playback(tt-somethingwrong&silence/1&tt-weasels&silence/1)
Для осуществления удаленного доступа к таблице CDR записей в MariaDB SQL Server, можно воспользоваться SQL GUI dbFoge Studio 2020 for MySQL (бесплатно для некоммерческого использования). Скачать бесплатную версию можно от сюда: https://www.devart.com/ru/dbforge/mysql ... nload.html
Предоставление удаленного доступа к рабочему компьютеру, который находится по IP адресу 192.168.88.10
- Код: выделить все
mysql asterisk
GRANT SELECT ON asterisk.cdr TO 'cdr'@'192.168.88.10' IDENTIFIED BY 'mypasswd';
В межсетевом экране добавить правило
- Код: выделить все
nft insert rule filter input ip saddr 192.168.88.10 iifname "enp0s3" tcp dport 3306 accept
Организация записей разговоров в формате mp3
- Код: выделить все
yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
yum install https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
yum install ffmpeg
mkdir /opt/asterisk/monitor
mkdir /opt/asterisk/records
Файл /opt/asterisk/monitor/monitor_mp3, приводим к виду
- Код: выделить все
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
MONITOR=/var/spool/asterisk/monitor
DB=/opt/asterisk/records
YEAR=`date '+%Y' -d '-5 year'`
rm -rf $DB/$YEAR
cd $MONITOR
[ `pgrep -c \`basename $0\`` -ne 1 ] && exit 0
ls *.wav | while read FILE;do
[ -s $FILE ] && {
[ "0`lsof -t $FILE`" -eq 0 ] && {
#set -x
NAME=${FILE%.wav}
#nice -n 19 lame -V2 -S --silent $FILE $NAME.mp3 && {
nice -n 19 ffmpeg -y -loglevel quiet -i $FILE -q:a 2 $NAME.mp3 && {
Y=`date '+%Y' --date="@$NAME"`
M=`date '+%m' --date="@$NAME"`
D=`date '+%d' --date="@$NAME"`
mkdir -p $DB/$Y
mkdir -p $DB/$Y/$M
mkdir -p $DB/$Y/$M/$D
mv -f $NAME.mp3 $DB/$Y/$M/$D && rm -f $FILE
#set +x
# exit
}
}
}
done
exit 0
- Код: выделить все
chmod 755 monitor_mp3
Файл /etc/cron.d/asterisk, приводим к виду
- Код: выделить все
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
*/5 * * * * root /opt/asterisk/monitor/monitor_mp3
Файл /etc/asterisk/extensions.conf, приводим к виду
- Код: выделить все
[from-office]
exten => _X.,1,MixMonitor(${UNIQUEID}.wav)
exten => _[12]XX,2,Dial(PJSIP/${EXTEN})
Каждые 5 мин. bash скрипт monitor_mp3, будет забирать из папки /var/spool/asterisk/monitor файлы разговоров формата WAV и сжимать в формат MP3 с переносом в папку /opt/asterisk/records
Для удобства поиска файлов разговоров, в папке records происходит автоматическое формирование вложенных каталогов
+ ГОД
- МЕСЯЦ
- ДЕНЬ
- Файл_Разговора.mp3
Развертывание музыкального проигрывателя с клиент(MPC) серверной(MPD) архитектурой и трансляция аудио потока в место гудков при исходящих до звонов сотрудниками офиса
- Код: выделить все
yum install mpd
yum search mpg123
yum install meson.noarch
yum install cmake
yum install libmpdclient-devel
yum install sphinx
cd /usr/local/src
wget https://www.musicpd.org/download/mpc/0/mpc-0.33.tar.xz
tar xvfJ mpc-0.33.tar.xz
cd mpc-0.33
meson . output
ninja -C output
ninja -C output install
Файл /etc/mpd.conf, приводим к виду
- Код: выделить все
audio_output {
type "httpd"
name "Asterisk HTTP Stream"
encoder "lame"
port "8000"
bind_to_address "0.0.0.0"
bitrate "320"
format "44100:16:2"
max_clients "2"
}
В папку /var/lib/mpd/music копируем MP3 файлы
- Код: выделить все
systemctl start mpd
systemctl enable mpd
mpc repeat on
mpc random on
mpc stop
mpc clear
mpc update
mpc ls | mpc add
mpc play
Для проверки работоспособности вещания плейлиста, в межсетевом экране nftables для офисных под сетей, открываем 8000 порт
- Код: выделить все
nft insert rule filter input ip saddr 192.168.89.0/24 iifname "enp0s8" tcp dport 8000 accept
nft insert rule filter input ip saddr 192.168.88.0/24 iifname "enp0s3" tcp dport 8000 accept
Тестовое прослушивание вещания плейлиста, можно осуществлять через веб браузер по адресу http://192.168.88.2:8000 или http://192.168.89.2:8000
Конфигурация передачи вещания плейлиста аудио потока в IP Телефонию Asterisk
Файл /etc/asterisk/musiconhold.conf, приводим к виду
- Код: выделить все
[radio]
mode=custom
application=/usr/bin/mpg123 -q -r 8000 -f 8192 --mono -s http://localhost:8000
Файл /etc/asterisk/extensions.conf, приводим к виду
- Код: выделить все
[from-office]
exten => _X.,1,MixMonitor(${UNIQUEID}.wav)
exten => _[12]XX,2,Dial(PJSIP/${EXTEN},,tTm(radio)S(2400))
- Код: выделить все
systemctl restart asterisk
Установка OpenVPN в операционную систему MS-Windows, забирать тут:
https://build.openvpn.net/downloads/releases/
1. После установки OpenVPN, файлы сертификатов CRT, KEY и конфигурационный файл OVPN, копируются в папку C:\Program Files\OpenVPN\config
2. На рабочем столе, запускается программа Open VPN GUI
3. В правом нижнем углу MS-Windows в Панели задач, появится иконка Open VPN GUI
4. На ней нажимаем правую кнопку мышки, далее появится меню
5. Выбираем пункт Подключиться
6. В появившимся диалоговом окне, вводим пароль сертификата
7. При удачном соединении, иконка Open VPN GUI загорится Зелёным цветом
Установка программного SIP телефона MicroSIP в операционную систему MS-Windows, забирать тут:
https://www.microsip.org/downloads
1. На рабочем столе, запускается программа MicroSIP
2. В правом нижнем углу MS-Windows в Панели задач, появится иконка MicroSIP
3. На ней нажимаем правую кнопку мышки, далее появится меню
4. Выбираем пункт Добавить аккаунт...
6. В появившимся диалоговом окне, вводим реквизиты доступа SIP IP Телефонии
7. При удачном соединении, иконка MicroSIP загорится Голубым цветом
Установка OpenVPN в операционную систему Android
1. Забирать из Play Market программное обеспечение под названием OpenVPN Connect – Fast & Safe SSL VPN Client
2. Скопировать файлы сертификатов OpenVPN Connect - Пример: это client-002-ca.crt, client-002-ta.key, client-002.crt, client-002.key, client-002.ovpn в Смартфон в папку downloads
3. После запуска программы OpenVPN Connect открыть вкладку FILE
4. Выбрать файл client-002.ovpn и нажать кнопку IMPORT
5. Поставить галку Save Private Key Password, набрать пароль сертификата, потом подтвердить
6. Далее в разделе Profiles, нажать кнопку Connect
7. При успешном соединении текущего сертификата OpenVPN Connect, покажет статус соединения
Установка ZoilPer SIP Client в операционную систему Android
1. Забирать из Play Market программное обеспечение под названием Zoilper IAX SIP VOIP Softphone
2. В разделе Account setup введите Имя и Пароль SIP данных
3. Далее введите IP Адрес SIP Сервиса
4. Далее нажимаем кнопку Пропустить
5. Дожидаемся тестирование конфигураций сети SIP, нажимаем на кнопку Конец
Удачи!