やまねこです。
Linuxを触っているエンジニアなら一度は触ったことがあるであろうVNCですが,ローカルからVNCクライアントソフトで操作するのが一般的です。
しかし,外出先からVNCしたい,欲を言えばVPNを張らずにブラウザから...みたいなこと微かに思ったことはないでしょうか。
それ, Cloudflare Zero Trustで実現できます。
しかも,ネットワーク機器の操作(ポート開放等)はいりません!!
セキュリティ的にも安全ですね!
必要なもの
- Cloudflareアカウント
- ネームサーバーがCloudflare提供のネームサーバーに設定されているドメイン
- Ubuntu (今回は22.04LTS)
設定方法
基本的にはCloudflare公式ドキュメントに従って設定していきます。
https://developers.cloudflare.com/cloudflare-one/tutorials/vnc-client-in-browser/
VNCの構築
- いつもの。
sudo apt-get update
- GUI周りの諸々をインストールします。Ubuntuデスクトップの場合すでにインストール済みだと思いますが,Ubuntu Serverの場合は追加が必要です。
sudo apt-get install gnome-core gnome-panel ubuntu-gnome-desktop tightvncserver lxde
- VNCインスタンスを起動します。
6文字以上8文字以下でVNC用パスワードを設定します。
sudo tightvncserver
You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n xauth: file /root/.Xauthority does not exist New 'X' desktop is hogehoge:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/hogehoge:1.log
- VNCの設定ディレクトリを開きます。
cd .vnc
- xsertupファイルを開きます。
vim xstartup
- 以下のように編集します。
xstartupの権限も変更します。
#!/bin/sh xrdb $HOME/.Xresources xsetroot -solid grey x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & #x-window-manager & # Fix to make GNOME work export XKL_XMODMAP_DISABLE=1 unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS /etc/X11/Xsession /usr/bin/startlxde #gnome-session & gnome-panel & nautilus & gnome-settings-daemon & metacity & gnome-terminal & startxfce4 &
chmod +x ~/.vnc/xstartup
- VNC Serverを立てます
vncserver
Cloudflareトンネルの構築
-
cloudflaredをインストールします。
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb sudo apt install -y ./cloudflared-linux-amd64.deb
-
Cloudflare tunnelにログインします。
cloudflared tunnel login
表示されたURLからCloudflareにログインします。
ブラウザに表示された自分のドメインを選択し,「承認」をクリックします。
-
トンネルを構築します。ここでは「tunnel-ubuntu」というトンネル名にします。
cloudflared tunnel create tunnel-ubuntu
トンネルが作成されると,トンネルのIDが表示されます。IDは後で使用するのでどこかにメモしてください。(Cloudflare Zero Trust管理ページからも確認できます)
Created tunnel tunnel-ubuntu with id abcd1234-5678-abcd-123456789012
-
設定ファイルを作成します。
vim config.yml
以下のように編集します。
- hostname: ブラウザでVNCを開くときに使用したいFQDNを設定します。
- path: ホームディレクトリの絶対パス
tunnel: <メモしたID> credentials-file: path/.cloudflared/<メモしたID>.json ingress: - hostname: vnc.hogehoge.com service: tcp://localhost:5901 - service: http_status:404
-
CloudflareのDNS管理ページからレコードを追加します。
- タイプ:CNAME
- 名前: 4.のhostnameで設定したFQDN
- ターゲット: 3.で表示されたID + .cfargotunnel.com
-
からトンネルを実行します。
cloudflared tunnel --config path/config.yml run tunnel-ubuntu
- path: 4.で作成した設定ファイルの絶対パス
トンネルが確立するとINF Connection ~
のようなログが表示されます。
ついでに自動起動の設定もしましょう。
sudo cloudflared --config path/config.yml service install sudo systemctl enable cloudflared
sudo systemctl enable cloudflared
でactiveになっていればOKです。 - path: 4.で作成した設定ファイルの絶対パス
アプリケーションの設定
-
Cloudflare Zero Trustの管理ページ > Access > Applicationから「Add an application」をクリックします。
-
必要事項を入力します。
-
Zero TrustでVNCサーバーにアクセスするための認証方法を設定します。今回は,「admin@hogehoge.com」のみアクセス可能にします。
その他項目はデフォルトとします。
ブラウザからVNCアクセス
後は,vncserverが自動起動する設定をすれば完了です。