Quand on fait du développement ou de la configuration de serveur, on a souvent recourt à de la redirection de port ou du tunneling. On peut aussi s'en servir dans son usage courant pour débrider ou sécurisé sa connexion internet.

Il existe pas mal de méthode pour faire de la redirection de port ou du tunneling, je vous montre avec ssh car c'est simple, sécurisé et de base dans tous les systèmes Unix/Linux (donc aussi MacOSX/MacOS), et donc c'est facile à reproduire.

Redirection de port

La logique de la re direction de port, c'est d'écouter un port et renvoyer tout le contenu sur un autre port de la même machine.

Dans la pratique c'est très simple :

ssh -N -L <port d'écoute>:localhost:<port de renvoi> localhost
# exemple : ssh -N -L 8888:localhost:9999 localhost

Si on utilise l'exemple, tout ce qui sera envoyé sur le port 8888 sera renvoyé sur le port 9999. À noter que l'option "-N" est utilisé pour ne pas accéder à un autre shell (usage le plus courant de ssh).

Tunneling

Lorsqu'on fait du tunneling, ce qu'on cherche c'est à attendre les connexions sur une machine A et rediriger tout vers une machine B, en faisant passer toutes les connexions dans un tunnel chiffré.

Si on exécute la commande depuis A :

ssh -N -L <port>:<adresse de B>:<port> localhost
# exemple : ssh -N -L 8888:192.168.0.6:8888 localhost

Si on exécute depuis B :

ssh -N -R <port>:localhost:<port> <adresse de A>
# exemple : ssh -N -L 8888:localhost:8888 192.168.0.5

Ces deux commandes ont le même résultat : créer un tunnel entre le port 8888 de la machine A et le port 8888 de la machine B. La différence se situe dans la création du tunnel. Dans le premier cas, c'est A qui contrôle la connexion, donc A doit avoir accès à B ce qui est logique du fait qu'on veut faire une redirection depuis A vers B. Dans le second cas, on veut toujours une redirection de A vers B, mais c'est B qui a le contrôle, donc même si A ne peut pas accéder à B, si B a accès à A, la redirection peut être faite quand même.

On mélange tout

Il est bien sûr possible de faire à la fois du tunneling et de la redirection de port. Par exemple :

ssh -N -L 8080:192.168.0.6:80 localhost

Dans l'exemple on a créé un tunnel entre le port 8080 de la machine A vers le port 80 de la machine B.

Crédit photo : http://finda.photo/image/14345