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

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

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

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

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

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

Приступим.

1. Создадим свойство значением которого будет текущий статус вашего VPN канала (0 или 1). Идем в свойства объекта: Главное административное меню/Объекты/systemStates/Communication и создаем там новое свойство Communication.vpnki_majordomo, в значение пишем 0, кликаем кнопку Добавить.
2.. Идем в Веб-переменные: Главное административное меню/Веб-переменные и создаем там новую Веб-переменную:
Название: Статус тоннеля VPNKI userХХХ (где ХХХ следует заменить на выданный вам номер тоннеля).
Ссылка:

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

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

Результат.

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

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

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

Идем в Сценарии: Главное административное меню/Сценарии и создаем новый сценарий следующего содержания:
Название: VPN_MajorDoMo_Alarm_Restart
Описание: Действия при обрыве VPN тоннеля MajorDoMo.
Код: PHP :

Обратите внимание на строку:

Она вызывает bash скрипт который называется: vpn_restart_majordomo.sh и содержит следующий код:

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

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

Далее, запускаем сценарий раз в 5 минут из метода: Timmer.onNewMinute прописав в самом низу:

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

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

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

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

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

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

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

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

Комментарии
  1. Хоть и нет у меня Мажордомо, но все понятно! 🙂

  2. admin admin

    Ну и Слава Богу! 🙂

  3. Аватар AeroS

    Спасибо пригодилось! Хоть и МД на винде а тоннели держут кинетики). Далее можно индикацию свойства выводить на сцену.

  4. admin admin

    Очень рад что Вам помогла моя статья.

  5. Аватар nail

    Не могу установить на виднду10. Это вообще возможно?

  6. admin admin

    Здравствуйте. А почему нельзя? Все средства стандартные. Если Вы способны установить и настроить ВПН, то проблем быть не должно.
    Надеюсь Вы читали эту статью: https://vpnki.ru/settings/windows-all/windows10-pptp-l2tp-ipsec
    Если что то не получается, Вы всегда сможете задать вопрос в соответствующей ветке форума: https://vpnki.ru/questions/support-forum Уверен, Вас не оставят без внимания.

  7. Аватар nail

    «…Она вызывает bash скрипт который называется: vpn_restart_majordomo.sh и содержит следующий код:
    #!/bin/bash
    sudo service openvpn restart
    Этот скрипт нужно положить в корень сайта MajorDoMo и сделать его исполняемым. Обращаю ваше внимание что хорошим тоном будет убрать его подальше от чужих глаз, я лишь показываю вам пример, поэтому и оставляю его на виду. Главное не забудьте прописать к нему правильный путь…»
    подскажите как именно положить в корень МД на UBUNTU Server 18?

  8. admin admin

    Я так понимаю у Вас проблемы с командной строкой? Давайте я попробую Вам маленько облегчить жизнь.
    1. Открывайте командную строку и пишите там sudo apt-get install mc когда программка установится запустите ее вбив в командную строку sudo mc и нажав Enter. У Вас должен открыться эквивалент Norton commander, только для Линукс.
    2. Вторым шагом будет найти место где лежит МажорДоМо. Как првило это /var/www. У Вас может быть по другому, расположение зависит от фантазии создателя образа или админа поднимавшего сервер.
    3. Допустим Мажор у Вас лежит в /var/www именно здесь Вы и должны создать файл скрипта. Переходите в MC в папку /var/www и вбейте следующую строчку: echo ‘#!/bin/bash’ > vpn_restart_majordomo.sh При наборе Вы увидите набираемую строку внизу. Набрав жмите Enter. Вы должны в списке файлов увидеть новый файл с именем vpn_restart_majordomo.sh перейдите на него и нажмите F4, откроется редактор, перейдите на новую строку и вбейте скрипт; sudo service openvpn restart сохраните файл.
    4. Чтобы скрипт работал дайте ему права. Нажмите F9. Вверху на зеленом фоне появится меню, перейдите в Файл/Права доступа, поставьте все крестики и нажмите Установить. Напоминаю, перед переходом в меню файл vpn_restart_majordomo.sh должен быть выделен в списке файлов. В процессе переходов по меню выделение может исчезать, это нормально, оно вновь появится когда Вы зайдете в блок прав(там где нужно ставить крестики). Собственно это азы Линукса. Данный метод хорош при работе по SSH, я Вам его рекомендую как наиболее мощный и гибкий, привыкнув к нему Вы не пожалеете, ибо это все та же командная строка. Миднайт коммандер лишь чуть облегчает процесс. Примечание. Если захотите работать с сервером дистанционно активируйте на нем SSH, а на рабочем компьютере воспользуйтесь соответствующей оснасткой например PuTTY.
    Собственно, есть и другие способы, например поднять на сервере FTP, создать в винде файл, перебросить его, например, с помощью FreeZila и из нее же дать права, но как по мне данный способ менее объемный чем командная строка, уверяю Вас, если вы поднимаете сервер без шела то как не оттягивайте, а рано или поздно все равно придется изучить командную строку.

  9. admin admin

    З.Ы. Напомню, правильнее будет спрятать скрипт подальше, с глаз долой в какую нибудь папку/ки в пределах МажорДоМо. Только не забывайте про права!

  10. Аватар nail

    Круто ! Все сделал через PuTTY.
    «…Если захотите работать с сервером дистанционно активируйте на нем SSH,…» как?
    потому что шас попробую настроить удаленный доступ ,если получится)

    https://mjdm.ru/forum/viewtopic.php?f=3&t=4338&hilit=vpnki&start=30

  11. admin admin

    Ну, если делали через PuTTY, то SSH у Вас наверное поднят. Дело за малым, пробросить порт SSH (он 22) через VPNKI. Я сейчас точно не помню, но по моему у них есть такая услуга, добавление портов для проброса. По уму на входе стоит поставить чего нибудь четырехзначное например 3456, а на выходе 22 чтобы лишний раз в И-нете не светить открытым 22 портом. Ну и хороший пароль. Подробностей я не знаю, не делал, спрашивайте у Димы (админ VPNKI).
    Что касается 80 порта, то ссылку Вы показали правильную. Находите конфиг и правьте его так же как правили скрипт. Ну а далее здесь есть статья как настроить VPNKI. У Вас Убунта у меня Дебиан, различий кардинальных не будет.

  12. Аватар nail

    СПС. и ваше мнение Убунта и Дебиан под Majordomo ,что удобнее? и быстрее на отклик?

  13. admin admin

    Дебиан это базис, Убунта его клон. По сути оно одно и тоже. Разве что, ИМХО Дебиан и постабильней и не так достает обновлениями. Стоит ли менять? Думаю нет. Например этот блог крутится на Убунте и ничего. Я не знаю Ваш уровень погружения в никсы, но если хотите скорости думаю стоит смотреть куда нибудь в сторону Red Hat линейки ну например на ЦентОсь и т.п. но для этого нужно уметь скакать с синтаксиса на синтаксис, между линейками и даже репликами есть разница в написании команд. В общем, если брать хостеров то по популярности, думаю, у них наиболее востребован ЦентОсь, затем Дебиан, Убунта, Винда, ну и далее по убывающей в зависимости от популярности, а так же цены вопроса.
    Оставляйте как есть. С Дебианом, я подразумеваю линейку, меньше мороки, переустанавливать ничего не надо, захотите что то поднимать с нуля тогда уже смотрите на Дебиан. Ну а что касаемо скорости и стабильности то это, я думаю, в большей степени зависит не от смены ядра, а от правильного выбора софта. Например Апачу я предпочту НгНикс, а Мускулу Перкону и т.д…

  14. Аватар Alexej550271

    Доброго вам времени суток. Извините пожалуйста, что вынужден побеспокоить, но попытавшись настроить в течение уже почти двух дней, я понял, что я гораздо «тупее», чем сам себе льстил)))
    В общем дело в следующем, сценарий работает, статус vpn туннеля меняет своё состояние (1,0) в случае если 0, то сценарий запускается и всё, что нужно и пишет и говорит, но вот только не перезагружает vpn сервер…
    Забивал в терминале (через ssh работаю, сервер на raspberry pi3)
    /bin/bash /var/www/vpn_restart_majordomo.sh, всё хорошо, перезапуск производиться.
    То есть получается, что именно сценарий отрабатывает, но команда exec(«/bin/bash /var/www/vpn_restart_majordomo.sh»); либо не проходит, либо я фиг его знает… Всем этим делам только учусь и осваиваю, знаний конкретно не хватает ((( Гуглил до «посинения», но так и не нашёл решения своей «беды»… Пришлось обратиться к вам с просьбой о помощи! Надеюсь не откажите..
    И огромное спасибо, за скрипт, вообще, то, что доктор прописал, заставить бы его ещё работать)))

  15. admin admin

    Здравствуйте и Добро пожаловать.
    1. Вы пишите «…но вот только не перезагружает vpn сервер…».
    Это Вам вряд ли удастся, ввиду того что ВПН сервер является собственностью VPNKI и у Вас, попросту, нет доступа к его управлению. По всей видимости речь идет о клиенте?
    Скорее всего у Вас проблемы с правами. Смотрите какая штука. У нас с Вами, в системе, минимум, три юзера т.е. Админ, Вы как пользователь компьютера, ну, допустим, пусть это будет, условно, Alexej и пользователь с именем www-data. Из под последнего пользователя работает МажорДоМо(ну или Апач на котором он крутится, как Вам угодно, не суть). Итак, Вы установили клиента либо под Админом, либо под Alexej, а пытаетесь управлять им из под www-data. Собственно Вам достаточно правильно расставить права и все должно заработать.
    1. Попробуйте включить/выключить/перезагрузить клиента из терминала(Вы должны быть, в системе, под юзером Alexej):
    service openvpn stop
    service openvpn start
    service openvpn restart
    Если прокатит значит клиент установлен из под юзера, если нет, попробуйте перед командой добавить sudo вот так:
    sudo service openvpn stop…
    Допустим у Вас клиент установлен от Alexej. Вторым этапом Вам нужно будет добавить пользователя Alexej в группу www-data, а пользователя www-data в группу Alexej. Ну и наконец, дать соответствующее разрешение в свойствах скрипта. Т.е. допустим, скрипт у Вас лежит, где нибудь в папке /home/Alexej открываете его свойства и даете на файл все права группе Alexej, т.е. чтобы не только от хозяина Alexej отрабатывал скрипт, но и от членов группы хозяина, а ввиду того что, в эту группу, мы добавили пользователя www-data то теперь скрипт должен выполняться и из под него.
    Это всего лишь один из возможных вариантов, скажем так, средненький с точки зрения безопасности, но его как правило более чем.
    Если Вы, пока, экспериментируете, можете просто дать на все права 777 и все должно работать.
    Ну и надеюсь, Вы сами уже глянете в И-нете, как работать с правами и как добавлять пользователя в группу, сменить хозяина и т.д. Тут команды будут зависеть от ОС, если у Вас Распбиан смотрите команды для Дебиан или Убунту.

  16. Аватар nail

    Здравствуйте!
    «……vpn_restart_majordomo.sh перейдите на него и нажмите F4, откроется редактор….»
    у меня выходит выбрать вариант?
    1./bin/nano <—— easiest
    2./usr/bin/mcedit
    3./usr/bin/vim.tiny
    4./bin/ed
    Что это может означать и какой выбрать ,что бы продолжить прописывать скрипт?

  17. admin admin

    Добрый день. Вам предложили перечень текстовых редакторов установленных у Вас в системе. По большому счету, абсолютно без разницы каким из них вы воспользуетесь. Это, наверное, по большей части, дело привычки и наличия в системе. Собственно, я без проблем, пользуюсь любым из них. Вы, как я понимаю, еще на распутье, поэтому я, наверное, попытаюсь преподнести их с точки зрения удобства по наростающей.
    1../usr/bin/vim.tiny — это базовый редактор зашитый в ядро, при переходе с винды, он кажется человеку крайней степенью анахронизма и верхом неудобства, но зато он всегда под рукой и иногда приходит на выручку когда нет возможности установить что то другое.
    2. ./bin/ed — древний юниксовый редактор, а ля Vim, который как и первый достаточно утомителен для новичка.
    3. ./bin/nano — Легкий консольный редактор управляемый горячими клавишами прекрасно подходит чтобы сделать быстрые правки. Собственно запомнив горячие клавиши им можно более менее нормально работать, но все же он не очень удобен для тех кто привык к визуальному интерфейсу, он скорее более подойдет тем кто любит работать в терминале, т.е. с командной строкой.
    4. ./usr/bin/mcedit — Это редактор встроенный в файловый менеджер Миднайт командер, который в свою очередь является клоном Нортон командера. Достаточно удобная штука как для терминала, так и для SSH. Зачастую я пользуюсь именно им.
    В общем, лучше и удобнее работать в MC (./usr/bin/mcedit), его и выбирайте для повседневной работы. Но! постарайтесь изучить и vim, и nano, это совсем не сложно, оно лишним абсолютно не будет.
    Лично я после установки новой оси первым делом ставлю MC и HTOP, оно ИМХО всегда должно быть под рукой.

  18. Аватар nail

    Спасибо за пояснения!

Добавить комментарий

Вы должны войти для комментирования.