はい、これは GatewayPorts
と呼ばれます SSHで。 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”.
localhost
を使用できます M
の代わりに SSH 接続しているのと同じマシンに転送しているため、転送で -- 私があなたの質問を正しく理解していれば。
したがって、コマンドは次のようになります:
ssh -L 2222:localhost:8888 -N -o GatewayPorts=yes hostname-of-M
netstat -nltp
では次のようになります :
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 5113/ssh
ポート 2222 TCP でこのマシンにアクセスする人は、マシン M で見られるように、実際には localhost:8888 と通信します。これは、M のポート 8888 への単純な転送と同じではないことに注意してください。
別の方法があります。 iptables で S:2222 から W:8888 へのポート転送を設定できます。単一コマンド:
iptables -t nat -A PREROUTING -p tcp --dport 2222 \
-j DNAT --to-destination 1.2.3.4:8888
ここで、1.2.3.4 は M の IP アドレスです。 NAT (Network Address Translation) と呼ばれます。
その他の代替:netcat
(繁体字) または socat
サーバー上 (S):
socat tcp-listen:2222,reuseaddr,fork tcp:M:8888
または
nc -l -p 2222 -c 'nc M 8888'
詳細は次を参照してください:あるローカル ポートから別のローカル ポートへのトンネルを作成する簡単な方法