Un yuno pour les gouverner tous, ou comment configurer correctement une redirection en fonction d'un domaine sur plusieurs yuno

Bonjour a tous,

je suis a la recherche d’une âme charitable pour un projet qui traine chez moi depuis un moment, après avoir testé, laissé tomber, re testé, re laissé tomber, je me remet dessus dans l’espoir de le mener a bien une bonne fois pour toutes.
j’ai cherché des topics ici qui correspondent plus ou moins a ce que je tente de faire, mais rien de bien probant ou qui résolve mon souci… bonne lecture :

Mon infra est constituée comme tel :

  • plusieurs raspberrys avec yuno installé dessus, R1 R2 R3 pour rester simple je me débrouillerai pour les autres.
  • Plusieurs applis, A1 A2 A3 installées respectivement sur les R1 R2 R3
  • plusieurs domaines no ip D1 D2 D3 qui redirigent vers mon ip et configurés respectivement sur les R1 R2 R3
  • un routeur qui redirige les ports vers les R1 R2 R3 en fonction des appli installées sur les divers raspis, ce point est semi fonctionnel car certaines applis utilisent les mêmes ports, en particulier le 80 et 443

concrètement :
l’appli sogo est installée sur le R1, et est joignable depuis l’extérieur a l’adresse D1/sogo
nextcloud est installé sur le R2, et est joignable depuis l’extérieur a l’adresse D2/nextcloud

et c’est la qu’intervient mon souci, le 80 et 443 ne peuvent être redirigés que vers une seule machine, donc seule une des deux applis pourra être joignable.

c’est la que survient mon idée saugrenue :

  • je rajoute un nouveau raspi, R4, sur lequel je colle mes 3 domaines.
  • je rajoute l’appli redirect qui va rediriger le D1 vers le R1, etc
  • je redirige mes ports 80 et 443 vers le R4 pour qu’il serve de passe plat vers les autres en fonction de quel domaine vient lui taper dessus

c’est plutôt moche, mais ça fonctionne, dans le principe, quand je tape D1 j’ai bien le R1 qui répond et ainsi de suite, SAUF que j’ai la page d’administration qui répond et non la web avec le portail, j’ai tenté plusieurs variantes :

  • rediriger le lien D1/sogo vers le R1/sogo
  • rediriger le lien D1:443/sogo vers le R1:443/sogo
  • rediriger le lien D1 vers le R1/sogo
    et toutes les autres variables possibles et imaginables sans succès, dans le meilleur des cas j’arrive a tomber sur la page d’admin en local, et dans le pire des cas je tombe sur la page d’authent du R4 qui m’affiche une erreur 500 nginx quand je me log…

alors oui, je sais que peux installer toutes les applis sur le même raspi, mais ce n’est pas ce que je cherche a faire.

je tiens a séparer certaines applis, en premier pour éviter que tout tombe si un raspi tombe, également parce que j’ai de la redondance sur certaines applis, et également parce que la machine qui sert de serveur mail est un vrai attrape merde qu’elle est encore plus isolé que le reste du réseau, il y a d’autres raisons.

Globalement je cherche une aide pour mettre en place ce 4ème raspi, et pas qu’on me dise comment m’en passer en mettant tout au même endroit…

merci d’avance, pardon pour le pavé a lire, et a bientôt :slight_smile:

Simple question que ne répond pas directement au problème, mais as tu envisagé d’utiliser l’ipv6 ? En général les boxes fournissent un /64 permettant sans problème d’avoir une ipv6 publique par RPi et comme ça plus tous les problèmes de redirection?

merci pour ta réponse, oui en effet je l’ai envisagé mais le routeur et l’utilisation de l’ip v6 est un poil foireuse avec donc je voulais essayer de m’en passer… autre point, les redirections no ip sont assez foireuses en ipv6

1 Like

Bonjour,
C’est un genre de “reverse proxy” qui’il faut. Est-ce que l’approche proposée ici marcherait ?
deux-yunohost-derriere-une-seule-box
Par contre il n’y a pas de synchro entre les R1 R2 R3… par exemple les annuaires LDAP seront différents…

Hello,

Avis totalement profane, mais,

Si l’idée est de séparer le tout, il me semble que promox permet de séparer tout cela, et Yunohost tourne dessus/dessous/dedans.
Je suppose que tes autres framboises peuvent faire la redondance.

Est-ce aussi une idée qui a été envisagée ?

il me semble que j’avais testé cette solution et que j’avais rencontré une coquille aussi, je vais la re tester de ce pas pour te confirmer le problème que j’avais eut a l’époque

le fait que les annuaires soient différents ne me dérange pas du tout, et c’est même plutôt souhaité en vrai :slight_smile:

le profane a parfois du bon de parler, je connaissais pas promox, je vais y jeter un oeil et voir si ça peut me sortir de ma galère

OK… je crois que l’appli ynh_redirect fait simplement du “reverse proxy” donc ça devrait marcher aussi, je pense que la clef est dans la manière dont le reverse proxy “attaque” les serveurs R1 R2 etc.

Proxmox nécessite une machine x86, c’est un serveur de virtualisation

je pense que redirect doit pouvoir faire le boulot, mais j’arrive pas a trouver le bon param pour que ça affiche la page de l’appli et non la page d’admin comme ça se passe lorsque je tape sur son ip depuis le réseau local…

Pour ca il faut ajouter les domaines au resolver DNS local du routeur (si il existe) ou modifier le fichier hosts de la machine qui tente de joindre le serveur en local.

Es-tu aussi conscient de ca :

Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. https://the.domain.tld/yunohost/sso), et non pas en utilisant l’IP du serveur (c.-à-d. https://11.22.33.44/yunohost/sso), contrairement à la webadmin ! C’est un peu déroutant dans certaines situations, mais c’est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d’accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre /etc/hosts comme décrit dans cette page.

extrait de Les utilisateurs et le SSO | Yunohost Documentation

merci de ta réponse,
j’ai bien ajouté les domaines sur mon resolver local, par contre le problème c’est que ça envoi toujours vers la page d’administration.
J’avais effectivement vu le fait que le SSO ne peut être joint que via le nom de domaine et non via l’ip locale de la machine, ça doit être pour ça que je me retrouve toujours sur la page de config avec ce que j’ai tenté sur redirect, et je cherchais un moyen de contourner ça… j’ai tenté de bidouiller dans le fichier host de ma machine, pour faire taper sur le local en joignant le domaine, mais le problème reste entier, je me retrouve sur sa page d’admin au lieu de tomber sur la page sso

J’ai vu un portage ici : Proxmox avec un Pi

Je pense qu’il te faut un proxy sur un Raspberry (ou autre) genre Nginx Proxy Manager simple et gérant les certificats SSL tout seul

Bonjour,

J’ai un serveur de test dans proxmox et je tombe bien sur la page des applications avec redirect. Proxmox simplifie la tâche avec la mise en place de machine virtuelle mais le principe reste le même avec plusieurs machines physiques, comme ici 4 RPI, ce n’est pas la raison pour laquelle ça échoue pour toi.
Peux-tu poster un exemple d’un de tes fichiers de redirection?

merci a tous pour vos réponses, entre hier et aujourd’hui j’ai refais plusieurs tests et manips dont voici les résultats :

utilisation IPV6 :
bien que foireux sur mon routeur j’ai quand même tenté la manip, j’ai activé l’ipv6 sur mon routeur et sur mon pi, j’ai fais une redirection sur noip qui pointe vers mon ipv6 directement, et lorsque je tape cette adresse depuis l’extérieur je tape bien le bon pi, mais la page qui s’affiche est la webadmin.
dans le doute j’ai quand même tenter de le taper depuis les applis sur mon téléphone histoire de voir si ça résolvait quelque chose, après une première erreur de certificat, mais j’ai ensuite une erreur sur la requête http vers mon D1/sogo/ etc, ce qui est logique car lorsque je tape le domaine D1 je me retrouve non pas sur la page d’authent mais sur la webadmin…

utilisation proxmox :
j’ai monté une petite infra vite fait sur mon serveur physique, et le problème est le même que celui rencontré avec redirect, ou l’IPV6, quand je tape mon domaine D1 je tombe bien sur le raspi R1, le D2 vers le R2, etc, mais encore une fois je tombe sur la webadmin et non la web ‘classique’ qui me permet de joindre les diverses applis.

utilisation de nginx proxy manager :
j’ai reproduit l’erreur que j’avais rencontré avant qui était, je pense, due au fait que j’avais tenté de l’installer sur un raspi avec yuno, dont l’utilisation du port 80 et 443 empêchait les applis docker de démarrer correctement.
problème résolu en installant une raspi toute neuve et propre - les applis démarrent et j’ai pu rajouter mon domaine et créer le ssl.
petite différence avec les autres méthodes, quand je tape mon domaine D1 depuis mon réseau je tombe sur la webadmin, mais quand je la tape depuis l’extérieur je me prend une 502 - bad gateway, ici comme pour les autres tests, les applis sur mobile partent dans l’espace avec parfois une erreur de requête http/https, parfois sur un timeout.

après les tests je pense que nginx serait la solution qui fonctionnerait le mieux, mais je pense que les configs que j’ai tenté ne sont pas celles qui fonctionnent pour mon installation… quelqu’un aurait une idée de config que je pourrais tester ?

Voici un exemple de config situé sur le frontal:

location /hextris {
  proxy_pass        https://192.168.0.23/hextris;
  proxy_redirect    off;
  proxy_set_header  Host $host;
  proxy_set_header  X-Real-IP $remote_addr;
  proxy_set_header  X-Forwarded-Proto $scheme;
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header  X-Forwarded-Host $server_name;
  proxy_set_header  X-Forwarded-Port $server_port;
  
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";

  # Include SSOWAT user panel.
  include conf.d/yunohost_panel.conf.inc;
  more_clear_input_headers 'Accept-Encoding';
}

C’est le fichier généré par l’application redirect.
Sur le serveur qui héberge l’application, certificat auto-signé, c’est le frontal qui délivre le certificat Lets Encrypt.
Nom de domaine installé sur les 2 yunohost, celui en frontal et celui situé derrière celui-ci.

merci metyun, je vais tenter de bricoler encore quelques heures via nginx proxy manager, et si je reste encore bloqué je remonterai un yuno avec redirect et je te joindrai la config que je sortirai :slight_smile:

problème résolu !

alors c’est moyennement propre, mais j’ai testé plusieurs bidouilles et l’une d’entre elles a finit par passer, je file l’info au cas ou quelqu’un d’autre voudrait reproduire la même connerie que moi …

via nginx proxy manager, dans les proxy host, et non dans les redirections, j’ai ajouté mes proxy de cette façon :

dans l’onglet details :

domaine name : mon nom de domaine
scheme : http
forward hostname/ip : l’ip locale de mon raspi
forward port : 443
cache assets, block common exploit et websockets support cochés
acces list : publicly accessible

dans l’onglet ssl :

ssl certificate : request new ssl certificate
force ssl, hsts enabled et http/2 support cochés
hsts subdomain non coché

je trouve bizarre de devoir déclarer du http en 443, mais si je lui colle en https ça merdouille donc je laisse ce paramétrage un peu moche.
testé sur 4 de mes domaines et raspi sans erreur particulière, j’ai plus qu’a tester sur la dizaine d’autres domaines que j’ai sous le coude et a peu près autant d’applis, mais ça devrait marcher, je ferai un update si une des applis nécessite un paramétrage particulier encore sortit d’un autre monde…

en bref : merci a tous pour votre aide :slight_smile: :champagne:

2 Likes

En utilisant un yunohost en frontal à la place de Nginx proxy manager, il faut penser à mettre les autorisations des applications dans le groupe “Visiteurs” sur les yunohost placés derrière celui-ci pour que ça fonctionne. La restriction des droits à un seul ou plusieurs utilisateurs se fait sur le frontal au niveau de l’application redirect.
Si je regarde comment tu as configuré ton NPM , c’est proche de ce que j’ai fais avec yunohost et redirect; ton échec avec cette solution devait sûrement être au niveau des autorisations.