Lazer Posté(e) le 17 mai 2014 Signaler Posté(e) le 17 mai 2014 Introduction : Suite à une discussion tenue il y a quelques temps dans le sujet Accès HC2 de l'extérieur, je propose un tutoriel sur le mise en Å“uvre d'un Reverse Proxy avec HAProxy sur un NAS Synology. Certes, c'est de l'informatique, et non pas de la domotique, mais le but principal est d'accéder à nos équipements domotiques (en particulier les box Fibaro Home Center 2 ou Home Center Lite) depuis l'extérieur. La discussion citée précédemment décrit différentes méthodes d'accès aux ressources du réseau local depuis Internet, notamment la technique du Port Forwarding, qui consiste à ouvrir un port TCP coté WAN pour chaque équipement interne à joindre. Cette méthode fonctionne bien si on se connecte à son HC2 depuis la connexion Internet d'un ami, depuis un hôtel, depuis le partage d'accès 3G/4G de son smartphone, ou depuis une entreprise qui ne filtre pas trop les connexions. Mais la plupart des entreprises mettent en place des proxy filtrants, qui ne laissent assez souvent passer que les ports 80 (HTTP) et 443 (HTTPS). Même les connexions FTP, VPN, SSH, etc... sont bloquées, donc forcément les ports personnalisés qu'on a choisi. Donc on doit mettre en place un Reverse Proxy. Sur Synology, on peut utiliser HAProxy, ou sinon on se créer son propre serveur Linux qui fera le boulot. Le principe de fonctionnement est simple : avec notre domaine DNS, on crée autant de sous-domaines qu'on souhaite joindre d'équipements dans notre LAN. Par exemple, dsm.domaine.com, hc2.domaine.com, ecodevice.domaine.com, etc... dans l'interface d'administration du routeur, on redirige le port TCP 80 externe vers le port 80 du NAS qui héberge HAProxy au sein du LAN. dans la configuration de HAProxy, on crée toutes les règles pour rediriger les sous-domaines vers la bonne adresse IP dans le LAN. Le schéma est donc le suivant : Utilisateur sur le WAN => Routeur ADSL => Reverse Proxy => Equipement final (HC2, ...) Glossaire simplifié des termes employés dans ce tutoriel : LAN = Local Area Network, désigne le réseau local domestique WAN = Wide Area Network, désigne Internet Routeur = équipement réseau assurant la communication entre le LAN et le WAN. En France, nous sommes majoritairement équipés de Box Internet prêtées par les fournisseurs d'accès à Internet, telles que Freebox, LiveBox, etc... Adresse IP = adresse sur 4 nombres (par exemple 192.168.1.1) permettant d'identifier un équipement sur le réseau, que ce soit le LAN ou le WAN. A noter que coté WAN, les adresses IP sont uniques sur tout Internet, tandis que coté LAN, on utilise des plages d'adresses dites "privées" (192.168.x.y, ou 172.16.x.y, ou 10.x.y.z) c'est à dire qu'elle ne sont pas visibles depuis Internet. Le routeur se charge d'effectuer de la translation d'adresse, si bien que lorsque nous surfons sur Internet, ce n'est pas l'adresse IP de notre ordinateur/téléphone/tablette qui est vue, mais l'adresse IP externe du routeur. Adresse IP fixe : l'adresse IP fournie par le fournisseur d'accès à Internet peut être fixe (notamment chez Free) ou variable, c'est à dire qu'elle sera différente à chaque nouvelle connexion (ou tranche de 24h, cela dépend). Les adresses IP fixes sont bien sà»r préférables pour pouvoir se connecter chez soit depuis l'extérieur, mais la méthode du DynDNS existe pour s'en sortir même avec une adresse IP variable. Nom de Domaine DNS : sur Internet, nous n'utilisons couramment pas les adresses IP, mais plutôt les noms de domaine, tels que google.com ou domotique-fibaro.fr. Pour chaque domaine, on peut créer pratiquement autant de sous-domaine que l'on souhaite, qui sont placés en préfixe du nom de domaine. Le plus célèbre d'entre eux est www, ce qui donne www.google.com ou www.domotique-fibaro.fr. Il est bien entendu possible de créer le sous-domaine de son choix, afin d'obtenir des adresses telles que hc2.mondomaine.com, ou ecodevices.mondomaine.fr, ... Limitations de ce tutoriel : Je me limite volontairement à l'utilisation du port 80 avec le protocole http non-sécurisé. En effet, si il pourrait paraitre tentant d'utiliser le protocole https sur le port 443, il faut savoir que nous n'avons qu'un certificat auto-signé, donc non reconnu par les navigateurs Web, et donc également par les proxy d'entreprises, qui peuvent rejeter la connexion pour les plus filtrants, par mesure de sécurité. Le but de mon tutoriel étant de passer au travers d'un maximum de proxy d'entreprise, cela a plus de chance de réussir en utilisant le port 80. Dans la pratique, tant que votre nom de domaine n'est pas blacklisté, cela devrait fonctionner. Si vraiment la sécurité est nécessaire, il faut acheter un certificat SSL et l'importer dans la configuration de HAProxy, ce qui sort du cadre de ce tutoriel. De plus, je tourne sous la version 4.3 de DSM, pour plusieurs raisons : C'est un version stable et en production chez moi Comme j'utilise Xpenology dans une machine virtuelle VMware ESXi, la version 5.0 n'est pas encore suffisamment stable à mon goà»t (les derniers patchs posent problème) Cependant, je pense qu'il est aisé de suivre le tutoriel sous la version 5.0 de DSM qui est assez similaire, exceptée la refonte de l'interface graphique. Pré-requis pour ce tutoriel : Une box/routeur Internet Un NAS Synology Un nom de domaine DNS Une adresse IP fixe, ou à défaut un système de DynDNS Liens permettant d'approfondir le sujet : http://forum.hardware.fr/hfr/reseauxpersosoho/Reseaux/synology-dsm-disponible-sujet_5497_686.htm#t741030 http://www.nas-forum.com/forum/topic/39737-tuto-haproxy-et-regroupement-des-parametrages-trouves-sur-le-fofo/ 1 5
Lazer Posté(e) le 17 mai 2014 Auteur Signaler Posté(e) le 17 mai 2014 Ajout de la source de paquet alternatifs SynoCommunity Accéder à l'interface Web DSM du Synology : Ouvrir le Centre de paquets : Cliquer sur le bouton Paramètres : Cliquer sur l'onglet Sources de paquet : Cliquer sur le bouton Ajouter, et entrer les informations suivantes : Nom : SynoCommunity Emplacement : http://packages.synocommunity.com Cliquer sur le bouton OK, et vérifier que le nouvel emplacement a été pris en compte : Cliquer sur le bouton OK pour fermer la fenêtre et revenir à la liste des paquets : Cliquer sur l'onglet Communauté : Cliquer sur le bouton Actualiser afin d'obtenir la liste des paquets installables : . Installation de Python Lors de la rédaction de ce tutoriel, la version 2.7.3-3 ou supérieure de Python est nécessaire pour l'installation de HAProxy. Cependant, la version de Python fournie en standard par Synology est trop ancienne, et il faut donc installer celle fournie dans la source SynoCommunity. Faire défiler la liste jusqu'à trouver le paquet Python : Cliquer sur le bouton Installation : Patienter : Cliquer sur le bouton Terminer : Le paquet est installé et en cours d’exécution : . Installation de HAProxy Faire défiler la liste jusqu'à trouver le paquet HAProxy : Cliquer sur le bouton Installation : Entrer un mot de passe pour le compte admin (je n'ai pas encore trouvé quand ce mot de passe sera nécessaire) : Cocher la case Lancer après l'installation et cliquer sur le bouton Appliquer : Le paquet est installé et en cours d’exécution : . Configuration DNS Je ne peux pas décrire la méthode de configuration DNS pour tous les Registrar existants, cela sort du cadre ce tutoriel. La capture d'écran ci-dessous provient de chez OVH, et j'ai mis en évidence en bleu les 2 lignes intéressantes dans le cadre de ce tutoriel. L'idée est de créer : un enregistrement de type A correspondant à l'adresse IP externe du routeur Internet, par exemple freebox.mondomaine.com <=> 66.249.75.203 autant d'enregistrements de type CNAME que nécessaire pointant sur l'enregistrement précédent, par exemple dsm.mondomaine.com => freebox.mondomaine.com ou hc2.mondomaine.com => freebox.mondomaine.com Après enregistrement de la zone DNS et quelques instants d'attente, la commande ping permet de vérifier le succès de l'opération. . Configuration du Routeur De même que pour la configuration DNS, la configuration du routeur dépend du fournisseur d'accès à Internet. La capture d'écran ci-dessous provient d'une Freebox Revolution v6. L'idée est de créer une redirection depuis le port TCP 80 externe vers le port TCP 5080 sur l'adresse IP du Synology. En effet, HAProxy écoute sur le port 5080 par défaut. . 1
Lazer Posté(e) le 17 mai 2014 Auteur Signaler Posté(e) le 17 mai 2014 Configuration par défaut de HAProxy Dans le menu principal, l'icône de HAProxy apparait : Par défaut, les paramètres suivants sont configurés : . Il y a 3 notions principales à comprendre pour utiliser HAProxy : Frontend : Port d'écoute local de HAProxy sur le NAS Synology Backend : Cible de redirection des requêtes, c'est à dire l'adresse IP et le port de chaque équipement qu'on souhaite atteindre. Exemples : DSM, HC2, Eco-Devices, Caméra IP, etc... Association : Règle permettant à HAProxy de déterminer quel Backend sélectionner en fonction de l'URL demandée. Par exemple, si l'URL commence par http://hc2.... alors il envoie la connexion vers le backend HC2. Configuration personnalisée de HAProxy Par défaut, n'importe quelle requête arrivant sur HAProxy est redirigée vers le backend Web, c'est à dire le port 80 du Synology. Or si le service Web n'est pas activé dans DSM, alors celui-ci redirige la connexion vers le port 5000, qui est l'interface d'administration du NAS. C'est plutôt très moyen en terme de sécurité... Afin de sécuriser un minimum la chose, dans l'onglet Frontends, sélectionner le nom http, et supprimer le Backend par défaut : Dans l'onglet Backends, cliquer sur le bouton Ajouter et entrer les informations suivantes : Nom : hc2 Serveurs : hc2 192.168.x.y:80 check Options : <vide> Evidemment, il faut remplacer l'adresse IP correspondante de votre Fibaro Home Center. Recommencer pour tous les services nécessaires. Dans l'onglet Associations, cliquer sur le bouton Ajouter et entrer les informations suivantes : Frontend : http Backend : dsm Condition : if { hdr_beg(Host) -i dsm. } Recommencer pour tous les services nécessaires : Afin d'enregistrer et activer la configuration, dans l'onglet Configuration, cliquer sur le bouton Ecrire configuration : . Test de bon fonctionnement : Dans un navigateur Web, taper l'adresse désirée, comme par exemple http://hc2.mondomaine.com et vérifier que la page s'affiche correctement :
JossAlf Posté(e) le 18 mai 2014 Signaler Posté(e) le 18 mai 2014 Génial Lazer. Toujours aussi pédagogue en plus. Il faut absolument que je trouve le temps de mettre ça en place.
BenjyNet Posté(e) le 18 mai 2014 Signaler Posté(e) le 18 mai 2014 Bien bien tout ça mais c'est con le repo est HS pour quelques temps
Lazer Posté(e) le 18 mai 2014 Auteur Signaler Posté(e) le 18 mai 2014 Ah oui, c'est vrai, depuis 1 semaine le gars est en train de travailler sur son serveur.... J'espère que ça reviendra rapidement.
BenjyNet Posté(e) le 4 juillet 2014 Signaler Posté(e) le 4 juillet 2014 Bon les paquets synocommunity sont revenus, par contre, impossible d'installer le paquet HAProxy, j'ai une erreur "Echec lors du lancement de la réparation du paquet". Une idée christophe ?
Lazer Posté(e) le 4 juillet 2014 Auteur Signaler Posté(e) le 4 juillet 2014 Rrhaa, j'ai fais la mise à jour du package, et j'ai le même problème que toi. Cette version semble poser problème : DiskStation> tail -1 synopkg.log 2014/07/05 00:26:10 Start haproxy: start 1.5~dev25-12 failed Faut que je vois si on peut downgrader la version.
Lazer Posté(e) le 4 juillet 2014 Auteur Signaler Posté(e) le 4 juillet 2014 Hop, trouvé un autre moyen de faire fonctionner le bazar : Dans le Centre de paquets => bouton Paramètres => onglet Mise à jour de canal => cocher Canal beta => bouton OK Il propose alors la mise à jour de haproxy. en version 1.5~dev25-13 Et ça fonctionne : DiskStation> tail -1 /var/log/synopkg.log 2014/07/05 00:34:48 Start haproxy: start 1.5~dev25-13 successfully
BenjyNet Posté(e) le 5 juillet 2014 Signaler Posté(e) le 5 juillet 2014 Ouais bah ici ça fonctionne pas :/ Syno_NAS> tail -1 /var/log/synopkg.log 2014/07/05 08:48:14 Start haproxy: start 1.5~dev25-13 failed
Lazer Posté(e) le 5 juillet 2014 Auteur Signaler Posté(e) le 5 juillet 2014 Arf Tu es en quelle version de DSM ? Ici je suis encore en 4.3, mais je peux faire un essai dans ma VM en 5.0 pour voir...
BenjyNet Posté(e) le 5 juillet 2014 Signaler Posté(e) le 5 juillet 2014 Oui je suis en DSM5. J'ai installé le bootstrap pour avoir ipkg et l'installation se passe bien sauf qu'àchaque reboot il ne connait plus la commande ipkg (sans reboot ça marche). Bref ça me saoule ! Si tu trouves une solution je suis preneur
Lazer Posté(e) le 5 juillet 2014 Auteur Signaler Posté(e) le 5 juillet 2014 Je viens de faire le test sur ma VM en DSM 5.0-4482 (ce n'est pas la dernière version). Exactement le même comportement pour ma VM en 4.3, il faut mettre haproxy Beta 1.5~dev25-13 En synthèse, il faut suivre mon tuto, sauf pour l'installation de haproxy où il ne faut pas oublier dans le Centre de paquets => bouton Paramètres => onglet Mise à jour de canal => cocher Canal beta => bouton OK Je ne comprends pas pourquoi tu essayes d'installer ipkg ? Il n'y en a pas besoin pour mon tuto ! Tu essayes de passer par ipkg pour installer une autre version de haproxy, c'est ça ?
BenjyNet Posté(e) le 5 juillet 2014 Signaler Posté(e) le 5 juillet 2014 Ipkg c'est pour ma sauce perso Par contre j'ai bien suivi ton tuto avec le canal beta et je suis dans la dernière version de DSM mais non ça ne marche pas !
Lazer Posté(e) le 5 juillet 2014 Auteur Signaler Posté(e) le 5 juillet 2014 Ah OK Bon du coup je ne comprend vraiment pas pourquoi ça ne fonctionne pas chez toi. Tu as bien installé Python depuis Synocommunity et pas depuis les paquets officiels ?
BenjyNet Posté(e) le 5 juillet 2014 Signaler Posté(e) le 5 juillet 2014 Ouais ! J'avais python du paquet officiel, je l'ai viré puis installé celui de synocommunity. Ensuite passage en beta et installation de haproxy qui refuse de se lancer avec le message ci dessus. J'ai rebooté la bacane (même si sous Linux il n'y en a pas besoin). Bref je ne sais pas trop d'où ça vient.
thonegger Posté(e) le 9 juillet 2014 Signaler Posté(e) le 9 juillet 2014 memes probleme ici, j'ai bien installé python depuis la source community mais impossible de lancer haxproxy meme en version beta (derniere version de DSM) J'ai aussi voulu installer la version 3 de python mais meme probleme... des suggestions seraient les bienvenues! merci !
Lazer Posté(e) le 9 juillet 2014 Auteur Signaler Posté(e) le 9 juillet 2014 Bah là comme ça c'est juste impossible de vous aider... C'est quelle version de DSM exactement que vous utilisez ? Je peux tenter de reproduire le problème sur une maquette, mais pour ça faut que je sois à la même version, car dans mon cas, en 4.3 et en 5.0 ça a fonctionné.
thonegger Posté(e) le 10 juillet 2014 Signaler Posté(e) le 10 juillet 2014 Je suis sur DSM 5.0-4493 !
BenjyNet Posté(e) le 10 juillet 2014 Signaler Posté(e) le 10 juillet 2014 Idem DSM 5.0-4493 Update 2 du 27/06/2014
Lazer Posté(e) le 10 juillet 2014 Auteur Signaler Posté(e) le 10 juillet 2014 OK, j'essaierai de monter une maquette, mais pas avant ce week-end, et encore je ne suis pas certain d'avoir le temps. Je suis pas mal pris en ce moment.
Lazer Posté(e) le 27 juillet 2014 Auteur Signaler Posté(e) le 27 juillet 2014 Voici la solution au problème de haproxy qui ne veut pas démarrer. Note : je ne l'ai pas testé chez moi, car je n'ai jamais réussi à reproduire le problème. Néanmoins j'espère que ça vous débloquera. Il faut modifier un fichier de configuration de haproxy. Pour cela, il faut ouvrir une session SSH avec les droits root sur DSM (à l'aide d'un client comme PuTTY) A l'aide de l'éditeur vi, Il faut modifier le fichier /usr/local/haproxy/var/haproxy.cfg : DiskStation> vi /usr/local/haproxy/var/haproxy.cfg . Au début de ce fichier, il y a une section global : global daemon maxconn 256 log localhost user info spread-checks 10 . A la fin de cette section (et donc avant les autres sections), il faut ajouter la ligne suivante (utiliser la touche <a> pour passer en mode d’édition afin d'ajouter du texte, et en sortir en appuyant sur la touche <Echap>) : ssl-server-verify none . Sauvegarder le fichier et sortir de l'éditeur vi (taper successivement sur les touches suivantes : <:> <w> <q>). Notes : si vous ne vous en sortez pas avec vi et avez fait des bêtises dans le fichier, il faut sortir en annulant toutes les modifications avec <:> <q> <!> puis recommencer... Maintenant haproxy devrait démarrer depuis l'interface Web du centre de paquets. Merci à LANtastic de m'avoir contacté en message privé afin de débloquer la situation.
thonegger Posté(e) le 28 juillet 2014 Signaler Posté(e) le 28 juillet 2014 je confirme ca marche, tres tres fort, par curiosité, comment as tu su ? dans quel log tu es allé ? merci infiniment !!!
Lazer Posté(e) le 28 juillet 2014 Auteur Signaler Posté(e) le 28 juillet 2014 Je n'ai pas trouvé seul, c'est LANtastic, un membre anglophone de ce forum qui a créé un compte spécialement pour l'occasion afin de nous dépanner. Merci à lui Après une petite recherche je tombe sur ce message de blog assez récent qui décrit le même problème : http://blog.bpardo.fr/haproxy-sur-synology/
BenjyNet Posté(e) le 28 juillet 2014 Signaler Posté(e) le 28 juillet 2014 Je rentre juste de vacances... et que vois-je ?? Une solution ànos problèmes... magnifique les gars Du grand art je dis
Messages recommandés