2026-04-15 12:25:39 +03:00
2026-04-13 09:46:02 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 12:25:39 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-13 12:40:49 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 12:25:39 +03:00
2026-04-15 11:38:26 +03:00
2026-04-13 18:56:13 +03:00
2026-04-15 11:38:26 +03:00
2026-04-15 11:38:26 +03:00
2026-04-13 09:46:02 +03:00
2026-04-15 12:25:39 +03:00
2026-04-13 09:46:02 +03:00
2026-04-15 12:25:39 +03:00
2026-04-15 11:38:26 +03:00
2026-04-13 12:40:49 +03:00

NanoRouter — веб-панель управления сетью для Alpine Linux

Простая веб-панель для настройки сетевых интерфейсов на Alpine Linux. Написана на Go (бэкенд) + чистый HTML/CSS/JS (фронтенд), без внешних зависимостей.

Возможности

  • Вкл/выкл/рестарт интерфейса (ifup / ifdown)
  • Статистика трафика (rx/tx байт и пакетов) из /proc/net/dev
  • Текущий IP (v4 и v6), маска сети, шлюз
  • Режим DHCP или статический IP
  • Редактирование всех параметров (IP, маска, шлюз, DNS)
  • Настройки применяются только после нажатия «Применить»
  • Автообновление данных каждые 10 секунд

Структура проекта

NanoRouter/
├── main.go              — точка входа, HTTP-роутинг
├── go.mod
├── handlers/
│   └── api.go           — REST-обработчики
├── network/
│   ├── interfaces.go    — чтение состояния интерфейсов
│   ├── config.go        — парсинг/запись /etc/network/interfaces
│   └── apply.go         — применение конфига (ifup/ifdown)
├── public/
│   ├── index.html
│   ├── style.css
│   └── app.js
└── alpine-init/
    └── network-manager  — OpenRC-скрипт

Быстрый запуск (разработка, Linux/macOS)

cd NanoRouter
go run .
# открыть http://localhost:8080

На не-Alpine системе панель запустится, но ifup/ifdown не сработают — зато статистика и отображение интерфейсов будут работать.


Деплой на Alpine Linux

1. Установить зависимости

apk add go git ifupdown

Если ifupdown уже включён в базовой системе — пропустить.

2. Собрать бинарник

# На самом роутере или кросс-компиляцией:
cd NanoRouter
go build -o network-manager .

Кросс-компиляция с x86_64 → ARM (например, для Raspberry Pi):

GOOS=linux GOARCH=arm64 go build -o network-manager .

3. Установить файлы

# Бинарник
install -m 755 network-manager /usr/local/bin/network-manager

# Фронтенд (панель ищет папку ./public относительно cwd)
mkdir -p /usr/local/share/network-manager
cp -r public/ /usr/local/share/network-manager/public

Если хотите запускать из /usr/local/share/network-manager:

cd /usr/local/share/network-manager && network-manager

Либо укажите путь к public через переменную окружения:

# Добавьте в OpenRC-скрипт:
directory="/usr/local/share/network-manager"

4. Настроить автозапуск (OpenRC)

cp alpine-init/network-manager /etc/init.d/network-manager
chmod +x /etc/init.d/network-manager

rc-service network-manager start
rc-update add network-manager default

5. Открыть панель

http://<IP-роутера>:8080

Порт можно изменить переменной окружения:

PORT=8888 network-manager

API

Метод Путь Описание
GET /api/interfaces Список всех интерфейсов со статистикой
GET /api/interfaces/{name} Статистика одного интерфейса
POST /api/interfaces/{name}/up Поднять интерфейс
POST /api/interfaces/{name}/down Опустить интерфейс
POST /api/interfaces/{name}/restart Рестарт интерфейса
GET /api/config/{name} Получить конфиг (pending или из файла)
POST /api/config/{name} Сохранить конфиг как pending
DELETE /api/config/{name} Удалить pending конфиг
GET /api/pending Список интерфейсов с pending изменениями
POST /api/apply Записать pending конфиги и перезапустить интерфейсы

Формат /etc/network/interfaces

Панель читает и пишет стандартный Debian/Alpine формат:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    gateway 192.168.0.1
    dns-nameservers 8.8.8.8 1.1.1.1

Перед каждой записью создаётся резервная копия /etc/network/interfaces.bak.


Требования

  • Alpine Linux (или любой Linux с /proc/net/dev и /sys/class/net)
  • Go 1.21+
  • ifupdown или busybox с поддержкой ifup/ifdown
Description
No description provided
Readme 53 MiB
Languages
JavaScript 34.1%
Go 30.4%
HTML 25.4%
CSS 10%