リモート接続可能な自宅開発サーバーを簡単に実現できるTailscale

これまで本ブログではVScode Remote extensionsを前提にしてHyper-VやWSL2などのVMに接続する方法や、VSCode workspacesを利用して外部サーバーや自宅に設置したサーバーに接続する方法を紹介してきました。

この中でウェブサービス開発する上で最も効率が良い開発環境はLinux入れた開発専用マシンを自宅において、そこにVScode Remoteを使って接続するという方法でした。そりゃ実ハードウェア上で動くのだから速いに決まってます。ですが、自宅にサーバーを設置して外部から接続出来るようにするのはセキュリティ面等を考えると手間がかかる、という理由で自宅外からの接続ではCodespacesの利用を検討していたんですね。

Tailscaleという福音

そんな中、ちょうどVS Codespacesの記事を公開したあたりでTLに流れてきたツイートから以下の記事を見つけ、Tailscaleの存在を知りました。

mopemope.com

TailscaleはSaaS型のVPNといったところでしょうか。早速試してみると、この記事の通りにほんと簡単に自宅ネットワーク外からもsshで接続ができ、しかも想像以上に動作が軽快でした。VScode Remote-SSHを使って自宅外から作業していてもほとんど気にならないレベルです。また、自宅ネットワーク内でもTailscaleで割り振られるIPをそのまま使ってssh接続出来るので、VS Codespacesのときに発生したような同一物理マシンだけど接続する方法違うので別のホストと見なされる、という問題も無くなりました。もう二週間以上、自宅外でも自宅内でもTailscale経由で開発マシンにつないで開発してますが、なんの問題もありません。しかも個人利用なら無料プランの範囲で十分です。

設定もあまりに簡単で、上記ブログにあるようにTalscaleクライアントを立ち上げた状態で設定されたIPに対してsshすればいいだけ。Tailscaleを利用することで開発用サーバーとvscodeやターミナルを動かすためのマシンを分離することができるため、自宅に開発専用のサーバーを設置するということが仕事上問題ない場合には外出時利用のノートPCスペックに悩む、という問題が解消されるかもしれません。

Tailscaleの仕組み

ということでここまでは「Tailscale使ってみた」な記事ですが、利用時には「WireGuard使ってるサービス」くらいの認識しか持っていませんでしたが、使ってみると随分と速いので仕組みが気になり、taiscaleが公開している "How Tailscale works" という記事を読んでみました。

tailscale.com

英語で書かれている上、かなりの分量があります。後半出てくる企業向け機能の説明は省いて、大筋についてポイントをまとめるとこんな感じになるでしょうか。

  • 通信経路の暗号化はUDPベースのVPNであるWireGuardを利用
    • 実装は wireguard-goを利用している
  • VPNで構築される仮想ネットワークはHub&Spoke型ではなく、メッシュネットワークを採用
    • ノード間の通信はノード同士が1:1で行う
  • Tailscaleが提供するCoordination Serverが各クライアントが生成した公開鍵と各ノード間の接続許可及び禁止リストを管理していて、全ノードに配布する
  • 各ノードは他のクライアントから届いたリクエストを公開鍵によって解読
    • 解読できなければ通信できない
  • Tailscaleユーザーはそれぞれ専用のドメイン(ネットワーク空間)が与えられる
    • 有料プランだとチームを組んで複数ユーザで共有可能な模様
  • Tailscaleユーザーの認証はCordination Serverとは別にAuth Serverが行う
    • Auth Serverは外部プロバイダでのログインや2FAに対応
  • 各ノード間の通信はNAT越えに対応している
    • NAT越えに関する特別な対応は不要

Tailscale経由でのssh通信が非常に高速なのはノードとノードが直接通信を行うからだったんですね。もちろん、Cordination serverとノードの認証も行われるようですが、オーバーヘッドは低いようです。このため、自宅ネットワーク内でも気にせずにTailscale経由の通信を利用することができ、自宅外からのアクセスも外出先から自宅ルーター等を経由した直接通信となるため、無駄のない通信となり、VS Codespacesなどよりもオーバーヘッドは小さく抑えられるということになるかなと思います。

なお、Tailscaleの価格設定を見るとメインターゲットは企業のようで、上にも書いたように個人利用であれば無料プランで十分です。無料プランでもAWS, Azure, GCPなど主要クラウドサービスに対応しているので、自宅に実機置きたくなかったり、計算リソースが欲しいときだけ試してみたいという方はクラウド上で仮想マシンを使うという選択もありですね。

2019年に立ち上がったまだ若い会社な上、比較的新しいVPN技術のWireGuardを採用ということでまだまだVPN利用時の検討候補に上がりづらいサービスかもしれませんが、頑張って欲しいですね。