Статья

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

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

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

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

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

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

В планах

Сделать все-таки карту.Прикрутить авторизацию.Выдавать всем статические 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 минут описывается то, что тут сделано в пару команд!! Как хорошо, что наткнулся на эту статью! )


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

Устройства


WirenBoard

Wiren Board 6

(4 отзыва)

Raspberry Pi

Raspberry Pi 4

(15 отзывов)

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