32 lines
1.8 KiB
Markdown
32 lines
1.8 KiB
Markdown
# elmprodvpn (Selective VPN Dashboard)
|
|
|
|
Local Linux toolset (Go API + Qt GUI) to manage selective VPN routing and DNS wildcarding for AdGuard VPN / SmartDNS.
|
|
|
|
Key features:
|
|
- Selective routes via nftables sets (`agvpn4` / `agvpn_dyn4`) + policy routing table (`agvpn`).
|
|
- DNS upstream management (default + meta) and optional SmartDNS wildcard list.
|
|
- Traffic modes: Selective (fwmark `0x66`), Full tunnel, Direct.
|
|
- Auto-local bypass to keep LAN/docker reachable in Full tunnel.
|
|
- Policy overrides: force VPN/Direct by source subnet, UID, or systemd cgroup.
|
|
- Runtime per-app routing: launch an app in a `systemd --user` unit and apply a temporary cgroup-based mark (VPN/Direct).
|
|
- Saved app profiles + desktop shortcuts: one-click launch for a profile (uses `selective-vpn-gui/svpn_run_profile.py`).
|
|
|
|
Repo layout:
|
|
- `selective-vpn-api/` - Go backend API (localhost, default `127.0.0.1:8080`).
|
|
- `selective-vpn-gui/` - PySide6 GUI (`vpn_dashboard_qt.py`).
|
|
- `selective-vpn-gui/svpn_run_profile.py` - headless launcher used by profile shortcuts.
|
|
- `selective-vpn-web/` - Vite + React + TypeScript web prototype foundation (SPA, read-only at current stage).
|
|
|
|
Requirements (high level):
|
|
- Linux with `systemd`, `nftables`, `iproute2`, cgroup v2.
|
|
- Python 3 + PySide6 + `requests` (GUI).
|
|
- Root privileges for routing/nftables changes (run API as a privileged service).
|
|
|
|
Quick traffic checklist (production-safe):
|
|
- Start from `Selective` mode for mixed host/server workloads.
|
|
- For `Full tunnel`, open **Advanced bypass** in Traffic basics and usually enable:
|
|
- `Auto-local bypass` (LAN/container reachability),
|
|
- `Ingress-reply bypass` (keep inbound/public services reachable).
|
|
- Verify mode health is `OK` and ingress diagnostics are active when ingress bypass is enabled.
|
|
- If something breaks, use **Reset bypass** (advanced bypass dialog) or temporarily switch back to `Selective`.
|