ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

PJSIP Asterisk17+RealTime+CentOS8+MariaDB10+OpenVPN2.4

Проблемы и их решения Asterisk как такового

Модераторы: april22, Zavr2008

PJSIP Asterisk17+RealTime+CentOS8+MariaDB10+OpenVPN2.4

Сообщение gopstopochka » 16 фев 2021, 20:29

Установка IP Телефонии PJSIP Asterisk 17.6 в режиме RealTime для CentOS 8.2 и MariaDB 10.5.4 с применением защищённого канала OpenVPN 2.4.9 и межсетевого экрана nftables 0.9.3

Если 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, нажимаем на кнопку Конец


Удачи!
gopstopochka
 
Сообщений: 6
Зарегистрирован: 22 сен 2016, 13:06

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH