Контроль за VPN тоннелями VPNKI из MajorDoMo

VPN под контролем

Зачем нужен контроль за VPN?

Цель данной статьи, показать как:

  • Организовать индикацию/оповещение и авто рестарт, ваших VPN каналов, любезно предоставленных сервисом VPNKI (vpnki.ru), в системе MajorDoMo.
  • Дать базис для реализации системы управления тоннелями из интерфейса MajorDoMo.
  • Дать, один из примеров, реализации API системы VPNKI.
  • Показать принцип отправки команд из MajorDoMo в NIX операционные системы.

Получить данный базис очень просто. Это не займет у вас много времени. Зато даст вам широкие перспективы управления и контроль за вашими VPN тоннелями (каналами) и не только!. Почему я говорю базис? Потому что, я не вижу особого смысла показывать вам как прорисовывать индикацию, писать обширные сценарии перезапуска каналов и т. п. Все это глубоко индивидуально, ввиду разности интерфейсов и систем. И в то же время шаблонно, т.е. стоит только поискать на сервисе CONNECT или YouTube и вы без труда найдете любой пример реализации.

Приступим.

1. Создадим свойство значением которого будет текущий статус вашего VPN канала (0 или 1). Идем в свойства объекта: Главное административное меню/Объекты/systemStates/Communication и создаем там новое свойство Communication.vpnki_majordomo, в значение пишем 0, кликаем кнопку Добавить.
2.. Идем в Веб-переменные: Главное административное меню/Веб-переменные. Создаем там новую Веб-переменную.
Название: Статус тоннеля VPNKI userХХХ (где ХХХ следует заменить на выданный вам номер тоннеля).
Ссылка: https://vpnki.ru/index.php?option=com_api&format=raw&app=webservices&resource=stat&key=Ключ АПИ

Ключ АПИ вы найдете на своей страничке: Состояние тоннелей. Войдите в личный кабинет на сайте vpnki.ru меню: МОИ НАСТРОЙКИ/Состояние тоннелей, внизу на темной полосе.
Шаблон поиска: userxxxx»,»status»:»(.+?)»

(ХХХX ОБЯЗАТЕЛЬНО!!! заменить на выданный вам номер тоннеля).
Связанный объект: Communication
Свойство: vpnki_majordomo
Интервал проверки: 300
Жмем кнопку: Сохранить

Результат.

Сделав это вы получите свойство: Communication.vpnki_majordomo в значении которого будет 0 или 1 в зависимости от реального состояния тоннеля.

Простой сценарий.

Теперь давайте набросаем простенький сценарий который будет оповещать вас голосом в случае пропадания коннекта. А так же, принудительно, перезагружать ваше  VPN соединение, если, почему то, это не удалось осуществить средствами операционной системы.

Идем в Сценарии: Главное административное меню/Сценарии и создаем новый сценарий следующего содержания:
Название: VPN_MajorDoMo_Alarm_Restart
Описание: Действия при обрыве VPN тоннеля MajorDoMo.
Код: PHP : if (gg(‘Communication.vpnki_majordomo’)==’0′) { say(«ВНИМАНИЕ!!! У вас упал тоннель МажорДоМо. Пробую восстановить соединение…»,5); sleep(10); if (gg(‘Communication.vpnki_majordomo’)==’1′) { say(«ВПН тоннель МажорДоМо восстановлен.»,5); } else { exec(«/bin/bash /var/www/vpn_restart_majordomo.sh»); say(«Выполнено принудительное восстановление тоннеля МажорДоМо»,5); } }

Обратите внимание на строку: exec(«/bin/bash /var/www/vpn_restart_majordomo.sh»);

Она вызывает bash скрипт который называется: vpn_restart_majordomo.sh и содержит следующий код: #!/bin/bash sudo service openvpn restart

Этот скрипт нужно положить в корень  сайта MajorDoMo и сделать его исполняемым. Обращаю ваше внимание что хорошим тоном будет убрать его подальше от чужих глаз. Я лишь показываю вам пример, поэтому и оставляю его на виду. Главное не забудьте  прописать к нему правильный путь.

Скажу более, я умышлено сделал вариант со сценарием чтобы вы поняли что можете отправлять целую серию команд в ОС на которой установлен ваш MajorDoMo. В обычном же случае вам достаточно будет, штатно, послать команду на рестарт OpenVPN прямо из строки exec…

Далее, запускаем сценарий раз в 5 минут из метода: Timmer.onNewMinute прописав в самом низу: //Действия при обрыве VPN тоннелля Majordomo. if ($m%10 == 0) { runScript(‘VPN_MajorDoMo_Alarm_Restart’); }

Так мы добьемся бесконечной цикличности, раз в 10 минут, пока тоннель не восстановится. Естественно, можно поиграть со временем чтобы цикл был не таким частым или наоборот долгим. Единственное при этом условие, запуск сценария должен быть реже чем обновление Веб переменной, чтобы система успевала отработать, до следующего запуска сценария,  иначе Алиса будет лишнее болтать, и лишний раз выполнять рестарт OpenVPN. При желании во всех say можно оставить только запись в лог поменяв 5 на 1, тем самым добившись желанной тишины.

В общем, вышеприведенный код это всего лишь элементарный набросок, который вы можете развивать на ваше усмотрение. Ну допустим, вывести картинку на в панельку основных индикаторов. Делается она по аналогии со стандартными с той лишь разницей что в данном случае состояния будет всего два (красное и зеленое).

Альтернативный подход.

При желании, как альтернативный вариант, по аналогии, вы можете, вообще, создать отдельный объект в классе: systemStates . Назвав его, ну например: VPN_MajorDoMo и отрабатывать его индикацию и прочее (так же по аналогии), в его собственном методе checkState.

И так далее, для каждого тоннеля…

Ну и наконец, вы, уже, сможете приделывать: выключатели запуска/останова VPN. Кнопку перезапуска VPN тоннелей. Разного рода, автоматизацию, и. и. и… Все в ваших руках. Моей же задачей было дать Вам базис.

А в следующей коротенькой статье мы с вами немножко усложним задачку и научимся отправлять команды операционной системы, с сервера MajorDoMo,  на любой удаленный Nix компьютер.

Ну и наконец вернемся к уже давно обещанной кофеварке. 🙂

От Ovcher