Статья

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

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

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

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

bash
Копировать
apt-get install openvpn easy-rsa cp -R /usr/share/easy-rsa /etc/openvpn/

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

bash
Копировать
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р./мес. Достаточно гуманно, считаю, для получаемых возможностей.

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

bash
Копировать
atp-get update atp-get upgrade

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

bash
Копировать
wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

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

bash
Копировать
bash openvpn-install.sh

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

bash
Копировать
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/Кстати говоря, можно сразу поправить немного скрипт на сервере и файл будет сам переименовываться:

bash
Копировать
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

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

bash
Копировать
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 адреса, выданные устройствам, можно посмотреть (на вашем сервере) в файле логов следующей командой:

bash
Копировать
cat /etc/openvpn/server/openvpn-status.log

Бонус!

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

bash
Копировать
#установка библиотек 
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/ будет доступен экран такого вида:

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

В планах

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


Вернуться назад
Вернуться назад