Selective VPN privacy¶
For the distinction between configuring the dependency, changing its source and choosing security tradeoffs, read integration ownership.
The default confines qBittorrent. Sonarr, Radarr, Lidarr, Bazarr, Seerr and media players keep ordinary host networking. This preserves discovery, playback and local application connections. Servarr recommends restricting VPN use to the torrent client and using an indexer proxy when selected indexers need it. Servarr VPN guidance
| Traffic | Default | Reason |
|---|---|---|
| BitTorrent peers and trackers | Confined | Hide direct peer/tracker connections from the ISP and use the VPN address |
| SABnzbd/NZBGet | Host, VPN optional | Properly verified NNTPS encrypts content; VPN additionally hides the provider destination from the ISP |
| Prowlarr | Host | It initiates local app sync; use a tagged indexer proxy for selected outbound searches |
| Arr managers and request portal | Host | Local app access and metadata calls do not require the download client's route |
| Jellyfin/Plex/music/books | Host | Local playback and discovery need ordinary host networking |
| Backups, monitoring and desktop | Host | Use their own TLS/SSH and host access policy |
TLS protects payload contents. An ISP may still see destination IPs, timing and volume, and DNS unless separately encrypted. A VPN shifts that visibility and trust to its provider; it does not establish anonymity. Mullvad's VPN explanation
Mullvad does not provide inbound port forwarding. Keep
homelab.apps.qbittorrent.vpn.allowInbound = false. Outbound peers can work,
but inbound reachability and seeding performance are limited. Opening a local
port does not restore provider forwarding.
Mullvad port-forwarding removal
The namespace interface¶
The module uses strict resolver policy and a tunnel-only route through vpn-confinement. IPv6 is disabled inside the namespace unless a tunnel IPv6 address is supplied. Literal endpoints avoid dependence on host DNS. Runtime keys remain outside the store.
homelab.vpn.namespace.bindAddress is the derived namespace address. A
downloader UI listens there; publishToHost allows the host to connect. It is
not a localhost proxy or LAN listener. Obtain the address through Nix evaluation
or inspect ip -n vpnapps address. Use that address and the configured port
when adding qBittorrent to Sonarr/Radarr. API credentials remain required.
Confined Prowlarr cannot initiate host/LAN app-sync connections. The optional
homelab.apps.prowlarr.vpn.enable is for a deliberately co-located namespace
stack, not the standard profile. Never widen host egress just to make a sync
button pass. Enable homelab.indexerProxy with a runtime passwordFile for an
authenticated SOCKS5 proxy. In Prowlarr, declare a SOCKS5 indexer proxy at the
namespace address and configured port, then apply its tag only to indexers that
need it. Use socks5h in clients that expose a proxy URL so hostname resolution
also stays inside the confined namespace. The service never publishes to the
LAN and disables request logging because destinations can contain indexer keys.
The VPN VM verifies authentication, tunnel-side DNS, LAN refusal, outage
failure and recovery.
For advanced namespaces use upstream services.vpnConfinement and
systemd.services.<name>.vpn options directly. The homelab adapter keeps the
common single-provider setup small.
Upstream options and threat model