Tailscale と LightDMで始めるリモートデスクトップ生活
どうも僕です。みなさん、リモートで働いてますか?
今回はリモートマシンで作業する際に少し役に立つお話を書いてみたいと思います。
リモートで働く前から書こうと思ってたエントリなんですが、今更ながら書いてみたいと思います。備忘録です。
リモートマシンへのログインめんどくさい問題
リモートで働いてると手元のマシンが非力で困る、なんてことありますよね。
オフィス、クラウドにあるマシンの力を借りたい!
十分なスペックのマシンは用意できたとしてもめんどくさいのがリモートマシンへの接続です。
リモートマシンへの接続には個人では解決しにくい以下の問題があります。
- オフィスなどには VPN があるのか
- リモートマシンの IP わかるのか(毎回変ってしまわないか)
特に VPN の接続方法次第では全てのトラフィックが VPN 経由になってしまい、通常のブラウジングが遅くなったりいろいろと不便なことも…
VPN のない環境のリモートマシンへの接続をもっと簡単にできないでしょうか。
そこで Tailscale です。
Tailscale
bradfitz が転職する際に少し話題になった Tailscale ですが、この会社ではプライベートネットワークをもっと簡単に構築できるようなサービスを開発しています。
このサービスは難しい設定なしで、様々なデバイスを WireGuard で接続するモノです。
詳しくは Tailscale のサイトを見て貰えればわかりますがこのような特徴があります。
- 難しい設定不要
- Firewall の設定不要
- 認証に SSO、MFA を使える
- いつも同じ IP
動作させるまでにやることといえば Tailscale のエージェントをインストールし、Web で認証をするだけ。とても簡単です。同じアカウントで認証されたデバイスは、そのアカウントに紐づけられ簡単に管理することができます。
私の場合は個人の Google のアカウントで認証して使用しています。
管理画面にアクセスすると以下のように管理されているマシン、IP などが確認することができます。
Tailscale がインストールされているマシン同士であれば、太字で書かれている IP アドレスに SSH で接続することができます。 とても簡単ですね。
インストール方法は各 OS のよって異なるので公式のドキュメントを参照してください。
LightDM
簡単にリモートマシンに SSH で接続できましたが、場合によってはこれだけではまだ仕事が難しいケースもあります。 社内 IP からしか接続できない Web 管理コンソールへのアクセスなど社内マシン上の GUI で操作しないといけないことも多々あるでしょう。
もちろん SSH で接続できているのでいろいろな方法でこの要件は実現可能だと思います。ですが恐らく一番手数が少なくて済む方法を書いてみようと思います。
それは X ディスプレイマネージャーに LightDM を使うことです。
一部の Linux ディストリビューションではデフォルトのディスプレイマネージャーかも知れません。LightDM は軽量、シンプルで拡張性が高いという特徴があります。
そして LightDM は VNC 接続をサポートしています。
VNC で接続すると LightDM の greeter が表示されグラフィカルにログイン、そのまま GUI でリモートマシンを操作することができます。
この機能を有効にするには/etc/lightdm.conf の下の方にある VNCServer セクションを有効化し、設定を少し書くだけです。
あらかじめ vncpasswd でパスワードの設定は行って下さい。
sudo vncpasswd /etc/vncpasswd
以下 lightdm.conf の設定例です。
[VNCServer]
enabled=true
command=Xvnc -rfbauth /etc/vncpasswd
port=5900
listen-address=localhost
width=1600
height=900
depth=24
設定で注意すべき点は、listen-address を使って vnc がローカルホストからの接続のみ listen するようにする点です。これで SSH とポートフォワーディングのみを許可できます。
SSH クライアントでは localhost:5900 でポートフォワーディングします。
ssh -YAC 100.xxxx.xx.xxx -L 5900:localhost:5900
これで VNC でも簡単にリモートマシンに接続することができるようになります。
今回は Tailscale と LightDM を紹介してみました。