Oui, cela s'appelle GatewayPorts
en SSH. Un extrait de ssh_config(5)
:
GatewayPorts
Specifies whether remote hosts are allowed to connect to local
forwarded ports. By default, ssh(1) binds local port forwardings
to the loopback address. This prevents other remote hosts from
connecting to forwarded ports. GatewayPorts can be used to spec‐
ify that ssh should bind local port forwardings to the wildcard
address, thus allowing remote hosts to connect to forwarded
ports. The argument must be “yes” or “no”. The default is “no”.
Et vous pouvez utiliser localhost
au lieu de M
dans le transfert, car vous transférez vers la même machine que celle à laquelle vous vous connectez en SSH -- si j'ai bien compris votre question.
Ainsi, la commande deviendra ceci :
ssh -L 2222:localhost:8888 -N -o GatewayPorts=yes hostname-of-M
et ressemblera à ceci dans netstat -nltp
:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 5113/ssh
Désormais, toute personne accédant à cette machine sur le port 2222 TCP parlera en fait à localhost:8888 comme on le voit sur la machine M. Notez que ce n'est pas la même chose que le simple transfert vers le port 8888 de M.
Il existe un autre moyen. Vous pouvez configurer la redirection de port de S:2222 vers W:8888 avec iptables. Commande unique :
iptables -t nat -A PREROUTING -p tcp --dport 2222 \
-j DNAT --to-destination 1.2.3.4:8888
où 1.2.3.4 est l'adresse IP de M. Il s'appelle NAT (Network Address Translation).
Plus d'alternatives :netcat
(traditionnel) ou socat
Sur le(s) serveur(s) :
socat tcp-listen:2222,reuseaddr,fork tcp:M:8888
ou
nc -l -p 2222 -c 'nc M 8888'
Voir les détails dans :Méthode simple pour créer un tunnel d'un port local à un autre ?