Aller au contenu
Lazer

Reverse Proxy Sur Nas Synology Avec Haproxy

Recommended Posts

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 :

 

  • Like 1
  • Upvote 5

Partager ce message


Lien à poster
Partager sur d’autres sites

Ajout de la source de paquet alternatifs SynoCommunity

 

Accéder à  l'interface Web DSM du Synology :

 

A01 config paquet synocommunity

 
Ouvrir le Centre de paquets :
 

A02 config paquet synocommunity

 
Cliquer sur le bouton Paramètres :
 

A03 config paquet synocommunity

 
Cliquer sur l'onglet Sources de paquet :
 

A04 config paquet synocommunity

 
Cliquer sur le bouton Ajouter, et entrer les informations suivantes :
 

A05 config paquet synocommunity

 
Cliquer sur le bouton OK, et vérifier que le nouvel emplacement a été pris en compte :
 

A06 config paquet synocommunity

 
Cliquer sur le bouton OK pour fermer la fenêtre et revenir à  la liste des paquets :
 

A07 config paquet synocommunity

 
Cliquer sur l'onglet Communauté :
 

A08 config paquet synocommunity

 
Cliquer sur le bouton Actualiser afin d'obtenir la liste des paquets installables :
 

A09 config paquet synocommunity

.

 

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 :

 

D01 install paquet synocommunity python

 
Cliquer sur le bouton Installation :
 

D02 install paquet synocommunity python

 
Patienter :
 

D03 install paquet synocommunity python

 
Cliquer sur le bouton Terminer :
 

D04 install paquet synocommunity python

 
Le paquet est installé et en cours d’exécution :
 

D05 install paquet synocommunity python

.
 
Installation de HAProxy
 
Faire défiler la liste jusqu'à  trouver le paquet HAProxy :
 

E01 install paquet synocommunity haproxy

 
Cliquer sur le bouton Installation :
 

E02 install paquet synocommunity haproxy

 
Entrer un mot de passe pour le compte admin (je n'ai pas encore trouvé quand ce mot de passe sera nécessaire) :
 

E03 install paquet synocommunity haproxy

 
Cocher la case Lancer après l'installation et cliquer sur le bouton Appliquer :
 

E04 install paquet synocommunity haproxy

 
Le paquet est installé et en cours d’exécution :
 

E05 install paquet synocommunity haproxy

.

 
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.
 

F02 Dns

.
 
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.
 

G01 routeur portforwarding

.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Configuration par défaut de HAProxy

 

Dans le menu principal, l'icône de HAProxy apparait :

 

H01 config synology haproxy

 
Par défaut, les paramètres suivants sont configurés :
 

H02 config synology haproxy

 

H03 config synology haproxy

 

H04 config synology haproxy

 

H05 config synology haproxy

.
 
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 :
 

I01 config synology haproxy

 
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.
 

I02 config synology haproxy

 
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. }
 

I03 config synology haproxy

 
Recommencer pour tous les services nécessaires :
 

I04 config synology haproxy

 
Afin d'enregistrer et activer la configuration, dans l'onglet Configuration, cliquer sur le bouton Ecrire configuration :
 

I05 config synology haproxy

.
 
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 :
 

J01 connexion haproxy homecenter2

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Génial Lazer. Toujours aussi pédagogue en plus.

Il faut absolument que je trouve le temps de mettre ça en place.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bien bien tout ça mais c'est con le repo est HS pour quelques temps :(

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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 !

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 !

Partager ce message


Lien à poster
Partager sur d’autres sites

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é.

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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/

Partager ce message


Lien à poster
Partager sur d’autres sites

Je rentre juste de vacances... et que vois-je ?? Une solution ànos problèmes... magnifique les gars :D Du grand art je dis ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

×