216 lines
5.1 KiB
Markdown
216 lines
5.1 KiB
Markdown
# WGRplane - WireGuard Remote Plane Control
|
|
|
|
**WGRplane** adalah aplikasi kontrol WireGuard Remote Plane yang dibangun dengan fitur lengkap (paritas penuh dengan **WGDashboard**) ditambah integrasi **policy.json API**.
|
|
|
|
---
|
|
|
|
## Fitur Utama
|
|
|
|
- **Peer Management**: CRUD peer, generate QR code, export config
|
|
- **Real-time Monitoring**: Status peer, grafik trafik, riwayat koneksi
|
|
- **Scheduling & Automation**: Jadwal penghapusan/restriksi peer, reset data usage
|
|
- **Security**: Autentikasi dashboard (username/password), TOTP (2FA), API key
|
|
- **Multi-Server**: Akses multi WGDashboard instance via API keys
|
|
- **Plugins System**: Ekspansi fitur via plugin (experimental)
|
|
- **i18n & Themes**: Multi-bahasa, dark/light mode
|
|
|
|
---
|
|
|
|
## Arsitektur
|
|
|
|
```
|
|
wg0.conf (dengan/tanpa #Access)
|
|
↓
|
|
wg-engine-api (Go) -- membaca API storage (api-policy.json)
|
|
↓ ↓
|
|
+-- GET /api/policy (merged: API + #Access fallback)
|
|
+-- POST /api/policy (write ke api-policy.json, trigger sync)
|
|
↓
|
|
policy.json (merged: API overrides #Access)
|
|
↓
|
|
wg-policy-engine.sh (tidak diubah)
|
|
↓
|
|
iptables / ipset rules
|
|
```
|
|
|
|
### Tech Stack
|
|
|
|
| Komponen | Teknologi |
|
|
|-----------|------------|
|
|
| **WGRplane Backend** | Python + Flask |
|
|
| **WGRplane Frontend** | Vue.js 3 |
|
|
| **wg-engine-api** | Go (Golang) |
|
|
| **Database** | SQLite (default), PostgreSQL/MySQL via SQLAlchemy |
|
|
| **Desktop App** | ElectronJS + Vue.js |
|
|
|
|
---
|
|
|
|
## Port & Autentikasi
|
|
|
|
| Service | Port | Autentikasi |
|
|
|---------|------|---------------|
|
|
| WGRplane Dashboard | **10086** | Session-based + TOTP |
|
|
| wg-engine-api (Go) | **10087** | Custom header: `wg-rplane-datadunia` |
|
|
|
|
---
|
|
|
|
## API Endpoints (wg-engine-api)
|
|
|
|
### Autentikasi
|
|
Semua request harus menyertakan header:
|
|
```
|
|
wg-rplane-datadunia: <TOKEN>
|
|
```
|
|
|
|
### Endpoints
|
|
|
|
| Endpoint | Method | Deskripsi |
|
|
|----------|--------|-------------|
|
|
| `/api/policy` | GET | Ambil policy.json (merge: API + #Access fallback) |
|
|
| `/api/policy` | POST | Update policy (simpan ke api-policy.json, trigger sync) |
|
|
| `/api/reload` | POST | Trigger wg-policy-engine.sh untuk apply rules |
|
|
|
|
### Contoh Penggunaan
|
|
|
|
```bash
|
|
# Ambil policy
|
|
curl -H "wg-rplane-datadunia: VALID_TOKEN" http://localhost:10087/api/policy
|
|
|
|
# Update policy untuk client
|
|
curl -X POST \
|
|
-H "Content-Type: application/json" \
|
|
-H "wg-rplane-datadunia: VALID_TOKEN" \
|
|
-d '{"ip": "10.0.0.2", "access": ["1.1.1.1/32"], "internet": true}' \
|
|
http://localhost:10087/api/policy
|
|
|
|
# Trigger reload
|
|
curl -X POST \
|
|
-H "wg-rplane-datadunia: VALID_TOKEN" \
|
|
http://localhost:10087/api/reload
|
|
```
|
|
|
|
---
|
|
|
|
## Migration: #Access ke API
|
|
|
|
| Aspek | Detail |
|
|
|-------|--------|
|
|
| **Strategi** | API with #Access fallback (API dicoba pertama, fallback ke #Access) |
|
|
| **Precedence** | API policy OVERRIDE #Access untuk IP client yang sama |
|
|
| **Storage API** | `/etc/wireguard/api-policy.json` (terpisah dari policy.json) |
|
|
| **Locking** | Menggunakan `/var/lock/wg-policy.lock` (SAMA dengan script shell) |
|
|
| **Atomic Write** | Tulis ke tmp file → `mv` (mencegah corrupt saat crash) |
|
|
|
|
---
|
|
|
|
## Instalasi
|
|
|
|
### Prerequisites
|
|
|
|
```bash
|
|
# Python dependencies (WGRplane)
|
|
pip install -r requirements.txt
|
|
|
|
# Go dependencies (wg-engine-api)
|
|
cd wg-engine-api
|
|
go mod download
|
|
```
|
|
|
|
### Jalankan WGRplane (Python/Flask)
|
|
|
|
```bash
|
|
python app.py
|
|
# atau dengan Gunicorn
|
|
gunicorn -w 4 -b 0.0.0.0:10086 app:app
|
|
```
|
|
|
|
### Jalankan wg-engine-api (Go)
|
|
|
|
```bash
|
|
cd wg-engine-api
|
|
go build -o wg-engine-api .
|
|
./wg-engine-api &
|
|
# atau install ke /usr/local/bin/
|
|
cp wg-engine-api /usr/local/bin/
|
|
```
|
|
|
|
---
|
|
|
|
## Testing
|
|
|
|
### Bats (Shell Scripts)
|
|
|
|
```bash
|
|
apt install bats
|
|
bats /tests/policy.bats
|
|
```
|
|
|
|
### Go Tests (wg-engine-api)
|
|
|
|
```bash
|
|
cd wg-engine-api
|
|
go test ./...
|
|
```
|
|
|
|
### Manual QA
|
|
|
|
```bash
|
|
# Test auth
|
|
curl -H "wg-rplane-datadunia: wrong" http://localhost:10087/api/policy
|
|
# Expected: 401 Unauthorized
|
|
|
|
# Test policy retrieval
|
|
curl -H "wg-rplane-datadunia: VALID_TOKEN" http://localhost:10087/api/policy
|
|
|
|
# Test policy update
|
|
curl -X POST -H "Content-Type: application/json" \
|
|
-H "wg-rplane-datadunia: VALID_TOKEN" \
|
|
-d '{"ip": "10.0.0.2", "access": ["1.1.1.1/32"]}' \
|
|
http://localhost:10087/api/policy
|
|
|
|
# Verify iptables rules
|
|
wg-policy-ctl rules
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
### Systemd Services
|
|
|
|
WGRplane menggunakan systemd untuk manajemen service:
|
|
|
|
```bash
|
|
# Copy systemd units
|
|
cp wg-policy.service wg-policy-health.timer wg-policy-health.service /etc/systemd/system/
|
|
|
|
# Enable & start
|
|
systemctl daemon-reload
|
|
systemctl enable wg-policy.service
|
|
systemctl enable wg-policy-health.timer
|
|
systemctl start wg-policy.service
|
|
systemctl start wg-policy-health.timer
|
|
```
|
|
|
|
### Install Script
|
|
|
|
Gunakan `install.sh` untuk instalasi otomatis:
|
|
|
|
```bash
|
|
sudo ./install.sh install
|
|
```
|
|
|
|
---
|
|
|
|
## Dokumentasi Tambahan
|
|
|
|
- **Plan File**: `plan.md` (detail rencana implementasi 20 tasks dalam 7 fase)
|
|
- **AGENTS.md**: Panduan untuk AI agent dalam mengembangkan proyek ini
|
|
- **Parent Repo**: `https://git.datadunia.com/hainzero/WGRplane.git` (submodule di `/app`)
|
|
|
|
---
|
|
|
|
## Lisensi
|
|
|
|
Proyek ini mengikuti lisensi dari WGDashboard (donaldzou/WGDashboard) dan modifikasi untuk integrasi policy.json API.
|