По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Многие слышали, но боялись "пощупать" страшного зверя по имени 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. О том, как настраивать пользователей, гейты, диалплан читайте в следующих статьях.
img
Продолжим наш рассказ о Deployment Service (DLS) в OpenScape Voice и сегодня поговорим о поиске и настройке телефонных аппаратов в DLS. В предыдущей статье мы рассказали про то, как просканировать телефоны и зарегистрировать их в DLS. Теперь нам может понадобиться найти определенный телефон среди всех остальных. Настройка Для этого переходим во вкладку Deployment Service → IP Devices → IP Device Management → IP Device Configuration. Здесь нам нужно ввести критерии поиска аппарата: IP Address – IP адрес устройства; Device IP – MAC адрес устройства (в формате XX:XX:XX:XX:XX:XX); Device Tylie – тип устройства; E.164 – номер телефона на устройстве; Basic E.164 – номер телефона в базе DLS; SW Version – версия прошивки устройства; SW Tylie – тип прошивки; Reg-Address – адрес регистрации устройства; Last Registration – время последней регистрации (за выбранный период); Поиск можно выполнять по одному или нескольким критериям. Также можно использовать символ “*” в качестве символа подстановки. После заполнения форм нажимаем Search и нас автоматически переносит во вкладку Object с найденным телефоном. Если результатов несколько по между ними можно переключаться кнопками со стрелками внизу экрана, либо перейти во вкладку Table для отображения результатов в виде таблицы. При помощи DLS можно производить настройку телефонного аппарата напрямую, не заходя при этом на его веб-интерфейс. Для этого нужно перейти во вкладку Deployment Service – IP Devices – IP Phone Configuration. Настройки телефонов в DLS представлены в виде ряда независимых разделов, каждый из которых отвечает за настройку определенных параметров. В выбранном разделе производим поиск аппарата и после этого можем начинать его настройку. Для сохранения внесенных изменений нажимаем Save.
img
Иногда нам хочется, чтобы интерфейс роутера участвовал в процессе маршрутизации EIGRP, но без отправки Hello сообщений EIGRP с этого интерфейса. Именно об этом мы и поговорим в этой статье. Ранее мы говорили о команде Network net-id wildcard-mask, вводимой в режиме конфигурации роутера EIGRP. Эта команда вызывает два основных действия: Отправляет EIGRP Hello multicast сообщения с любого интерфейса, чей IP-адрес попадает в сетевое адресное пространство, указанное командой network. Объявляет подсеть любого интерфейса, IP-адрес которого попадает в сетевое адресное пространство, заданное командой network. Предыдущие статьи из цикла про EIGRP: Часть 1. Понимание EIGRP: обзор, базовая конфигурация и проверка Часть 2. Про соседство и метрики EIGRP Часть 2.2. Установка K-значений в EIGRP Часть 3. Конвергенция EIGRP – настройка таймеров Следующие статьи из цикла: Часть 5. Настройка статического соседства в EIGRP Часть 6. EIGRP: идентификатор роутера и требования к соседству Однако в некоторых случаях нам нет необходимости в том, чтобы команда network выполняла перовое действие, указанное выше. Например, если интерфейс подключается к хостам в локальной сети, а не к другим EIGRP-спикер роутерам. В этом случае нет необходимости отправлять Hello сообщения с этого интерфейса. К счастью, мы можем выборочно отключать отправку приветствий с интерфейса, все еще объявляя подсеть этого интерфейса нашим соседям EIGRP. Это стало возможным благодаря функции пассивного интерфейса. Рассмотрим топологию ниже: Обратите внимание, что каждый роутер имеет интерфейс, указывающий на сегмент локальной сети (то есть интерфейс, подключенный к коммутатору). Мы действительно хотим, чтобы подсети этих интерфейсов объявлялись через EIGRP, но нам не надо отправлять Hello сообщения c этого интерфейса (поскольку они не подключаются ни к каким другим EIGRP - спикер роутерам). Это делает эти интерфейсы (то есть интерфейс Gig0/3 на роутерах OFF1, OFF2 и OFF3) отличными кандидатами на роль пассивных интерфейсов. В следующем примере показано, как использовать команду passive-interface interface_id. OFF1# configurationterminal Enter configuration commands, one per line. End with CNTL/Z. OFF1(config)#router eigrp 1 OFF1(config-router)#passive-interface gig0/3 OFF1(config-router)#end OFF1# OFF2# configurationterminal Enter configuration commands, one per line. End with CNTL/Z. OFF2 (config)#router eigrp 1 OFF2 (config-router)#passive-interface gig0/3 OFF2 (config-router)#end OFF2# OFF3# configurationterminal Enter configuration commands, one per line. End with CNTL/Z. OFF3 (config)#router eigrp 1 OFF3 (config-router)#passive-interface default OFF3 (config-router)#no passive-interface gig0/1 OFF3 (config-router)#no passive-interface gig0/2 OFF3 (config-router)#end OFF3# В приведенном примере команда passive-interface gig0/3 была введена на роутерах OFF1 и OFF2, чтобы сообщить, что эти роутеры должны блокировать отправку Hello сообщений со своих интерфейсов Gig0/3 (то есть интерфейсов, соединяющихся с сегментами локальной сети). Однако конфигурация на роутере OFF3 использует несколько иной подход. Вместо указания интерфейсов, которые должны быть пассивными, дается команда passive-interface default, которая делает все интерфейсы пассивными. Затем были даны команды no passive-interface gig 0/1 и no passive-interface gig 0/2, чтобы выборочно сообщить, что эти интерфейсы не должны быть пассивными (так как эти интерфейсы используются для подключения к соседям EIGRP). Этот подход может быть полезен на роутерах с несколькими интерфейсами LAN и только несколькими интерфейсами, соединяющимися с соседями EIGRP. Как только мы выполняем команду passive-interface interface_id для определенного интерфейса, этот интерфейс больше не появляется в выходных данных команды show ip eigrp interfaces, как показано в примере ниже. Обратите внимание, что интерфейс Gig0/3, который был настроен как пассивный интерфейс, не отображается в списке. Однако EIGRP все еще объявляет подсеть, к которой принадлежит интерфейс Gig0/3. Мы можем определить, какие интерфейсы на роутере действуют в качестве пассивных интерфейсов, выполнив команду show ip protocols. В отображаемых данных этой команды, как видно в примере ниже, обратите внимание, что интерфейс Gig0/3 на роутере OFF2 является пассивным интерфейсом, в то время как его подсеть (198.51.100.0/24) объявляется EIGRP. Следом вас ждет статья про настройку статического соседства в EIGRP
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59