
Легковесная платформа управления устройствами OpenWRT для небольших сетей. Централизованная настройка, мониторинг и управление WiFi для 2–20 устройств с простым развертыванием и совместимостью с OpenWISP.
*Внимание: это ранний выпуск, пожалуйста, прочитайте примечания к выпуску ВСЕХ версий до текущей*
# <img src="https://raw.githubusercontent.com/rubenbe/opensoho/HEAD/logo.svg" alt="OpenSOHO logo" width="40" /> OpenSOHO
Спасибо, что рассматриваете возможность поддержать проект!
<a href="https://www.buymeacoffee.com/rubenbe" target="_blank"><img src="https://assets.kitploit.com/production/public/readmes/9350/485b634752d0d832ed936de61544bf16e5e54dc05146ccca080333c15097d455.png" alt="Buy Me A Coffee" height="41" width="174"></a>
[Документация](https://opensoho.github.io/docs)
OpenSOHO создан для управления небольшим количеством сетевых устройств на базе OpenWRT. Отсюда и название SOHO — от сетей Small Office Home Office (SOHO).
* От 2 до 20 устройств (жёсткого ограничения нет)
* Без мультитенантности
* Совместим с openwisp-config и openwisp-monitoring.
* Прост в развёртывании
Он вдохновлён OpenWISP, но нацелен на сети, которые слишком малы для обслуживания с помощью OpenWISP.
Как отметили в OpenWisp:
> Однако OpenWISP может не подойти для очень маленьких сетей (менее 20 устройств), организаций без ИТ-экспертизы или предприятий, ищущих open-source альтернативы исключительно ради экономии средств.
<p align="center">
<a href="https://raw.githubusercontent.com/opensoho/assets/074a4c5c353fcbb295e2da84fb3490869c6c4de0/devices.png" target="_blank">
<img src="https://assets.kitploit.com/production/public/readmes/9350/5d363839ee3d28ed044c4de8249f4944be3e18ef8cb2e13d7b1c1a6a487fa1ce.png" width="80%" />
</a>
</p>
Протестированы следующие версии
* OpenWRT 24.10.x DSA (устаревшая поддержка)
* OpenWRT 25.12.x DSA
# Начало работы с OpenSOHO
## Обзор
Настройка OpenSOHO требует нескольких простых шагов, каждый из которых подробно описан в разделах ниже:
* Установите OpenSOHO на свой сервер.
* Установите пакеты OpenWisp на свои устройства OpenWRT.
* Настройте OpenWisp на каждом из своих устройств OpenWRT для подключения к OpenSOHO.
* Начните настройку в OpenSOHO!
## Установка OpenSOHO
* Скачайте последний выпуск OpenSOHO (или используйте docker-контейнер)
[Выпуски](https://github.com/rubenbe/opensoho/releases)
[Установка с Docker, Podman или Kubernetes](https://opensoho.github.io/docs/containers/)
* Запустите OpenSOHO
Сначала выберите общий секрет, который позволит устройствам OpenWRT (использующим openwisp-config) регистрироваться в OpenSOHO.
Для оптимальной безопасности выберите длинную случайную строку.
Она должна совпадать с тем, что вы настроите в LuCI на следующих шагах.
```sh
OPENSOHO_SHARED_SECRET=randompassphrase ./opensoho serve --http 0.0.0.0:8090
```
Теперь OpenSOHO выводит в командной строке URL, который позволяет создать учётную запись администратора.
Просто откройте этот URL в браузере.
Либо создайте учётную запись администратора через командную строку:
```sh
./opensoho superuser upsert EMAIL PASS
```
## Настройка (принятие) устройств OpenWRT
### Установка пакетов OpenWISP
```sh
opkg install openwisp-config openwisp-monitoring luci-app-openwisp # OpenWRT 24.10
apk add openwisp-config openwisp-monitoring luci-app-openwisp # OpenWRT 25.12+
```
Если вы хотите использовать управление клиентами 802.11v, необходим полный пакет wpad-mbedtls.
На OpenWRT 24.10
```sh
opkg remove wpad-basic-mbedtls && \
opkg install wpad-mbedtls && \
service wpad restart
```
В OpenWRT 25.12+
```sh
apk del wpad-basic-mbedtls && \
apk add wpad-mbedtls && \
service wpad restart
```
После установки wpad-mbedtls сначала попробуйте `service restart wpad`, иначе может потребоваться перезагрузка для переключения на новый бинарный файл wpad. В противном случае вы можете получить ошибку вида `daemon.notice netifd: radio1 (28210): WARNING (wireless_add_process): executable path /usr/sbin/wpad does not match process 1842 path (/usr/sbin/wpad (deleted))`.
(Обратите внимание, что клиентский роуминг 802.11v всё ещё находится в разработке)
### Настройка OpenWISP в LuCI:
* Укажите только `Server URL` и `Shared secret`.
* *НЕ* добавляйте косую черту в конце `Server URL`. Пример URL: `http://192.168.1.1:8090`
* Общий секрет — это значение, которое вы выбрали ранее (`OPENSOHO_SHARED_SECRET`).
* При желании уменьшите `Update Interval` до 30 секунд для более быстрого обновления. (OpenSOHO сделает это за вас, если вы не сделаете этого сами)
* OpenSOHO также включает мониторинг и уменьшает интервал мониторинга до 15 секунд для более быстрого обновления состояния сети.
Настоятельно рекомендуется включить мониторинг, поскольку OpenSOHO определяет множество текущих настроек OpenWRT и заполняет их для удобной настройки.
## Настройка OpenSOHO
* Дождитесь, пока устройство(а) OpenWrt самостоятельно зарегистрируются с использованием общего секрета.
* Установите флаг `Enabled` устройства в значение true.
* Установите `numradios` в правильное значение. Например, для устройства с 2.4 + 5 ГГц это значение будет равно 2.
* Настройте точку доступа Wifi (SSID+KEY). Эта процедура позволяет OpenSOHO правильно определить конфигурацию радио при регистрации устройства.
* Прикрепите настроенную точку доступа Wifi к устройству, чтобы оно было настроено.
* В настоящее время каждая сеть автоматически настраивается на всех радио (настраивается с помощью `numradios`).
* При желании светодиоды также можно включать или выключать (пока только статическая конфигурация).
* Настройка радиочастот теперь поддерживается. OpenSOHO один раз считывает текущую конфигурацию радио и делает её доступной в конфигурации радио. Может потребоваться минута или две, прежде чем конфигурация радио появится (этапы настройки и мониторинга требуют некоторого времени для завершения).
## Панель управления
OpenSOHO поставляется с базовой панелью управления. Доступ к ней осуществляется через кнопку на крайней левой боковой панели, прямо под логотипом OpenSOHO.
<p align="center">
<a href="https://raw.githubusercontent.com/opensoho/assets/636c6966e5bb33f6ef1fc0a7b0188307ad6865b6/dashboard.png" target="_blank">
<img src="https://assets.kitploit.com/production/public/readmes/9350/3b8f95d6bd1a3860d0aac83aa3e54eccb115aef24273ab9ba6d5d9a7591304e1.png" width="70%" />
</a>
</p>
Обратите внимание, что это не задумано как замена более продвинутым инструментам построения графиков; она остаётся и будет оставаться базовой намеренно.
## Настройка
Теперь OpenSoho доступен по адресу http://ipaddress:8090/_/
Существует несколько коллекций конфигурации:
### Клиенты
Это клиенты, подключённые к Wifi. Эта таблица доступна только для чтения, за исключением псевдонима.
Её можно использовать, чтобы дать устройствам удобочитаемые имена. Это работает правильно только тогда, когда клиент не рандомизирует свой mac-адрес.
#### Подключённые клиенты
Содержит список клиентов, которые в данный момент подключены к вашему wifi. Чтобы отобразить IP-адрес устройства, OpenSOHO нужен доступ к вашим арендам DHCP. Для этого на устройстве, содержащем DHCP-сервер, должен быть запущен демон мониторинга openwisp. Устройства со статическим IP не получат IP. Это известное ограничение по состоянию на 0.12.0.
### Устройства
Это подключённые устройства.
* Используйте enable/disable, чтобы отключить обновления конфигурации. Это полезно, чтобы избежать обновления всех устройств сразу. Мониторинг остаётся активным.
* Health status — поле только для чтения. `healthy` означает, что устройство обменивалось данными в течение последней минуты. Если нет, статус здоровья становится `unhealthy`, и, возможно, что-то не так с устройством или его соединением.
* Leds позволяет выбирать конфигурации светодиодов
* Numradios позволяет задать количество радио на устройстве. Изначально это не отправляется OpenWisp, поэтому это должен задать пользователь.
* Wifis позволяет выбрать SSID для применения на этом устройстве.
### Резервирования DHCP
Создайте резервирование с именем хоста, MAC-адресом, IPv4-адресом и одним или
несколькими DHCP-серверами. OpenSOHO добавляет одинаковый именованный раздел `config host` в
`/etc/config/dhcp` на каждом выбранном сервере. Очистите выбор DHCP-сервера, чтобы
отключить резервирование без его удаления. Имена, MAC-адреса и IP-адреса
уникальны в списке резервирований.
### Светодиоды
* Базовая настройка светодиодов (на данный момент скорее POC)
### Радиомодули
* Позволяет задать частоту для каждого радиомодуля.
* Диапазон изменять не следует, так как это позволяет OpenSOHO проверять конфигурацию частоты. Это необходимо из-за ограничений в PocketBase.
### Wi-Fi
* Позволяет настроить различные SSID. Выбор режимов шифрования в настоящее время ограничен. WEP или Open не поддерживаются по замыслу.
## Мониторинг
### Мониторинг устройств
Проверьте, является ли состояние устройства `healthy`.
### Подключённые клиенты
Этот вид показывает всех Wi-Fi клиентов, которые всё ещё подключены в течение последних 30 секунд.
### Интеграция с Home Assistant
Мониторинг OpenSOHO можно интегрировать с Home Assistant. [(Подробнее)](https://opensoho.github.io/docs/home-assistant/)
Этот REST API предназначен для использования с Home Assistant, но также может быть интегрирован с другими инструментами.
## Устранение неполадок
### Повторная регистрация устройства
Когда изменение `Server URL` OpenWISP в LuCI, похоже, не приводит к правильной регистрации на новом контроллере.
Чтобы исправить это:
```sh
uci delete openwisp.http.uuid
uci delete openwisp.http.key
/etc/init.d/openwisp-config restart
```
### Первый SSID не включается
Похоже, в OpenWRT есть проблема: первый настроенный SSID на устройстве Wi-Fi не включается автоматически.
Обходной путь: нажмите кнопку включения в LuCI.
# Разработчикам
* Установите зависимости
```sh
go mod tidy
```
* Запустите OpenSOHO
Общий секрет используется openwisp-config для регистрации. Выберите длинную случайную строку для оптимальной безопасности.
Запуск модульных тестов:
```sh
go test -cover -v -coverprofile=coverage.out
go tool cover -html=coverage.out
```
## Область применения
### Возможности
Некоторые возможности OpenWISP (в настоящее время) считаются выходящими за рамки OpenSOHO
* Обновления прошивки: OpenWRT не требует частого обновления; используйте функцию Attended sysupgrade на каждом устройстве вручную.
* Мультиарендность
* Шаблоны: OpenWISP обладает мощным и универсальным механизмом шаблонов, который заменён более узким набором возможностей для упрощения процесса настройки.
### Разработка
Цель — максимально использовать возможности pocketbase. Небольшие модификации допустимы, поскольку бэкенд pocketbase в настоящее время не имеет системы плагинов. Но создание форка pocketbase не является целью, поэтому слияние изменений из upstream остаётся простым.
### Выпуск версий
```sh
GITHUB_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa goreleaser release
```