概要
開発用途としてAWS上のEC2インスタンスを使えるようになりました。社内からEC2インスタンスへのアセクスだけでほとんどは事足ります。しかしながら、とある80番ポートと22番ポート以外はファイアウォールで阻まれるとか、EC2インスタンスから社内のサーバにアクセスしたいとか、いろいろやりたいことが出てきます。
このメモでは、幾つかのケースでSSHポートフォワードを使ってやりたいことを実現する方法を説明します。
事前準備
- puttyなどのsshクライアントを入れておく
- Windowsマシンにsshサーバを入れておく
こちらを参考に。
参考:Installing OpenSSH (Cygwin 1.7.35) on Windows 2012 R2
前提
- 社内PCからAWS上のEC2インスタンスへsshで接続できる。(22番ポートで)
- EC2インスタンス上のWindowsマシンにはSSHでアクセスできる。
- EC2インスタンスからは社内PCにアクセスできない。
実現したいこと
- AWS上のEC2にたてたWindowsマシンに社内PCからRDPする
- AWS上のEC2インスタンスから社内の開発サーバに接続する
要するに、ローカルポートのフォワードと、リモートポートのフォワードをするだけです。
1. AWS上のEC2にたてたWindowsマシンに社内PCからRDPする
準備
AWS側のセキュリティグループのインバウンド設定で、RDP用のデフォルト通信ポートである__3389__を許可します。
あと、接続先のGlobal-IPアドレスとPrivate-IPアドレスを控えておきます。
ローカルポートを転送する
ローカルPCの13389番ポートをターゲットPCの3389番ポートへ転送します。
$ ssh -L13389:ターゲットPCのPrivate-IP:3389 ターゲットPCのGlobal-IP
上記のコマンドでターゲットマシンにログインしている間は、ローカルPCの13389番ポートへRDP接続すると、ターゲットPCにRDP接続できます。
ローカルポート経由でターゲットPCに接続する
Macに入れたMicrosoft Remote Desktopでアクセスします。
補足
転送設定は__config__ファイルに書くと楽になります。こんな感じです。Hostに指定する名前はわかりやすいものを
Host AwsSandboxWin
HostName ターゲットマシンのGlobal-IP
LocalForward 13389 ターゲットマシンのPrivate-IP:3389
LISTENポートを確認。13389ポートで待ち受け中です。ローカルPCのみからです。
$ netstat -na|grep LISTEN|grep 13389
tcp4 0 0 127.0.0.1.13389 *.* LISTEN
tcp6 0 0 ::1.13389 *.* LISTEN
ちなみに、ポートフォワードするときに__-g__をプションをつけると、ローカルPC以外の社内PCからも接続できるようになります。
$ ssh -L13389:ターゲットPCのPrivate-IP:3389 -g ターゲットPCのGlobal-IP
$ netstat -na|grep LISTEN|grep 13389
tcp6 0 0 *.13389 *.* LISTEN
tcp4 0 0 *.13389 *.* LISTEN
2. AWS上のEC2インスタンスから社内の開発サーバに接続する
セキュリティ上、アクセスしたいサーバーをAWSに持っていけない、といった場合を想定しています。社内PCを踏み台にしてアクセスしたいサーバーへ誘導してやります。
リモートポートを転送する
リモートPCの8888番ポートをターゲットPCの80番ポートへ転送します。
$ ssh -R8888:ターゲットPCのIP:80 リモートPCのGlobal-IP
上記のコマンドでリモートマシンにログインしている間は、リモートPCの8888番ポートへ接続すると、ターゲットPCお80番に接続できます。
リモートポート経由でターゲットPCに接続する
リモートPC上でリモートポートにアクセスします。ブラウザで接続します。
最後に
VPN機器や当該サービスを導入せずとも社外PCから社内PCへのアクセスが実現できます。本番環境はともかくとして、開発環境では十分使えます。