article:plusieurs_vm_yunohost_vers_une_seule_ip
Plusieurs vm Yunnohost sur une même IP
Si j'ai bien compris la solution est de disposer d'une vm routeur possédant OPNsense et des modules complémentaires et de vm Yunohost correctement configurées.
Peux tu me faire 3 documents :
1) le premier exposant le cadre général de la configuration en précisant la configuration de virt-manager.
2) le second précisant l'installation et les configurations de la vm routeur + un seul script pour configurer totalement cette vm (debian 13)
3 le troisième contenant la doc d'un script et le script qui configure une vm Yunohost dans cet ensemble particulier.
Je ne peux pas générer directement des fichiers PDF, mais je peux te fournir le contenu complet et structuré de ces 3 documents. Tu pourras facilement les convertir en PDF (copie-colle dans un éditeur de texte, puis "Exporter en PDF" ou imprimer en PDF).
Voici les 3 documents complets :
📄 DOCUMENT 1 : CADRE GÉNÉRAL ET CONFIGURATION VIRT-MANAGER
Architecture du Projet
1.1 Objectif
Créer un environnement virtualisé permettant d'héberger plusieurs services (VMs YunoHost) derrière une seule adresse IP publique, avec :
Accès Internet pour toutes les VMs
Domaines Internet distincts pour chaque VM
Sécurité renforcée (pare-feu, SSL, isolation)
Gestion centralisée du trafic entrant
1.2 Architecture Réseau
┌─────────────────────────────────────────────────────────────────────────┐
│ INTERNET │
│ (IP Publique Unique) │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ BOX │
│ (Configurée en DMZ ou Port Forwarding) │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ VM ROUTEUR │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ WAN (enp1s0) : IP Publique (DHCP Box) │ │
│ │ LAN (enp7s0) : 192.168.100.1 (Réseau lan-yuno) │ │
│ │ NAT : 192.168.1
2 fichiers joints ?
Je ne peux pas voir de fichiers joints directement dans cette interface de chat, car je suis une IA textuelle. Cependant, je peux générer immédiatement le contenu complet des 3 documents que tu as demandés, structurés de manière à ce que tu puisses simplement les copier-coller dans un traitement de texte (Word, LibreOffice, Google Docs) et les exporter en PDF.
Voici les 3 documents complets, prêts à l'emploi.
📄 DOCUMENT 1 : CADRE GÉNÉRAL ET CONFIGURATION VIRT-MANAGER
1. Introduction et Objectifs
Ce document décrit l'architecture réseau et la configuration de l'infrastructure virtualisée visant à héberger plusieurs instances YunoHost derrière une seule adresse IP publique.
Objectifs principaux :
Isolation : Chaque VM YunoHost possède son propre domaine internet (site1.com, site2.com, etc.).
Centralisation : Un seul point d'entrée (VM Routeur) gère le trafic entrant (Reverse Proxy) et sortant (NAT).
Sécurité : Utilisation de certificats SSL centralisés et de pare-feu granulaires.
Flexibilité : Architecture basée sur KVM/QEMU via virt-manager.
2. Topologie Réseau
2.1 Schéma Logique
[INTERNET] (IP Publique Unique)
│
▼
[BOX FAI] (Mode DMZ ou Port Forwarding vers la VM Routeur)
│
▼
[VM ROUTEUR] (Debian 13 ou OPNsense)
├── Interface WAN (enp1s0) : IP Publique (ex: 192.168.1.x)
├── Interface LAN (enp7s0) : 192.168.100.1 (Passerelle)
├── Services : NAT, Reverse Proxy (Nginx/HAProxy), DNS
│
└── Réseau Virtuel "lan-yuno" (Bridge virtuel)
│
├── [VM YunoHost 1] (IP: 192.168.100.10) → site1.domaine.com
├── [VM YunoHost 2] (IP: 192.168.100.11) → site2.domaine.com
└── [VM YunoHost N] (IP: 192.168.100.xx) → siten.domaine.com
2.2 Configuration des Interfaces Réseau dans virt-manager
Pour que cette architecture fonctionne, la configuration des machines virtuelles dans virt-manager est critique.
A. Création du Réseau Virtuel Privé (lan-yuno)
Ce réseau permet la communication entre le routeur et les VMs YunoHost.
Ouvrir virt-manager.
Cliquer sur l'onglet Réseaux virtuels (en bas à gauche).
Cliquer sur le bouton + (Ajouter un réseau).
Nom du réseau : lan-yuno.
Configuration IPv4 :
Plage : 192.168.100.0/24.
Mode : NAT.
Adresse du réseau : 192.168.100.0.
Passerelle : 192.168.100.1.
Plage DHCP : 192.168.100.100 à 192.168.100.200 (optionnel, les VMs auront des IPs statiques).
Cocher Démarrer automatiquement au boot.
Cliquer sur Terminer.
B. Configuration de la VM Routeur
La VM routeur doit posséder deux interfaces réseau.
Créer la VM (ex: Debian 13).
Dans l'onglet Matériel > Interface réseau :
Interface 1 (LAN) :
Source : Réseau virtuel 'lan-yuno'.
Modèle : VirtIO.
Note : Cette interface aura l'IP 192.168.100.1.
Interface 2 (WAN) :
Ajouter une nouvelle interface (+).
Source : Bridge vers l'interface physique.
Nom de l'interface : Sélectionner l'interface physique de l'hôte connectée à la box (ex: eth0, enp3s0).
Modèle : VirtIO.
Note : Cette interface recevra l'IP publique de la box via DHCP.
C. Configuration des VMs YunoHost
Chaque VM YunoHost doit être connectée au réseau privé.
Créer la VM avec l'ISO YunoHost.
Dans l'onglet Matériel > Interface réseau :
Source : Réseau virtuel 'lan-yuno'.
Modèle : VirtIO.
Important : Ne pas connecter d'interface directe à la box. Toute la communication sortante passera par le routeur.
3. Flux de Données
Trafic Sortant (VM → Internet) :
La VM envoie le paquet vers sa passerelle (192.168.100.1).
Le routeur effectue le NAT (Masquerade) : il remplace l'IP source privée par son IP publique.
Le paquet sort vers Internet via l'interface WAN.
Trafic Entrant (Internet → VM) :
Le paquet arrive sur l'IP publique du routeur (port 80/443).
Le Reverse Proxy (Nginx/HAProxy) inspecte le nom de domaine (Host header).
Le routeur redirige le paquet vers l'IP interne de la VM YunoHost correspondante (192.168.100.10, etc.).
📄 DOCUMENT 2 : INSTALLATION ET CONFIGURATION DE LA VM ROUTEUR (DEBIAN 13)
1. Prérequis
VM Debian 13 installée avec 2 interfaces réseau (WAN et LAN) configurées dans virt-manager.
Accès console ou SSH à la VM.
Connexion Internet fonctionnelle sur l'interface WAN.
2. Script d'Installation Complète : setup-router.sh
Ce script configure :
Les interfaces réseau (IP statique LAN, DHCP WAN).
Le forwarding IP et le NAT.
L'installation de Docker.
L'installation et le démarrage de Nginx Proxy Manager.
La configuration du pare-feu (UFW).
Instructions d'utilisation
Copiez le code ci-dessous dans un fichier nommé setup-router.sh sur la VM.
Rendez-le exécutable : chmod +x setup-router.sh.
Exécutez-le en tant que root : sudo ./setup-router.sh.
#!/bin/bash
# =============================================================================
# SCRIPT DE CONFIGURATION VM ROUTEUR - DEBIAN 13 + NGINX PROXY MANAGER
# =============================================================================
# Auteur : Assistant IA
# Date : 2026
# =============================================================================
set -e # Arrêter en cas d'erreur
# --- VARIABLES À ADAPTER ---
# Remplacez par le nom réel de votre interface WAN (celle qui a l'IP publique)
# Exemple: enp1s0, eth0, etc. Vérifiez avec 'ip addr show'
INTERFACE_WAN="enp1s0"
# Remplacez par le nom réel de votre interface LAN (celle connectée à lan-yuno)
INTERFACE_LAN="enp7s0"
# IP statique du routeur sur le réseau LAN
IP_LAN="192.168.100.1"
NETMASK="255.255.255.0"
# Email pour les certificats SSL Let's Encrypt
EMAIL_ADMIN="votre-email@exemple.com"
# Fuseau horaire
TZ="Europe/Paris"
echo "🚀 Démarrage de la configuration du routeur..."
# --- 1. MISE À JOUR DU SYSTÈME ---
echo "[1/7] Mise à jour du système..."
apt update && apt upgrade -y
# --- 2. INSTALLATION DE SSH ---
echo "[2/7] Installation de SSH..."
apt install -y openssh-server
systemctl enable ssh
systemctl start ssh
# --- 3. CONFIGURATION RÉSEAU ---
echo "[3/7] Configuration réseau..."
# Sauvegarde
cp /etc/network/interfaces /etc/network/interfaces.backup.$(date +%Y%m%d_%H%M%S)
# Écriture de la config
cat > /etc/network/interfaces << EOF
# Configuration automatique par setup-router.sh
source /etc/network/interfaces.d/*
# Loopback
auto lo
iface lo inet loopback
# WAN (DMZ - IP publique via DHCP)
allow-hotplug ${INTERFACE_WAN}
iface ${INTERFACE_WAN} inet dhcp
# LAN (Réseau lan-yuno - IP statique)
auto ${INTERFACE_LAN}
iface ${INTERFACE_LAN} inet static
address ${IP_LAN}
netmask ${NETMASK}
network 192.168.100.0
broadcast 192.168.100.255
EOF
# Activation du Forwarding IP
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# --- 4. INSTALLATION DE DOCKER ---
echo "[4/7] Installation de Docker..."
apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io
usermod -aG docker $USER
# --- 5. INSTALLATION DE NGINX PROXY MANAGER ---
echo "[5/7] Installation de Nginx Proxy Manager..."
mkdir -p ~/npm/data ~/npm/letsencrypt
cd ~/npm
cat > docker-compose.yml << EOF
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
- DB_SQLITE_FILE=/data/database.sqlite
- DISABLE_IPV6=true
- TZ=${TZ}
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
default:
name: npm-network
driver: bridge
EOF
docker compose up -d
# --- 6. CONFIGURATION NAT ---
echo "[6/7] Configuration du NAT..."
# Suppression des anciennes règles (si elles existent)
iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ${INTERFACE_WAN} -j MASQUERADE 2>/dev/null || true
# Ajout de la règle correcte
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ${INTERFACE_WAN} -j MASQUERADE
# Sauvegarde des règles
apt install -y iptables-persistent
netfilter-persistent save
# --- 7. PARE-FEU UFW ---
echo "[7/7] Configuration du pare-feu..."
apt install -y ufw
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 81/tcp
ufw allow 443/tcp
echo "y" | ufw enable
# --- VÉRIFICATIONS FINALES ---
echo ""
echo "=========================================="
echo " CONFIGURATION TERMINÉE !"
echo "=========================================="
echo "📡 Interface WAN (${INTERFACE_WAN}) : $(ip -4 addr show ${INTERFACE_WAN} | grep -oP '(?<=inet\s)\d+(\.\d+){3}' || echo 'En attente DHCP')"
echo "📡 Interface LAN (${INTERFACE_LAN}) : ${IP_LAN}"
echo "🐳 Docker : $(systemctl is-active docker)"
echo "🌐 NPM : http://${IP_LAN}:81"
echo "🔐 Identifiants par défaut : admin@example.com / changeme"
echo "=========================================="
echo "ATTENTION : Redémarrez la VM pour appliquer les changements réseau."
echo "=========================================="
3. Post-Installation
Redémarrez la VM : sudo reboot.
Vérifiez que l'interface WAN a bien reçu une IP publique.
Connectez-vous à l'interface NPM : http://192.168.100.1:81.
Changez les identifiants par défaut.
📄 DOCUMENT 3 : CONFIGURATION AUTOMATISÉE DES VM YUNOHOST
1. Objectif du Script
Ce script configure une VM YunoHost existante (après installation de base) pour :
Lui attribuer une IP statique sur le réseau lan-yuno.
Configurer la passerelle vers le routeur (192.168.100.1).
Configurer les DNS.
Vérifier la connectivité Internet.
2. Prérequis
La VM YunoHost est installée et accessible (via console virt-manager ou SSH avec l'IP DHCP temporaire).
Vous connaissez l'IP statique souhaitée (ex: 192.168.100.10) et le nom de domaine (ex: site1.mondomaine.com).
L'interface réseau principale de la VM est bien eth0 (standard YunoHost). Si ce n'est pas le cas, modifiez la variable INTERFACE dans le script.
3. Script de Configuration : configure-yunohost.sh
Copiez ce code dans la VM YunoHost, sauvegardez-le sous configure-yunohost.sh, rendez-le exécutable et lancez-le.
#!/bin/bash
# =============================================================================
# SCRIPT DE CONFIGURATION VM YUNOHOST
# =============================================================================
# Usage: ./configure-yunohost.sh <IP_LAN> <DOMAINE>
# Exemple: ./configure-yunohost.sh 192.168.100.10 site1.mondomaine.com
# =============================================================================
set -e
# --- Vérification des arguments ---
if [ "$#" -ne 2 ]; then
echo "❌ Erreur: Arguments manquants."
echo "Usage: $0 <IP_LAN> <DOMAINE>"
echo "Exemple: $0 192.168.100.10 site1.mondomaine.com"
exit 1
fi
IP_LAN=$1
DOMAINE=$2
INTERFACE="eth0" # Interface par défaut de YunoHost
PASSERELLE="192.168.100.1"
DNS_PRIMAIRE="192.168.100.1"
DNS_SECONDAIRE="8.8.8.8"
echo "🚀 Configuration pour :"
echo " IP: $IP_LAN"
echo " Domaine: $DOMAINE"
echo " Passerelle: $PASSERELLE"
echo ""
# --- 1. Sauvegarde ---
echo "💾 Sauvegarde de la config réseau..."
cp /etc/network/interfaces /etc/network/interfaces.backup.$(date +%Y%m%d_%H%M%S)
# --- 2. Configuration Réseau ---
echo "⚙️ Configuration de l'interface $INTERFACE..."
cat > /etc/network/interfaces << EOF
# Configuration automatique par configure-yunohost.sh
# Date: $(date)
# Loopback
auto lo
iface lo inet loopback
# Interface principale (LAN)
auto $INTERFACE
iface $INTERFACE inet static
address $IP_LAN
netmask 255.255.255.0
gateway $PASSERELLE
dns-nameservers $DNS_PRIMAIRE $DNS_SECONDAIRE
EOF
# --- 3. Mise à jour /etc/hosts ---
echo "🏷️ Mise à jour du fichier /etc/hosts..."
sed -i "/127.0.1.1/d" /etc/hosts
echo "127.0.1.1 $DOMAINE $INTERFACE localhost" >> /etc/hosts
# --- 4. Redémarrage réseau ---
echo "🔄 Redémarrage du service réseau..."
systemctl restart networking
# --- 5. Vérifications ---
echo ""
echo "✅ Vérifications..."
# Vérifier l'IP
CURRENT_IP=$(ip -4 addr show $INTERFACE | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
if [ "$CURRENT_IP" == "$IP_LAN" ]; then
echo " ✅ IP correcte: $CURRENT_IP"
else
echo " ⚠️ Attention: IP détectée $CURRENT_IP (attendue: $IP_LAN)"
fi
# Vérifier la passerelle
DEFAULT_GW=$(ip route | grep default | awk '{print $3}')
if [ "$DEFAULT_GW" == "$PASSERELLE" ]; then
echo " ✅ Passerelle correcte: $DEFAULT_GW"
else
echo " ⚠️ Attention: Passerelle $DEFAULT_GW (attendue: $PASSERELLE)"
fi
# Test Internet
echo " 🌐 Test de connectivité Internet..."
if ping -c 2 -W 2 8.8.8.8 > /dev/null 2>&1; then
echo " ✅ Ping vers Internet: OK"
else
echo " ❌ Ping vers Internet: ÉCHEC (Vérifiez le NAT sur le routeur)"
fi
# Test Routeur
echo " 🛡️ Test de connectivité vers le routeur..."
if ping -c 2 -W 2 $PASSERELLE > /dev/null 2>&1; then
echo " ✅ Ping vers routeur: OK"
else
echo " ❌ Ping vers routeur: ÉCHEC"
fi
echo ""
echo "================================================================"
echo " CONFIGURATION TERMINÉE !"
echo "================================================================"
echo ""
echo "📌 Prochaines étapes :"
echo "1. Connectez-vous à l'interface web : https://$IP_LAN"
echo "2. Si le domaine '$DOMAINE' n'est pas reconnu, allez dans"
echo " 'Domaines' > 'Ajouter un domaine' et entrez '$DOMAINE'."
echo "3. Configurez le Proxy Host sur le routeur (NPM) :"
echo " - Domaine: $DOMAINE"
echo " - IP: $IP_LAN"
echo " - Port: 443"
echo " - Scheme: https"
echo "================================================================"
4. Utilisation du Script
Connexion : Connectez-vous à la VM YunoHost (via console virt-manager si vous ne connaissez pas l'IP, ou via SSH avec l'IP DHCP).
Création du fichier :
nano configure-yunohost.sh
# Collez le contenu ci-dessus
Exécution :
chmod +x configure-yunohost.sh
sudo ./configure-yunohost.sh 192.168.100.10 site1.mondomaine.com
(Remplacez 192.168.100.10 et site1.mondomaine.com par vos valeurs réelles).
Validation :
Le script affichera les résultats des tests.
Si tout est vert, reconnectez-vous via SSH avec la nouvelle IP : ssh admin@192.168.100.10.
Accédez à l'interface web : https://192.168.100.10.
5. Configuration Finale sur le Routeur (NPM)
Une fois le script exécuté avec succès :
Allez sur http://192.168.100.1:81.
Créez un Proxy Host :
Domains : site1.mondomaine.com
Forward IP : 192.168.100.10
Forward Port : 443
Scheme : https
SSL : Cocher "Request a new SSL Certificate".
Configurez vos DNS chez votre registrar pour pointer site1.mondomaine.com vers votre IP Publique.
📝 Comment créer les PDF
Copiez le contenu de chaque section (Document 1, Document 2, Document 3).
Collez-le dans un éditeur de texte (LibreOffice Writer, Word, Google Docs).
Mettez en forme les titres (H1, H2) et les blocs de code.
Faites Fichier > Exporter au format PDF (ou Imprimer > Enregistrer au format PDF).
Vous avez maintenant une documentation complète, prête à être imprimée ou partagée !
Conversation chiffrée
Demandez ce que vous voulez à Lumo
Lumo peut commettre des erreurs. Veuillez revérifier les réponses.
Tous les fichiers contenus dans cette discussion
Fichiers joints (2)
pasted-content-2026-05-09T06-41-16.txt
Text File
pasted-content-2026-05-09T20-03-31.txt
Text File
article/plusieurs_vm_yunohost_vers_une_seule_ip.txt · Dernière modification : de estro
