PJSIP Asterisk17+RealTime+CentOS8+MariaDB10+OpenVPN2.4
Если IP Телефония Астериск будет ставиться с консоли, то её необходимо будет локализовать.
В файле /etc/vconsole.conf правим строки:
Код: Выделить всё
KEYMAP="ru"
FONT="cyr-sun16"
Код: Выделить всё
systemctl reboot
В файле /etc/selinux/config правим строку:
Код: Выделить всё
SELINUX=disabled
Код: Выделить всё
yum update
systemctl reboot
Код: Выделить всё
yum install epel-release.noarch
yum config-manager --set-enabled PowerTools
Код: Выделить всё
[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
Код: Выделить всё
yum install MariaDB-server
Код: Выделить всё
[mysqld]
event_scheduler = on
character_set_server = utf8
Код: Выделить всё
systemctl enable mariadb
systemctl start mariadb
Код: Выделить всё
mysql
CREATE DATABASE asterisk;
GRANT all ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'asterisk';
Код: Выделить всё
yum install git
Код: Выделить всё
cd /usr/local/src
git clone -b 17.6 https://gerrit.asterisk.org/asterisk asterisk-17.6
Код: Выделить всё
cd /usr/local/src/asterisk-17.6/contrib/scripts
./install_prereq install
Код: Выделить всё
cd /usr/local/src/asterisk-17.6
./configure
Код: Выделить всё
make menuselect
Код: Выделить всё
make
make install
make samples
make install-logrotate
make config
ldconfig
systemctl enable asterisk
systemctl start asterisk
Код: Выделить всё
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
Код: Выделить всё
sqlalchemy.url = mysql://asterisk:asterisk@localhost/asterisk
Код: Выделить всё
alembic -c config.ini upgrade head
Код: Выделить всё
cp cdr.ini.sample cdr.ini
Код: Выделить всё
sqlalchemy.url = mysql://asterisk:asterisk@localhost/asterisk
Код: Выделить всё
alembic -c cdr.ini upgrade head
Код: Выделить всё
cp queue_log.ini.sample queue_log.ini
Код: Выделить всё
sqlalchemy.url = mysql://asterisk:asterisk@localhost/asterisk
Код: Выделить всё
alembic -c queue_log.ini upgrade head
Код: Выделить всё
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
В файле /etc/odbcinst.ini создаём
Код: Выделить всё
[MariaDB]
Description = ODBC for MariaDB
Driver = /usr/lib/libmaodbc.so
Driver64 = /usr/lib64/libmaodbc.so
FileUsage = 1
Код: Выделить всё
[asterisk]
Description = MariaDB connection to 'asterisk' database
Driver = MariaDB
Server = localhost
Database = asterisk
UserName = asterisk
Password = asterisk
Socket = /var/lib/mysql/mysql.sock
isql asterisk
Код: Выделить всё
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Файл /etc/asterisk/res_odbc.conf приводим виду
Код: Выделить всё
[asterisk]
enabled => yes
dsn => asterisk
username => asterisk
password => asterisk
pre-connect => yes
asterisk -rx reload
Код: Выделить всё
asterisk -rx "odbc show"
ODBC DSN Settings
-----------------
Name: asterisk
DSN: asterisk
Number of active connections: 1 (out of 1)
Logging: Disabled
Файл /etc/asterisk/modules.conf приводим к такому виду
Код: Выделить всё
preload => res_odbc.so
preload => res_config_odbc.so
noload => chan_sip.so
Код: Выделить всё
systemctl restart asterisk
Файл /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
Код: Выделить всё
[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
Код: Выделить всё
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
Код: Выделить всё
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"
Файл /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
Код: Выделить всё
cd /etc/openvpn/tun0
openvpn --genkey --secret ta.key
Код: Выделить всё
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
Код: Выделить всё
WorkingDirectory=/etc/openvpn/tun0
Код: Выделить всё
systemctl enable openvpn-tun0@server
systemctl start openvpn-tun0@server
Код: Выделить всё
cd /etc/openvpn/tun0/easy-rsa/easyrsa3
yum install expect
mkdir ovpn
chmod 755 gen-cert-req gen-cert-sig
Код: Выделить всё
#!/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
Код: Выделить всё
#!/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
Код: Выделить всё
#!/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
Код: Выделить всё
cd /etc/openvpn/tun0/easy-rsa/easyrsa3
./gen-certs
Настройка меж сетевого экрана nftables1. Сертификаты 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.
Останавливаем и отключаем текущий меж сетевой экран firewalld
Код: Выделить всё
systemctl stop firewalld
systemctl disable firewalld
nft flush ruleset
Файл /etc/sysctl.conf приводи к виду
Код: Выделить всё
net.ipv4.ip_forward = 1
Код: Выделить всё
sysctl -p
Код: Выделить всё
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
}
}
Код: Выделить всё
include "/etc/nftables/ipv4-firewall.nft"
Код: Выделить всё
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
Код: Выделить всё
/ip firewall service-port
set sip disabled=yes
Разрешаем IP Телефонии Asterisk прослушивать со всех сетевых интерфейсов UDP пакеты
Код: Выделить всё
mkdir -p /opt/asterisk/sql
cd /opt/asterisk/sql
Код: Выделить всё
#!/bin/bash
mysql asterisk << EOF
INSERT INTO ps_transports(id,bind,protocol)
VALUES('transport-udp','0.0.0.0','udp');
EOF
Код: Выделить всё
asterisk -x reload
Код: Выделить всё
chmod 750 transports
./transports
Код: Выделить всё
asterisk -x "pjsip show transports"
Код: Выделить всё
[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"
Код: Выделить всё
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
Код: Выделить всё
#!/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"
Код: Выделить всё
mysql asterisk -e "CALL delPhone(100)"
mysql asterisk -e "CALL addPhone(101, 'office')"
mysql asterisk -e "CALL addPhone(102, 'vpn')"
Код: Выделить всё
[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"
Код: Выделить всё
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>
Код: Выделить всё
[first]
connection=asterisk
table=cdr
Код: Выделить всё
usegmtime=no
Код: Выделить всё
systemctl restart asterisk
Код: Выделить всё
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
Файл /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)
Предоставление удаленного доступа к рабочему компьютеру, который находится по 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
Код: Выделить всё
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
Код: Выделить всё
#!/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
Код: Выделить всё
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
*/5 * * * * root /opt/asterisk/monitor/monitor_mp3
Код: Выделить всё
[from-office]
exten => _X.,1,MixMonitor(${UNIQUEID}.wav)
exten => _[12]XX,2,Dial(PJSIP/${EXTEN})
Для удобства поиска файлов разговоров, в папке 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
Код: Выделить всё
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"
}
Код: Выделить всё
systemctl start mpd
systemctl enable mpd
mpc repeat on
mpc random on
mpc stop
mpc clear
mpc update
mpc ls | mpc add
mpc play
Код: Выделить всё
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
Конфигурация передачи вещания плейлиста аудио потока в IP Телефонию Asterisk
Файл /etc/asterisk/musiconhold.conf, приводим к виду
Код: Выделить всё
[radio]
mode=custom
application=/usr/bin/mpg123 -q -r 8000 -f 8192 --mono -s http://localhost:8000
Код: Выделить всё
[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, нажимаем на кнопку Конец