Infrastructure Auto-Hébergée — Proxmox VE
Projet personnel réalisé en janvier–février 2026 sur un serveur physique dédié. L'objectif : déployer une stack complète de services auto-hébergés accessibles depuis Internet via un nom de domaine personnel, avec SSL automatique sur tous les services et accès VPN pour les services sensibles.
Architecture réseau
Vue d'ensemble
L'infrastructure repose sur 5 conteneurs LXC et 1 VM KVM, chacun hébergeant un service distinct. Un unique point d'entrée HTTP/HTTPS (Nginx Proxy Manager) distribue le trafic selon le sous-domaine. Les services critiques ne sont accessibles que via VPN WireGuard.
Choix architecturaux
- NPM comme point d'entrée unique : simplifie la gestion SSL — un seul endroit pour gérer tous les certificats et le routage
- Restriction VPN : Proxmox, Vaultwarden et Heimdall ne sont pas joignables depuis Internet sans VPN actif
- Split-horizon DNS : les sous-domaines résolvent vers les IPs privées en LAN — évite le hairpin NAT et accélère les accès internes
- LXC vs KVM : services légers en conteneur LXC pour minimiser l'overhead ; Nextcloud en VM KVM pour des raisons de compatibilité
Mise en place de l'infrastructure
1. Proxmox VE — L'hyperviseur
Installation bare-metal
Installation depuis ISO sur le serveur physique. Dès la première mise en service, un conflit d'adresse IP est détecté : un équipement du réseau local utilisait déjà l'IP attribuée par défaut à Proxmox.
Résolution du conflit
nano /etc/network/interfaces
# Modifier l'adresse statique :
address [nouvelle-ip]/24
gateway [passerelle]
# Appliquer sans redémarrer :
ifreload -a
Stockage
- NVMe : système Proxmox + images des conteneurs/VMs
- HDD 500 Go (ext4) : dédié aux sauvegardes automatisées
Sauvegardes automatisées
Tâche Proxmox planifiée pour sauvegarder tous les conteneurs et la VM chaque nuit :
2. Réseau — IP publique & DNS
Problème initial : CGNAT
La box opérateur était en mode CGNAT (Carrier-Grade NAT) : l'IP publique était partagée entre plusieurs abonnés, rendant impossible toute connexion entrante depuis Internet.
Solution : IP Full-Stack
Demande d'une IP publique fixe dédiée auprès de l'opérateur. Une fois attribuée, configuration du port forwarding sur la box :
Domaine & DNS
Achat d'un nom de domaine personnalisé. Configuration de la zone DNS :
# Enregistrement wildcard
*.[mon-domaine].fr → [IP publique]
# Résultat : tous les sous-domaines
# pointent automatiquement vers le serveur
# sans ajout DNS pour chaque nouveau service
- DNSSEC activé sur le domaine
- Wildcard : aucune configuration DNS à chaque ajout de service
Services déployés
3. Nginx Proxy Manager
Point d'entrée unique pour tout le trafic web. NPM reçoit toutes les requêtes HTTP/HTTPS et les redistribue vers le bon service selon le sous-domaine, avec SSL Let's Encrypt automatique.
Certificats automatiques
Chaque service obtient son certificat Let's Encrypt depuis NPM — renouvellement automatique, aucune intervention manuelle.
Proxy Hosts configurés
| Sous-domaine | Destination | Accès |
|---|---|---|
| nextcloud.[mon-domaine].fr | VM 104 :443 | Public |
| heimdall.[mon-domaine].fr | CT 101 :7990 | VPN only |
| vaultwarden.[mon-domaine].fr | CT 103 :8000 | VPN only |
| proxmox.[mon-domaine].fr | Proxmox :8006 | VPN only |
4. AdGuard Home — DNS filtrant
Serveur DNS filtrant pour l'ensemble du réseau local. Agit comme un « trou noir DNS » : les requêtes vers des domaines publicitaires, trackers ou phishing sont bloquées avant d'atteindre les appareils.
Filtres actifs
10 listes de filtres DNS couvrant :
- Publicités & trackers
- Phishing & malwares
- Domaines malveillants connus
Split-Horizon DNS
Configuration clé : *.[mon-domaine].fr résolvent localement vers les IPs privées des conteneurs.
5. WireGuard VPN
VPN moderne et performant donnant accès aux services sensibles depuis n'importe où, comme si on était sur le réseau local. Géré via l'interface web WGDashboard.
Configuration
# Sous-réseau VPN
10.0.0.0/24
Serveur (CT 105) : 10.0.0.1
PC-Bureau : 10.0.0.2 → split-tunnel
Mobile : 10.0.0.3 → full-tunnel
Deux modes de tunneling
- Split-tunnel (PC) : seul le trafic vers le LAN passe par le VPN — navigation internet directe
- Full-tunnel (mobile) : tout le trafic passe par le VPN — sécurisé en Wi-Fi public
Vérification
sudo wg show
# Résultat attendu :
# interface: wg0
# peer: [clé publique PC-Bureau]
# latest handshake: X seconds ago
# transfer: X MiB received, X MiB sent
6. Vaultwarden
Gestionnaire de mots de passe auto-hébergé, 100% compatible avec les clients Bitwarden (extension navigateur, app mobile, desktop). Les données restent sur le serveur personnel.
Durcissement post-installation
Désactivation des inscriptions publiques pour que personne d'autre ne puisse créer de compte :
# Localiser le fichier de configuration
find / -name ".env"
# → /opt/vaultwarden/.env
# Éditer le bon fichier
nano /opt/vaultwarden/.env
# Modifier :
SIGNUPS_ALLOWED=false
.env~ (sauvegarde éditeur) au lieu de .env. La commande find a permis d'identifier le bon chemin.
Accès
Accessible uniquement via VPN — jamais exposé directement depuis Internet.
7. Nextcloud — Cloud personnel
Solution de cloud auto-hébergée pour la synchronisation de fichiers, l'agenda et les contacts. Seul service accessible depuis Internet sans VPN.
Pourquoi une VM et pas un conteneur ?
Nextcloud présente des incompatibilités avec les conteneurs LXC non-privilégiés (gestion des permissions, namespaces). Il est donc déployé dans une VM KVM complète basée sur l'image TurnKey Linux Nextcloud.
Optimisation PHP
Activation du cache opcache pour améliorer la réactivité de l'interface :
; Dans php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
8. Heimdall — Tableau de bord
Interface web centralisant les accès à tous les services de l'infrastructure. Accessible uniquement via VPN — sert de point d'entrée unique pour l'administration.
Services référencés
- Proxmox (hyperviseur)
- WireGuard Dashboard (VPN)
- Vaultwarden (mots de passe)
- Nextcloud (cloud personnel)
- Nginx Proxy Manager
- AdGuard Home (DNS)
- Box opérateur
Bilan
Résultats
- 6 services auto-hébergés opérationnels en production (5 CT LXC + 1 VM KVM)
- Infrastructure accessible depuis Internet via domaine personnel, SSL sur tous les services
- VPN WireGuard fonctionnel sur 2 appareils avec configurations différenciées
- Filtrage DNS actif pour tout le réseau local (10 listes de filtres)
- Sauvegardes automatisées quotidiennes avec rétention 5 jours
Ce que j'ai appris
- Gestion complète d'une infrastructure bare-metal avec Proxmox VE
- Mise en réseau avancée : reverse proxy SSL, VPN, DNS split-horizon, DNSSEC
- Différences pratiques LXC (légèreté, overhead minimal) vs KVM (compatibilité complète)
- Résolution de problèmes réels : CGNAT, conflit IP, erreur de fichier de config
Axes d'amélioration
- Uptime Kuma : supervision temps réel avec alertes en cas d'indisponibilité
- Cluster Proxmox : second nœud pour la haute disponibilité
- Sauvegarde 3-2-1 : copie externe des sauvegardes (actuellement local uniquement)
- Fail2ban + SSH durci : authentification par clé uniquement, désactivation root
- Ansible : automatiser le déploiement pour reconstruire l'infra rapidement en cas de sinistre
Sources
- Documentation officielle Proxmox VE
- Proxmox VE Helper Scripts
- Nginx Proxy Manager
- WireGuard
- Vaultwarden (GitHub)