Ano, toto se nazývá GatewayPorts
v SSH. Výňatek z 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”.
A můžete použít localhost
místo M
při přeposílání, protože přesměrováváte na stejný počítač, na který posíláte SSH – pokud správně rozumím vaší otázce.
Takže příkaz bude tento:
ssh -L 2222:localhost:8888 -N -o GatewayPorts=yes hostname-of-M
a bude vypadat takto v netstat -nltp
:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 5113/ssh
Nyní každý, kdo přistupuje k tomuto počítači na portu 2222 TCP, bude skutečně mluvit s localhost:8888, jak je vidět na počítači M. Všimněte si, že to není totéž jako prosté přesměrování na port 8888 M.
Existuje i jiný způsob. Pomocí iptables můžete nastavit přesměrování portů z S:2222 na W:8888. Jediný příkaz:
iptables -t nat -A PREROUTING -p tcp --dport 2222 \
-j DNAT --to-destination 1.2.3.4:8888
kde 1.2.3.4 je IP adresa M. Říká se tomu NAT (Network Address Translation).
Další alternativy:netcat
(tradiční) nebo socat
Na serveru (S):
socat tcp-listen:2222,reuseaddr,fork tcp:M:8888
nebo
nc -l -p 2222 -c 'nc M 8888'
Podrobnosti viz:Jednoduchý způsob vytvoření tunelu z jednoho místního portu na druhý?