LoginSignup
27

More than 5 years have passed since last update.

SSHのポートフォワードを利用してファイアウォール越しに社内環境とAWS上のインスタンスを連携する

Last updated at Posted at 2015-12-12

概要

開発用途として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にアクセスできない。

実現したいこと

  1. AWS上のEC2にたてたWindowsマシンに社内PCからRDPする
  2. AWS上のEC2インスタンスから社内の開発サーバに接続する

要するに、ローカルポートのフォワードと、リモートポートのフォワードをするだけです。

1. AWS上のEC2にたてたWindowsマシンに社内PCからRDPする

準備

AWS側のセキュリティグループのインバウンド設定で、RDP用のデフォルト通信ポートである3389を許可します。
スクリーンショット 2015-12-12 22.01.41.png

あと、接続先の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でアクセスします。

スクリーンショット 2015-12-12 22.20.33.png

スクリーンショット 2015-12-12 22.23.59.png

補足

転送設定は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インスタンスから社内の開発サーバに接続する

こんな感じの接続を実現します。
スクリーンショット 2015-12-13 0.26.13.png

セキュリティ上、アクセスしたいサーバーをAWSに持っていけない、といった場合を想定しています。社内PCを踏み台にしてアクセスしたいサーバーへ誘導してやります。

リモートポートを転送する

リモートPCの8888番ポートをターゲットPCの80番ポートへ転送します。

$ ssh -R8888:ターゲットPCのIP:80 リモートPCのGlobal-IP

上記のコマンドでリモートマシンにログインしている間は、リモートPCの8888番ポートへ接続すると、ターゲットPCお80番に接続できます。

リモートポート経由でターゲットPCに接続する

リモートPC上でリモートポートにアクセスします。ブラウザで接続します。

スクリーンショット 2015-12-12 23.25.30.png

最後に

VPN機器や当該サービスを導入せずとも社外PCから社内PCへのアクセスが実現できます。本番環境はともかくとして、開発環境では十分使えます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27