feat(vpn): unarr vpn command + report/arbitrate the WireGuard slot
Add `unarr vpn` (status/enable/disable, with `status --check`) to manage the managed WireGuard split-tunnel from the CLI. The daemon now reports its split-tunnel state (active, mode, exit server) to the web on register and on every sync, and sends its agent id when fetching the VPN config so the web can arbitrate the single WireGuard slot (1 VPNResellers account = 1 WG keypair = 1 concurrent connection): the first agent claims it; the rest are told to run OpenVPN on their own host (1 WireGuard + up to 9 OpenVPN = 10). `status --check` passes probe=1 so it validates provisioning without claiming the slot. VPNActive drops omitempty so a downed tunnel reaches the server and frees the slot. Bumps to 0.9.2 with CHANGELOG + README VPN section.
This commit is contained in:
parent
d0094e84bb
commit
5d44ee704c
11 changed files with 373 additions and 6 deletions
60
README.md
60
README.md
|
|
@ -171,6 +171,9 @@ unarr start
|
|||
| `unarr status` | Show daemon status and active downloads |
|
||||
| `unarr daemon install` | Install as system service (systemd/launchd) |
|
||||
| `unarr daemon uninstall` | Remove the system service |
|
||||
| `unarr vpn status` | Show managed-VPN config and live tunnel state |
|
||||
| `unarr vpn enable` | Turn the managed VPN on |
|
||||
| `unarr vpn disable` | Turn the managed VPN off |
|
||||
|
||||
### System & Diagnostics
|
||||
|
||||
|
|
@ -280,6 +283,53 @@ The daemon connects via WebSocket for instant task delivery, with automatic HTTP
|
|||
- Linux: `~/.config/systemd/user/unarr.service` (systemd)
|
||||
- macOS: `~/Library/LaunchAgents/com.torrentclaw.unarr.plist` (launchd)
|
||||
|
||||
## VPN
|
||||
|
||||
unarr can route your **downloads** through a managed WireGuard VPN, so peers and
|
||||
trackers see the VPN server's IP instead of yours. It runs entirely in userspace
|
||||
(wireguard-go + a gVisor netstack) — **no root, no `wg-quick`, no changes to your
|
||||
OS routing table**.
|
||||
|
||||
Requires a **PRO+ plan with the VPN add-on**. Set it up at
|
||||
[torrentclaw.com/vpn](https://torrentclaw.com/vpn).
|
||||
|
||||
```bash
|
||||
# Turn it on (writes [downloads.vpn] enabled = true to your config)
|
||||
unarr vpn enable
|
||||
|
||||
# Restart the daemon so it brings the tunnel up at startup
|
||||
unarr daemon restart # or: unarr start (if not installed as a service)
|
||||
|
||||
# Check it's working — shows the exit server when the tunnel is up
|
||||
unarr vpn status
|
||||
|
||||
# Verify your account is provisioned (queries the API)
|
||||
unarr vpn status --check
|
||||
|
||||
# Turn it off again
|
||||
unarr vpn disable
|
||||
```
|
||||
|
||||
**Split-tunnel — read this:** only the torrent client's traffic goes through the
|
||||
VPN. Your browser, `curl`, and every other app keep using your **real IP** — that
|
||||
is by design. To check the VPN is working, look at `unarr vpn status` (or the
|
||||
peer/announce IP), **not** your browser's "what's my IP". To protect your other
|
||||
devices (phone, laptop), use the **OpenVPN credentials** from your profile — those
|
||||
support ~10 concurrent devices and do **not** share the agent's WireGuard slot.
|
||||
|
||||
**When does it fetch the config?** Once, at daemon startup. There's no periodic
|
||||
refresh — after changing your exit server in the web panel or re-provisioning,
|
||||
restart the daemon to pick it up. If the fetch fails the daemon logs a `[vpn]`
|
||||
line and downloads in the clear (never refuses to run).
|
||||
|
||||
**Self-hosted / personal VPN:** instead of the managed config, point unarr at a
|
||||
local WireGuard `.conf`:
|
||||
|
||||
```toml
|
||||
[downloads.vpn]
|
||||
config_file = "/path/to/wg.conf" # takes precedence over `enabled`
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
|
||||
```bash
|
||||
|
|
@ -438,6 +488,16 @@ If `transcode.enabled = true` but `ffmpeg` / `ffprobe` aren't on PATH, the
|
|||
daemon logs a warning at startup and HLS sessions are rejected at runtime
|
||||
with a clear error — install ffmpeg or set `enabled = false`.
|
||||
|
||||
#### `[downloads.vpn]`
|
||||
|
||||
| Key | Type | Default | Notes |
|
||||
|-----|------|---------|-------|
|
||||
| `enabled` | bool | `false` | Managed VPN: at startup the daemon fetches a WireGuard config from your account and split-tunnels torrent traffic through it. Needs a PRO+ plan with the VPN add-on. Toggle with `unarr vpn enable` / `disable`. |
|
||||
| `config_file` | string | `""` | Self-hosted / personal VPN: path to a local WireGuard `.conf`. **Takes precedence over `enabled`** — when set, the daemon uses this file and never calls the API. |
|
||||
|
||||
See the [VPN](#vpn) section above for how it works (split-tunnel, no root) and
|
||||
how to protect your other devices.
|
||||
|
||||
### Environment variables
|
||||
|
||||
Environment variables override config file values:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue