tunnel_requins_600

Un tunnel, c'est un moyen pour joindre deux points en traversant en toute sécurité des milieux parfois incertains et hostiles..




Principe et pré-requis


Ne voyez pas le tunnel SSH comme une liaison complète entre votre machine et un autre poste distant.
En fait, ce qui est transporté (relié), c'est le port d'un pc connu et un port "localhost", par l'intermédiaire d'une liaison SSH entre votre système (CentOS ou autre) et une machine du réseau distant ou se trouve le pc connu.

tunnel_ssh_schema


Prenons un exemple concret. Je suis sur une CentOS (parti pris inside, je sais..), baptisée "client SSH" sur le schéma ci-dessus et située dans un réseau privé à mon domicile.

L'objectif est d'ouvrir une session Windows à distance (type TSE, "serveur cible" sur le schéma), sur une machine située au bureau, dans un réseau privé d'entreprise, avec pour seule passerelle un serveur CentOS ("serveur SSH" sur l'image) qui a une patte SSH ouverte sur l'extérieur (ip publique + port 2222).


Pour ce faire, il nous faut :

  • L'ip externe (ou l'adresse résolue) du site distant : on va prendre 89.89.10.10 pour l'exemple
  • Le port SSH (22 par défaut) transféré et donc accessible depuis l'extérieur : 2222 dans notre cas
  • L'ip locale (sur son réseau privé d'entreprise) de la machine distante (serveur cible) : mettons 192.168.100.10
  • Le port de l'application de la machine distante que l'on souhaite utiliser : le TSE Windows utilise par défaut le port 3389
  • Un compte utilisateur SSH sur la passerelle CentOS : on va utiliser le compte "pierre", créé avec des droits limités
  • Un port local non utilisé : le 3340 est disponible sur ma machine



Ce que l'on va obtenir concrètement :

  • Le port 3389 du serveur cible va être relié au port 3340 de la carte "lo" (localhost) de ma machine
  • Notez que localhost n'est pas le nom de mon pc, quasi toutes les machines ont un localhost généralement en 127.0.0.1
  • L'ip locale de mon pc "client SSH" n'a aucune importance.
  • La translation restera active tant que la connexion SSH sera maintenue. Coupez SSH pour fermer le tunnel




Mise en pratique et création de la translation (tunnel)


  • Tout d'abord, assurez vous de pouvoir joindre la passerelle depuis l'extérieur. D'une manière tout à fait traditionnelle. Avec les informations données ci-dessus, ça donne une connexion SSH (ci dessous pour l'utilisateur "pierre" et le port "2222") :
# ssh 89.89.10.10 -l pierre -p 2222


  • Une fois ce test effectué, vous pouvez passer à l'étape suivante, c'est à dire au tunnel SSH. Voici la partie de ligne requise pour la translation :
# ssh -L port_localhost:ip_de_la_machine_cible:port_de_la_machine_cible


  • Ce qui donne dans notre cas :
# ssh -L 3340:192.168.100.10:3389


  • Ne nous reste qu'à fusionner nos deux lignes SSH (celle de la connexion et celle du tunnel) :
# ssh -L 3340:192.168.100.10:3389  89.89.10.10 -l pierre -p 2222




Paramétrage du Client bureau à distance


Comme décrit plus haut, la connexion transfère le port distant 3389 (machine cible) sur le port 3340 de notre client SSH (localhost). Fort logiquement, c'est cette information qu'il suffit d'indiquer au logiciel de bureau à distance :

capture_connexion_tunnel_ssh


Autre exemple avec un serveur web


Pour en terminer avec les exemples, supposons que la machine cible ne soit pas un serveur TSE Windows mais plutôt un serveur Web privé.

Par défaut, un serveur Web normal utilise le port 80. Nous allons donc transférer le port 80 de la machine cible vers un port disponible de notre poste CentOS, par exemple le 8080.

  • La ligne de connexion complète devient :
# ssh -L 8080:192.168.100.10:80  89.89.10.10 -l pierre -p 2222


  • Il vous suffit ensuite d'ouvrir votre navigateur Web sur l'adresse : http://localhost:8080





Vous pouvez commenter ou participer à l'amélioration de cet article via le topic dédié du forum.