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ポートフォワーディングの説明でした。悪用しないようにお願いします。身を滅ぼします。