По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Сетевые пользователи часто сталкиваются с необходимостью наличия статического общедоступного IP-адреса, например, при настройке веб-сервера, лаборатории с доступом через Интернет или даже при настройке почтового сервера. В таких случаях приходиться либо покупать новый интернет-пакет, включающий общедоступные IP-адреса, либо покупать новый пул статических общедоступных адресов у провайдера.
Однако начиная с Сisco IOS 12.4 и далее на маршрутизаторах Cisco можно настроить протокол DDNS (Dynamic DNS), который позволяет обновлять запись DNS при изменении IP – адреса маршрутизатора-следовательно, требование к статическому IP-адреу смягчается.
На приведенной ниже диаграмме показано функционирование службы DDNS:
Ниже приведено краткое описание работы DDNS с Cisco IOS:
Для регистрации у провайдера DDNS необходимо создать учетную запись. Настройте Интернет-маршрутизатор Cisco для работы в качестве клиента DDNS. Поставщик DNS создает уникальное доменное имя, указывающее на текущий динамический IP-адрес на Интернет-маршрутизаторе Cisco.
При перезагрузке интернет-маршрутизатора или изменении динамического IP-адреса он получает новый IP-адрес от провайдера. Клиент DDNS уведомляет сервер DDNS, и запись DNS обновляется с новым общедоступным IP-адресом.
Когда Интернет-пользователь хочет получить доступ к «test.dyndns.org», он отправляет DNS-запрос.
DDNS отвечает на запрос DNS, предоставляя IP-адрес 100.100.100.1 Интернет-маршрутизатора.
Как только пользователь получает динамический общедоступный IP-адрес интернет-маршрутизатора (100.100.100.1), пользователь может связываться с интернет-маршрутизатором через его вновь назначенный IP-адрес.
Ниже приведена конфигурация маршрутизатора Cisco для поддержки службы DDNS.
Шаг № 1 - Включите поиск DNS и настройте сервер IP-имен
HQ# configure terminalHQ(config)# ip domain-lookup
HQ(config)# ip name-server 4.4.4.4
HQ(config)# ip name-server 8.8.8.8
Шаг № 2 - Затем определите метод обновления DDNS:
HQ(config)# ip ddns update method dyndns
Шаг № 3 - В этом сценарии мы будем использовать HTTP в качестве метода обновления в конфигурации, чтобы указать URL-адрес, который маршрутизатор будет использовать для связи с поставщиком DDNS с новым публичным динамическим IP - адресом при изменении.
HQ(DDNS-update-method)# HTTP add http://username:password@members.dyndns.org/nic/update?system=dyndns&hostname=<h>&myip=<a>
Шаг № 4 - Далее мы устанавливаем интервал обновления, чтобы гарантировать, что FQDN обновляется как можно чаще. Конфигурация параметров интервала обновляется до 1 дня, 0 часов, 0 минут и 0 секунд.
HQ(DDNS-HTTP)# interval maximum 1 0 0 0
Шаг № 5 - Наконец, установите FQDN, которое будет обновляться, и включите службу DDNS на общедоступном интерфейсе (в этом сценарии будет использоваться Dialer0):
HQ(DDNS-update-method)# interface dialer0
HQ(config-if)# ip ddns update hostname test.dyndns.org
HQ(config-if)# ip ddns update dyndns
Для отладки DDNS введите следующие команды
HQ#debug ip ddns update
Многие слышали, но боялись "пощупать" страшного зверя по имени FreeSwitch (FS). Уверяю Вас, что страшного ничего нет. Правда придется перестроить свои мозги на его понимание. Он сильно отличается от Asterisk. И хотя FS такая же программная АТС как и Asterisk, но задачи у них разные. FS позиционируется как "провайдерская" АТС, а Asterisk офисный вариант. Несмотря на это, я его использую даже, как говорится, "для дома, для семьи", то есть дома на одноплатнике Orange PI Plus 2E. Так как на нем стоит Ubuntu 16, то описывать установку я буду для Ubuntu из исходников.
Если кому-то нужно попроще, то может установить на Debian (разработчики именно его рекомендуют.
Как поставить из пакетов можно почитать здесь https://freeswitch.org/confluence/display/FREESWITCH/Linux
А для самых искушенных даже на Windows :) https://freeswitch.org/confluence/display/FREESWITCH/Windows
Сначала необходимо выполнить обновление системы:
apt-get update
apt-get upgrade
Установим зависимости:
apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool make python-dev gawk pkg-config libtiff5-dev libperl-dev libgdbm-dev libdb-dev gettext libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libedit-dev libldns-dev libpq-dev libtool-bin libopus-dev libshout3-dev libmpg123-dev libmp3lame-dev libsndfile-dev libavresample-dev libswscale-dev libpng-dev libpng++-dev mpg123
После этого перезагружаемся:
reboot
Создаем папку и клонируем гит:
cd /usr/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git
cd /usr/src/freeswitch
./bootstrap.sh –j
Подключаем необходимые модули:
mcedit modules.conf
+ mod_rtmp
+ mod_directory
+ mod_callcenter
+ mod_dingaling
+ mod_shout
+ mod_cidlookup
+ mod_curl
+ mod_xml_curl
Мне нужно было использовать zrtp и хранить данные в базе PostgreSQL (кстати, разработчики считают MySQL недобазой :)) Собираем с ключами:
./configure --enable-zrtp --enable-core-pgsql-support
make
make install
Если при сборке FS ругается на openssl (switch_core_cert.lo) или что то подобное, то нужно проверить версию. Под 1.1.0 не устанавливается. Нужно ставить 1.0.2
Устанавливаем звуковые файлы:
8 kHz Standard Audio
make sounds-install
make moh-install
16 kHz High Definition Audio
make hd-moh-install
make hd-sounds-install
32 kHz Ultra High Definition Audio
make uhd-moh-install
make uhd-sounds-install
48 kHz CD Quality Audio
make cd-sounds-install
make cd-moh-install
Установим русские звуковые файлы:
make sounds-ru-install
make cd-sounds-ru-install
make uhd-sounds-ru-install
make hd-sounds-ru-install
Установим права и владельцев:
adduser --disabled-password --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup daemon freeswitch
chown -R freeswitch:daemon /usr/local/freeswitch/
chmod -R o-rwx /usr/local/freeswitch/
Создадим init скрипт для запуска /etc/init.d/freeswitch:
#!/bin/bash
### BEGIN INIT INFO
# Provides: freeswitch
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Freeswitch debian init script.
# Author: Matthew Williams
#
### END INIT INFO
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Freeswitch"
NAME=freeswitch
DAEMON=/usr/local/freeswitch/bin/$NAME
DAEMON_ARGS="-nc"
PIDFILE=/usr/local/freeswitch/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
FS_USER=freeswitch
FS_GROUP=daemon
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that sets ulimit values for the daemon
#
do_setlimits() {
ulimit -c unlimited
ulimit -d unlimited
ulimit -f unlimited
ulimit -i unlimited
ulimit -n 999999
ulimit -q unlimited
ulimit -u unlimited
ulimit -v unlimited
ulimit -x unlimited
ulimit -s 240
ulimit -l unlimited
return 0
}
#
# Function that starts the daemon/service
#
do_start()
{
# Set user to run as
if [ $FS_USER ] ; then
DAEMON_ARGS="`echo $DAEMON_ARGS` -u $FS_USER"
fi
# Set group to run as
if [ $FS_GROUP ] ; then
DAEMON_ARGS="`echo $DAEMON_ARGS` -g $FS_GROUP"
fi
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null --
|| return 1
do_setlimits
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --
$DAEMON_ARGS
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
Установим ссылку на CLI
cd /usr/local/bin/
ln -s /usr/local/freeswitch/bin/fs_cli fs_cli
Проверим всё ли запускается:
cd /usr/local/freeswitch/bin
./freeswitch
freeswitch@s02d> sofia status (или просто нажимаем F5)
freeswitch@s02d> list_users
Если нет ошибок, и высветились профили и пользователи, то можно отключаться:
freeswitch@s02d> shutdown
Меняем стандартный пароль для всех пользователей (указав свой):
mcedit /usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="default_password=lkhd456hkhggl2"/>
Включаем русский язык, если нужно:
mcedit /usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/ru/RU/elena"/>
<X-PRE-PROCESS cmd="set" data="default_language=ru"/>
После правки применяем изменения:
fs_cli -x "reloadxml"
Устанавливаем необходимые кодеки:
mcedit /usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,PCMU,PCMA,VP8"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,PCMU,PCMA,VP8"/>
Ну и в конце стартуем FS:
service freeswitch start
Для подключения к FS используем следующую команду:
fs_cli -rRS
Вот и всё. Мы установили и запустили FreeSwitch. О том, как настраивать пользователей, гейты, диалплан читайте в следующих статьях.
Автоматически перезвонить клиенту через определенное время. Как вам? Оказывается, данный функционал легко реализуем путем настройки четырех опций. В данной статье кратко разберем модуль обратного звонка Callback в IP - АТС Elastix 4.
Настройка
Данный модуль можно найти по следующему пути: PBX → PBX Configuration → Callback (в разделе Remote Access).
На скриншоте выше виден интерфейс создания Callback-а – как видно, интерфейс крайне прост. Для создания необходимо указать следующие параметры:
Callback Description – описание обратного вызова, к примеру – cheap call to your mamma
Callback Number – опциональное поле, можно указать номер отличный от номера вызывающего абонента, если оставить пустым – вызов от АТС поступит вызывающему абоненту
Delay Before Callback– пауза в секундах перед совершением обратного вызова
Destination after Callback – направление вызова после совершения Callback-а, логично ставить IVR для совершения вызова внутри компании или DISA для возможности набрать любой внешний номер.
Далее необходимо нажать Submit Changes и данный коллбэк появится в списке справа.
После создания обратного вызова, вы можете назначить его как опцию при входящем вызове или в интерактивном голосовом меню (IVR). В примере ниже используется обратный вызов с названием «test».
Так же если АТС используется для личной связи можно настроить входящий маршрут таким образом, чтобы ваш звонок сразу попадал на коллбэк.