OCI Compute に VNC Server をインストールして VNC Client から踏み台経由で接続してみる。(Oracle Cloud Infrastructure)

以前に下記記事で X Window転送 を取り扱っているのですが、
遠い Region で X窓転送すると激遅で使い物にならないケースが多々有ります。

> OCI(Oracle Cloud Infrastructure)のComputeインスタンスで
> 端末(PC等)へのX Window ssh転送が出来るように設定する。
> https://qiita.com/ora_gonsuke777/items/765189e9e301415e7ba5

そのようなケースでは VNC を使用すると、だいぶマシな性能を得られる事が多いです。
という訳で、本記事では踏み台経由の VNC Server/Client接続 を取り扱ってみますやで彡(ﾟ)(ﾟ)

# 1. ネットワーク構成

ネットワーク構成は下記の通りです。Compute は現時点の Oracle Linux で最新の 7.9 を使います。
![01_構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/a51690a5-ece6-0346-0ba0-b1dcf30fe597.jpeg)

下記記事と同様の構成となります。

> 検証によく使う Oracle Cloud Infrastructure(OCI)環境を Terraform で作成してみる。
> https://qiita.com/ora_gonsuke777/items/8651c4075ec6bf436c4f

# 2. VNC Server をインストール

Private Compute で VNC Server をインストールします。

```shell
sudo su -
yum groupinstall graphical-server-environment
yum install tigervnc-server mesa-libEGL
```

下記はインストールログの抜粋、ちょっと時間が掛かるかも？

```shell

:
Dependency Updated:
  firewalld.noarch 0:0.6.3-12.0.1.el7               firewalld-filesystem.noarch 0:0.6.3-12.0.1.el7         kpartx.x86_64 0:0.4.9-134.0.1.el7_9
  python-firewall.noarch 0:0.6.3-12.0.1.el7

Complete!

:
Running transaction
  Installing : tigervnc-server-1.8.0-22.el7.x86_64                                                                                                1/1
  Verifying  : tigervnc-server-1.8.0-22.el7.x86_64                                                                                                1/1

Installed:
  tigervnc-server.x86_64 0:1.8.0-22.el7

Complete!
```

# 3. VNC Server を起動

VNC Server を opcユーザー で起動します。初回のみパスワード設定を聞かれるので入力します。

```shell
# opcユーザーで実行
vncserver -geometry 1280x1024

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
xauth:  file /home/opc/.Xauthority does not exist

New 'ays-compute1:1 (opc)' desktop is ays-compute1:1

Creating default startup script /home/opc/.vnc/xstartup
Creating default config /home/opc/.vnc/config
Starting applications specified in /home/opc/.vnc/xstartup
Log file is /home/opc/.vnc/ays-compute1:1.log
```

psコマンド で vncserverプロセス の起動を確認してみます。※見易くするために改行入れてます

```shell
[opc@ays-compute1 ~]$ ps -ef | grep -i vnc
opc      17807     1  0 06:41 pts/0    00:00:00 
/usr/bin/Xvnc :1 
-auth /home/opc/.Xauthority 
-desktop ays-compute1:1 (opc) 
-fp catalogue:/etc/X11/fontpath.d 
-geometry 1280x1024 
-pn 
-rfbauth /home/opc/.vnc/passwd 
-rfbport 5901 
-rfbwait 30000
opc      17816     1  0 06:41 pts/0    00:00:00 /bin/sh /home/opc/.vnc/xstartup
opc      19384 21859  0 06:43 pts/0    00:00:00 grep --color=auto -i vnc
```

プロセスが起動してますやね彡(^)(^)　リッスンポート:5901 で起動している様子が確認できます。

# 4. ターミナルソフトのポートフォワード設定

ターミナルソフトのポートフォワードを設定します。ターミナルソフトは何でもエエんですが、今回は Teraterm を使用します。
![02_tt_portfw1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/ffa6ff4a-cc3e-2e27-116f-cd1ce7e08d06.jpeg)
![03_tt_portfw2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/23535bca-4374-01d2-07c5-fd13ff83a6b2.jpeg)

# 5. 踏み台(Bastion Compute)でポートフォワードしつつ SSH接続

Teraterm で踏み台(Bastion Compute)に SSH接続 して、さらに下記コマンドでポートフォワードしつつ Private Compute に SSH接続 します。

```shell
ssh -L <Teraterm で設定したリモートホストのポート番号>:<Private Compute のホスト名 or IP>:<VNC のポート番号> -4 <Private Compute のホスト名 or IP>
```

下記はサンプルのコマンドになります。

```shell
ssh -L 5901:ays-compute1.prvsubnexxxxxx.vcnxxxxxx.oraclevcn.com:5901 -4 opc@ays-compute1.prvsubnexxxxxx.vcnxxxxxx.oraclevcn.com
```

# 6. VNC Client から Private Compute の VNC Server に接続

VNC Client から VNC Server に接続します。VNC Client は何でもエエんですが、今回は UltraVNC Viewer を使用。
上記 5. で SSHポートフォワードした localhost:5901 に目掛けて接続します。
![04_UltraVNC1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e2c593e8-dcfc-01f3-e7eb-3c258083dc7b.jpeg)
![05_UltraVNC2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/34b70cb4-829e-fcc8-3e0a-15daad57b391.jpeg)
![06_UltraVNC3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/f8d147e0-e3ad-ca19-e67b-b97c902ec538.jpeg)

Private Compute の VNC Server に上手く接続できたで！彡(^)(^)

# 7. まとめ

Terminal の コマンドライン が Linux/UNIX の醍醐味ですが、GUI を要求されるケースも
しばしば有るので、本記事を参考にして GUI もご活用下さいね彡(^)(^)

# 参考記事

@yamada-hakase さんの下記記事を参考にしました。
いつもお世話になっています！彡(^)(^)

> クラウドでVNCサーバ＆クライアントを構成する Part 1
> https://qiita.com/yamada-hakase/items/66c25e9439a0a4b6a909