Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/04/2008, à 17:27

teke

[Résolu] Tunnel dans les deux sens ?

Bonjour,

Je m'occupe de la maintenance informatique de quatres petites écoles. Et je suis moi même dans une quatrième école où je n'ai aucune responsabilité. Mon seul véritable soucis est que chacune de ces écoles sont postées derrière des firewalls mis en place par le fournisseur d'accès. Les ports en sorties sont limités, mais surtout il n'y a aucune possibilité de rentrer dans le réseau depuis l'extérieur.

Je dispose dans une salle info d'une université d'un serveur sur lequel j'ai toute maîtrise.

Schéma :

  ecole1  ecole2  ecole3
    |       |       |
 #######################     *******
 # firewall étateque A #-----*  I  *
 #######################     *  N  *
                             *  T  *
        MonEcole             *  E  *
           |                 *  R  *
 #######################     *  N  *
 # firewall étatique B #-----*  E  *
 #######################     *  T  *
                             *******
       MonServeur               |
           |                    |
    ################            |
    # firewall UNI #------------+
    ################

Le sous réseau de ecole[1-3] est paramétré de sorte que aucune connections ne puisse y entrer si elle n'est pas initialisée de l'intérieur. Il n'est même pas possible de pinger une école depuis une autre.

Le sous réseau de MonEcole est paramétré de sorte que choque école puisse avoir deux adresses ip accessibles depuis l'extérieur, mais dans une DMZ. Je n'ai personnellement aucun accès à ces deux machines.

Il n'est donc pas possible d'initialiser une connections entre MonEcole et ecole[1-3]. J'aimerai donc bien trouver la possibilité  de me connecter sur ecole[1-3] depuis MonEcole, pour les tâches de maintenance et pour de l'aide à distance. Le truc que j'imaginai était de faire un tunnel ssh depuis les machines ecole[1-3] vers MonServeur. Puis depuis MonEcole vers MonServeur, afin d'utiliser les tunnels ssh pour travailler sur ecole[1-3] ? En fait de faire un espéce de réseau étendu, ou un VPN...

C'est principalement pour de la maintenance, mise à jour, installation de logiciel, gestion des backup, gestion des utilisateurs. Mais aussi pour de l'aide, via le bureau à distance.

Le serveur est sous debian, MonEcole sous hardy|debian|gentoo, ecole[12] sous gutsy ecole3 sous feisty (ppc).

J'utilise ssh de manière courante, mais pas en tunnel... J'ai trouvé pas mal de doc sur le tunneling, mais aucune ne faisant mention de la possibilité de remonter le tunnel à l'envers.

J'aimerais donc bien avoir vos avis, sur la faisabilité du bouzin, le choix de ssh ou ssl ou autre, et surtout si vous pouvez m'aiguiller vers de la doc. Je lis couramment le français, l'italien et l'allemand, mais pas un traître mot d'anglais.

Merci d'avance pour toutes réponses !!!

Dernière modification par teke (Le 05/06/2008, à 13:49)

#2 Le 22/04/2008, à 03:58

_YokoUno

Re : [Résolu] Tunnel dans les deux sens ?

Non, à ma connaissance ce n'est pas possible de "remonter le tunnel".

D'ailleurs, le tunnel en lui-même est un raffinement final d'une connexion ssh. On peut tout à fait en faire abstraction dans la compréhension de ce que tu cherches à faire.

Un serveur est un serveur. Si tu veux travailler sur le pc A depuis le pc B, installe un serveur ssh sur A et un client sur B. Ce n'est pas du tout choquant d'avoir sur une machine à la fois un serveur et un client. On peut même imaginer que deux utilisateurs, sur A (resp. sur B) établissent une connexion sur B (resp. sur A) et travaillent simultanément en ssh, et sans risque de cafouillage. Ce ne sont pas les mêmes ports qui sont mis en jeu dans de telles connexions, elles n'entrent pas en conflit.

Malgré tes explications ton 1er post n'était pas très clair, effectivement hmm

Pourquoi ne pas énumérer clairement ce que tu souhaites comme possibilités de contrôle de telle machine par telle autre? De plus, tu dis être coutumier de ssh. Existe-t-il des connexions ssh qui fonctionnent déjà entre ces établissements? Si oui, lesquelles?

ecole[1-3] sont derrière le même firewall, mais il est impossible de joindre une école depuis une autre

Doit-on comprendre qu'une connexion ssh entre l'école 1 et l'école 2, par exemple, fait partie des connexions que tu cherches à établir?
Ces trois machines peuvent-elles se pinger mutuellement? Sont-elles dans des sous-réseaux différents?

Pensez-vous qu'il soit possible de faire un tunnel ssh depuis les machines ecole[1-3] vers MonServeur. Puis depuis MonEcole vers MonServeur, afin d'utiliser les tunnels ssh pour travailler sur ecole[1-3] ?

Quel est l'intérêt de cascader ainsi les connexions? Pour toutes les connexions ssh qu'on peut imaginer avec ton dessin, il s'agit de sortir d'un firewall, transiter par internet, et entrer dans un firewall. Qu'est-ce qui t'empêche d'établir une telle connexion directement depuis ton école vers une des trois écoles, plutôt que d'envisager cette mise en cascade?

Les ports en sorties sont limités, mais surtout il n'y a aucune possibilité de rentrer dans le réseau depuis l'extérieur.

Si tu pouvais donner plus de détails sur ce que permettent les deux firewalls des écoles... celui de l'université n'étant pas un problème si on te suit bien.

Au cas où elle t'aurait échappé, la doc sur vnc explique clairement comment établir le tunnel, et en français smile

#3 Le 22/04/2008, à 07:34

teke

Re : [Résolu] Tunnel dans les deux sens ?

Merci beaucoup _YokoUno. J'ai modifié mon post initial pour tenter d'expliquer un peu mieux le problème.

Au fond, le problème est que je n'ai aucun contrôle sur les firewall, qui ne sont même pas dans les école mais chez l'hébergeur. Ceux ci interdisent tout contact extérieur, même le ping...

#4 Le 22/04/2008, à 09:50

yvan78

Re : [Résolu] Tunnel dans les deux sens ?

teke a écrit :

J'utilise ssh de manière courante, mais pas en tunnel... J'ai trouvé pas mal de doc sur le tunneling, mais aucune ne faisant mention de la possibilité de remonter le tunnel à l'envers.

Salut,

Il est possible de faire ce que tu souhaites à l'aide d'une possibilité de SSH: Les reverse tunnels.
En fait, sur une machine interne à chaque école, il faudra lançer ce style de commande (le -fNT est là pour ne pas allouer console/tty etc: Le process reste en tache de fond tant que la machine tourne et on peut ajouter les lignes a un script d'init de démarrage... ou une tache cron qui relance si nécéssaire si TonServeur est souvent rebooté ce qui fera tomber le reverse tunnel, le -R mets en place un reverse tunnel sur un port de ton localhost MonServeur):

Sur un PC du réseau local Ecole 1:
ssh -fNT -R 22001:localhost:22 <user_TonServeur>@<ipOuNomDomaine_TonServeur>
Sur un PC du réseau local Ecole 2:
ssh -fNT -R 22002:localhost:22 <user_TonServeur>@<ipOuNomDomaine_TonServeur>
Sur un PC du réseau local Ecole 3:
ssh -fNT -R 22003:localhost:22 <user_TonServeur>@<ipOuNomDomaine_TonServeur>

Note que le user_TonServeur peut être sans droits: Il ne sert qu'a établir le reverse tunnel a travers lequel on va passer pour établir une connection dans le sens opposé qui t'intéresse.

De TonServeur, il faudra pour chaque école lançer, par exemple pour l'école 1 (si tu veux la compression à la volée et le X11 forwarding, mets le -XC):

ssh -XC -p 22001 <user_Ecole1>@<ipOuNomDomaine_PcEcole1>

La seule petite faiblesse de ça, c'est que ssh stocke les ID machines auxquelles tu t'es déjà connecté (dans le ~/.ssh/known_hosts) par adresse IP et non par IP:PORT. Et comme pour SSH, tu te connectes toujours a un port (certes reverse forwardé) du localhost, il pense que la machine a changé son ID et ne veut pas se connecter sauf à rinçer le ligne conçernant le localhost (ou le fichier entier). Pourquoi ceci? Pour éviter les attaques MIM... sauf qu'ici ça ne s'applique pas car l'identification réciproque des machines a déjà été réalisée lors de l'établissement du reverse tunnel! Pour éviter d'avoir a rinçer des lignes dans le known_hosts, si tu peux configurer le /etc/sshd_config des machines ecole, tu peux y mettre une option pour ne pas tester ça (IgnoreUserKnownHosts no). Comme les connections directes de l'extérieur ne sont pas autorisées, ce ne sera pas un pb de sécurité.

De plus tu veux caser tout ça sur les machines école dans des scripts d'init/cron, tu devrais te connecter par clef privée/publique sans passphrase (et sur un compte limité de TonServeur) et non par user/mdp.

Ceci fonctionne en règle générale ainsi sans problème si le firewall ne regarde pas non plus les ports sortants. Si c'est le cas et qu'il bloque aux seuls 80(http)/443(https), il faudra modifier le /etc/sshd_config pour ajouter le port 443 en ecoute sur TonServeur... et au niveau des écoles, il faudra ajouter un fichier ~/.ssh/config qui vont réaliser un connect proxy (éventuellement avec les user/mdp demandés par le proxy si c'est le cas) à l'aide de proxytunnel. Voir ci dessous:
http://doc.ubuntu-fr.org/tutoriel/acces_full_internet_ssh_derriere_proxy

A+

#5 Le 22/04/2008, à 10:05

_YokoUno

Re : [Résolu] Tunnel dans les deux sens ?

Excellent. Merci smile

#6 Le 22/04/2008, à 13:21

yvan78

Re : [Résolu] Tunnel dans les deux sens ?

_YokoUno a écrit :

Excellent. Merci smile

SSH est très bien fait pour contourner les firewalls emmerdants et moucher les administrateurs trop cons...

Le seul requis que je n'avait pas précisé (mais implicite au vu des commandes de connection ssh dans les 2 sens) est qu'il te faut le serveur SSH des 2 côtés vu qu'on passe une connection reverse tunnel dans le sens sortant (utilisant ton serveur ssh)... et une autre dans le sens entrant à l'intérieur du tunnel (utilisant le serveur ssh de la machine de l'école).

J'espère que c'est le cas... ou que tu as au moins les droits pour configurer une machine dans chaque école, pour l'ajouter, qui te servira de relais sur l'intranet de chaque école.

Note aussi qu'a travers SSH, tu pourras utiliser pas mal d'applications de ta machine externe au réseau des écoles comme si tu étais dans chaque école (utile pour tester des configs): Les tunnels dynamiques (option -D <port> de ssh) sont faits pour ça et transforment le client et le serveur ssh en proxy socks v5 (sur le localhost:<port>). De là, en utilisant tsocks pour lançer les applis pas prévues pour utiliser un proxy (ou en ne voulant pas changer la config générale des applis prévues pour), tu peux par exemple utiliser ton client messagerie ou le navigateur internet comme si tu étais dans chaque école...

A+

#7 Le 22/04/2008, à 17:11

yvan78

Re : [Résolu] Tunnel dans les deux sens ?

teke a écrit :

C'est exactement ce que je cherchais !!!

J'avais regardé du côté de VPN, mais cela me semble vraiment lourd à mettre en place... ta solution me semble vraiment bien plus simple !

C'est en effet plus simple et plus simple pour un usage intermittent. Le seul truc est d'avoir le reverse tunnel actif quand on en a besoin, ce qui sera en général le cas sur des machines qui rebootent peu.

Sinon:
-Un utilisateur sur place qui lance la commande...
-Un script cron qui regarde si un process "ssh -fNT -R" est actif sur la machine de l'ecole, genre un truc qui analyse le retour d'un:

ps ax | grep "ssh -fNT" | grep R | awk '{printf "%s ", $1}'

... et qui essaye de lançer la commande toutes les 5mn sinon...
-Ou un mail (codé avec PGP vu l'utilisation) utilisé conjointment avec un script d'analyse des mails entrants pour déclancher le reverse tunnel sur la machine distante après envoi du mail de demande de reverse-tunnel (là on pourrait même mettre l'IP/domaine vers lequel on veut lançer le reverse-tunnel si tu peux en avoir besoin de différents endroits!). Les techniques peuvent varier ;o)

A+

#8 Le 03/06/2008, à 07:32

teke

Re : [Résolu] Tunnel dans les deux sens ?

Un grand merci !

Cela fonctionne bien. Je peux sans problème prendre le contrôle de mes pc dans les écoles, et si besoin aller sur les machines du réseau.

Le transfert de fichier à l'aide de nautilus fonctionne bien aussi avec l'adresse ssh://<user>@localhost:22001/home/user

Le seul petit truc qu'il me restera à trouver est comment utiliser nautilus pour aller sur d'autre machine du réseau...

Merci encore à tout deux pour vôtre aide.

#9 Le 07/02/2010, à 22:07

tuxkozak

Re : [Résolu] Tunnel dans les deux sens ?

Bonjour,

J'arrive après la bataille mais ça me botte carrément votre solution. C'est un truc que je cherche depuis des mois sans trouver quelque chose de simple ou universel.

Mais des petits détails m'échappent, surtout vers la fin. J'ai bien compris qu'on peut ouvrir un reverse tunnel ssh par cette commande sur la machine à aider :
ssh -fNT -R 22001:localhost:22 <user_TonServeur>@<ipOuNomDomaine_TonServeur>
Mais comment prendre la main, avec vnc ou x11vnc, sur la machine à aider ? Quelle est la commande ssh adaptée côté machine aidante (qui est aussi le serveur ssh) ? Sont-ce les bons ports dans la première ligne côté machine à aider ?

Mon but est de faire de l'assistance avec ce système.
Scénario simple : un client sous Ubuntu me téléphone et me dit qu'un truc cloche. Je lui envoie un script qui ouvre un reverse tunnel ssh vers chez moi et je prends la main sur sa bécane. Comme c'est lui qui a ouvert le tunnel, s'il le referme, il n'y a plus rien et ça le sécurise de savoir qu'on ne peut pas prendre la main sur sa machine sans le prévenir comme quand on règle sa box pour rediriger le port 5900 sur sa bécane et qu'on ne sécurise pas le bureau à distance.
Est-ce possible sans connaitre son adresse IP ; ou peut-on la transmettre par le reverse tunnel initial ?


Merci de vos réponses. C'est vraiment un super truc, ça mérite un tuto clair !

Dernière modification par tuxkozak (Le 08/02/2010, à 00:28)

Hors ligne

#10 Le 07/02/2010, à 22:16

Brunod

Re : [Résolu] Tunnel dans les deux sens ?

Je plussoie mon intérêt également pour retrouver ce post plus tard wink


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#11 Le 19/02/2010, à 18:00

Daëavelwyn

Re : [Résolu] Tunnel dans les deux sens ?

Pas mieux que Brunod, je plussoie avec force et je m'abonne !


La connaissance est le droit de tous, et le devoir de chacun.

Hors ligne