【Linux】SSH ポートフォワーディング

TeraTermなどに標準搭載されているポートフォワーディングについて書きたいと思います。 とても便利な機能なのですが、意外と知らない人も多いので。
ポートフォワーディングとは、簡単に言えば指定のポートで受信したパケットを、 他のサーバやPCの指定したアドレスのポートへそのまま転送する、っていう機能です。
言葉で説明しても分かりづらいので、絵に書いて説明してみます。


図の状況を説明します。オフィスにある作業端末からインターネット経由でAWS上のサーバへ接続しようとしています。
LinuxサーバはPublicサブネットにあるので、グローバルIPアドレスを持っています。 さらにSSHサーバが動いているので、オフィスの作業端末からLinuxサーバのグローバルIPアドレス宛にSSH接続すれば、 サーバへログインすることが可能です。(FWやセキュリティグループ、sshdの設定等は適切に設定がされているとして。)

が、問題となるのはPrivateサブネットにいるWindowsサーバです。
Privateサブネットにいるため、グローバルIPアドレスは持っていません。 てことはWindowsサーバにログインして構築作業ができません。
ここで役に立つのがポートフォワーディングです。 ネットワーク的には繋がっているのだから、繋げてしまえばいいじゃないか、という発想。 図にすると以下のような形です。

簡単に言うと作業端末上でリッスンしている13389番ポートと、 Windowsサーバの3389番ポートがつながった状態になっています。
この状態で作業端末から127.0.0.1:13389へRDP接続しますと、Windowsサーバの3389番ポートへ転送され、 Windowsサーバへのリモートデスクトップ接続が成功します。
もちろん、この接続が成功するのはTeraTermなどのSSHクライアント上でポートフォワーディングの設定を事前に行い、 Linuxサーバへ作業端末からSSHで接続している状態であることが前提条件となります。
あとLinuxサーバからWindowsサーバの3389番ポートへ到達できることも必須条件(ネットワーク的に)。
で、具体的な設定方法は以下の通り。今回はTeraTermで設定していますが、Puttyとかでも同じように設定する箇所があるので、そこを設定すればできます。

まずは[設定]⇒[SSH転送]をクリック。

[追加]をクリックすると以下の画面が出ますので、それぞれ必要事項を入力。

ローカルのポート:上の方の図でいうと、作業端末上でリッスンさせるポートです。作業端末上で空いているポートを指定する必要があります。
今回は13389を指定。別に重複してなければ何でもいいです。

リモート側ホスト:接続したいWindowsサーバのIPアドレスです。 ここで注意なのは、結局接続元は作業端末ではなくてLinuxサーバになりますので、Linuxサーバから見てWindowsサーバへ接続できるIPアドレスとなります。

ポート:ローカルポートで指定したポート(13389)と紐づけたいWindowsサーバのポート番号です。
今回はRDPしたいので3389を指定。もしWindowsサーバでDBなどが動いている場合、DBのポート番号を指定すれば作業端末から直接データベースへログインできたりします。

設定はこんだけ。超簡単。一応設定の保存をしましょう。

この状態でLinuxサーバへSSH接続しますと(ちゃんとログインまでしてください。)
作業端末上で13389という謎のポートがリッスンします。コマンドプロンプト上からnetstat -anを実行すると以下の通り。

ほんで作業端末から以下の通りローカルアドレスの13389へRDP接続。

いけますねー。

SSHポートフォワーディングの説明でした。悪用しないようにお願いします。身を滅ぼします。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

実用SSH セキュアシェル徹底活用ガイド [ ダニエル・J.バレット ]
価格:5280円(税込、送料無料) (2021/6/22時点)


[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

OpenSSH[実践]入門 [ 川本安武 ]
価格:3278円(税込、送料無料) (2021/6/22時点)