5.2 KiB
5.2 KiB
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)
cd alpine-router
go run .
# открыть http://localhost:8080
На не-Alpine системе панель запустится, но ifup/ifdown не сработают — зато статистика и отображение интерфейсов будут работать.
Деплой на Alpine Linux
1. Установить зависимости
apk add go git ifupdown
Если
ifupdownуже включён в базовой системе — пропустить.
2. Собрать бинарник
# На самом роутере или кросс-компиляцией:
cd alpine-router
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