📡

VNC to Ubuntu 22.04 via Cloudflare Zero Trust

2024/05/04に公開
こちらの熱戦譜です。せっかくなので書いておこうかと思い。for 自分。

事情あって、自宅に置いてあるPCの画面を外出先から見たい・・・となりました。

このあたりの記事を参考に、SSHはできるようになってたが、画面はいいかな・・・と手をつけてなかったのを腰据えてどうにかしてみた。
https://zenn.dev/kameoncloud/articles/1433b8b26f032c

基本はこちらのチュートリアル。

なぞったというこちらの記事もかなり参考にしました。感謝。
https://qiita.com/uminoyamaneko/items/022cec1bab809fe22518

マイ機材

こんなラインナップになっております

PC(3)・ディスプレイ(4)

  • mba-03 :
    • M1 MacBook Air、持ち歩き用。
  • mini-08
    • M2 Mac mini、自宅固定。メインマシン。
    • 通常はディスプレイ3つ接続。横(4K)・縦(SlackとかPDF表示用)・横(SNS表示用)
  • ubuntu-10
    • 回線監視用RasPi[1] 後継のミニPC。WindowsプリインストールをUbuntuにして利用[2]。今回の主役。
    • 通常はディスプレイもマウスもキーボードも繋いでなかった。

そのほかありますが、割愛。

回線(3)

  • メイン回線A
    • 当社の命綱。中速。特に不満はない。
  • サブ回線J
    • 昔から使用。やや低速。特に上り。アップロード辛い。
  • モバイル回線JM
    • 制限ないのでわりと重宝。モバイルなのでそんな感じの速度。

どうしたかったか・今日のおとしどころ

  • mba-03 から mini-08 にリモートデスクトップ接続、をやりたかった。Slackをリモートから見たい。何か来てる?だけでもいいから知りたい。が動機。
    • 作業に使うのは自宅にある申請済みのPCのみ、という制約下で、遠出した時に連絡あったかの確認をどうやる?が課題。
  • それが、mba-03 から ubuntu-10 に Cloudflare Zero Trust を経由して VNC 接続して、ブラウザで見る、で実現できそう、と確認できた。

状況回顧

模索のはじまり

  • mini-08 は通常はメイン回線AにWiFi接続している。 そこに仮想リモート、として mba-03 はサブ回線JにWiFi接続。
  • 昔使ってた記憶の PacketiX VPN 4.0 みたいなのないかなーとサービスを探してみた。Mac でそういうの、なかなかない。あるにはあったけど、ちょっと高いよな、と。
  • Cloudflare Zero Trust で リモートSSH 可能にしてたのを思い出し、これでいけないかな?と情報を探す。感謝した記事を発見。

主役登場

  • Ubuntu・・・そういえば ubuntu-10 がいたな・・・と思い出し、久々に駆り出す。
  • ディスプレイは 横(SNS表示用) に繋いでたHDMIを取り替えればいいようにしてあったので程なく表示。お久しぶり。
  • マウス挿してカーソル動かそうとしたら動かなかったので、近所の電気屋に調達へ。
    • 買ってきて、無事に動くようになって、キーボードもペアリング(Bluetooth)。
    • 溜まってたOSアップデートをして、標準の設定画面でリモートデスクトップ接続を許可する設定にした。
  • ubuntu-10 はメイン回線Aに有線接続だったので、まずは mini-08 から VNC 接続してみるかな、と試し出す。(同一ネットワーク)
    • 「レガシーなVNCプロトコルを有効にする」をONにして「新規接続の場合アクセス要求を必要とする」にしておくと、接続試行したときに確認ダイアログ出るんだけど、消えるの早くて「パスワードを要求する」にした。タイムアウト設定あるのでは?と思ったけど追わず。

家庭内VNCは成功

  • mini-08 から ubuntu-10vnc://${ubuntu-10のIP:192ではじまる} で割とすんなり成功。
  • ちょいちょい ufw を調整した。最終的に思うのは、「これ、なくてもよかったかも?」いずれ検証しよう・・・
  • この後気づいたこととして、ubuntu-10 からディスプレイ外すと VNC 切れるんですね
  • 実はもう1つの10.5インチのモバイルディスプレイ(第5の画面)があったので、しばらくそれ繋いで VNC での使用感を確認してたら、何もしてないのに勝手に何かを連打したりしてまともにコマンド打てなかったので、VNC するときはディスプレイのスペックそれなりにないとダメなんだなと。

Cloudflare Zero Trust 経由で悪戦苦闘

  • 前出のチュートリアルを進めてみた。

https://developers.cloudflare.com/cloudflare-one/tutorials/vnc-client-in-browser/

  • ubuntu-10 側の tightvncserver セットアップ、xstartup 調整はまずは素直に。
  • Cloudflare の管理画面を1つ1つ見ながらの、cloudflared インストール、tunnel create、configuration、tunnel run。ここまでで、Tunnel は Healthy になっていた。
  • Cloudflare Zero Trust Access > Add an application、Add a policy もだいたいガイド通りに。
  • さあ、どうだ、と、設定した DNS を mba-03 のブラウザからリクエスト
    • やっぱり一発ではゴールできなかった

  • そういえばログはどこに出るんだ?・・・ ~/.vnc/ 直下ですか・・・どれどれ・・・何も出てない。。。つまり、cloudflare から ubuntu-10 に通信が届いてない
    • ここで DNS 指定が 1 文字間違ってたと気付いたり。
  • tunnel、application、policy を確認して作り直したところ、パスワードを求められるところに到達した。
    • やっとキター

      !

    • しかし、パスワードPASSしても一面グレーだった。。そして、どうしてこんなことに・・・を紐解いたものの、ローカルネットワークで見ていた VNC のときと、画面が全然違う。
    • これが、gnome-remote-desktop と tightvncserver の違いか、と気がついたのはちょっとあと。
    • RDP にしないと、なのか?と軽く彷徨ったりもした。

xstartup の調整

  • 最終的にこうなりました
      #!/bin/sh
    
      xrdb "$HOME/.Xresources"
      
      unset SESSION_MANAGER
      unset DBUS_SESSION_BUS_ADDRESS
      #startxfce4 &
      
      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
      /etc/X11/Xsession
      
      ##gnome-session &
      #gnome-panel &
      #nautilus &
      
      /root/.vnc/start_chrome.sh &
    
    • start_chrome.sh の起動以外の何かの起動を全部コメントアウトしました ww。とりあえずいらないので。
  • chrome起動のシェルの中身(--no-sandbox 付けた)
      #!/bin/bash
      /usr/bin/google-chrome --no-sandbox "$@"
    
  • これで、~/.vnc/ で tightvncserver :1 で起動すると、これが。

  • chrome 出た

  • こうして、この記事を書いておこう(自分のために備忘録)、という気になれました。

先生ともだいぶぶつかりました

https://chat.openai.com/share/46d92017-c379-42a3-8ce1-0f3fb6d02aa0
https://chat.openai.com/share/a06cd5c8-07bb-4abe-b60a-ae5c9e4c42fd

あとは

  • tightvncserver :1 で自動起動、 tightvncserver -kill :1 で停止する systemctl 設定を入れないとな。
  • ログローテーションもしておくべき。ワーニングっぽいのが山ほど出てたし。まあ、df の結果がまだ1桁%なので追い追い。
  • 本格運用となったら、プロセス監視とかちゃんと設定したい。OpenTelemetry勉強の素材になるかしら?ネットワーク系のメトリック取りたい。何もわからんけど。

5/9 の ↓とか
https://pepabo.connpass.com/event/314411/

5/16 の↓で、
https://metaps.connpass.com/event/313921/

情報収集したいな、と思ったGW後半初日。
1日あそんでしまったので、明日からがんばろう。

宣伝

5/24 Road to SRE NEXT@福岡、LT登壇者絶賛募集中です。
https://sre-lounge.connpass.com/event/314694/

脚注
  1. see RaspberryPi起点で自宅インターネット回線のモニタリング作戦 2020/09Mackerelで自宅のグローバルIPが変わるのを監視する方法 (1) 2021/07 ↩︎

  2. https://x.com/sogaoh/status/1724013079103693114 ↩︎

ant-in-giant Tech Tips

Discussion