Amazon WorkSpacesキタ━(゚∀゚)━!と思ったら、FWに阻まれたけどなんとかした話

待ちに待ったAmazon WorkSpaces Limited Previewの案内がキタ━(゚∀゚)━!

…でも、4172ポート開いてないから使えないorz

ここで諦めてたまるか!となんとかした話です。

 

インフルエンザから復帰して出社したその日のことでした。

re:inventでWorkSpacesが発表されてすぐ公式ブログからアナウンスがあったその日に申し込んで、

なかなか来ないなーと思っていたLimited Previewの案内がやっと届きました。

 

さっそく使おうと思い、マニュアルに従ってインスタンス(って呼ぶのかな?)作って、

クライアントアプリをインストールして使おうと思ったら…

 

繋がらない…

 

上司曰く、

「ウチの会社、4172ポート開いてないから使えないよ」

 

マジかよ…と思い調べてみた。

 

公式サイト抜粋

ユーザーにセキュアで高品質な作業環境を提供するため、Amazon WorkSpaces は Teradici 社の PCoIP 技術を採用しました。ユーザーのデバイスと WorkSpace 間の通信には PCoIP リモートプロトコルを使用しています。PCoIP プロトコルはユーザーのデスクトップコンピューティングエクスペリエンスを圧縮し、暗号化し、エンコードし、「画素だけを」標準的な IP ネットワークを使ってユーザーのステートレスなゼロ/シンクライアント、PC、ラップトップ、モバイル端末に送信します。

公式ドキュメント抜粋

The Amazon WorkSpaces client applications require a broadband Internet connection. In addition, the network that the client is connected to, and any firewall on the client itself, must have the following ports open:

  • Port 4172 for UDP and TCP traffic
  • Port 443 for TCP

たしかに4172ポートのTCPとUDPで通信するって書いてある…

 

上司には、

「社内LANと繋がってない別回線の端末からとりあえず試してみれば?」

と言われたのですが、自分的には、

「いや、わざわざ自席から離れて使うとかまともに検証にならないし、

どこでも使えるのが良い所なのに、台無しだし、

なにより、なんかここで妥協したら負けだと思う!w

と思い、少し格闘してみることにしましたw

 

とりあえず、EC2でWindowsServer立てて、

そこにWorkSpacesアプリインストールっていうのは

「酷い二度手間」って感じなので一瞬頭をよぎった程度で速攻却下しましたw

 

まず始めに試したのがプロキシです。

WorkSpacesアプリ(PC向け)にはプロキシの設定画面があります。

EC2でsquidサーバ立てて、8080ポートを4172にプロキシしてみる。

「繋がった!」「ログインできた!」

…と思いきや、画面を表示しようとした所でエラーorz

UDPの通信は当然プロキシできないのでそこで躓いたようでした。

「もしかしたらUDPは開いてるかも」とか淡い期待はもろとも打ち砕かれましたw

 

基本的にUDPの通信をプロキシできるミドルウェアなんて無い(ですよね?)…

 

じゃあどうする?

FWを超えて…

 

FWを超えるだけならつい最近検証したアレが使える…

 

そこからWorkSpacesへ辿り着く方法は…

と悩むこと小一時間…

 

「あ、NATインスタンス!」

 

と思いつき、

 

アレコレをやって、めでたく自席からWorkSpacesを使えるようになりました(´∀`*)

 

そして、なんか使えるようになったらそこで若干の満足感を得てしまって、

他にも色々やること(またはやりたいこと)があったので、

まだ結局WorkSpaces自体はあまり触っていないですwww

 

 

 


EC2(AmazonLinux)をローカルPCからNATで使う

職場のFireWallで空いてないポートでの通信がどうしても必要になりまして、

UDPも必要だから一般的なプロキシとかじゃどうしようもなく、

最近、ちょっとお手軽にEC2とVPN貼れちゃう方法を試していたので、

それと組み合わせてEC2をNATで使ってそこから通信するっていう方法を取りました。

 

まず前提としてVPNやリッチな方はDirectConnectでEC2とLANで繋ぐ必要があります。

「そんなんないよ!」って方はこの辺がちょっとお手軽です。

 

注意!!

SecurityGroupやVPCの設定等、

セキュリティ周りの設定でこのインスタンスへの接続元が適切に限定されるように細心の注意が必要です!

無防備にこのインスタンスを晒すと悪用される恐れが有るので注意してください!

あと、この方法で会社からP2Pとかエロサイト見るとかもやめましょうwww

 

ちなみに今回の場合、SSL-VPNなのでSSL通信ポートを職場固定IPに限定した上で、

それ以外は使いたいポートのみ空けるようにし、

一応使う時以外は必ずこのインスタンスは停止するようにしています。

 

その上で以下を実行します。

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

EC2側はこれだけです。

上述の通り頻繁に起動と停止を行って、その度に実行するのも面倒なので以下にも同じ内容を記述しました。

# vi /etc/rc.local

 

あとは、このEC2とLANで繋がるネットワークインターフェースのデフォルトゲートウェイをこのインスタンスのPrivate IPにしてあげればOKです。

ここは一般的なPC設定の話でOSによって色々違うので省略します。

 

ちなみにこれをやるとローカルPCからインターネットに対する通信は全てEC2を通るので、

転送量課金に注意です。

個人で使うなら(使わないと思うけど)これはさすがにVPSだなw

 

 

これでアレが使えます!

 


SoftEther VPN ClientのEC2(AmazonLinux)向け起動スクリプト

先日検証したSoftEther VPNですが、

早速ちょっと使う機会が出てきたので、自動起動用の起動スクリプトを作りました。

ちなみにServerの方は公式サイトに乗ってるそのまま。(結構下の方)

 

設定までは前に書いたのと同じです。

 

やりたかったこと

  1. まずは当然VPN Clientの自動起動
  2. VPN Serverへの自動接続
  3. Private IPの設定

 

基本は上述のServer起動スクリプトのパスやらをClientに変えただけ。

それにServerへの接続コマンド実行+IPアドレス設定って感じです。

 

こんな感じです(変数の内容は環境によって異なります)↓

 #!/bin/sh
 # chkconfig: 2345 99 01
 # description: SoftEther VPN Client
 DAEMON=/usr/local/vpnclient/vpnclient
 CMDPATH=/usr/local/vpnclient/vpncmd
 CMDHOST=localhost
 CMDCONN=local
 IP4ADDRESS=192.168.100.1
 VIRTUALIF=vpn_adapter01
 LOCK=/var/lock/subsys/vpnclient
 test -x $DAEMON || exit 0
 case "$1" in
 start)
 $DAEMON start
 touch $LOCK
 $CMDPATH /client $CMDHOST /cmd AccountConnect $CMDCONN
 ifconfig $VIRTUALIF $IP4ADDRESS
 ;;
 stop)
 $DAEMON stop
 rm $LOCK
 ;;
 restart)
 $DAEMON stop
 sleep 3
 $DAEMON start
 $CMDPATH $CMDTYPE $CMDHOST $CMDSUFFIX $CMDEXEC $CMDCONN
 ifconfig $VIRTUALIF $IP4ADDRESS
 ;;
 *)
 echo "Usage: $0 {start|stop|restart}"
 exit 1
 esac
 exit 0

変数名とかイケてないけど、とりあえず気にしないwことにして、

/etc/init.d/vpnclient

に配置して、

# /sbin/chkconfig --add vpnclient

で自動起動設定完了です。

 

これ、インストールから設定と併せてChefのレシピにしたらIPアドレスの管理が捗りますね。

もし複数台で使うことがあればやろうっと。

 

そして、これでアレで遊ぶために必要な設定①が完了しました!