homelab

Infrastructure DNS, accès distant sécurisé et gestion des secrets

Infrastructure d'accès sécurisé : Vaultwarden coffre-fort, NPM wildcard SSL, AdGuard DoT, Tailscale VPN et DNS split-horizon pour le homelab.

Les adresses IP et noms de domaine de production ont été remplacés par des libellés génériques par mesure de sécurité.

Contexte

Projet transversal qui regroupe trois composantes fondamentales de la sécurité du homelab : la gestion des secrets (Vaultwarden), l’exposition sécurisée des services (NPM + SSL + DNS) et l’accès distant sans exposition publique (Tailscale VPN). L’ensemble forme une architecture cohérente où aucun secret ne transite en clair et aucun service n’est exposé directement sur Internet.

1 — Architecture DNS (AdGuard Home + DoT)

AdGuard Home est déployé en LXC sur PVE-02 (lxc-adguard-01, VLAN 10 MGMT). Il joue le rôle de résolveur DNS primaire pour tout le homelab :

Clients (tous VLANs) → AdGuard Home :53 (VLAN 10 MGMT)

             ┌───────────────┴──────────────────┐
             │                                  │
   Zone interne (Rewrites)            DNS upstream (DoT)
   *.[mon-domaine.fr] → [NPM]         Cloudflare  1.1.1.1:853
   *.homelab.lan → Unbound pfSense    Quad9       9.9.9.9:853

Décisions clés :

2 — Exposition HTTPS (NPM + Let’s Encrypt wildcard)

Nginx Proxy Manager (lxc-npm-01, VLAN 10 MGMT) est le reverse proxy de tous les services exposés. Il détient le certificat wildcard *.[mon-domaine.fr] émis par Let’s Encrypt via le challenge DNS-01 Cloudflare (sans exposition d’un port 80/443 entrant en permanence).

Navigateur → https://service.[mon-domaine.fr]

              NPM (VLAN 10 MGMT :443)
              │  Wildcard SSL *.[mon-domaine.fr]
              │  Force SSL, HSTS
              │  Access list : 172.16.0.0/16 + Tailscale CGNAT

         Service interne (HTTP) → réponse

Services exposés (extrait) :

FQDNBackendNotes
vaultwarden.[mon-domaine.fr]Vaultwarden :8080Jamais exposé publiquement (NXDOMAIN public)
grafana.[mon-domaine.fr]Grafana :3000Accessible via Tailscale uniquement
zabbix.[mon-domaine.fr]Zabbix :80Port-forward NAT pfSense
n8n.[mon-domaine.fr]n8n :5678Accès interne uniquement

3 — Vaultwarden (coffre-fort de mots de passe self-hosted)

Vaultwarden est une implémentation open-source du protocole Bitwarden déployée en LXC sur PVE-02 (lxc-vaultwarden-01, VLAN 10 MGMT), avec Docker-in-LXC et image épinglée.

Décisions de sécurité

DécisionJustification
Tailscale-onlyPas de port-forward public ; NXDOMAIN sur DNS public → injoignable depuis Internet
Docker-in-LXCMises à jour CVE en une commande (docker pull du nouveau tag)
SQLite (pas MariaDB)Un seul fichier à sauvegarder, restore trivial
Image épingléePas de changement silencieux de version
Export KeePassXC mensuelBackup offline chiffré (break-glass en cas d’indisponibilité)
# Déploiement Docker
docker run -d \
  --name vaultwarden \
  --restart unless-stopped \
  -e DOMAIN="https://vaultwarden.[mon-domaine.fr]" \
  -e SIGNUPS_ALLOWED=false \
  -v /opt/vaultwarden/data:/data \
  -p 8080:80 \
  vaultwarden/server:<version-épinglée>

SIGNUPS_ALLOWED=false : aucune création de compte possible sauf invitation explicite.

Symptôme : login accepté mais retour en boucle sur la page de connexion.
Cause : cookie_samesite = none avec cookie_secure = false → combinaison interdite par les navigateurs modernes (SameSite=None exige Secure).
Fix : cookie_secure = true dans la config + connexion via HTTPS uniquement → résolu.

4 — Tailscale VPN (accès distant sans ouverture de port)

Tailscale est installé sur pfsense-vm (instance VM miroir de pfSense sur PVE-02). Il sert de subnet router pour le réseau VLAN 10 MGMT : tout appareil autorisé peut accéder aux services internes sans qu’aucun port ne soit ouvert en entrée sur la box Internet.

iPhone / MacBook (n'importe où dans le monde)
       │ Tailscale (WireGuard sous-jacent)

pfsense-vm — Tailscale subnet router (VLAN 10 MGMT)
       │ subnet route 172.16.10.0/24

Services VLAN 10 (Vaultwarden, Grafana, Zabbix, NPM…)

Architecture globale

         ┌─────────────────────────────────────────────────────┐
         │          INTERNET                                   │
         │  vaultwarden.[mon-domaine.fr] = NXDOMAIN public ✗  │
         └──────────────┬──────────────────────────────────────┘
                        │ Tailscale uniquement

         iPhone / MacBook (Tailscale client)
                        │ WireGuard chiffré

         pfsense-vm (subnet router → VLAN 10 MGMT)


         AdGuard Home (VLAN 10) ── DNS split-horizon
         ↓ DoT                     *.[mon-domaine.fr] → NPM
         Cloudflare 1.1.1.1:853    *.homelab.lan → Unbound


         NPM (VLAN 10) ── wildcard SSL *.[mon-domaine.fr]


         Vaultwarden (VLAN 10 :8080) ── SQLite, image épinglée

Compétences mobilisées

Cette réalisation couvre la protection des données personnelles et secrets (B3.1 — coffre-fort Vaultwarden, chiffrement de bout en bout Bitwarden), la préservation de l’identité numérique (B3.2 — accès VPN exclusif, NXDOMAIN public, authentification forte), la sécurisation des équipements (B3.3 — DNS over TLS, aucun secret en clair, NPM HSTS), la cybersécurité de l’infrastructure (B3.5 — Tailscale zero-trust, ACLs AdGuard), ainsi que le développement de la présence en ligne (B1.3 — FQDN wildcard *.[mon-domaine.fr], SSL automatique) et la mise à disposition de services (B1.5 — Vaultwarden, NPM, DNS disponibles H24 sans exposition publique).