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