Статья

Настройка удаленного доступа на 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).


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

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


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




  • В меню, в разделе 

    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

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

Кстати, на Oracle Cloud можно получить бесплатный VPS и там поднять OpenVPN

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

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

Конечно. Буду только рад. Можно еще учесть советы, что здесь писали. 



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


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


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


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


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


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


Restart=always 



RestartSec=30


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


https://sprut.ai/static/media/cache/00/29/01/5/7072609/74345/1000x_image.png?1612106268" alt="1000x_image.png?1612106268" />

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

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

sudo systemctl daemon-reload

Restart=always 


RestartSec=30

добавил.

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

ProtectSystem=true

ProtectHome=true

KillMode=process

Уже не припомню, можно добавить. У меня с таким конфигом больше полугода работает идеально. 

ок, тоже добавил ) спасибо за статью! )

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


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