あるシステムから別のシステムにポートを転送する方法は?

あるシステムから別のシステムにポートを転送する方法は?

次の状況を考えてみましょう。

私の家には、ルーター(インターネットに接続されている)、サーバー(S)、ホスト(M)があります。 Sはインターネット(固定IP付き)を介してアクセスでき、年中無休のオンラインですが、Mはそうではありません。

場合によっては、外部インターネットからアクセスできるいくつかのアプリケーション(8888 Mの特定のポートでリッスンするなど)を作成したい場合があります。

このために、S(2222)の一部のポートをMのポート8888に転送するように設定して、S:2222にアクセスする人は誰でもM:8888にアクセスするように感じることができるようにしたいと思います。

SSHポート転送を試しましたが、最善の試みは次のとおりです。

ssh -L 2222:M:8888 -N M

ただし、これにより、他のコンピュータではなくサーバー自体からのみポート2222にアクセスできます。

これを正しく実行する方法はありますか?これ以上転送が不要になったときに ^C を使って開始して終了できる簡単なコマンドであればいいです。

ベストアンサー1

はい、これがGatewayPortsSSHで呼び出される方法です。抜粋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転送するコンピュータはSSHを使用するのと同じコンピュータであるため、転送に代わりに使用できます。M

したがって、コマンドは次のようになります。

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

これで、TCPポート2222を介してこのコンピュータにアクセスしている人は、コンピュータMに示すように実際にlocalhost:8888と通信します。これは、Mに転送される通常のポート8888とは異なります。

おすすめ記事