Files
202601docs/docs/services/transmission.md
2026-01-03 02:25:01 +01:00

163 lines
7.0 KiB
Markdown

# 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 |