1 分で読了 #devops
このページの目次

Tailscale 操作マニュアル

Tailscale は WireGuard ベースのメッシュ VPN です。主要な概念: tailnet(プライベートネットワーク)、node(各デバイス)、DERP(中継サーバー、直接接続できない場合に使用)、MagicDNS(自動 .ts.net ドメイン)、ACL(アクセス制御)。

ステータス確認

tailscale status                          # 全ノード: IP/ホスト名/オンライン状態/出口ノード
tailscale status --json | jq '.'          # マシン判読可能形式
tailscale status --self                   # 自ノードのみ表示

tailscale ip -4                           # 自ノードの Tailscale IPv4 (100.x.y.z)
tailscale ip -6                           # 自ノードの Tailscale IPv6

tailscale netcheck                        # ネットワーク接続性: NAT タイプ/レイテンシ/DERP 到達可能性
tailscale ping <hostname>                 # エンドツーエンド接続テスト (tailnet経由)
tailscale ping --c 5 <hostname>           # 5回実行

tailscale version                         # クライアントバージョン
tailscale debug derp-map                  # 現在使用している DERP マップ
tailscale debug local-creatures           # 自ノードに登録されている MagicDNS 名
tailscale debug prefs                     # 現在の設定 (ルーティング/出口ノード/accept-routes など)

基本操作

# 起動/停止
tailscale up                              # 起動 (前回のパラメータを使用)
tailscale down                            # 切断 (ノードは削除しない)
tailscale logout                          # ログアウトし、このノードを削除

# 一般的な up パラメータ
tailscale up --accept-routes              # 他のノードが通知するサブネットルートを許可
tailscale up --advertise-routes=192.168.1.0/24  # サブネットを通知 (自ノードをサブネットゲートウェイとして使用)
tailscale up --exit-node=<hostname>       # 出口ノードを指定 (全トラフィックをこのノード経由にする)
tailscale up --exit-node-allow-lan-access # 出口ノードモードでもローカル LAN へのアクセスを許可
tailscale up --reset                      # 全設定をリセットして再度 up
tailscale up --operator=lizzbit           # ルートユーザー以外が操作できるようにする

# アカウント切替
tailscale login                           # ログイン (新規デバイスまたは再ログイン時)
tailscale switch <account>                # ログインアカウントを切替

# 再認証 (キーが期限切れの場合)
tailscale up --force-reauth

サブネットルーティング (Subnet Router)

# ゲートウェイとして機能するノードで:
tailscale up --advertise-routes=192.168.31.0/24,10.0.0.0/24

# Admin Console でルートを承認 (1回限りの操作):
# Machines → 該当ノードを検索 → Edit route settings → サブネットをチェックして Approve

# クライアントで有効化:
tailscale up --accept-routes              # 承認された全ルートを許可
# 現在許可されているルートを参照
tailscale debug prefs | grep Route

出口ノード (Exit Node)

# 出口ノード (通常は VPS またはパブリックエクスポートを持つホスト) で:
tailscale up --advertise-exit-node

# Admin Console で承認後、クライアント側:
tailscale up --exit-node=<hostname>       # 全トラフィックを出口ノード経由にする
tailscale up --exit-node=                 # 直接接続に戻す (空値)

# 一時的に出口ノードを切替
tailscale set --exit-node=<hostname>
tailscale set --exit-node=                # 解除

DERP サーバー

# 現在の DERP 使用状況を確認
tailscale netcheck                        # 各 DERP のレイテンシと現在選択されている DERP を表示
tailscale debug derp-map                  # DERP マップ URL (組み込み + カスタム)

# 独自 DERP (derper) の構築
# 起動: derper -hostname derp.liz6.com -certmode manual -certdir /etc/ssl/
# ポート: 8443 (TLS、パブリック公開用)、3478 (STUN、UDP)
# Tailscale Admin Console → Access Controls にカスタム DERP マップを追加:
#   "derpMap": { "Regions": { "901": { ... } } }

# DERP デバッグ
tailscale debug --derp                     # リアルタイムの DERP 接続状態
# トラフィックが DERP を経由している場合 (直接接続以外)、レイテンシが顕著に増加します

ACL 管理 (Admin Console)

# ACL は Admin Console の Access Controls ページで管理されます (JSON 形式)
# 主要な概念:
# - acls: 誰が誰/どのポートにアクセスできるか
# - groups: ユーザーグループ
# - hosts: ノードがどのソースからの接続を受け入れるかの制限
# - derpMap: カスタム DERP サーバー

# ACL の例:
# "acls": [
#   {"action": "accept", "src": ["group:admin"], "dst": ["*:*"]},
#   {"action": "accept", "src": ["group:dev"], "dst": ["tag:server:22,443"]},
# ]

# ACL が有効になっていない場合のテスト:
tailscale ping <hostname>                 # エンドツーエンドで検証

トラブルシューティング

# 1. サービス状態の確認
systemctl status tailscaled
journalctl -u tailscaled -f               # リアルタイムログ

# 2. 接続性の確認
tailscale ping <hostname>                 # 直接接続成功 = 低レイテンシの pong
# "via DERP(...)" と表示される場合は中継を介しており、レイテンシが高くなります

# 3. WireGuard レベル
wg show                                   # Tailscale の WireGuard インターフェース (通常は tailscale0)
ip addr show tailscale0                   # 100.x.y.z

# 4. ファイアウォール
# Tailscale の NAT トゥルーホールには STUN (UDP 3478) と DERP (TCP 443/8443) が使用されます
# 直接接続が不通の場合、UDP がブロックされていないか確認してください

# 5. NAT 問題
tailscale netcheck                        # NAT タイプを確認: easy/random/hard
# "hard NAT" は直接接続が最も困難であり、DERP の使用または手動での NAT トゥルーホールが必要になる場合があります

# 6. リセット
tailscale down
systemctl restart tailscaled
tailscale up

# 7. MagicDNS が機能しない場合
# 有効化されているか確認: tailscale debug prefs | grep -i dns
# MagicDNS の基本ドメイン: <hostname>.<tailnet>.ts.net
nslookup <hostname> 100.100.100.100       # Tailscale DNS を使用して解決