first commit
This commit is contained in:
165
README.md
Normal file
165
README.md
Normal file
@@ -0,0 +1,165 @@
|
||||
# Network Manager — веб-панель управления сетью для Alpine Linux
|
||||
|
||||
Простая веб-панель для настройки сетевых интерфейсов на Alpine Linux.
|
||||
Написана на Go (бэкенд) + чистый HTML/CSS/JS (фронтенд), без внешних зависимостей.
|
||||
|
||||
## Возможности
|
||||
|
||||
- Вкл/выкл/рестарт интерфейса (`ifup` / `ifdown`)
|
||||
- Статистика трафика (rx/tx байт и пакетов) из `/proc/net/dev`
|
||||
- Текущий IP (v4 и v6), маска сети, шлюз
|
||||
- Режим DHCP или статический IP
|
||||
- Редактирование всех параметров (IP, маска, шлюз, DNS)
|
||||
- **Настройки применяются только после нажатия «Применить»**
|
||||
- Автообновление данных каждые 10 секунд
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
alpine-router/
|
||||
├── 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
|
||||
cd alpine-router
|
||||
go run .
|
||||
# открыть http://localhost:8080
|
||||
```
|
||||
|
||||
> На не-Alpine системе панель запустится, но ifup/ifdown не сработают —
|
||||
> зато статистика и отображение интерфейсов будут работать.
|
||||
|
||||
---
|
||||
|
||||
## Деплой на Alpine Linux
|
||||
|
||||
### 1. Установить зависимости
|
||||
|
||||
```sh
|
||||
apk add go git ifupdown
|
||||
```
|
||||
|
||||
> Если `ifupdown` уже включён в базовой системе — пропустить.
|
||||
|
||||
### 2. Собрать бинарник
|
||||
|
||||
```sh
|
||||
# На самом роутере или кросс-компиляцией:
|
||||
cd alpine-router
|
||||
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`
|
||||
Reference in New Issue
Block a user