ChromebookからIAP経由でCompute EngineのWindows ServerへRDPする方法

記事タイトルとURLをコピーする

G-gen の杉村です。Chromebook (Chrome OS) から Cloud IAP のトンネリング機能を使い、 Compute Engine の Windows Server へリモートデスクトップ (RDP) する方法について紹介します。

なお IAP による VM への接続自体が何か、ということについては、以下のブログ記事で詳細に解説していますのでご参照ください。

blog.g-gen.co.jp

前提作業

1. Linux 開発環境の有効化

本手順では Chromebook のデベロッパー向け機能「 Linux 開発環境」を使います。
この機能を用いると Chromebook 内に Linux (Debian) のコンテナが起動し、ターミナルで操作することができます。

まだ Linux 環境を有効化していない場合は 設定 > 詳細設定 > デベロッパー > Linux 開発環境 から同機能を有効化します。

設定画面 (このスクリーンショットでは既に有効化済み)

2. gcloud コマンドのインストール・初期化

※この手順は通常の gcloud コマンドと同じです。また、実施が必要なのは始めの1回だけです。

ドキュメント「 Cloud SDK のインストール 」に従い Linux 環境に gcloud コマンドをインストールします。

上記リンク先の Debian/Ubuntu の手順に従ってください。

インストールできたら gcloud init コマンドで初期化します。
対象のインスタンスがあるプロジェクトを指定しましょう。

トンネル確立とRDP

1. Linux コンテナの IP アドレスを確認

以下のコマンドで自分の Chromebook 上の Linux コンテナの内部 IP アドレスを確認します。

ip -4 addr

出力は以下の例のようになります。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link-netnsid 0
    inet 100.115.92.206/28 brd 100.115.92.207 scope global eth0
       valid_lft forever preferred_lft forever

下から2行目、 eth0 の inet 100.115.92.206/28 と表記されている部分の 100.115.92.206 が IP アドレスになります。

2. 変数設定と IAP トンネル確立

以下のように Linux 変数を設定します。後のコマンドで使うためです。
<カッコ> の中身はご自身の環境のものと置き換えてください。

ZONE=<対象インスタンスのゾーン>
INSTANCE_NAME=<対象インスタンス名>
IP_ADDR=<先ほど ip コマンドで調べたコンテナの IP アドレス>

その後以下のコマンドを実行します。

gcloud compute start-iap-tunnel ${INSTANCE_NAME} 3389 --zone=${ZONE} --local-host-port=${IP_ADDR}:13389

なお 13389 は任意のポート番号で問題ありません。
Linux コンテナ上で使われていないものを選択してください。
出力が以下のように出たら、トンネル確立が完了です。

Testing if tunnel connection works.
Listening on port [13389].

なお、以下のような warning が出ることがありますが、通常利用で問題はありません。

WARNING: 

To increase the performance of the tunnel, consider installing NumPy. To install
NumPy, see: https://numpy.org/install/.
After installing NumPy, run the following command to allow gcloud to access
external packages:
  export CLOUDSDK_PYTHON_SITEPACKAGES=1

3. リモートデスクトップ接続

RD Client アプリ等、任意のリモートデスクトップクライアントで以下のアドレスに接続します。

<先ほど ip コマンドで調べたコンテナの IP アドレス>:13389

これで IAP と結んだトンネル経由で Windows Server へリモートデスクトップできます。

トラブルシューティング

gcloud initgcloud compute start-iap-tunnnel コマンドを実行する際、プロンプトが数分以上返ってこないような状態に陥ることがあります。
また以下のようなエラーメッセージが現れることもあります。

ERROR: (gcloud.compute.start-iap-tunnel) While checking if a connection can be made: Unexpected error while connecting. Check logs for more details.

これはコンテナから API エンドポイントに接続する際に ipv6 で接続を試行しているために起こっている可能性があります。
対処として Debian の ipv6 を無効にすると改善する場合があります。

/etc/sysctl.conf を vim 等で編集し、以下の行を追加します。

net.ipv6.conf.eth0.disable_ipv6 = 1

その後 sysctl コマンドを実行します。

sudo sysctl -p

実施後 ip addr コマンドを打ち、 eth0 から ipv6 アドレスの表記が無くなっていれば対処完了です。

杉村 勇馬 (記事一覧) (Facebook)

クラウドソリューション部 部長

元・警察官という経歴を持つ現・エンジニア。クラウド管理運用やネットワークに知見。AWS 12冠、Google Cloud認定資格10冠。

2022年5月現在、ハマっているものはモンスターエナジーウルトラ。