Plusieurs vm Yunnohost sur une même IP


retour

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