philippewang.info

Une petite histoire de tunnels avec SSH

Scénario (faisant intervenir SSH, donc ceux qui ne veulent pas de SSH dans leur vie ne risquent pas d'y trouver un quelconque intérêt) :

On veut pouvoir accéder au réseau R1 qui est un réseau local non accessible directement (typiquement derrière un "routeur NAT" - i.e. ce qu'on appelle communément "routeur" dans le commerce et qu'on a à la maison alors qu'en fait c'est pas trop un routeur).

Les machines du réseau R1 ont accès vers l'extérieur mais l'extérieur n'a pas accès direct aux machines (même situation typique que précédemment).

On peut en général configurer le routeur pour qu'il envoie ce qui arrive sur le port 22 à une machine spécifique du réseau. Mais si la machine qu'on veut contacter est changeante (i.e. pas toujours la même), ou toute autre situation qui fait qu'on ne peut pas mettre cette configuration en place, alors ça devient un peu plus tordu.

On veut pouvoir - sans toucher au routeur ni à quelconque configuration réseau - accéder au réseau local (donc à au moins une machine).

Solution :

Soit M1 une machine toujours accessible de l'extérieur (par exemple un serveur loué ou un serveur à la maison) (on prend le luxe d'ajouter cette machine aux éléments du scénario).

On prend n'importe quelle machine (nommons l'heureuse élue "MR1") du réseau R1 ayant un client et un serveur SSH, on ouvre une connexion à double sens avec la machine M1 :

   ssh -R 1111:0.0.0.0:22 M1

pour la rendre plus robuste avec des moyens peu chers, il suffit d'exécuter dans un "screen" (cf. "man screen" pour ceux qui ne connaissent pas) :

   while true ; do ssh -R 1111:0.0.0.0:22 M1 ; done

Désormais, depuis M1, on peut se connecter en SSH à MR1.

On peut maintenant jouer avec des tunnels !

Pour se connecter en SSH à MR1 en passant par M1 :

1ere option (super tordue) :
  ssh -o "ProxyCommand=ssh M1 ssh localhost -p 1111 nc localhost 22" dummyhost
=> cela connecte directement sur MR1

2nde option :
sur la machine client, exécuter :
  ssh -L 2222:localhost:1111 cat
puis exécuter
  ssh localhost -p 2222
Pour accéder au pages web intranet du réseau R1 (comme si on était sur la machine MR1) :
ssh -L 8080:localhost:8080 ssh -D 8080 localhost -p 1111
puis demander au navigateur de passer par le proxy en SOCKS5 sur localhost avec le port 8080.
remarques :
  • localhost pourra être remplacé par d'autres appellations de "l'hôte courant" (0.0.0.0, 127.0.0.1, lepetitnomdevotremachine, ...) pour éviter les problèmes de signatures de serveurs
  • pour utiliser les doubles ssh, il faut avoir des jeux de clefs ssh opérationnels (soit sans mot de passe, soit avec mot de passe + agent ssh)
2008-08-08

:: philippewang.info ::

:: design & photos by Philippe Wang :: XHTML 1.1 :: CSS 2 :: RSS 2 :: stats :: contact ::
:: Best viewed with Safari or Opera or Firefox or Links :: No SPAM Please ::
 
This page was generated on Thu Mar 20 19:41:11 GMT 2014 by BashGXD