remote.it を使って IBM Cloud VPC 環境にアクセスする (Ubuntu XRDP 編)

# はじめに

投稿者および所属組織は remote.it とは完全に無関係です。
この投稿は remote.it の利用を投稿者および所属組織が推奨するものではありません。
remote.it で IBM Cloud VPC に接続できないかと問い合わせを受けたので検証作業を行っただけのものです。

remote.it は IBM Cloud から認識していないサービスです。remote.it を利用した IBM Cloud への接続について IBM Cloud としては 一切サポートできません。

remote.it の評価や利用の判断は、閲覧者の責任で実施してください。

# 今回の目的

先日「[remote.it を使って IBM Cloud VPC 環境にアクセスする (Ubuntu へ ssh 編)](https://qiita.com/6onoda/items/4b3d493dfbf4fe7ffcdb)」で、IBM Cloud へ「Floating IP」も「Client to Site VPN」使わずに remote.it を使って ssh 接続を行う方法を検証しました。
対象が、この Ubuntu への ssh接続で済めば良かったのですが「同じ VPC 内に複数のサーバーを立てる・アプリケーションによっては ポート 80/433でサービスするのではない Webサーバーもある・この Ubuntu を踏み台にして、GUI アクセスも可能にしたい」という追加の要求をいただきました。

前回の検証範囲では踏み台に ssh(CUI) 機能しかなく、ブラウザーなど GUI アクセスができません。
この辺りを今回は確認したいと思います。

# この記事の前提

「remote.it を使って IBM Cloud VPC 環境にアクセスする (Ubuntu へ ssh 編)」の続編として書いています。「remote.it を使って IBM Cloud VPC 環境にアクセスする (Ubuntu へ ssh 編)」で記述したことは、できるだけ繰り返しません。


# Windows の RDP ってどう?

踏み台が Windows であれば、そこに RDP で接続し、踏み台の Windows から 同一」VPC内の各サーバーへ ブラウザーなど GUI アクセスすることが可能です。
Windows 向けの remote.it エージェンドがインスタンスのプロビジョニング時に自動導入できれば目的を達成することができます。

remote.it エージェンドの導入方法を見ましょう。
remote.it のクラインアント・ポータルから Windows デバイスの追加を試みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/34b7e6b9-1d0a-556b-cca5-b64595e0c0ad.png)

エージェンドのインストラーをダウンロードして、GUIインストーラーを利用して導入しろということのようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/2fc6ce12-c096-0a35-6cab-68c595d31e13.png)

Windows サーバーのデプロイ時に、自動化して remote.it エージェンドを導入することはできないようです。
繰り返しますが、今回の条件は、「Floating IP」も「Client to Site VPN」も使用しないという事です。
踏み台を Windows にすることはあきらめました。

また、Windows を使えばその分だけ費用がかかりますし、3ユーザー以上が同時に RDP 接続するのであれば追記ライセンス料金がかかります。
その面でも GUI の踏み台が欲しいだけの目的で Windows を選択するメリットはなさそうです。

みなさんが、少なくとも初期構築時に「Floating IP」や「Client to Site VPN」で直接 Windows サーバーに GUI アクセスしていい・Windowsや追加ライセンスの料金を払っていいのなら、Windows を踏み台にしてもいいでしょう。
また、Windows を踏み台にしたほうが RDP 接続のパフォーマンスもいいかもしれません。

# VNC ? RDP ?

remote.it のサービスを確認すると VNC や RDP で GUI接続が出来そうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/e81d2516-c013-13c4-9669-fa05f10bc102.png)

VNC 用のパスワードを設定する必要があるなど、ちょっとめんどくさそうな気がしたのでRDPでの接続を試します。
私が Windows ユーザーで RDP になれていることも RDP を選ぶ理由です。
もしかして VNC の方が良い体験になるのかもしれませんが、そこまで比較するのは今回の目的ではないので RDP のみを検証します。

# XRDP のためのユーザーデータ

下記を行います。

* デスクトップ環境を導入する
* XRDPを導入して使用可能にする
* ログインのためのユーザーを作成しパスワーを設定する
* 前回と同様に remote.it エージェンドを導入し、コードを適用する。

実は XRDP での接続には、少し困りました。
下記を参考にさせていただき、解決出来ました。

* [【Ubuntu Tips】UbuntuにWindows10からリモートデスクトップで接続する方法 ~ xrdpパッケージ ~](https://tech.nkhn37.net/ubuntu-windows10-xrdp/)
* [リモートデスクトップ環境をUbuntu 18.04 LTSで作成する](https://qiita.com/ryo-endo/items/00f3ec125917acf4cec7)

接続用のユーザーは sudo ができるように、sudo グループに追加してあります。
このあたりは要件次第です。

「snap insyall firefox」を追加して、デフォルトでブラウザーが使えるようにしてもいいでしょう。

```
#!/bin/bash
apt -y update && apt -y upgrade
apt -y install ubuntu-desktop
apt -y install xrdp && systemctl enable xrdp

# https://tech.nkhn37.net/ubuntu-windows10-xrdp/
gpasswd -a xrdp ssl-cert

# https://qiita.com/ryo-endo/items/00f3ec125917acf4cec7
cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla  
[Netowrkmanager]  
Identity=unix-user:*  
Action=org.freedesktop.color-manager.create-device  
ResultAny=no  
ResultInactive=no  
ResultActive=yes  
EOF

systemctl restart xrdp

useradd testuser
echo testuser:P@ssw0rd | /usr/sbin/chpasswd
mkdir /home/testuser
chown testuser:testuser /home/testuser
gpasswd -a testuser sudo

R3_REGISTRATION_CODE="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" sh -c "$(curl -L https://downloads.remote.it/remoteit/install_agent.sh)"

```
# デプロイ

## remote.it 側で Linux デバイスの追加

remote.it にログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/32851669-18be-d692-ef6f-01db1f2471b9.png)

左上の「＋」でデバイスを追加します。Linuxをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/e445b9c9-dc6a-7fb9-8f83-a3e7c0764cd6.png)

接続先で実行する登録コードを含んだコマンドを確認し、ユーザー・データに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/e6ed3fa0-befe-4c58-f57b-e7875d14ceed.png)

## IBM Cloud 側でのデプロイ加
デプロイします。

OS は Ubuntu 22.04 を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/3961eb1b-1090-c584-7e0d-c833288d7828.png)

ユーザー・データに先ほどのスクリプトを貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/82425cf7-10a8-d9c7-cf93-91ea2a3794e2.png)

パブリック・ゲートウェイに接続されたサブネットを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/b4a4862c-5937-142b-b366-4a16020ef4dd.png)

上記でデプロイします。

当然、ssh 環境のみの場合よりは時間がかかります。
シリアル・コンソールを開き、進み具合を見てもいいかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/1a6c077c-1fcf-9eef-e756-2cc03d88f892.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/b650c618-2019-be13-c606-2b65bd8a4082.png)


# remote.it クライアント・ポータルからの接続

remote.it クライアント・ポータルの画面が変わりました。
接続準備ができたようです。

「＋」で RDP の SERVICE を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/a60881ac-9bbe-c472-3ea6-460a03e6385b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/f4dd9971-e069-2792-f3ff-e2e144535be3.png)

RDP が追加されました。アクティブになるのを待って CONNECT します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/39005fd5-7df7-6402-021a-5aeb410b6dc0.png)

接続情報を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/fb5ca7bb-fc17-9243-60fa-f3f00091b902.png)

確認できた接続情報で RDP から接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/f426d6f3-8340-8a27-19f0-c82889256ba4.png)

設定したユーザー・パスワードでログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/e9dc3e28-d7e4-4345-b13f-fc743e942bda.png)


接続されました。
初期設定を行い、必要なアプリケーションを導入します。
日本語化してもよいでしょう。
この部分もユーザー・データに含めて自動化するのもいいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/ebffb7b5-4eb1-784d-3c54-95f912271af7.png)


この Ubuntu を踏み台にして、他の VPC 環境で GUI アクセスが可能になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/726dd3c7-18bc-af15-d83e-2b94ef7ee37f.png)

# パフォーマンスのためにProxy 接続から P2P へ

通常の WEB アクセスの場合、サーバーとクライアントでやり取りされるのは、HTML、CSS、JavaScriptといったテキストデータです。
(もちろん、動画配信サービスもありますが)

ここまで試した PROXY 方式での接続には下記のステップが必要で、快適なパフォーマンスとは言えないものでした。

* サーバーとクライアント(今回のUbuntu)でHTML、CSS、JavaScriptなどをやり取する
* localhost(127.0.0.1)で待機している XRDP 起動しているブラウザーが GUI 描画する。
* localhost(127.0.0.1)で待機している XRDP 起動しているブラウザーは、remote.ip に UDP で描画データを送信する。
* remote.ip の Proxy サーバーは、描画データを RDP プロトコルに再加工する。
* クライアントは、RDP プロトコルに基づき画面表示する。

「[Remote.It 技術概要](https://ja.remote.it/technology)」には下記が記載されています。

> セキュリティとパフォーマンスの観点からPeer to Peer（P2P）接続が推奨されていますが、様々なユースケースをサポートするために、他の接続タイプも用意されています。

「[remote.itの接続方式(P2P接続とProxy接続)について理解する](https://qiita.com/masa-e/items/e9ddc15cce3dfbf17704)」によれば、P2P 接続は Web Portal では出来ずデスクトップアプリを使う必要があるそうです。

[https://ja.remote.it/download-list?products=desktop&platform-list=windows#Download-Results](https://ja.remote.it/download-list?products=desktop&platform-list=windows#Download-Results)から Windows 版のデスクトップアプリをダウンロードして導入します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/e4d015bf-1479-ef7b-aa95-411e74e73035.png)

導入後、ディレクトリーで作成できないという趣旨のエラーがでていましたが 3 度ほど再駆動を繰り返すと稼働するようになりました。何が問題だったか不明ですが、接続できたのでヨシとします。
(この原因追及は私ではなく remote.it のサポートがカバーすべき範疇ですよね)

画面はポータルのものと同様です。
CONNECT 後のエンドポイントのホスト名は「remote-ip-xrdp-rdp.at.remote.it」になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/0897eb92-e8b2-c326-6942-bcd1befa833d.png)

nslookup すると、Proxy ではなく 127.0.0.1 の localhost にマップされている事が分かります。

```
C:\Users\User01>nslookup remote-ip-xrdp-rdp.at.remote.it
サーバー:  UnKnown
Address:  192.168.0.1

権限のない回答:
名前:    remote-ip-xrdp-rdp.at.remote.it
Address:  127.0.0.1
```

実際に接続してみると操作感も改善された気がします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/2bbdd6be-57c6-ebb8-2301-9029e9dd8bc6.png)

※ 所属先の法人のポリシーで P2P ソフトの使用が許可されない場合があります。少なくとも私の所属先では許可されていません。今回のテストは自宅の所属先の法人には接続機能が無い環境で行いました。ご利用の責任を一切、私は負いません。

# もう一度、注意

投稿者および所属組織は remote.it とは完全に無関係です。
この投稿は remote.it の利用を投稿者および所属組織が推奨するものではありません。
冒頭にも述べましたが remote.it で IBM Cloud VPC に接続できないかと問い合わせを受けたので検証作業を行っただけのものです。

remote.it は IBM Cloud から認識していないサービスです。remote.it を利用した IBM Cloud への接続について IBM Cloud としては 一切サポートできません。

remote.it の評価や利用の判断は、閲覧者の責任で実施してください。