😢

TailScale をもっと早く使っていればよかった...

に公開
1

最近 Tailscale を使い始めました。正直な感想を言うと、「どうしてもっと早く使わなかったんだろう」と後悔するほどの衝撃でした。

これまでは「よくある VPN サービスの一つ」くらいにしか思っていませんでしたが、実際に触ってみると、ITエンジニアがネットワーク周りで直面する煩わしい課題を、驚くほどあっさりと解決してくれるプロダクトであることがわかりました。

本記事では、「Tailscale って VPN 的なやつ?」くらいの認識だった私が、今や手放せなくなった理由を紹介します。

インターネットさえあれば、あらゆるデバイスがつながる

Tailscale の導入は拍子抜けするほど簡単です。

Windows や macOS は公式ダウンロードページから、スマホや Fire TV 等はアプリストアからインストールするだけです。Linux サーバーなら、インターネットに繋がった状態で以下のコマンドを叩くだけでセットアップが完了します。

Linux サーバーでのセットアップには、後述する認証キー(Auth Key)が事前に必要です。

curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up --auth-key=tskey-auth-xxxxxxxxx

※その他のデバイスへの対応状況はドキュメントをご確認ください。

認証と「tailnet」への参加

インストール後は、自分のアカウントで認証を行うことで、自分専用のプライベートネットワーク(tailnet と呼ばれます)に参加できます。認証方法は主に2つです。

  1. ブラウザログイン: PCやスマホなど、個人に紐づく端末で利用します。Google や GitHub などの SSO を利用して手軽にログイン可能です。
  2. 認証キー(Auth Key): tailscale up --authkey=... のようにキーを渡す方法です。自動化したい場合や、ブラウザのない遠隔サーバーに適しています。

魔法のような名前解決「MagicDNS」

試しに適当な VPS を Tailscale に参加させてみると、Admin Console に ubuntu-vps のような名前で即座に表示されます。

驚くべきはここからです。Tailscale の MagicDNS という機能により、この名前がそのままホスト名として利用可能になります。つまり、IPアドレスを覚えなくても、他の端末から以下のコマンドで繋がります。

ssh root@ubuntu-vps

内部的には、100.x.y.z 帯のプライベートIPへ自動で解決されています。

> dig ubuntu-vps
...
;; ANSWER SECTION:
ubuntu-vps.             366304  IN      CNAME   ubuntu-vps.tailxxxxxx.ts.net.
ubuntu-vps.tailxxxxxx.ts.net. 366304 IN A        100.67.183.87

ファイアウォールを閉じたまま接続できる

Tailscale があれば、VPS のファイアウォールでインバウンド通信(SSHの22番ポートなど)をすべて閉じても、Tailscale 経由で安全に通信できます。

「公開ポートを開けなくて済む」という安心感は、一度味わうともう戻れません。

SSH の鍵管理から解放される「Tailscale SSH」

Tailscale SSH は、SSH の利便性はそのままに、認証と暗号化を Tailscale に委ねる機能です。これを使うと、authorized_keys に公開鍵を登録して回る手間が一切なくなります。

使い方は簡単で、接続される側で以下のオプションを付けて起動するだけです。

tailscale up --ssh

この状態で他デバイスから接続しようとすると、ブラウザが立ち上がり Tailscale での再認証を求められます(設定次第でスキップも可能)。認証を通れば、いつもの SSH セッションが始まります。

> ssh root@ubuntu-vps
# Tailscale SSH requires an additional check.
# To authenticate, visit: [https://login.tailscale.com/a/15c3f5b401daac](https://login.tailscale.com/a/15c3f5b401daac)

ACL による柔軟な権限管理

鍵を配る代わりに、Admin Console の ACL (Access Control List) で「誰がどのマシンに SSH できるか」を一元管理します。JSON 形式で直感的に記述でき、例えば「自分自身のデバイスには 12時間おきの認証でアクセス可能」といった設定がデフォルトで用意されています。

"ssh": [
    {
        "action": "check",
        "src":    ["autogroup:member"],
        "dst":    ["autogroup:self"],
        "users":  ["autogroup:nonroot", "root"],
    },
],

Tailscale を入れられないデバイスも救う「Subnet Routers」

世の中には Tailscale を直接インストールできないデバイス(IoT機器やプリンター、管理下の古いサーバーなど)もあります。そんな時に役立つのが Subnet Routers です。

これは、Tailscale をインストールした Linux マシン(私は Raspberry Pi を使っています)を「中継役」にする機能です。これによって、外出先から自宅内の Tailscale 未導入デバイスへアクセスできるようになります。

さらに応用すれば、物理的に離れた拠点同士を繋ぐ Site-to-Site ネットワーク も構築可能です。AWS VPC と社内LANを繋ぐといった構成も、高価な専用サービスを使わずにシンプルに実現できます。

寛大すぎる無料枠

驚くべきことに、個人利用ならこれらの機能がほぼすべて無料で使えます。デバイス台数の上限も多く、法人向けの高度な管理・ログ機能が必要ない限り、個人の開発環境としては十分すぎるスペックです。

Tailscale Pricing (Personal Plan)

まだまだある、便利な機能

今回詳しく紹介しきれなかったものの、他にもエンジニアの痒いところに手が届く機能が満載です。

  • Tailscale Funnel: ネットワーク内のサービスを、安全にインターネットへ公開できる。
  • Tailscale Serve: ローカルの Web サービスを tailnet 内で簡単に共有。
  • Serverless 連携: AWS Lambda 等から tailnet 内の資源にアクセス。
  • GitHub Actions 連携: CI パイプラインをセキュアに自社ネットワークへ接続。

ネットワーク設定の「面倒くさい」をすべて肩代わりしてくれる Tailscale。まだ試していない方は、ぜひ一度手元のマシンで tailscale up してみてください。きっと「もっと早く使えばよかった」と思うはずです。

Discussion