Tailscale 設定
Chute はネイティブの Tailscale ネットワーク機能を内蔵しています。設定が完了すると、ルールやポリシーグループから組み込みポリシー TAILSCALE を参照して、トラフィックを tailnet 経由に送ることができます。tailnet 内の他のデバイスへのアクセス、出口ノード(exit node)経由でのインターネット接続、ピアが広告するサブネットへのアクセスが可能です。
通常のプロキシプロトコルとは異なり、Tailscale は [Proxy] で行単位で定義するポリシーではなく、グローバルで一意の [Tailscale] セクションで設定します。auth key(認証キー)を使ってコントロールサーバーにノードを登録するため、ブラウザでの対話型ログインは不要です。
Tailscale セクション
[Tailscale] セクションは、デバイスが tailnet に参加するために必要な設定をすべて定義します:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
control-server = https://controlplane.tailscale.com
hostname = my-device
exit-node = 100.101.102.103
accept-routes = true
force-derp = false
注意: 設定ファイル全体で許可される
[Tailscale]セクションは1つだけです。重複する[Tailscale]セクションは設定エラーとして扱われます。これは Tailscale エンジンが重く、tailnet のアドレス範囲が互いに排他的であるため、同時に参加できる tailnet は1つだけだからです。
パラメータ
| キー | 必須 | 説明 |
|---|---|---|
auth-key |
はい | Tailscale 認証キー。公式コントロールプレーン使用時は tskey- で始まる必要があります。サードパーティのコントロールサーバー(例: Headscale)は独自のキー形式を受け付けます |
control-server |
いいえ | コントロールサーバーアドレス。http(s):// URL である必要があります。空欄の場合は公式コントロールプレーン controlplane.tailscale.com を使用します |
hostname |
いいえ | tailnet に報告するデバイス名(MagicDNS ホスト名) |
exit-node |
いいえ | 出口ノード。tailnet IP(100.x)または MagicDNS 名を受け付けます。空欄で出口ノードを使用しません |
accept-routes |
いいえ | ピアが広告するサブネットルートを受け付けるか(真偽値、デフォルト false) |
force-derp |
いいえ | DERP リレーのみに強制し直接接続を無効にするか(真偽値、デフォルト false) |
真偽値は以下の表記(大文字小文字を区別しない)を受け付けます: true/false、1/0、yes/no、on/off。
注意: 不明なキーは警告付きで無視され(設定の読み込みは妨げません)。キーのスペルミス(例:
force-derpをforce_derpと書く)はそのオプションを黙って無効にします。上の表で確認してください。
組み込みポリシー TAILSCALE
[Tailscale] セクションを設定すると、組み込みポリシー識別子 TAILSCALE が使えるようになります。DIRECT や REJECT と同列に位置し、ルールやポリシーグループで直接参照できます。[Tailscale] セクションが未設定、または Tailscale がオフのとき、TAILSCALE を参照するルールは REJECT にフォールバックします(fail-closed)。
[Proxy Group]
Mesh = select, TAILSCALE, DIRECT
[Rule]
IP-CIDR,100.64.0.0/10,TAILSCALE,no-resolve
FINAL,DIRECT
自動ルーティング
Tailscale を有効にすると、Chute はすべてのルールより前に以下の3つのルールを自動的に注入するため、通常は tailnet 到達用のルールを手書きする必要はありません:
DOMAIN-SUFFIX,ts.net,TAILSCALE
IP-CIDR,100.64.0.0/10,TAILSCALE,no-resolve
IP-CIDR6,fd7a:115c:a1e0::/48,TAILSCALE,no-resolve
これらの注入ルールは実行時のみで、設定ファイルを変更することはありません。accept-routes = true を設定すると、ピアが広告するサブネットも対応する IP-CIDR / IP-CIDR6 ルールとして自動注入され、ピアがサブネットを追加・撤回すると自動的に更新されます。
使い方
tailnet 内のデバイスにアクセスする
[Tailscale] セクションを設定すれば、tailnet 内の他のデバイスへのアクセスに追加ルールは不要です。注入されたルールが tailnet のアドレス範囲と MagicDNS サフィックスを既にカバーしています。MagicDNS 名や tailnet IP で直接アドレス指定できます:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
hostname = my-iphone
[Rule]
FINAL,DIRECT
これで my-pc.<tailnet>.ts.net や 100.101.102.103 といった宛先は自動的に Tailscale 経由になります。
出口ノード経由でインターネットに出る
TAILSCALE を FINAL の宛先に設定すると、より具体的なルールに一致しなかったトラフィックをすべて出口ノード経由で送出できます:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
exit-node = 100.101.102.103
[Rule]
FINAL,TAILSCALE
注意:
exit-nodeを設定しただけでは、トラフィックは出口ノードを経由しません。TAILSCALEにトラフィックを送るルール(例:FINAL,TAILSCALE)も追加する必要があります。そのルールがないと、出口ノードは設定されていても使用されません。アプリの設定エディタはこれを警告します。
サブネットルートを受け付ける
tailnet 内のデバイスがサブネットルーターとしてローカルサブネットを広告している場合、accept-routes = true を有効にすればそれらのサブネットにアクセスできます。対応するルーティングルールが自動的に注入されます:
[Tailscale]
auth-key = tskey-auth-xxxxxxxxxxxx
accept-routes = true
カスタムコントロールサーバー(Headscale)
公式コントロールプレーンに加え、Chute はセルフホストの Headscale / Ionscale コントロールサーバーもサポートします。対応する URL を入力するだけです:
[Tailscale]
auth-key = your-headscale-preauth-key
control-server = https://headscale.example.com
hostname = my-device
サードパーティのコントロールサーバーは tskey- 接頭辞を強制せず、独自の認証キーを受け付けます。http:// 平文アドレスの使用は、信頼できるネットワーク(例: ローカルでセルフホストした Headscale)でのみ推奨されます。
既知の制限とベストプラクティス
Tailscale の実装はプロキシシナリオで最もよく使われる機能に焦点を当てており、公式クライアントの一部の機能はまだサポートされていません。以下の挙動の違いにご注意ください:
force-derp = trueはトラブルシューティング時にのみ使用してください。 Chute は通常、ピアとの直接 UDP 接続(disco ホールパンチング)を優先します。直接接続は一般に DERP リレーより低遅延で高スループットです。特定のネットワークで直接接続が継続的に不安定、または DERP より遅い場合は、両方のモードを比較したうえで、その環境に限ってforce-derpを有効にしてください。auth-key ログインのみサポート。 SSO / ブラウザでの対話型ログイン、Tailscale SSH、Taildrop、Funnel / serve はサポートされていません。Chute はローカルサブネットルートをアドバタイズしたり、このデバイスを出口ノードとして提供したりすることもできず、コンシューマーとしてのみ参加します。
出口ノードを使用しても通常の DNS はローカルで解決されます。 Chute は通常の DNS 解決を選択した出口ノードへ送信しません。MagicDNS 名はローカルの tailnet マップから解決されます。グローバルリゾルバーとリモートの split-DNS リゾルバーは未サポートです。プライベート名をリモートネットワークでしか解決できない場合は、IP アドレスを使用してください。
MagicDNS は A / AAAA レコードのみサポート。 グローバル Resolvers、split-DNS ルート(専用リゾルバーを持つエントリ)、非アドレス型 ExtraRecords(TXT / CNAME / SRV)は無視されます。検出時には警告がログに記録されます。
直接パスの内側 MTU は 1280 に固定。 パス MTU 探索はなく、この保守的な値により PPPoE / 重ね合わせトンネルリンクでのブラックホールを防ぎます。DERP リレーパスは影響を受けません。
Tailnet Lock(ネットワークロック)は未サポート。 ネットワークロックが有効な tailnet では、このノードのキーは署名されず、ロックされたピアはこのデバイスからのトラフィックを黙って破棄します。
Mullvad 出口やその他のソース書き換えシナリオは利用不可。 ローカルの送信元アドレスの書き換えを必要とする出口ノード機能はまだ実装されていません。
ネットワーク変更後の復旧はシステム通知に依存します。 Wi-Fi / セルラー切替時、Chute は速やかに接続を再構築しますが、ネットワーク変更通知が受信されなかった稀なケースでは、約3分のウォッチドッグ再接続にフォールバックします。