J’ai retravailler cet article pour qu’il soit plus lisible et j’ai ajouter des exemples à la fin.
Définition :
Port forwarding, qu’est-ce que c’est ? C’est en gros, dire qu’un port de notre machine = un autre port. Et cet autre port peut-être un port différent sur une machine différente.
Comment ça marche ?
Sous linux, c’est avec la bonne vieille commande ssh.
Exemple :
ssh -Lport:host:autreport user@autre.machine.ext
Plus concrètement, voici un tunnel :
ssh -L13306:localhost:3306 user@192.168.0.5
Cette commande passe bien entendu via le port 22 (ssh), cela signifie qu’on peut se connecter à n’importe quel port d’une machine distante qui n’a que le port 22 d’ouvert (encore faut-il avoir le mot de passe ^^).
(Avec l’option -X, on peut aussi forwarder la sortie du serveur X.)
Ce qui est puissant aussi, lorsq’un tunnel comme ça est en place, c’est qu’on peut ensuite recréer un deuxième tunnel, qui forwarde le port sur lequel on arrive sur un autre port d’une machine distante. Ca s’appelle faire un rebond, et c’est utile lorsqu’une machine n’est joignable que via une autre machine précise. On se connecte sur la machine précise, puis on se connecte à l’autre. Et la magie opère, on a accès « en local » à tous les ports de cette machine distante joignable que depuis une autre machine et dont tous les ports sont fermés sauf le ssh (qui pour des raisons évidentes de sécurité ne sera pas sur le port 22, et sur laquelle tournera un bon vieux fail2ban).
NB : ça fait comme dans les mauvais films de piratages, quand la NSA traque un pirate et remonte à sa connection et là se rend compte que le type n’est pas là mais à fait un rebond, puis un autre, puis un autre…
Hmm… Je ne sais pas si c’est clair, alors je vais essayer de l’expliquer différemment :
Dans un premier temps :
ssh -L13306:localhost:13306 user1@machine1 (là je suis connecté en ssh sur la machine 1, sauf qu’en plus un tunnel existe)
-> mon port 13306 = le port 13306 d’une machine distante 1. C’est à dire que quand une de mes application dialogue avec le port 13306 en local, elle dialogue en réalité avec le port 13306 de la machine 1.
Ensuite (donc depuis machine1) :
ssh -L13306:localhost:3306 user2@machine2
le port 13306 de la machine 1 = le port 3306 de la machine 2 qui n’est accessible que depuis la machine 1.
Ce qui signifie que quand une de mes application dialogue en local avec le port 13306, elle dialogue en fait avec le port 13306 de la machine 1, qui est en réalité (ou en virtualité ?) le port 3306 de la machine 2.
Toujours, pour plus d’info : man ssh. Et aussi faire joujou et bidouiller.
C’est possible aussi de créer un tunnel à l’aide de putty, il faut aller dans dans Connection -> SSH -> Tunnels
Exemples d’application :
Se connecter à une base MySQL distante qui n’écoute qu’en localhost :
ssh 13306:localhost:3306 user@serveur_mysql
Puis sur son client en local, pour se connecter à cette base :
mysql -h localhost -P 13306 -u user -p
Se connecter en Terminal Server sur une machine derrière un pare-feu :
ssh 13389:localhost:3389 user@serveur_TSE
Puis sur son Terminal Server client en local :
localhost : 13389
protocole : RDP
Articles Relatifs :
- Howto install Drupal 7
- Postfix : Queue file write error + virtual_alias_maps map lookup problem
- Optimiser un serveur MySQL
- Mise à jour de cacti
- Application de webconférence Opensource






Enfin quelqu’un qui m’explique le tunneling ssh de manière à ce que je réussisse à le faire marcher !
Bravo et MERCI.
Corentin
Hello,
Comment on coupe un tunnel établi…?
merci
A +
Rémi
CTRL+C ? ou ps | grep ssh
Et killer le bon numéro de process ?
Hmm yes OK.
Et pour le garder actif alors ?
Je voudrais être sûr que mon tunnel reste actif pendant 48 heures, mais si je le lance à partir d’une console SSH à distance, comment être sûr que cette session ne soit pas tuée ?
Je lancerais la commande avec nohup en tache de fond pour ma part
Oui, sinon j’ai trouvé ces paramètres à rajouter à la commande : -f -N

ça marche aussi nickel
Merci bien
De rien, je ne t’ai pas été d’une grande aide

Mais merci d’avoir posté l’info ici
Enfin le tunneling ssh bien expliqué. Vraiment bien et rien à dire.
En plus j’aime bien la police Ubuntu.
@++