{"id":48837530,"url":"https://github.com/ddmoney420/torrent-vpn-stack","last_synced_at":"2026-04-15T00:05:00.831Z","repository":{"id":334744450,"uuid":"1127466796","full_name":"ddmoney420/torrent-vpn-stack","owner":"ddmoney420","description":"Containerized torrent downloader behind VPN using Gluetun + qBittorrent for macOS (Apple Silicon), Windows and Linux","archived":false,"fork":false,"pushed_at":"2026-01-07T03:57:08.000Z","size":14317,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-27T04:36:06.723Z","etag":null,"topics":["docker","docker-compose","gluetun","linux","macos","privacy","qbittorrent","torrent","vpn","windows","wireguard"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ddmoney420.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-04T00:06:25.000Z","updated_at":"2026-01-10T06:36:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ddmoney420/torrent-vpn-stack","commit_stats":null,"previous_names":["ddmoney420/torrent-vpn-stack"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ddmoney420/torrent-vpn-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddmoney420%2Ftorrent-vpn-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddmoney420%2Ftorrent-vpn-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddmoney420%2Ftorrent-vpn-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddmoney420%2Ftorrent-vpn-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ddmoney420","download_url":"https://codeload.github.com/ddmoney420/torrent-vpn-stack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddmoney420%2Ftorrent-vpn-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31820370,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","gluetun","linux","macos","privacy","qbittorrent","torrent","vpn","windows","wireguard"],"created_at":"2026-04-15T00:04:59.726Z","updated_at":"2026-04-15T00:05:00.811Z","avatar_url":"https://github.com/ddmoney420.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Torrent VPN Stack\n\n[![CI](https://github.com/ddmoney420/torrent-vpn-stack/workflows/CI/badge.svg)](https://github.com/ddmoney420/torrent-vpn-stack/actions)\n[![GitHub release](https://img.shields.io/github/v/release/ddmoney420/torrent-vpn-stack)](https://github.com/ddmoney420/torrent-vpn-stack/releases)\n[![GitHub stars](https://img.shields.io/github/stars/ddmoney420/torrent-vpn-stack)](https://github.com/ddmoney420/torrent-vpn-stack/stargazers)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-blue)](https://github.com/ddmoney420/torrent-vpn-stack)\n\n[![Homebrew](https://img.shields.io/badge/Homebrew-available-orange?logo=homebrew)](https://github.com/ddmoney420/homebrew-torrent-vpn-stack)\n[![AUR](https://img.shields.io/badge/AUR-available-blue?logo=archlinux)](https://aur.archlinux.org/packages/torrent-vpn-stack)\n[![Chocolatey](https://img.shields.io/chocolatey/v/torrent-vpn-stack?label=Chocolatey\u0026logo=chocolatey)](https://community.chocolatey.org/packages/torrent-vpn-stack)\n\n\u003e **Cross-platform containerized torrent downloader behind VPN using Gluetun + qBittorrent**\n\nA production-ready, security-hardened Docker Compose stack that routes all torrent traffic through a VPN with leak protection, kill switch, and web UI access from your local network.\n\n**Supports Windows 10/11, Linux, and macOS (including Apple Silicon M1/M2/M3).**\n\n---\n\n## ⚡ Quick Start\n\n**Want to get started in 5 minutes?** See the **[Quick Start Guide](QUICKSTART.md)** for express installation and setup.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📦 One-Command Installation\u003c/strong\u003e\u003c/summary\u003e\n\n**Linux (Ubuntu, Debian, Fedora, etc.) - Homebrew:**\n```bash\nbrew tap ddmoney420/torrent-vpn-stack \u0026\u0026 brew install torrent-vpn-stack\n```\n\n**Arch Linux / Manjaro - AUR:**\n```bash\nyay -S torrent-vpn-stack\n```\n\n**macOS (Intel \u0026 Apple Silicon) - Homebrew:**\n```bash\nbrew tap ddmoney420/torrent-vpn-stack \u0026\u0026 brew install torrent-vpn-stack\n```\n\n**Windows - Chocolatey (Pending Approval):**\n```powershell\nchoco install torrent-vpn-stack\n```\n\nThen follow the [Quick Start Guide](QUICKSTART.md) for setup.\n\u003c/details\u003e\n\n---\n\n## Features\n\n### Security \u0026 Privacy\n- ✅ **VPN Kill Switch** - All traffic routed through VPN; no leaks if VPN drops\n- ✅ **DNS Leak Protection** - DNS-over-TLS (DoT) to Cloudflare prevents DNS leaks\n- ✅ **IPv6 Disabled** - Prevents IPv6 leaks (most VPNs don't support IPv6)\n- ✅ **Firewall Rules** - Strict firewall allows only VPN and local network access\n- ✅ **No Root** - qBittorrent runs as unprivileged user (configurable UID/GID)\n- ✅ **Automatic Health Checks** - Monitors VPN connection and restarts if unhealthy\n\n### Usability\n- ✅ **Web UI Access** - qBittorrent accessible from Mac and LAN devices\n- ✅ **Single .env Configuration** - All settings in one file\n- ✅ **Persistent Storage** - Config and downloads survive restarts\n- ✅ **Automated Port Forwarding** - Syncs VPN forwarded port to qBittorrent (if supported)\n- ✅ **Setup Wizard** - Interactive script for easy configuration\n- ✅ **Verification Tools** - Scripts to check VPN connection and detect leaks\n\n### Compatibility\n- ✅ **Cross-Platform** - Windows 10/11, Linux (Ubuntu, Debian, Fedora, Arch), macOS (Intel \u0026 Apple Silicon M1/M2/M3)\n- ✅ **Multiple VPN Providers** - Supports Mullvad, NordVPN, ProtonVPN, Surfshark, PIA, and [many more](https://github.com/qdm12/gluetun-wiki/tree/main/setup/providers)\n- ✅ **WireGuard \u0026 OpenVPN** - Modern WireGuard (recommended) or classic OpenVPN\n- ✅ **Automated Backups** - Native automation for all platforms (Task Scheduler, systemd/cron, launchd)\n\n## Table of Contents\n\n**New User?** Start with the **[⚡ Quick Start Guide](QUICKSTART.md)**\n\n- [Prerequisites](#prerequisites)\n- [VPN Provider Selection](#vpn-provider-selection)\n- [Installation](#installation)\n  - [Package Managers (Recommended)](#package-managers-recommended)\n  - [Manual Installation](#manual-installation-git-clone)\n- [Quick Start (Inline)](#quick-start)\n- [Detailed Setup](#detailed-setup)\n- [Configuration](#configuration)\n- [Usage](#usage)\n  - [Starting and Stopping](#starting-and-stopping)\n  - [Accessing from LAN](#accessing-from-lan)\n  - [Backups \u0026 Disaster Recovery](#backups--disaster-recovery)\n- [Security Notes](#security-notes)\n- [Troubleshooting](#troubleshooting)\n- [FAQ](#faq)\n- [Architecture](#architecture)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Prerequisites\n\n### Required\n- **Operating System:** Windows 10/11, Linux (Ubuntu 20.04+, Debian 11+, Fedora 35+, Arch), or macOS 11+\n- **Docker:** Docker Desktop (Windows/macOS) or Docker Engine (Linux)\n- **Docker Compose:** v2.0+ (included with Docker Desktop)\n- **VPN Subscription:** One of the [supported providers](https://github.com/qdm12/gluetun-wiki/tree/main/setup/providers)\n- **VPN Credentials:** WireGuard config or OpenVPN username/password\n\n### Recommended\n- 8 GB RAM (4 GB minimum)\n- 20 GB free disk space (more for downloads)\n- Stable internet connection\n\n### Platform-Specific Installation Guides\n\nChoose your platform for detailed installation instructions:\n\n- **[Windows Installation Guide](docs/install-windows.md)** - WSL 2, Git Bash, PowerShell automation\n- **[Linux Installation Guide](docs/install-linux.md)** - Ubuntu, Debian, Fedora, Arch, systemd/cron\n- **[macOS Installation Guide](docs/install-macos.md)** - Intel and Apple Silicon, launchd automation\n\n## VPN Provider Selection\n\n**Choosing the right VPN provider is critical for torrent performance.**\n\n### ✅ Recommended for Torrenting (with Port Forwarding)\n\n| Provider | Speed | Privacy | Price/Month | Notes |\n|----------|-------|---------|-------------|-------|\n| **ProtonVPN Plus** | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | $4.99+ | Swiss privacy, port forwarding on Plus+ plans |\n| **Private Internet Access** | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | $2.19+ | Budget-friendly, port forwarding supported |\n\n### ⚠️ Not Recommended for Torrenting (no Port Forwarding)\n\n| Provider | Why Not Recommended |\n|----------|---------------------|\n| **Mullvad** | Port forwarding discontinued July 2023, excellent privacy but limited torrent performance |\n| **NordVPN** | No port forwarding = 60-70% fewer peers, poor seeding |\n| **Surfshark** | No port forwarding, limited torrent performance |\n| **ExpressVPN** | No port forwarding, expensive, no WireGuard |\n\n**Port forwarding allows incoming connections = 2-3x more peers = faster downloads and better seeding.**\n\n### Quick Comparison\n\n- **Best Performance:** ProtonVPN Plus (port forwarding + WireGuard + Swiss privacy)\n- **Best Privacy:** Mullvad (no port forwarding since July 2023) or ProtonVPN\n- **Best Budget:** PIA ($2.19/month with port forwarding)\n- **Already Have Mullvad/NordVPN?** Works, but expect slower speeds without port forwarding\n\n**📖 Full comparison:** [docs/provider-comparison.md](docs/provider-comparison.md)\n\n**⚡ Performance tuning:** [docs/performance-tuning.md](docs/performance-tuning.md)\n\n**🔧 Provider examples:** See `examples/providers/` for ready-to-use configurations\n\n### Custom/Unsupported VPN Providers\n\nIf your VPN provider is not natively supported by Gluetun, you can use custom WireGuard mode:\n\n```bash\n# In .env, use:\nVPN_SERVICE_PROVIDER=custom\nVPN_TYPE=wireguard\n\n# Required fields from your provider's WireGuard config:\nWIREGUARD_PRIVATE_KEY=\u003cfrom [Interface] PrivateKey\u003e\nWIREGUARD_ADDRESSES=\u003cfrom [Interface] Address\u003e\nWIREGUARD_PUBLIC_KEY=\u003cfrom [Peer] PublicKey\u003e\nWIREGUARD_ENDPOINT_IP=\u003cfrom [Peer] Endpoint, IP only\u003e\nWIREGUARD_ENDPOINT_PORT=\u003cfrom [Peer] Endpoint, port only\u003e\n```\n\n**📄 Full example:** See `examples/providers/custom.env.example`\n\n## Installation\n\nChoose your preferred installation method:\n\n### Package Managers (Recommended)\n\nInstall with a single command using your platform's package manager:\n\n#### Linux (All Distributions) - Homebrew ✅\n\n**Supports:** Ubuntu, Debian, Fedora, openSUSE, Rocky Linux, AlmaLinux, and more!\n\n```bash\n# Option 1: Install from tap\nbrew tap ddmoney420/torrent-vpn-stack\nbrew install torrent-vpn-stack\n\n# Option 2: Install directly\nbrew install ddmoney420/torrent-vpn-stack/torrent-vpn-stack\n\n# Quick start after installation\ncd $(brew --prefix)/opt/torrent-vpn-stack\ntorrent-vpn-setup\ndocker compose up -d\n```\n\n**📖 [Homebrew Installation Guide](packaging/homebrew/README.md)**\n\n#### Arch Linux / Manjaro - AUR ✅\n\n**Arch users can use AUR instead of Homebrew:**\n\n```bash\n# Using yay\nyay -S torrent-vpn-stack\n\n# Using paru\nparu -S torrent-vpn-stack\n\n# Quick start after installation\ncd /usr/share/torrent-vpn-stack\ntorrent-vpn-setup\ndocker compose up -d\n```\n\n**📖 [AUR Installation Guide](packaging/aur/README.md)**\n\n#### macOS (Intel \u0026 Apple Silicon) - Homebrew ✅\n\n```bash\n# Install from tap\nbrew tap ddmoney420/torrent-vpn-stack\nbrew install torrent-vpn-stack\n\n# Quick start after installation\ncd $(brew --prefix)/opt/torrent-vpn-stack\ntorrent-vpn-setup\ndocker compose up -d\n```\n\n**📖 [Homebrew Installation Guide](packaging/homebrew/README.md)**\n\n#### Windows - Chocolatey 🔄\n\n*Submitted - Pending Moderation*\n\n```powershell\n# Will be available as (pending approval):\nchoco install torrent-vpn-stack\n\n# Quick start after installation\ncd $env:ProgramData\\torrent-vpn-stack\ntorrent-vpn-setup\ndocker compose up -d\n```\n\n**📖 [Chocolatey Installation Guide](packaging/chocolatey/README.md)**\n**Status**: Resubmitted with fixes - pending moderation (24-48 hours)\n**Note**: Fixed Docker dependency issue, now checks for Docker in install script\n\n### Manual Installation (Git Clone)\n\nIf you prefer manual installation or your platform doesn't have a package manager:\n\n```bash\n# Clone the repository\ngit clone https://github.com/ddmoney420/torrent-vpn-stack.git\ncd torrent-vpn-stack\n\n# Run the setup wizard (recommended for first-time setup)\n./scripts/setup.sh\n\n# Or manually copy and edit the configuration\ncp .env.example .env\nnano .env  # Edit with your VPN credentials\n```\n\n## Quick Start\n\nThis guide assumes you've already installed via one of the methods above. If using manual installation, start here:\n\n### 1. Get VPN Credentials\n\n**For WireGuard (Recommended):**\n- **Mullvad**: [Account → WireGuard Config](https://mullvad.net/en/account/wireguard-config)\n- **ProtonVPN**: [Account → Downloads → WireGuard](https://account.protonvpn.com/downloads)\n- **NordVPN**: [Dashboard → Manual Setup → WireGuard](https://my.nordaccount.com/dashboard/nordvpn/)\n\n**For OpenVPN:**\n- Use your VPN account username and password\n\n### 2. Run Setup Wizard\n\n```bash\n# Package manager installations\ntorrent-vpn-setup  # Available system-wide\n\n# Manual installation\n./scripts/setup.sh\n```\n\nThe interactive wizard will guide you through:\n- VPN provider selection\n- VPN credentials configuration\n- Network settings\n- Downloads path\n- Security settings\n\n### 3. Start the Stack\n\n```bash\n# Start all services in detached mode\ndocker compose up -d\n\n# Check logs to verify VPN connection\ndocker compose logs -f gluetun\n\n# Look for: \"You are running on the bleeding edge of latest\"\n# and \"ip getter: 1.2.3.4\" (your VPN IP, not your real IP)\n```\n\n### 4. Access qBittorrent\n\nOpen http://localhost:8080 (or your configured `QBITTORRENT_WEBUI_PORT`)\n\n**Default Credentials:**\n- Username: `admin`\n- Password: `adminadmin` (CHANGE THIS IMMEDIATELY in Settings → Web UI)\n\n### 5. Verify VPN \u0026 Leak Protection\n\n```bash\n# Package manager installations\ntorrent-vpn-verify       # Verify VPN connection\ntorrent-vpn-check-leaks  # Check for DNS/IP leaks\n\n# Manual installation\n./scripts/verify-vpn.sh\n./scripts/check-leaks.sh\n```\n\n## Detailed Setup\n\n### Step 1: Environment Configuration\n\nEdit `.env` and configure the following critical settings:\n\n#### VPN Provider (Required)\n```env\nVPN_SERVICE_PROVIDER=mullvad  # Your VPN provider\nVPN_TYPE=wireguard            # wireguard or openvpn\n```\n\n#### WireGuard Credentials (Required if using WireGuard)\n```env\nWIREGUARD_PRIVATE_KEY=your_private_key_here\nWIREGUARD_ADDRESSES=10.2.0.2/32\n```\n\n#### Downloads Path (Required)\n```env\nDOWNLOADS_PATH=~/Downloads/torrents  # Where files will be saved\n```\n\n#### Network Configuration (Required)\n```env\nLOCAL_SUBNET=192.168.1.0/24  # Your home network subnet\n```\n\nFind your subnet:\n```bash\n# macOS\nipconfig getifaddr en0 | awk -F. '{print $1\".\"$2\".\"$3\".0/24\"}'\n\n# Or check your router's DHCP range\n```\n\n#### qBittorrent Security (Required)\n```env\nQBITTORRENT_PASS=your_strong_password_here  # CHANGE FROM DEFAULT!\n```\n\n### Step 2: File Permissions (macOS Specific)\n\nGet your user and group IDs:\n```bash\nid -u  # User ID (PUID)\nid -g  # Group ID (PGID)\n```\n\nUpdate in `.env`:\n```env\nPUID=501   # Your user ID\nPGID=20    # Your group ID\n```\n\n### Step 3: Create Downloads Directory\n\n```bash\nmkdir -p ~/Downloads/torrents\n```\n\n### Step 4: Port Forwarding (Optional)\n\nPort forwarding significantly improves torrent performance by allowing incoming peer connections.\n\n**Supported Providers:** ProtonVPN (Plus+), Private Internet Access (PIA)\n\n#### Enable Port Forwarding\n\nEdit `.env`:\n\n```env\nVPN_PORT_FORWARDING=on\n\n# For ProtonVPN only, also set:\nVPN_PORT_FORWARDING_PROVIDER=protonvpn\n\n# Optional: Adjust sync interval (default: 300 seconds)\nPORT_SYNC_INTERVAL=300\n```\n\n#### Start with Port Forwarding Profile\n\nThe port sync helper runs as a Docker Compose profile. Start the stack with:\n\n```bash\ndocker compose --profile port-forwarding up -d\n```\n\nThe `gluetun-qbittorrent-port-manager` service will automatically sync the forwarded port from Gluetun to qBittorrent whenever it changes.\n\n**📖 For detailed setup, verification, and troubleshooting, see [docs/port-forwarding.md](docs/port-forwarding.md)**\n\n### Step 5: Start Services\n\n```bash\n# Start in detached mode\ndocker-compose up -d\n\n# Check status\ndocker-compose ps\n\n# View logs\ndocker-compose logs -f\n\n# View only VPN logs\ndocker-compose logs -f gluetun\n```\n\n### Step 6: Initial qBittorrent Setup\n\n1. Open http://localhost:8080\n2. Login with default credentials (admin/adminadmin)\n3. **Immediately change password**: Settings → Web UI → Authentication\n4. **Configure downloads path**: Settings → Downloads → Default Save Path: `/downloads`\n5. **Disable UPnP/NAT-PMP**: Settings → Connection → uncheck both (VPN handles this)\n6. **Set connection port**: Settings → Connection → Listening Port: `6881` (or your configured port)\n\n### Step 7: Verify Everything Works\n\n```bash\n# Run all verification checks\n./scripts/verify-vpn.sh\n\n# Expected output:\n# ✅ VPN container is running\n# ✅ VPN IP detected: 1.2.3.4 (not your real IP)\n# ✅ DNS leak test passed\n# ✅ qBittorrent is accessible\n# ✅ No IPv6 leaks detected\n```\n\n## Configuration\n\n### Environment Variables Reference\n\nSee [.env.example](.env.example) for full documentation of all variables.\n\n**Critical Settings:**\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `VPN_SERVICE_PROVIDER` | Yes | - | Your VPN provider (mullvad, nordvpn, protonvpn, etc.) |\n| `VPN_TYPE` | Yes | wireguard | Protocol: `wireguard` or `openvpn` |\n| `WIREGUARD_PRIVATE_KEY` | Yes* | - | Your WireGuard private key (*if using WireGuard) |\n| `WIREGUARD_ADDRESSES` | Yes* | - | Your WireGuard IP address (*if using WireGuard) |\n| `DOWNLOADS_PATH` | Yes | ./downloads | Local path for downloaded files |\n| `LOCAL_SUBNET` | Yes | 192.168.1.0/24 | Your home network subnet for LAN access |\n| `QBITTORRENT_PASS` | Yes | adminadmin | Web UI password (CHANGE THIS!) |\n\n### Port Configuration\n\nThe stack exposes these ports on your Mac:\n\n| Port | Service | Purpose |\n|------|---------|---------|\n| 8080 | qBittorrent Web UI | Browser access to qBittorrent |\n| 6881 | qBittorrent Connections | Default torrent peer connections (TCP/UDP) |\n| 8000 | Gluetun Control | Health checks and port forwarding info (optional) |\n| *Dynamic* | VPN Port Forwarding | Auto-assigned by VPN provider (if enabled) |\n\n**Note:** All ports are defined on the `gluetun` service because qBittorrent uses Gluetun's network stack (`network_mode: service:gluetun`). This is intentional for the kill switch.\n\n**Port Forwarding:** When enabled, your VPN provider assigns a dynamic port (e.g., 51234) that automatically syncs to qBittorrent. See [docs/port-forwarding.md](docs/port-forwarding.md) for setup.\n\n### Volume Management\n\n**Persistent Volumes:**\n- `gluetun-config` - VPN configuration and state\n- `qbittorrent-config` - qBittorrent settings and torrent metadata\n- `${DOWNLOADS_PATH}` - Downloaded files (bind mount to your Mac)\n\n**Backup Important Data:**\n```bash\n# Backup qBittorrent config (includes torrent list and settings)\ndocker run --rm -v torrent-vpn-stack_qbittorrent-config:/config -v $(pwd):/backup alpine tar czf /backup/qbittorrent-backup.tar.gz -C /config .\n\n# Restore from backup\ndocker run --rm -v torrent-vpn-stack_qbittorrent-config:/config -v $(pwd):/backup alpine sh -c \"cd /config \u0026\u0026 tar xzf /backup/qbittorrent-backup.tar.gz\"\n```\n\n## Usage\n\n### Starting and Stopping\n\n```bash\n# Start all services\ndocker-compose up -d\n\n# Stop all services (keeps data)\ndocker-compose down\n\n# Stop and remove volumes (DELETES ALL DATA)\ndocker-compose down -v\n\n# Restart specific service\ndocker-compose restart gluetun\ndocker-compose restart qbittorrent\n\n# View logs\ndocker-compose logs -f\ndocker-compose logs -f gluetun     # VPN logs only\ndocker-compose logs -f qbittorrent  # qBittorrent logs only\n```\n\n### Accessing from LAN\n\nTo access qBittorrent from other devices on your network:\n\n1. Find your Mac's IP: `ipconfig getifaddr en0`\n2. Open `http://YOUR_MAC_IP:8080` from another device\n3. Ensure your `LOCAL_SUBNET` in `.env` includes that device's IP\n\n**Security Warning:** Anyone on your LAN can access qBittorrent's Web UI. Use a strong password and consider IP allowlisting in qBittorrent's settings.\n\n### Updating\n\n```bash\n# Pull latest images\ndocker-compose pull\n\n# Restart with new images\ndocker-compose up -d\n\n# Clean up old images\ndocker image prune\n```\n\n### Monitoring \u0026 Observability\n\n#### Quick Health Checks\n\n**Check VPN Connection:**\n```bash\n# Get current VPN IP\ndocker exec gluetun wget -qO- https://api.ipify.org\n# Should return your VPN IP, NOT your real IP\n\n# Check Gluetun health\ncurl http://localhost:8000/v1/publicip/ip\n```\n\n**Check qBittorrent Status:**\n```bash\n# Via Web UI: http://localhost:8080\n# Or via API:\ncurl -u admin:your_password http://localhost:8080/api/v2/app/version\n```\n\n**View Port Forwarding (if enabled):**\n```bash\ncurl http://localhost:8000/v1/openvpn/portforwarded\n```\n\n#### Full Monitoring Stack (Optional)\n\nEnable comprehensive monitoring with Prometheus + Grafana:\n\n```bash\n# Start stack with monitoring enabled\ndocker compose --profile monitoring up -d\n```\n\n**Features:**\n- **Grafana Dashboards**: Visual metrics at http://localhost:3000\n  - System: Container CPU, memory, network usage\n  - qBittorrent: Download/upload speeds, torrents, peers, ratio\n  - VPN: Connection status, uptime, throughput\n- **Prometheus**: Metrics collection at http://localhost:9090\n- **30-day retention**: Historical trend analysis\n- **Real-time updates**: Auto-refresh every 10 seconds\n\n**Access:**\n- Grafana: http://localhost:3000 (login: admin/admin)\n- Prometheus: http://localhost:9090\n\n**📖 For detailed setup and dashboard guide, see [docs/monitoring.md](docs/monitoring.md)**\n\n### Backups \u0026 Disaster Recovery\n\nProtect your configuration with automated or manual backups:\n\n```bash\n# Manual backup\n./scripts/backup.sh\n\n# Setup automated daily backups (macOS)\n./scripts/setup-backup-automation.sh\n```\n\n**Features:**\n- Backs up qBittorrent config, Gluetun config, and optionally monitoring data\n- Automated daily backups via macOS launchd\n- 7-day retention by default (configurable)\n- Easy restore with interactive selection\n\n**Restore from backup:**\n```bash\n# List available backups\n./scripts/restore.sh --list\n\n# Interactive restore\n./scripts/restore.sh\n```\n\n**📖 For complete backup guide, see [docs/backups.md](docs/backups.md)**\n\n## Security Notes\n\n### Kill Switch Mechanism\n\nThe kill switch works through Docker's network isolation:\n\n1. qBittorrent uses `network_mode: service:gluetun`\n2. All qBittorrent traffic **must** go through Gluetun's network stack\n3. If Gluetun's VPN drops, qBittorrent has **no route to the internet**\n4. Gluetun's firewall blocks all non-VPN traffic\n\n**Test the Kill Switch:**\n```bash\n# Stop VPN while qBittorrent is running\ndocker-compose stop gluetun\n\n# Try to access internet from qBittorrent container (should fail)\ndocker exec qbittorrent wget -T 5 -O- https://api.ipify.org\n# Expected: Connection timeout/failure\n```\n\n### DNS Leak Protection\n\n**Layers of Protection:**\n1. **DNS-over-TLS (DoT)** - Gluetun uses encrypted DNS to Cloudflare\n2. **Custom DNS servers** - Bypasses your ISP's DNS\n3. **IPv6 disabled** - Prevents IPv6 DNS leaks\n4. **Firewall rules** - Blocks DNS queries outside VPN tunnel\n\n**Verify DNS:**\n```bash\n./scripts/check-leaks.sh\n# Or manually:\ndocker exec qbittorrent nslookup google.com\n# Should resolve through Cloudflare (1.1.1.1) or VPN DNS\n```\n\n### IPv6 Leak Protection\n\nIPv6 is **disabled** by default because:\n- Most VPN providers don't support IPv6\n- IPv6 can leak your real location\n- Torrents don't require IPv6\n\nIf you need IPv6 (rare), ensure your VPN supports it first.\n\n### Firewall Rules\n\nGluetun's firewall allows:\n- ✅ VPN traffic\n- ✅ Local subnet (your home network)\n- ✅ Incoming torrent connections on configured port\n- ❌ Everything else (kill switch)\n\n**Firewall is configured via:**\n```env\nFIREWALL_OUTBOUND_SUBNETS=192.168.1.0/24  # Your local network\nFIREWALL_VPN_INPUT_PORTS=6881              # Torrent port\n```\n\n### Least Privilege\n\n- qBittorrent runs as non-root user (PUID/PGID)\n- Gluetun requires `NET_ADMIN` capability (minimum for VPN)\n- No unnecessary capabilities granted\n- Read-only root filesystem where possible\n\n### Credential Storage\n\n**CRITICAL:** Never commit `.env` to version control!\n\n```.gitignore\n.env\n*.env\n!.env.example\n```\n\n**Secure Your `.env`:**\n```bash\nchmod 600 .env  # Only you can read/write\n```\n\n## Troubleshooting\n\n### VPN Won't Connect\n\n**Symptoms:** Gluetun logs show connection errors, timeouts, or \"context canceled\"\n\n**Solutions:**\n1. **Verify credentials:**\n   ```bash\n   grep WIREGUARD_PRIVATE_KEY .env  # Should not be empty\n   ```\n2. **Check VPN provider status** - Visit your provider's status page\n3. **Try different server:**\n   ```env\n   SERVER_COUNTRIES=Sweden  # Or another country\n   ```\n4. **Enable debug logging:**\n   ```env\n   LOG_LEVEL=debug\n   ```\n   Then check logs: `docker-compose logs gluetun | grep -i error`\n\n5. **Verify Docker has internet:**\n   ```bash\n   docker run --rm alpine wget -O- https://cloudflare.com\n   ```\n\n### Custom WireGuard Provider Issues\n\n**Symptoms:** Using `VPN_SERVICE_PROVIDER=custom` but VPN won't connect\n\n**Solutions:**\n1. **\"endpoint IP is not set\" error:**\n   ```env\n   # All fields are REQUIRED for custom provider:\n   WIREGUARD_ENDPOINT_IP=1.2.3.4\n   WIREGUARD_ENDPOINT_PORT=51820\n   ```\n\n2. **\"private key is not valid\" error:**\n   - Check for copy/paste errors (extra spaces, missing characters)\n   - Ensure the full key is copied (usually ends with `=`)\n\n3. **Connection timeout (no internet after connect):**\n   - Verify `WIREGUARD_ADDRESSES` matches your provider's config exactly\n   - Verify `WIREGUARD_PUBLIC_KEY` is the server's public key (from `[Peer]` section)\n   - Test endpoint is reachable: `nc -vz -u \u003cendpoint_ip\u003e 51820`\n\n4. **\"endpoint port is set\" error with built-in provider:**\n   - Remove or leave empty: `WIREGUARD_ENDPOINT_PORT=`\n   - Built-in providers auto-detect the port\n\n### qBittorrent Shows \"Connection Refused\"\n\n**Symptoms:** Can't access http://localhost:8080 or qBittorrent won't start\n\n**Solutions:**\n1. **Wait for Gluetun to be healthy:**\n   ```bash\n   docker-compose ps  # Gluetun should show \"healthy\"\n   ```\n   qBittorrent won't start until Gluetun is healthy (by design).\n\n2. **Check port conflicts:**\n   ```bash\n   lsof -i :8080  # Should only show Docker\n   ```\n   If another service uses 8080, change `QBITTORRENT_WEBUI_PORT` in `.env`.\n\n3. **Check container logs:**\n   ```bash\n   docker-compose logs qbittorrent | grep -i error\n   ```\n\n### qBittorrent Shows \"Unauthorized\" (No Login Page)\n\n**Symptoms:** Accessing the Web UI shows \"Unauthorized\" instead of a login page\n\n**Solutions:**\n1. **Disable host header validation** (required for Docker):\n   ```bash\n   # Stop qBittorrent\n   docker-compose stop qbittorrent\n\n   # Edit config (find your volume path)\n   docker run --rm -v torrent-vpn-stack_qbittorrent-config:/config alpine sh -c '\n   cat \u003e\u003e /config/qBittorrent/qBittorrent.conf \u003c\u003c EOF\n   WebUI\\HostHeaderValidation=false\n   WebUI\\CSRFProtection=false\n   WebUI\\LocalHostAuth=false\n   EOF'\n\n   # Restart\n   docker-compose start qbittorrent\n   ```\n\n2. **Check the temporary password** (first run only):\n   ```bash\n   docker-compose logs qbittorrent | grep -i password\n   ```\n\n### Torrents Not Connecting / No Upload/Download\n\n**Symptoms:** Torrents stuck in \"Stalled\" or \"Downloading\" with 0 peers\n\n**Solutions:**\n1. **Check VPN connection:**\n   ```bash\n   ./scripts/verify-vpn.sh\n   ```\n\n2. **Verify port forwarding (if enabled):**\n   ```bash\n   curl http://localhost:8000/v1/openvpn/portforwarded\n   # Should return a port number\n   ```\n   Then check qBittorrent Settings → Connection → Port matches this number.\n\n3. **Disable problematic settings in qBittorrent:**\n   - Settings → Connection → Disable UPnP/NAT-PMP\n   - Settings → Connection → Disable \"Use different port on each startup\"\n\n4. **Try a different VPN server** - Some servers may block torrent traffic\n\n5. **Check if you're firewalled:**\n   - A 🔥 fire icon in qBittorrent means you're behind a firewall\n   - Enable port forwarding or use a VPN server that supports it\n\n### DNS Leaks Detected\n\n**Symptoms:** `./scripts/check-leaks.sh` shows your ISP's DNS\n\n**Solutions:**\n1. **Verify DoT is enabled:**\n   ```bash\n   docker-compose logs gluetun | grep -i \"dns\"\n   # Should see \"DNS over TLS\" enabled\n   ```\n\n2. **Force DNS-over-TLS:**\n   ```env\n   DOT=on\n   DOT_PROVIDERS=cloudflare\n   ```\n\n3. **Check for IPv6 leaks:**\n   ```bash\n   docker exec qbittorrent ip -6 addr\n   # Should be empty or only show local IPv6\n   ```\n\n### macOS-Specific Issues\n\n#### File Permissions Issues\n\n**Symptoms:** Can't write to downloads folder, permission denied errors\n\n**Solutions:**\n```bash\n# Fix ownership\nsudo chown -R $(id -u):$(id -g) ~/Downloads/torrents\n\n# Update PUID/PGID in .env to match your user\nid -u  # Use this for PUID\nid -g  # Use this for PGID\n```\n\n#### Docker Desktop Resource Limits\n\n**Symptoms:** Slow performance, containers restarting\n\n**Solutions:**\n- Docker Desktop → Settings → Resources\n- Increase RAM to 4GB+\n- Increase Swap to 2GB+\n- Increase Disk image size if low on space\n\n#### Apple Silicon Compatibility\n\nAll images used support ARM64 (Apple Silicon). If you see warnings about platform:\n```bash\n# Force ARM64 platform\nDOCKER_DEFAULT_PLATFORM=linux/arm64 docker-compose up -d\n```\n\n### Can't Access from LAN\n\n**Symptoms:** qBittorrent works on Mac but not from other devices\n\n**Solutions:**\n1. **Check firewall:**\n   ```bash\n   # Temporarily disable macOS firewall to test\n   sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off\n   ```\n   If it works, add Docker to firewall allowlist.\n\n2. **Verify LOCAL_SUBNET:**\n   ```env\n   LOCAL_SUBNET=192.168.1.0/24  # Must match your network\n   ```\n   Find your network: `netstat -nr | grep default`\n\n3. **Check Docker port binding:**\n   ```bash\n   lsof -i :8080 | grep LISTEN\n   # Should show 0.0.0.0:8080 (not 127.0.0.1:8080)\n   ```\n\n## FAQ\n\n### Q: Is this legal?\n**A:** Torrenting itself is legal. Using a VPN is legal. Downloading copyrighted material without permission is illegal. This stack is a tool; you are responsible for how you use it.\n\n### Q: Will my ISP know I'm torrenting?\n**A:** With this setup and a proper VPN:\n- Your ISP sees encrypted VPN traffic only\n- They cannot see what you're downloading\n- They cannot see torrent protocol\n- All DNS queries are encrypted (DoT)\n\n**However:** Your ISP knows you're using a VPN. In some jurisdictions, that alone may raise flags.\n\n### Q: Which VPN provider should I use?\n**A:** Look for:\n- ✅ WireGuard support\n- ✅ Port forwarding support (optional but improves speeds)\n- ✅ No-logging policy\n- ✅ Fast speeds (10+ Gbps servers)\n- ✅ P2P/torrenting allowed\n\n**Recommended (with port forwarding):**\n- **ProtonVPN** - Port forwarding, secure core, Switzerland-based\n- **Private Internet Access (PIA)** - Port forwarding, many servers, affordable\n\n**Good privacy but no port forwarding:**\n- **Mullvad** - Best privacy, flat rate (port forwarding discontinued July 2023)\n\n**Avoid:**\n- Free VPNs (slow, logging, malware)\n- VPNs that block P2P traffic\n- VPNs in 14-Eyes countries (if privacy is critical)\n\n### Q: Do I need port forwarding?\n**A:** Not required, but highly recommended for optimal performance:\n- **Without:** You can download, but only from peers who have port forwarding (limited connectivity)\n- **With:** You become \"connectable\" — faster speeds, better seeding, healthier swarms\n\n**Supported Providers:** ProtonVPN (Plus+), Private Internet Access (PIA)\n\n**📖 See [docs/port-forwarding.md](docs/port-forwarding.md) for complete setup guide**\n\n### Q: How much does this cost?\n**A:**\n- VPN: $5-15/month (depends on provider, cheaper with annual plans)\n- This stack: Free and open source\n- Docker Desktop: Free (paid for enterprise use)\n\n### Q: Does this work on my platform?\n**A:** Yes! Fully cross-platform support:\n- ✅ **Windows 10/11** - Native support with WSL2 or Git Bash (install via Chocolatey)\n- ✅ **Linux** - Ubuntu, Debian, Fedora, Arch, etc. (install via Homebrew or AUR)\n- ✅ **macOS** - Intel and Apple Silicon M1/M2/M3 (install via Homebrew)\n\nSee the [Installation](#installation) section for platform-specific package managers and detailed guides in [docs/](docs/).\n\n### Q: Can I run multiple instances?\n**A:** Yes, but you'll need separate VPN credentials for each:\n1. Copy the entire folder: `cp -r torrent-vpn-stack torrent-vpn-stack-2`\n2. Change container names in `docker-compose.yml`\n3. Change ports in `.env` (8081, 6882, etc.)\n4. Use different VPN credentials\n\n### Q: What if my VPN doesn't support WireGuard?\n**A:** Use OpenVPN:\n```env\nVPN_TYPE=openvpn\nOPENVPN_USER=your_username\nOPENVPN_PASSWORD=your_password\n```\nWireGuard is faster and more modern, but OpenVPN works fine.\n\n### Q: How do I know if there's a leak?\n**A:** Run the verification:\n```bash\n./scripts/check-leaks.sh\n\n# Or manually check your IP:\ndocker exec qbittorrent wget -qO- https://api.ipify.org\n# Should show VPN IP, NOT your real IP\n```\n\n### Q: Can I use a free VPN?\n**A:** Not recommended:\n- ❌ Free VPNs often log and sell your data\n- ❌ Slow speeds (congested servers)\n- ❌ Block P2P traffic\n- ❌ Data caps\n- ❌ Some inject ads or malware\n\nQuality VPNs cost $3-10/month with annual plans.\n\n### Q: What happens if the VPN disconnects?\n**A:** The **kill switch** activates:\n1. qBittorrent loses all internet connectivity\n2. All torrent traffic stops immediately\n3. Your real IP is **never** exposed\n4. Gluetun attempts to reconnect automatically\n5. When VPN reconnects, torrenting resumes\n\n### Q: How do I add more torrents remotely?\n**A:** If your qBittorrent Web UI is accessible from outside your home:\n1. **Don't expose it directly to the internet** (security risk!)\n2. Use a VPN to your home network (Tailscale, WireGuard, ZeroTier)\n3. Or use a reverse proxy with authentication (Traefik, nginx)\n4. Or use qBittorrent's mobile apps (connect via VPN)\n\n**Never port forward qBittorrent Web UI to the internet without strong auth + IP allowlist!**\n\n## Architecture\n\nSee [docs/architecture.md](docs/architecture.md) for detailed architecture diagrams and flow charts.\n\n**High-Level Overview:**\n\n```\n┌─────────────────────────────────────────────────────────────────────┐\n│            Host System (Windows / Linux / macOS)                    │\n│  ┌──────────────────────────────────────────────────────────────┐   │\n│  │                   Docker Compose Stack                       │   │\n│  │  ┌────────────────────────────────────────────────────────┐  │   │\n│  │  │              Gluetun (VPN Gateway)                     │  │   │\n│  │  │  ┌──────────────────────────────────────────────────┐  │  │   │\n│  │  │  │  • WireGuard/OpenVPN client                      │  │  │   │\n│  │  │  │  • Firewall (kill switch)                        │  │  │   │\n│  │  │  │  • DNS-over-TLS (DoT)                            │  │  │   │\n│  │  │  │  • IPv6 disabled                                 │  │  │   │\n│  │  │  │  • Port forwarding                               │  │  │   │\n│  │  │  │  • Health monitoring                             │  │  │   │\n│  │  │  └──────────────────────────────────────────────────┘  │  │   │\n│  │  │                                                         │  │   │\n│  │  │  Exposes ports to host:                                │  │   │\n│  │  │    - 8080 (qBittorrent Web UI)                         │  │   │\n│  │  │    - 6881 (Torrent connections)                        │  │   │\n│  │  │    - 8000 (Gluetun control - optional)                 │  │   │\n│  │  └────────────────────────────────────────────────────────┘  │   │\n│  │                            ▲                                 │   │\n│  │                            │ network_mode: service:gluetun   │   │\n│  │                            │ (Shares network namespace)      │   │\n│  │  ┌─────────────────────────┴────────────────────────────┐   │   │\n│  │  │           qBittorrent (Torrent Client)               │   │   │\n│  │  │  • Shares Gluetun's network namespace                │   │   │\n│  │  │  • All traffic forced through VPN tunnel             │   │   │\n│  │  │  • No independent internet access (kill switch)      │   │   │\n│  │  │  • Web UI accessible @ http://localhost:8080         │   │   │\n│  │  │  • Runs as unprivileged user (PUID/PGID)             │   │   │\n│  │  └──────────────────────────────────────────────────────┘   │   │\n│  └──────────────────────────────────────────────────────────────┘   │\n│                            │                                         │\n│                            │ Bind mount to host filesystem           │\n│                            ▼                                         │\n│     Downloads Path (configurable):                                  │\n│       • Windows: C:\\Users\\\u003cuser\u003e\\Downloads\\torrents                 │\n│       • Linux:   /home/\u003cuser\u003e/Downloads/torrents                    │\n│       • macOS:   /Users/\u003cuser\u003e/Downloads/torrents                   │\n│                                                                      │\n│     Docker Volumes (persistent config):                             │\n│       • gluetun-config (VPN state)                                  │\n│       • qbittorrent-config (settings \u0026 torrents)                    │\n└─────────────────────────────────────────────────────────────────────┘\n                            │\n                            │ Encrypted VPN Tunnel\n                            │ (WireGuard or OpenVPN)\n                            ▼\n                  Internet via VPN Provider\n            (Your real IP is never exposed)\n```\n\n**Traffic Flow:**\n1. qBittorrent → Gluetun's network stack (forced, no alternatives)\n2. Gluetun → Firewall check → Allowed?\n3. If VPN up: Encrypt → VPN server → Internet\n4. If VPN down: Drop packet (kill switch)\n\n**No traffic can leave qBittorrent without going through the VPN.**\n\n## Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Commit your changes: `git commit -m 'Add amazing feature'`\n4. Push to the branch: `git push origin feature/amazing-feature`\n5. Open a Pull Request\n\n**Areas for contribution:**\n- Additional VPN provider examples\n- Setup wizard improvements\n- More verification scripts\n- Platform-specific guides (Linux, Windows)\n- Performance optimizations\n- Security hardening\n\n## License\n\nMIT License - See LICENSE file for details\n\n## Acknowledgments\n\n- [Gluetun](https://github.com/qdm12/gluetun) by [@qdm12](https://github.com/qdm12) - Excellent VPN client container\n- [LinuxServer.io](https://www.linuxserver.io/) - qBittorrent Docker image\n- [qBittorrent](https://www.qbittorrent.org/) - Feature-rich torrent client\n\n## Disclaimer\n\nThis tool is provided for educational and legitimate use only. The authors are not responsible for any misuse or illegal activity. Always comply with copyright laws and terms of service of your VPN provider and ISP.\n\n## Contributing\n\nContributions are welcome! This is an open source project under the MIT License.\n\n- 🤝 [Contributing Guide](CONTRIBUTING.md) - How to contribute code, documentation, or bug reports\n- 🔒 [Security Policy](SECURITY.md) - Reporting vulnerabilities responsibly\n- 📜 [Code of Conduct](CODE_OF_CONDUCT.md) - Community standards\n- 📝 [MIT License](LICENSE) - Free and open source\n\n### Ways to Contribute\n\n- Report bugs or suggest features via [GitHub Issues](https://github.com/ddmoney420/torrent-vpn-stack/issues)\n- Improve documentation (especially platform-specific guides)\n- Test on different platforms and report compatibility\n- Submit pull requests for bug fixes or enhancements\n- Help answer questions in [Discussions](https://github.com/ddmoney420/torrent-vpn-stack/discussions)\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.\n\n## Support\n\n- 📖 [Documentation](docs/)\n- 🐛 [Report Issues](https://github.com/ddmoney420/torrent-vpn-stack/issues)\n- 💬 [Discussions](https://github.com/ddmoney420/torrent-vpn-stack/discussions)\n\n---\n\n**Made with ❤️ for privacy-conscious torrenters**\n\n**Research Sources:**\n- [Gluetun with ProtonVPN Discussion](https://github.com/qdm12/gluetun/discussions/2686)\n- [Port Conflicts with Gluetun and qBittorrent](https://forums.docker.com/t/mystery-conflicting-port-options-gluetun-qbittorrent-sabnzbd/139363)\n- [qBittorrent with GlueTUN VPN Setup Guide](https://drfrankenstein.co.uk/qbittorrent-with-gluetun-vpn-in-container-manager-on-a-synology-nas/)\n- [Troubleshooting Errored Status](https://forums.docker.com/t/qbittorrent-running-through-gluetun-vpn-container-makes-all-torrents-get-errored-status/149615)\n- [YAMS Installation Issues](https://forum.yams.media/viewtopic.php?t=151)\n- [Gluetun API Connection Issue](https://github.com/qdm12/gluetun/issues/2674)\n- [AirVPN Troubleshooting Guide](https://airvpn.org/forums/topic/66670-help-with-gluetun-qbittorrent/)\n- [Gluetun+qBittorrent Bug Report](https://github.com/qdm12/gluetun/issues/2819)\n- [Automated Port Manager](https://github.com/SnoringDragon/gluetun-qbittorrent-port-manager)\n- [QBittorrent with Gluetun Setup](https://www.tatewalker.com/blog/docker-torrent/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddmoney420%2Ftorrent-vpn-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fddmoney420%2Ftorrent-vpn-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddmoney420%2Ftorrent-vpn-stack/lists"}