В связи с переходом на полуудаленную работу у меня появилась задумка управления (включения) рабочего компьютера с программой удаленного управления (Team Viewer, AnyDesk), посредством протокола Wake on LAN, дистанционно. Локальная сеть офиса находится за NAT, доступа извне к ней нет.
Возможно принцип решения пригодится и в системе домашней автоматизации, в качестве резервного канала, при отсутствии доступа к Internet, частого пропадания (или отключения) Internet или же нахождения сервера УД за NATом.
Исходные данные: имеем локальную сеть, в которой находятся ПК и сервер IP телефонии FreeeSWITCH. Сервер подключен к внешней сети через VoIP шлюзы GSM и канальное окончание FXS (стандартная 2-х проводная абонентская линия). IP доступ к внешней сети не имеет. Требуется, что бы по команде из-за пределов локальной сети, можно было отправить магический пакет, для дистанционного включения компьютера, с программой удаленного доступа (Team Viewer, AnyDesk).
Работоспособность решения дополнительно протестировал на базовом образе MajorDoMo для Raspberry PI v. 4.44. Версия Raspberry Pi 3B.
Установку и предварительную настройку сервера IP телефонии FreeSWITCH описывал Установка VoIP сервера FreeSWITCH с частичной инте...
1) Настраиваем ПК для работы с magic packet, в БИОСе и настройках сетевой карточки, и Windows. Настройку я описывать не буду, довольно много статей и инструкций есть в сети на эту тему.
2) Для того, что бы наш Raspberry Pi мог отправлять магический пакет по сети устанавливаем пакет etherwake
sudo apt-get install etherwake
Если БИОС и ОС настроены правильно, то после установки пакета Etherwake, включить ПК можно задав следующую команду на RPi :
sudo etherwake 04:0E:3C:8D:81:57
где 04:0E:3C:8D:81:57 MAC адрес удаленного ПК, для каждого компьютера он будет свой. Узнать этот адрес для компьютера с Windows можно в свойствах сетевых подключений или же набрав в командной строке Windows. Etherwake работает только от пользователя sudo.
ipconfig/All
Создадим Bash скрипт с единственной командой отправки пакета для пробуждения ПК.
sudo nano /home/test.sh
Содержимое файла скрипта:
#! /bin/bash
sudo etherwake 04:0E:3C:8D:81:57
Делаем его исполняемым:
sudo chmod +x /home/test.sh
3) Настраиваем сервер телефонии Freeswitch.
После установки сервера и предварительной настройки у нас уже есть работоспособная своя АТС. В ОС появился новый пользователь freeswitch.
Требуется дать ему право выполнения sudo без пароля.
Создаем группу для пользователей, которые будут использовать sudo без ввода пароля. В базовом образе эта эта группа уже существует.
sudo groupadd sudo
Добавить нашего пользователя freeswitch к этой группе:
sudo usermod -a -G sudo freeswitch
Кроме этого, я по аналогии с пользователем pi создал ещё одни файл:
sudo nano /etc/sudoers.d/010_freeswitch-nopasswd
Содержимое файла всего одна строчка:
freeswitch ALL=(ALL) NOPASSWD: ALL
После этого провереряем запуск нашего скрипта из под пользователя freeswitch:
sudo -u freeswitch /home/test.sh
Перейдём сейчас непосредственно к VoIP серверу.
Настройки диалплана находятся в одноименной папке /etc/freeswitch/dialplan/ . Основные настройки предустановленной (дефолтной) конфигурации хранятся в файде default.xml.
По умолчанию настроены внутренние номера (20 штук) 1000-1019 и довольно большое количество направлений и условий.
При наборе номера 5000 - идёт направление на IVR, интерактивное голосовое меню — система предварительно записанных голосовых сообщений, выполняющая функцию маршрутизации звонков внутри АТС с использованием информации, вводимой клиентом на клавиатуре телефона с помощью тонального набора. Язык по умолчанию - английский. Для смены языка требуется отредактировать файл
sudo nano /etc/freeswitch/vars.xml
удалив строки директорий с английским языком, вместо них установив директорию для русского и заменив страну по умолчанию на RU.
удаляемые строки:
sudo nano /etc/freeswitch/vars.xml
``` <X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/ru/RU/vika"/>
<X-PRE-PROCESS cmd="set" data="default_country=RU"/>```
После перезагрузки сервера АТС, IVR меню станет проговаривать фразы на русском языке.
Можно собрать из файлов в коробке FreeSWITCH нужную вам фразу, можно использовать заранее записанный *.wav файл, указав полный путь.
Сейчас попробуем набрать номер 779. Он использует расширение eavesdrop (прослушивание), после набора номера идёт авто ответ на SIP сервере и посылка звонящему тональных сигналов. Его я и решил использовать.
Отредактируем дефолтный диалплан
sudo nano /etc/freeswitch/dialplan/default.xml
и добавляем всего одну строчку в секциии eavesdrop с номером 779. <action application="system" data="/home/test.sh"/>, которая и запускает ранее сделанный скрипт с посылкой магического пакета.
Номер (направление) я тоже решил поменять, можно указать любой, в качестве пин кода. В итоге секция у меня приняла такой вид:
<extension name="eavesdrop">
<condition field="destination_number" expression="^7777$">
<action application="answer"/>
<action application="system" data="/home/test.sh"/>
<action application="set" data="eavesdrop_indicate_failed=tone_stream:/$
<action application="set" data="eavesdrop_indicate_new=tone_stream://%($
<action application="set" data="eavesdrop_indicate_idle=tone_stream://%$
<action application="eavesdrop" data="all"/>
</condition>
</extension>
Сейчас при наборе номера 7777 идёт автоматический ответ, запуск скрипта, и посылка тоновых сигналов.
Изменим немного голосовое меню (IVR).
sudo nano /etc/freeswitch/ivr_menus/demo_ivr.xml
В домашней сети переадресация на внутренние номера не сильно то и нужна, поэтому я сделал следующее: заменил всего одну строку с регулярным выражением, вместо трансфера номера (цифры номерного плана 1000-1019) в XML features
<entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML features"/>
я передаю набранный номер 7777 , с выполнением скрипта, в дефолтное направление:
<entry action="menu-exec-app" digits="/^(7777)$/" param="transfer 7777 XML default"/>
Задача можно сказать выполнена. После набора номера в голосовом меню запускается скрипт для включения ПК.
Перезапускаем из консоли freeswitch:
sudo systemctl restart freeswitch.service
И далее уже настраиваем, в зависимости от канала связи, свой VoIP шлюз, прописываем номер, диалплан и маршрут внешнего входящего вызова в IVR меню.
Минск, Беларусь
На форуме: udvnl