表題のまんまですが。企業の社内からGCEを使いたいって時に、ファイアウォールで80番か443番しか外部に出ない、ってことはままそれなりにあることかと思います。まぁ自宅から何とか接続してRDPGatewayを設定するとか、方法はあるかも知れませんが、なかなか厳しいものと思います。
そんな時、Windowsサーバ起動時のスタートアップスクリプトを使い、RDPの待受ポートをデフォルトの3389→80に変更、WindowsファイアウォールでTCP80番の外部からのアクセスを許可、まで行うことで80番ポートでRDP接続出来る様になります。
当然IISやApacheでは使えなくなるわけですが、まぁ80番ポートで接続出来るサーバを一個用意すればそいつを踏み台にして他サーバで別のサービスを許可するなどすれば良い訳ですので。
繰り返しになりますが、ポイントは
- GCEのスタートアップスクリプトを活用する
- RDPの待受ポートを3389から80番に変更する
- Windowsファイアウォールの80番を許可する
- GCE自体のファイアウォールも80番を許可する
と言ったところです。
では、具体的な設定手順をご説明していきます。
GCPのプロジェクト作成はされており、管理コンソールにも入れて、GCEのインスタンスは立ち上げられる、というところは省略しております。
その辺りからという場合は以下を参考にGCEのインスタンス起動は出来る状態までは頑張ってからお読みください。
1.GCEでWindowsを起動する(スタートアップスクリプト付き)
インスタンス作成時の項目です。赤枠を順番に説明していきます。
名前はわかりやすい名前を適当に入れてください。デフォルトのままでも構いません。ここでは「instance-win」としました。
ゾーンもどこでも良いですが、せっかくなので皆さんアジアにした方が少しでも遅延が少ないです。ここでは「asia-east1-b」を選びました。
ブートディスクは今回Windowsサーバへの接続を試すのでWindowsを選んでください。今回は「Windows2012」を選びましたが、「Windows2008」でも同様に動作するものと思われます。
そして、ファイアウォールのところで「HTTPトラフィックを許可する」にチェックを入れます。これでファイアウォール側に設定追加とインスタンスにタグ付けというのを裏側でやってもらえます。個別に設定しても良いですが今回は省略します。
最後に青い「管理、ディスク、ネットワーキング、SSHキー」という箇所をクリックして展開し、詳細設定画面を開きます。
詳細設定画面は以下です。「メタデータ」の箇所にスタートアップスクリプトを設定します。
左側に「windows-startup-script-ps1」
右側には以下のスクリプトを入れます。
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -name "PortNumber" -value "80"
if (-not(Get-NetFirewallRule | where Name -eq Open-Port-80))
{
New-NetFirewallRule `
-Name Open-Port-80 `
-DisplayName Open-Port-80 `
-Description "Open-Port-80" `
-Enabled True `
-Profile Any `
-Direction Inbound `
-Action Allow `
-EdgeTraversalPolicy Block `
-LooseSourceMapping $False `
-LocalOnlyMapping $False `
-OverrideBlockRules $False `
-Program Any `
-LocalAddress Any `
-RemoteAddress Any `
-Protocol TCP `
-LocalPort 80 `
-RemotePort Any `
-LocalUser Any `
-RemoteUser Any
}
else
{
Write-Verbose "Open-Port-80 exits."
}

少し無理やり感がありますが、設定出来ますのでご安心ください。
これで、一番下の「作成」ボタンを押してインスタンスを作成します。
Windowsのインスタンスは初回起動時にはライセンス等の確認のためか10分くらい時間がかかる場合がありますので、気長に待ちましょう。
2.起動とスタートアップスクリプトの実行を確認
以下のようにインスタンス詳細画面の一番下の「シリアルコンソール出力」をクリックすると起動中のログが確認出来ます。
以下のようなログが確認出来るのですが。Starting startup scripts・・・からFinished runnning startup scripts、までが確認できればOKです。
3.再起動
上部にある「停止」を押して停止、「起動」で起動しましょう。レジストリの変更を反映させるためには再起動が必要なのです。
2回目の起動の場合は上記のログが以下のように少量になります。(Windowsファイアウォールの設定はスキップするため)
4.接続、確認
今回立てたinstance-winサーバのグローバルIPは「104.199.150.239」でした。
ここに、CloudShellから80番ポートで接続出来るか確認しますと、以下のように開放されていることが確認出来ます。
ChromeのRDPクライアントで接続してみます。もちろんWindowsのmstscでもなんでも大丈夫だと思います。
「104.199.150.239:80」
ログイン情報が求められるので入力して「OK」です。
はい、80番ポートでログインが無事出来ました。ここから先は普通にWindowsのサーバですので、お好きに操作してください。
以上、GCEのサーバに80番ポートでRDP接続してみた、でした。
これで、FW越しでも怖くありません。