Настройка удаленного доступа на Wirenboard / Raspberry Pi

14 октября 2020, 17:51
1600x_image.png?1602583791

Уже установили Wirenboard всем своим знакомым и родственникам и вроде бы все предусмотрели, но запросы на докрутку софта все еще продолжают поступать? Ездить по домам порядком надоело? Выход есть - OpenVPN.

Кстати не обязательно Wirenboard, любое устройство на линуксе тоже подойдет, Raspberry Pi, например. Эта статья тестировалась именно на и для Wirenboard, поэтому речь про него. Нет проблем проделать тоже самое и на малине.

Столкнулся с этой проблемой и я. Решил что так больше продолжаться не может, нужно что-то решать. В официальной документации есть инструкция (внизу в разделе VPN) по настройке удаленного доступа. Из нее мы возьмем лишь часть, установим openvpn и easy-rsa:

apt-get install openvpn easy-rsa
cp -R /usr/share/easy-rsa /etc/openvpn/

Запустим и убедимся, что все работает корректно:

root@wirenboard-XXXXXXXX:~# service openvpn start
root@wirenboard-XXXXXXXX:~# service openvpn status
   Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sat 2020-10-10 13:19:51  08; 2 days ago #показатель что все корректно запустилось
 Main PID: 2383 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/openvpn.service

окт 10 13:19:50 wirenboard-XXXXXXXX systemd[1]: Starting OpenVPN service...
окт 10 13:19:51 wirenboard-XXXXXXXX systemd[1]: Started OpenVPN service.

Далее нам потребуется арендовать собственный linux-сервер где-то на просторах интернета, чтобы не зависеть ни от кого и он был постоянно доступен с любого устройства. Мой выбор пал на сервис https://vscale.io/ (не реклама, выбирайте любой). При поиске учитывался единственный параметр - это дешевизна, а так как сверхзадач на нем выполняться не планируется, мощность железа особо не важна. Итого вышло - 200р./мес. Достаточно гуманно, считаю, для получаемых возможностей. 

1600x_image.png?1602578082

Пример конфигурации арендованного сервера

Предположим, что сервер вы уже приобрели, стартанули, залогинились по ssh. Прежде всего, рекомендую всё обновить до последних версий:

atp-get update
atp-get upgrade

Далее установим на сервер OpenVPN строго по инструкции

wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

Готово! Теперь для каждого аппарата на линуксе нужно создать свой конфиг, для этого просто запускаем сам скрипт:

bash openvpn-install.sh

Выбираем цифру 1 и создаем пользователя:

OpenVPN is already installed. #ничего страшного, скрипт на установку и запуск один и тот же.

Select an option:
   1) Add a new client #Добавление нового пользователя
   2) Revoke an existing client #Удаление созданных пользователей
   3) Remove OpenVPN #удаление OpenVPN
   4) Exit #Выход
Option: 1

Provide a name for the client:
Name: Sprut #Вводим имя пользователя, главное чтоб вам было понятно кто это и что за устройство

Ура! Ура! У нас появился файлик в /root/Sprut.ovpn, достаточно его переименовать в Sprut.conf и поместить на клиентское устройство в папку /etc/openvpn/client/

Кстати говоря, можно сразу поправить немного скрипт на сервере и файл будет сам переименовываться:

nano openvpn-install.sh
#Строка 495
# Generates the custom client.ovpn
new_client
echo
cp ~/"$client.ovpn" ~/"$client.conf" #эту строку добавляем
echo "$client added. Configuration available in:" ~/"$client.conf" #тут тоже ovpn поменял на conf для красоты
exit

Все практически готово, осталось запустить наш конфиг на клиенте и проверить его работоспособность, а также добавим запуск в автозагрузку:

systemctl start openvpn-client@Sprut #стартуем
systemctl status openvpn-client@Sprut #проверяем статус
systemctl enable openvpn-client@Sprut #включаем автозагрузку при старте системы

Если увидели Active: active (running), значит все хорошо! И теперь мы можем удаленно цепляться к нашему устройству.

Для этого создайте еще один профиль конкретно для себя и запустите на своем рабочем месте любой OpenVPN клиент (под свою OS выбирайте, например, тут) с полученным конфигом. 

После проделанных процедур, вы окажетесь в локальной сети со всеми своими устройствами и сможете по ip адресу, выданному сервером, заходить на Веб-интерфейс Wirenboard, SprutHub, mqtt, ssh и т.д. Никакие порты нигде пробрасывать не потребуется. Все уже работает.

IP адреса, выданные устройствам, можно посмотреть (на вашем сервере) в файле логов следующей командой:

cat /etc/openvpn/server/openvpn-status.log

Бонус!

Можно запустить на вашем сервере сайт, который будет отображать подключенных клиентов. К сожалению, вариантов не много для реализации задуманного, более-менее поддерживаемый - это OpenVPN-Monitor. Установка описана ниже:

#установка библиотек
apt install python3-dev uwsgi uwsgi-plugin-python3 geoipupdate git

#установка openvpn-monitor
cd /srv
git clone https://github.com/furlongm/openvpn-monitor.git
cd openvpn-monitor
virtualenv .
. bin/activate
pip install -r requirements.txt

#конфигурим uWSGI

nano /etc/uwsgi/apps-available/openvpn-monitor.ini

#текст:

[uwsgi]
base = /srv
project = openvpn-monitor
logto = /var/log/uwsgi/app/%(project).log
plugins = python3
chdir = %(base)/%(project)
virtualenv = %(chdir)
module = openvpn-monitor:application
manage-script-name = true
mount=/openvpn-monitor=openvpn-monitor.py

#конфигурим Nginx 
nano /etc/nginx/sites-available/openvpn-monitor
#текст:
server {
    listen 80;
    location /openvpn-monitor/ {
        uwsgi_pass unix:///run/uwsgi/app/openvpn-monitor/socket;
        include uwsgi_params;
    }
}

#Стартуем сервис
ln -s /etc/uwsgi/apps-available/openvpn-monitor.ini /etc/uwsgi/apps-enabled/
service uwsgi restart
unlink /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/openvpn-monitor /etc/nginx/sites-enabled/
service nginx restart

Теперь по адресу http://IP_адрес_сервера/openvpn-monitor/ будет доступен экран такого вида:

1600x_image.png?1602578764

К сожалению, на карте так и не удалось настроить отображение местонахождения клиентов. Возможно, кто-то сможет подсказать в комментариях. Основной плюс этого сайта заключается в том, что можно мониторить состояние (если подключение есть, то клиент в списке виден, если нет - значит удаленного доступа нет).

И есть основной минус - это отсутствие авторизации на этом сайте, т.е. вся эта инфа доступна любому в сети. Скорее всего, это можно настроить, моих знаний пока не хватило.

В планах

  • Сделать все-таки карту.
  • Прикрутить авторизацию.
  • Выдавать всем статические ip (это не сложно, не стал пока реализовывать и описывать).
  • Сделать создание новых пользователей прямо в веб-интерфейсе.
  • Создать у каждого клиента ссылки на необходимые ресурсы прямо из веб-интерфейса (SH, WB, MQTT, SSH).

На этом все. Спасибо за внимание.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Дмитрий Батюшин (ReD)
    Дмитрий Батюшин (ReD) 11 месяцев назад

    Хорошая статья. когда-то хотел поднять сервер на микротике. чтоб не покупать машинку. 

  2. Игнат Вакорин (werewolfe)
    Игнат Вакорин (werewolfe) отредактировано 11 месяцев назад

    Можно закрыть доступ через .htaccess и.htpasswd, это не топ защита конечно, но лучше чем ничего.

  3. Максим Лазарев (klouner)
    Максим Лазарев (klouner) отредактировано 11 месяцев назад

    Нашел как сделать рабочей карту.

    • В меню, в разделе  Download Files, скачиваем GeoLite2 City архив.
    • Из архива файл GeoLite2-City.mmdb кладем на сервер в папку /var/lib/GeoIP/
    • Правим конфиг /srv/openvpn-monitor/openvpn-monitor.conf, заменяем строку:

    geoip_data=/var/lib/GeoIP/GeoLite2-City.mmdb

    • Рестартуем в консоле service uwsgi restar

    Есть минус что местоположение определяется про провайдеру. Так что не особо хорошо.

  4. (2frez)
    (2frez) 11 месяцев назад
    Кстати, на Oracle Cloud можно получить бесплатный VPS и там поднять OpenVPN
  5. (Akesson)
    (Akesson) 11 месяцев назад

    Попробуй для аутентификации этот вариант. Ну и добавь ssl для передачи данных.
    https://codex.so/http-basic-au...

  6. Михаил Минуллин (magdi2k)
    Михаил Минуллин (magdi2k) 10 месяцев назад

    Очень полезная статья, спасибо. Если не против, на основе ее запилим видеоурок, также добавим менее качественный, но более простой способ. Спасибо

  7. Максим Лазарев (klouner)
    Максим Лазарев (klouner) отредактировано 7 месяцев назад

    Важное дополнение!

    При выключении света, иногда роутер не успевает стартануть первым, а стандартные настройки сервиса openvpn почему то это не предусматривают.

    Поэтому необходимо это поправить следующим образом:

    правим серивис 

    sudo nano /lib/systemd/system/openvpn-client@.service
    Type=forking

    А после DeviceAllow добавляем

    Restart=always 

    RestartSec=30

    Будет выглядеть так:

    1000x_image.png?1612106268

    Каждые 30 секунд будет пытаться переподключиться, если нет коннекта.

    И после всех редактирований сервисов не забываем про команду:

    sudo systemctl daemon-reload

    • Анзор Хуако (Anzic)
      Анзор Хуако (Anzic) 4 месяца назад

      Restart=always 

      RestartSec=30

      добавил.

      а это нужно добавлять? У меня нет таких строчек:

      ProtectSystem=true

      ProtectHome=true

      KillMode=process

  8. Анзор Хуако (Anzic)
    Анзор Хуако (Anzic) 4 месяца назад

    Гениально!! Сэкономил пару часов настройки по видео. Там 40 минут описывается то, что тут сделано в пару команд!! Как хорошо, что наткнулся на эту статью! )

К списку статей

Устройства в материале

Wiren Board 6

Производитель: WirenBoard

Raspberry Pi 4

Производитель: Raspberry Pi
Заказать на:

Скидки для сообщества

Wiren Board

+7 495 150-66-19
Промокод:
SPRUTDELIVERY
Размер скидки:
0%
Вы получите бесплатную доставку.

Тематические чаты

Похожие статьи

25 сентября 2020, 11:49
Сенсорный монитор для управления умным домом. Настройка и использование.
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
18 февраля 2020, 17:06
В данной статье описывается сборка слаботочного эл. щита на базе Wiren Board 6, а так же силового щита для небольшой квартиры.
09 ноября 2020, 19:03
В статье я расскажу о том, как сделать ваши рулонные, в том числе и кассетные шторы, чуточку умнее. Дам ссылки на дешевые аккумуляторные моторы. Расскажу про способы трансляции сигналов 433Мгц в MQTT. И продемонстрирую много фотографий решения и немного видео.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
01 октября 2019, 07:07
"У всякого в умном дому неведомо никому" (с) Народная мудрость
30 июня 2018, 12:17
Добавляем устройства управляемые по ИК через Broadlink RM3 Mini на примере кондиционера.