Tailscale:ゼロコンフィグで実現するメッシュVPN
Tailscaleは、元Googleエンジニアが2019年に設立したVPNサービス。従来のVPNとは根本的に異なるアーキテクチャで、「インストールするだけで繋がる」という驚異的な手軽さを実現している。2022年には1億ドルを調達しユニコーン企業となった。
この記事では、Tailscaleの技術的な仕組みと設計思想を深掘りする。
設計思想:なぜTailscaleが生まれたか
従来のVPNには根本的な問題があった。
- 設定が複雑:ポート開放、証明書管理、ルーティング設定...専門知識が必要
- 中央集権的:すべての通信がVPNサーバーを経由し、ボトルネックになる
- 境界防御モデル:「内側は安全」という前提が現代のセキュリティ要件に合わない
Tailscaleはこれらを根本から解決するために、メッシュネットワークとゼロトラストという2つの概念を軸に設計された。
アーキテクチャ概要

Tailscaleのアーキテクチャは3つの層で構成される。
1. コントロールプレーン(Coordination Server)
Tailscaleの「頭脳」。ただし、実際のトラフィックは一切流れない。
役割:
- 各ノードの公開鍵を収集・配布
- ノードの現在位置(IPアドレス)を追跡
- ACL(アクセス制御リスト)ポリシーの配布
- ネットワークマップの同期
重要な点:
- 秘密鍵は絶対にノードから出ない
- コーディネーションサーバーは「電話帳」のような存在
- ダウンしても既存の接続は維持される(新規接続のみ影響)
2. DERPリレー層
DERP = Designated Encrypted Relay for Packets
P2P接続が確立できない場合のフォールバック。世界中に配置されたリレーサーバーがトラフィックを中継する。
特徴:
- HTTPSベース(ポート443)なので、ほぼどんなネットワークでも通過可能
- WireGuardで暗号化済みのパケットを「盲目的に」転送
- DERPサーバーは通信内容を復号できない(秘密鍵がないため)
3. データプレーン(WireGuard Mesh)
実際のトラフィックが流れる層。各デバイスがWireGuardトンネルで直接接続する。
特徴:
- E2E暗号化(エンドツーエンド暗号化)
- レイテンシ最小化(中央サーバーを経由しない)
- 単一障害点なし
ハブ&スポーク vs メッシュ

従来型:ハブ&スポーク
[VPNサーバー] ← 単一障害点 & ボトルネック
/ | \
A B C
- すべての通信が中央サーバーを経由
- サーバーがダウン → 全滅
- 帯域がサーバーに集中 → 遅延増加
- A→Bの通信でも A→サーバー→B と2ホップ必要
Tailscale:フルメッシュ
A ←――――→ B
↑ ╲ ╱ ↑
| ╲╱ |
| ╱╲ |
↓ ╱ ╲ ↓
C ←――――→ D
- 各デバイスが直接通信
- 1つがダウンしても他は影響なし
- 最短経路で通信 → レイテンシ最小
- スケールしても性能劣化しにくい
WireGuard:Tailscaleの基盤技術
TailscaleはWireGuardプロトコルの上に構築されている。WireGuardを選んだ理由を理解するために、他のVPNプロトコルと比較する。
VPNプロトコル比較
| 特性 | WireGuard | OpenVPN | IPsec |
|---|---|---|---|
| コード行数 | ~4,000行 | ~100,000行 | ~400,000行 |
| 暗号化 | ChaCha20, Curve25519 | AES-256 (選択可) | 複数対応 |
| 速度 | 最速 | 中程度 | 速い |
| 設定の複雑さ | シンプル | 複雑 | 非常に複雑 |
| 監査しやすさ | 容易 | 困難 | 非常に困難 |
| カーネル統合 | あり | なし | あり |
WireGuardの設計哲学
- シンプルさ:コード量が少ない = バグが少ない = セキュリティが高い
- モダンな暗号:ChaCha20-Poly1305、Curve25519など最新のアルゴリズム
- カーネルレベル動作:オーバーヘッド最小化
- Cryptokey Routing:公開鍵がそのままルーティングテーブルになる
なぜ素のWireGuardではダメなのか
WireGuardは優れたプロトコルだが、以下の課題がある:
- 鍵管理:各ノードの公開鍵を手動で配布・管理する必要がある
- NAT越え:自前で解決する必要がある
- 動的IP対応:IPが変わると手動で更新が必要
- アクセス制御:プロトコルレベルでは提供されない
Tailscaleはこれらを自動化し、WireGuardの「面倒な部分」を隠蔽している。
NAT越えの魔法

Tailscaleの最も革新的な部分。なぜ「ポート開放なし」で接続できるのかを解説する。
NATの問題
ほとんどのデバイスはNAT(Network Address Translation)の背後にいる。NATは外部からの接続を遮断するため、本来はP2P通信ができない。
[デバイスA: 192.168.1.10] → [NAT A: 203.0.113.1:12345] → インターネット
[デバイスB: 192.168.2.20] → [NAT B: 198.51.100.1:54321] → インターネット
AとBは互いのプライベートIP(192.168.x.x)を知っていても直接通信できない。
STUN:自分の公開アドレスを知る
STUN(Session Traversal Utilities for NAT)サーバーに接続すると、自分のNATが外部にどのようなアドレスを公開しているかがわかる。
デバイスA → STUNサーバー: 「私の公開アドレスは?」
STUNサーバー → デバイスA: 「203.0.113.1:12345 だよ」
UDPホールパンチング
NATの特性を利用したテクニック。NATは「内側から外側への通信」を許可し、その応答を通すためにルールを作成する。
手順:
- AとBが同時にコーディネーションサーバーから相手の公開アドレスを取得
- AがBに、BがAに同時にパケットを送信
- 各NATは「自分から送ったパケットの応答」と認識してルールを作成
- 以降、直接通信が可能になる
時刻T: A → B (Bに届かないが、NAT Aに穴が開く)
時刻T: B → A (Aに届かないが、NAT Bに穴が開く)
時刻T+1: A → B (NAT Bの穴を通過、Bに到達!)
時刻T+1: B → A (NAT Aの穴を通過、Aに到達!)
ICE:最適な経路を選択
ICE(Interactive Connectivity Establishment)は、複数の接続方法を同時に試し、最も良いものを選ぶアルゴリズム。
優先順位:
- 直接接続(同一LAN内)
- IPv6直接接続
- UDPホールパンチング
- DERPリレー(最後の手段)
難敵:Symmetric NAT
一部のNAT(特に企業のファイアウォール)は「Symmetric NAT」と呼ばれる厳格な方式を使う。これは接続先ごとに異なるポートを割り当てるため、ホールパンチングが不可能。
このような場合、TailscaleはDERPリレーを使用する。遅くはなるが、接続は確実に確立される。
成功率
Tailscaleの公開データによると:
- UDP接続成功率:82〜95%
- TCP接続成功率:約64%
- 残りはDERPリレー経由
ゼロトラスト:「信頼しない」セキュリティモデル

従来モデル:城壁と堀
[インターネット] ← 危険!
↓
[ファイアウォール] ← ここで防御
↓
[社内ネットワーク] ← 安全...のはず
問題点:
- 一度侵入されると「やりたい放題」
- 内部犯行に無力
- リモートワーク時代に境界が曖昧に
ゼロトラストモデル:Never Trust, Always Verify
[デバイスA] ←認証→ [デバイスB]
↑ ↑
認証 認証
↓ ↓
[デバイスC] ←認証→ [デバイスD]
原則:
- ネットワークの位置で信頼しない
- すべての接続で認証を要求
- 最小権限の原則を徹底
- 継続的な検証
TailscaleのACL(Access Control List)
Tailscaleはデフォルトですべての接続を拒否し、明示的に許可されたものだけを通す。
{
"acls": [
// 開発者は開発サーバーにアクセス可能
{
"action": "accept",
"src": ["group:developers"],
"dst": ["tag:dev-server:*"]
},
// 本番サーバーは管理者のみ
{
"action": "accept",
"src": ["group:admins"],
"dst": ["tag:prod-server:*"]
}
]
}
ACLの特徴:
- ユーザー、グループ、タグで制御(IPアドレスではなく)
- ポート単位での制限が可能
- GitHubと連携したコードレビュー可能な設定
Grants:より高度なアクセス制御
Tailscaleの新しいアクセス制御システム。ACLより細かい制御が可能。
- ネットワーク層 + アプリケーション層の統合制御
- 時間ベースのアクセス制限
- デバイスの状態に基づく制御
MagicDNS:IPアドレスからの解放
仕組み
MagicDNSは各デバイス上でローカルに動作するDNSサーバー。
[あなたのデバイス]
↓ DNSクエリ
[100.100.100.100] ← Tailscaleのローカルリゾルバ
↓
┌───┴───┐
↓ ↓
tailnet内 外部ドメイン
(ローカル解決) (上流DNSへ転送)
特徴:
- クエリはデバイスの外に出ない(プライバシー保護)
- ネットワークマップ更新と同時にDNS情報も更新
- ダウンタイムなし(各デバイスで独立動作)
使用例
# IPアドレスを覚える必要なし
ssh my-server
# こんなことも可能
ping raspberry-pi
curl http://nas:8080
Tailscaleの独自機能
Tailscale SSH
SSH鍵の管理が不要になる革命的機能。
従来:
- SSH鍵ペア生成
- 公開鍵をサーバーにコピー
- 鍵のローテーション管理
- 複数デバイス間での鍵同期
Tailscale SSH:
tailscale up --sshを実行- 終わり
Tailscaleの認証でSSH接続を制御するため、鍵管理が不要になる。
Taildrop
デバイス間のファイル送信機能。
# CLIから
tailscale file cp ./document.pdf my-phone:
# または右クリック → "Send with Tailscale"
E2E暗号化されたP2P転送なので高速かつ安全。
Exit Node
特定のデバイス経由でインターネットに出る機能。
ユースケース:
- 海外から日本のサービスにアクセス
- 公共WiFiでのセキュリティ強化
- 企業ネットワーク経由でのアクセス
# Exit Nodeを有効化(サーバー側)
tailscale up --advertise-exit-node
# Exit Nodeを使用(クライアント側)
tailscale up --exit-node=my-home-server
Subnet Router
Tailscaleをインストールできないデバイス(IoT機器、レガシーシステム)へのアクセスを可能にする。
# 192.168.1.0/24 のサブネットを公開
tailscale up --advertise-routes=192.168.1.0/24
料金プラン
| プラン | 料金 | ユーザー | デバイス | 用途 |
|---|---|---|---|---|
| Personal | 無料 | 3 | 100 | 個人利用 |
| Personal Plus | $5/月 | 6 | 100 | 家族・小規模 |
| Starter | $6/ユーザー/月 | - | 100 | 小規模チーム |
| Premium | $18/ユーザー/月 | - | 100 | 企業向け |
| Enterprise | 要問合せ | - | - | 大規模組織 |
個人利用なら無料プランで十分すぎる。 100デバイスまで対応。
制限と代替手段
Tailscaleの制限
- ストリーミング地域制限回避には不向き:商用VPNのようなサーバー網がない
- 中国ではブロック:Great Firewall
- コーディネーションサーバーは非公開:完全なセルフホストは不可
Headscale:オープンソース代替
Tailscaleのコーディネーションサーバーをセルフホストしたい場合、HeadscaleというOSS実装がある。
まとめ
Tailscaleは「VPNの民主化」を実現した。
技術的革新:
- WireGuardの上に構築された堅牢な暗号化
- NAT越えの完全自動化
- メッシュネットワークによるスケーラビリティ
設計思想:
- ゼロトラストセキュリティの実践
- ゼロコンフィグの追求
- E2E暗号化によるプライバシー保護
専門知識なしで、エンタープライズレベルのセキュアなネットワークが構築できる。個人の自宅サーバー接続から、企業のインフラ管理まで、幅広いユースケースに対応する。
抽出された概念
この記事から以下の一般概念をnotesに抽出した。
- ゼロトラストネットワーク - ネットワーク位置で信頼せず常に検証するセキュリティモデル
- メッシュネットワーク - ノード同士が直接接続し合う中央集権的ハブを持たない構成
- NATトラバーサル - NATの背後のデバイス同士がP2P接続を確立する技術群(UDPホールパンチングなど)
- ゼロコンフィグ設計 - 設定なしで動作し段階的にカスタマイズできる設計思想