Files
alpine-router/README.md

166 lines
5.2 KiB
Markdown
Raw Normal View History

2026-04-15 11:38:26 +03:00
# NanoRouter — веб-панель управления сетью для Alpine Linux
2026-04-13 09:46:02 +03:00
Простая веб-панель для настройки сетевых интерфейсов на Alpine Linux.
Написана на Go (бэкенд) + чистый HTML/CSS/JS (фронтенд), без внешних зависимостей.
## Возможности
- Вкл/выкл/рестарт интерфейса (`ifup` / `ifdown`)
- Статистика трафика (rx/tx байт и пакетов) из `/proc/net/dev`
- Текущий IP (v4 и v6), маска сети, шлюз
- Режим DHCP или статический IP
- Редактирование всех параметров (IP, маска, шлюз, DNS)
- **Настройки применяются только после нажатия «Применить»**
- Автообновление данных каждые 10 секунд
## Структура проекта
```
2026-04-15 11:38:26 +03:00
NanoRouter/
2026-04-13 09:46:02 +03:00
├── 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)
```bash
2026-04-15 11:38:26 +03:00
cd NanoRouter
2026-04-13 09:46:02 +03:00
go run .
# открыть http://localhost:8080
```
> На не-Alpine системе панель запустится, но ifup/ifdown не сработают —
> зато статистика и отображение интерфейсов будут работать.
---
## Деплой на Alpine Linux
### 1. Установить зависимости
```sh
apk add go git ifupdown
```
> Если `ifupdown` уже включён в базовой системе — пропустить.
### 2. Собрать бинарник
```sh
# На самом роутере или кросс-компиляцией:
2026-04-15 11:38:26 +03:00
cd NanoRouter
2026-04-13 09:46:02 +03:00
go build -o network-manager .
```
Кросс-компиляция с x86_64 → ARM (например, для Raspberry Pi):
```sh
GOOS=linux GOARCH=arm64 go build -o network-manager .
```
### 3. Установить файлы
```sh
# Бинарник
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`:
```sh
cd /usr/local/share/network-manager && network-manager
```
Либо укажите путь к public через переменную окружения:
```sh
# Добавьте в OpenRC-скрипт:
directory="/usr/local/share/network-manager"
```
### 4. Настроить автозапуск (OpenRC)
```sh
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
```
Порт можно изменить переменной окружения:
```sh
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`