Projet mini ferme deYNH avec 1 seule IP

Je suis en train de monter un serveur Proxmox pour héberger des VM Yunohost.
Ces VM passent par l’intermédiaire d’un serveur VPN (1 VPS OVH) pour accéder à internet.

Je bloque sur le reverse proxy qui permet d’avoir 1 IP fixe (celle du VPS ovh) et plusieurs VM yunohost.
J’ai essayé Squid et Apache pour le reverse proxy, mais dès que je lance la deuxième VM, les noms domaine se mélangent. (Chaque VM est sur 1 sous domaine : yuno1.testlab.com yuno2.testlab.com, etc)
J’ai aussi essayé Caddy, ça ne fonctionne pas aussi.

Tout d’abord est-ce que le reverse proxy et la bonne solution ?
Est-ce que quelqu’un veut bien m’aider pour la configuration

voici mon fichier de configuration pour ma première VM 1

<VirtualHost *:443>
ServerName www.yuno1.testlab.com
ServerAdmin ■■■■■■■■■■■■■■■■■■■
DocumentRoot /var/www/html/yuno1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
Include /etc/letsencrypt/options-ssl-apache.conf

SSLProxyEngine On

SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
SSLProxyVerify none

ProxyPass / https://10.8.0.50/
ProxyPassReverse / https://10.8.0.50/
RedirectMatch ^/$ https://10.8.0.50/

SSLCertificateFile /etc/letsencrypt/yuno1.testlab-chain.pem
SSLCertificateKeyFile /etc/letsencrypt/yuno1.testlab-pkey.pem

Il faudrait que tu donnes des exemples de concrets de test que tu as fait genre :

  • donner l’URL exacte que tu as essayé
  • décrire la page exacte que tu obtiens

Mais vu les infos que tu donnes, je dirais que tu as configuré juste :

Et que tu as essayé une URL comme :

Vu qu’elle ne matche aucune de tes 2 règles ci-dessus, elle est traitée par le virtual host par défaut de Apache, qui est peut-être une de tes 2 entrées, d’où ton impression « qu’elles se mélangent ».

Et que du coup ce que tu veux faire, c’est du routage sur tous les sous-domaines.
Donc il te faut un wildcard (*) dans ta configuration. C’est à dire à la place configurer :

Un exemple rapide en googlant : How to Create Wildcard Subdomain VirtualHost in Apache Server - Fedingo

Après il te faudra un certif SSL wildcard. C’est un peu plus compliqué avec Let’s Encrypt car il te faut un challenge DNS.

Mais bon, c’est peut-être autre chose ton problème, je fais que des suppositions.

2 « J'aime »

Hello,

Même diagnostic que @quentin !
Sinon je te conseille d’utiliser Nginx pour ça, qui a été principalement pensé à l’origine pour faire du reverse proxy ! Ça sera moins gourmand et plus performant qu’Apache.

1 « J'aime »

Un bon NGINX avec une interface Web est Nginx Proxy Manager. Il roule en Docker et redirige très bien vers plusieurs VM Proxmox.

1 « J'aime »

Merci pour les pistes. Je vais tester tout ça et je vous tiens au courant.

C’est un sujet qu’on pourrait aborder pendant l’atelier « Astuces et limitations de YunoHost pour un chaton en 2022 » organisé par @ljf pour le camp CHATONS.

Nginx ou Haproxy peuvent être des solutions pour faire ça grâce au SNI (ou à l’entête host pour HTTP). Ça signifie tout de même que tu es capable de savoir quels sont les domaines configurés dans chaque yunohost et que la config haproxy ou nginx s’adapte automatiquement en fonction. Ça peut se faire de plusieurs façon:

  • soit via le hook post_domain_create Hooks | Yunohost Documentation
  • soit à partir de l’hôte proxmox en regardant dans les disques des VM/LXC et en regardant les domaines configurés directement dans /etc/yunohost (ou ailleurs)

Pour SSH, on peut tout simplement utiliser des règles de forward iptables.

Pour le mail sortant, on peut utiliser les options de relais mail présentent dans YunoHost, on peut d’ailleurs transformer un yunohost en relais smtp (il y a tout de même quelques modifs à faire).

Pour le mail entrant, là j’avoue que je ne sais pas trop comment faire ça. En ipv6 ce serait facile, mais avec une unique IPv4 là question c’est comment faire pour que serveur smtp frontal redistribue au bons serveurs SMTP… A mon avis il y a moyen, mais la config de ce serveur smtp frontal va être assez funky.

Il faut aussi gérer Let’s Encrypt pour le SMTP frontal.

Pour dovecot, haproxy doit pouvoir gérer le sni dessus. (je suis pas sûr)

A noter que ça ne résous pas la question pour tout un tas de protocoles (Matrix, mumble, xmpp, …).

Autres solutions:

  • Récupérer un bloc d’ipv4 (mais ça à un coût annuel)
  • Déployer des ipv6 public (et tant pis si tout ne marche pas toujours)
  • Utiliser des .onion et accéder aux services via tor
1 « J'aime »

Pour la problématique des e-mails, voir aussi cet autre discussion sur le forum : Réunification de deux serveurs en un seul - #2 par denis

Salutations
Bon après plusieurs sessions de shell nocturne
J’ai essayé ngnx proxy manger, mais avec des yunohost derrière ce n’est pas approprié. Car chaque serveur doit générer ses propres certificats.
Par conséquent, j’ai juste configuré une iptables et ça fonctionne très bien.

J’arrive un peu tard.

Si tu as un reverse-proxy, c’est lui, en principe, qui doit gérer les certificats.

HA-proxy le fait très bien pour le web et les emails. (alors que ce sera plus compliqué de le faire avec Nginx pour les emails)

Après, rien ne t’empêche de chiffrer les échanges entre ce reverse-proxy et les autres VM.

Il faudrait éviter les SNI et certificats wilcard, mais dans ton cas, ça va devenir pénible, sauf en IPv6. On n’arrête pas de le dire, IPv6, c’est le présent et ça simplifie tellement les réseaux.