# Transmission Service BitTorrent sécurisé via VPN ProtonVPN. ## Accès | Méthode | URL | Statut | |---------|-----|--------| | **Tailscale** | [transmission.talloires.tailfd281f.ts.net](https://transmission.talloires.tailfd281f.ts.net){:target="_blank"} | ✅ Autorisé | | **LAN** | transmission.talloires.local | ❌ Bloqué | | **Go-link** | [go/torrent](https://go.talloires.local/torrent){:target="_blank"} | ✅ Redirige vers TS | ## Architecture de sécurité ``` ┌─────────────────────────────────────────────────────────────────┐ │ INTERNET │ └─────────────────────────────────────────────────────────────────┘ │ ▲ │ Torrent traffic │ VPN tunnel ▼ │ ┌─────────────────┐ ┌─────────────────┐ │ ProtonVPN LU │◄───────────────►│ WireGuard │ │ 5.253.204.x │ encrypted │ container │ └─────────────────┘ └────────┬────────┘ │ ┌────────┴────────┐ │ Transmission │ │ container │ │ (network_mode: │ │ wireguard) │ └────────┬────────┘ │ ┌──────────────┴──────────────┐ │ │ ┌─────────┴─────────┐ ┌────────┴────────┐ │ Tailscale DNS │ │ LAN DNS │ │ .ts.net résolu │ │ .local résolu │ │ uniquement sur │ │ sur réseau │ │ devices TS │ │ local │ └─────────┬─────────┘ └────────┬────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ Authelia │ │ 403 Blocked │ │ + Transmission │ │ "Use Tailscale"│ └─────────────────┘ └─────────────────┘ ``` ## Pourquoi cette configuration ? ### 1. VPN obligatoire (WireGuard → ProtonVPN) Transmission utilise `network_mode: service:wireguard`. Tout le trafic réseau passe par le conteneur WireGuard, qui : - Chiffre tout le trafic vers ProtonVPN Luxembourg - Applique un **kill switch** : si le VPN tombe, aucun trafic ne sort - Masque l'IP réelle du serveur aux trackers et peers **IP publique visible** : `5.253.204.x` (ProtonVPN LU) ### 2. Accès Tailscale uniquement | Risque | Mitigation | |--------|------------| | Quelqu'un sur le LAN voit les torrents | Accès LAN bloqué (403) | | Quelqu'un sur le LAN ajoute des torrents | Accès LAN bloqué (403) | | Quelqu'un hors Tailscale accède | DNS `.ts.net` non résolvable hors TS | | Quelqu'un sur Tailscale non autorisé | Authelia (login requis) | **Principe** : Le DNS `*.tailfd281f.ts.net` n'est résolvable que par les devices connectés au tailnet. C'est une première couche de sécurité "gratuite". Authelia ajoute l'authentification. ### 3. Pourquoi pas d'accès LAN ? Le LAN est considéré **moins sûr** que Tailscale pour Transmission : - Un appareil compromis sur le LAN pourrait scanner les ports - Les guests WiFi pourraient potentiellement accéder - Pas de logs d'authentification côté LAN Tailscale garantit que seuls les **devices explicitement autorisés** dans le tailnet peuvent même résoudre le nom DNS. ## Risques résiduels | Risque | Probabilité | Impact | Mitigation | |--------|-------------|--------|------------| | Compromission d'un device TS | Faible | Moyen | Authelia 2FA recommandé | | Fuite IP si WireGuard crash | Très faible | Élevé | Kill switch iptables | | Contenu illégal téléchargé | Variable | Élevé | Responsabilité utilisateur | | DMCA notice | Faible (VPN) | Faible | ProtonVPN no-logs policy | ## Configuration technique ### WireGuard kill switch ```bash # /home/lionel/lake/p2p/wireguard/wg_confs/wg0.conf PostUp = iptables -I OUTPUT -o eth0 -d 5.253.204.162 -j ACCEPT PostUp = iptables -I OUTPUT -o eth0 -d 172.18.0.0/16 -j ACCEPT PostUp = iptables -I OUTPUT -o eth0 -d 172.19.0.0/16 -j ACCEPT PostUp = iptables -A OUTPUT -o eth0 -j REJECT ``` Seuls autorisés : - L'endpoint VPN ProtonVPN - Les réseaux Docker internes (pour que Caddy puisse atteindre Transmission) ### Caddy configuration ```caddyfile # LAN - Bloqué transmission.talloires.local { respond "Access denied - Use Tailscale" 403 } # Tailscale - Authelia + Transmission transmission.talloires.tailfd281f.ts.net { import authelia reverse_proxy wireguard:9091 } ``` ### Docker network ```yaml # Transmission utilise le réseau de WireGuard transmission: network_mode: service:wireguard depends_on: - wireguard # WireGuard est sur lake_net pour être joignable par Caddy wireguard: networks: - lake_net ``` ## Utilisation 1. Aller sur [go/torrent](https://go.talloires.local/torrent){:target="_blank"} (depuis un device Tailscale) 2. S'authentifier via Authelia 3. Ajouter un torrent via l'interface web (magnet link ou fichier .torrent) 4. Les téléchargements arrivent dans `/mnt/mediaserver/transmission/downloads/` ## Vérification VPN Pour confirmer que le trafic passe bien par le VPN : ```bash # IP publique vue par Transmission docker exec wireguard curl -s https://ifconfig.me # Devrait retourner 5.253.204.x (ProtonVPN LU) ``` ## Fichiers | Fichier | Description | |---------|-------------| | `~/lake/p2p/docker-compose.yml` | Config Docker WireGuard + Transmission | | `~/lake/p2p/wireguard/wg_confs/wg0.conf` | Config WireGuard + kill switch | | `~/lake/p2p/transmission/settings.json` | Config Transmission | | `/mnt/mediaserver/transmission/downloads/` | Dossier téléchargements |