デジタルガーデン

fake-IP 海峡を裸で泳ぐ者:tailscaled の DialPlan、閉じられた SNI 嗅探、そして TUN を渡る二つの姿勢

2026-11-07 · 約 5 分 · Tailscale · fake-IP · mihomo · 経路衝突

再起動のあと、Tailscale のログインボタンは置物になった——押しても応答がなく、エラーも認証のポップアップもない。この事件の完全な因果連鎖は、fake-IP 海峡を裸で泳ぐ一尾の魚の物語である。

一、表面の三重確認

単純な答えは先に片づけられた。Tailscale サービスは走っているがログアウト状態(NoState)で、ログイン要求は超時する。Ninja の核 inet.exe は走っており、7897 は正常に待ち受け、TUN が指揮を執っている。直結のネットワークは健康(UDP 通、DERP ロサンゼルス 150ms)。さらに一層深いところでは、全アダプタの DNS が Ninja TUN によって 198.18.0.2 に書き換えられていた(fake-ip)。controlplane.tailscale.com は 198.18.0.29 に解決される——制御の交通は強制的にプロキシへ送り込まれていたのである。起動時系列のデッドロックも整理された。Ninja の TUN が先に DNS と経路を奪う → Tailscale の起動時自動ログインはプロキシ経由で超時して失敗する → ログアウト状態に落ちる。そしてログアウトしたクライアントは自動で再試行しないので、ずっと NoState に凍りつく。第三の争奪戦も待っていた。Tailscale は自前の MagicDNS(100.100.100.100)をアダプタに書き戻そうとし、Ninja がまた fake-ip で上書きする——両者が同じ地面を奪い合っていたのである。

二、裸の泳者:DialPlan と、閉じられた嗅探

サービスを再起動し、プロキシ環境変数をサービスに書き込み、ログを一册——ではなく一冊ずつ繰った——登録要求はなお十秒で超時する。鍵となる細部が浮上した。tailscaled は内部に **DialPlan(裸 IP のリスト)**をキャッシュしており、そちらを優先して直接ダイヤルする。新しく設定したプロキシ経路を迂回するのである。対照実験が衝突の機構を釘付けした。同じセグメントの 192.200.0.103 は一秒で通ったが、192.200.0.115 は十秒凍り、ドメイン経由の fake-ip は通った——tailscaled が持つのは裸 IP であり(内蔵 bootstrap DNS が後押しし、Ninja の fake-ip 域名写像——ではなくドメイン写像を迂回する)、裸 IP の交通が ninja-tun に入ると、sniff: false の mihomo にはドメインが見えず、IP 規則で盲目的に経路を割り当てるしかない。ちょうど詰まる経路に着地したのである。これは Tailscale あるいは Ninja 単独の故障ではなく、両者の重畳による経路衝突である。

三、修復の道の学

即時の回復は、「鎧を脱いでから渡河する」道を歩いた。TUN を落とす → 主人の正常な DNS を回復させる → Tailscale を再起動する → 裸の直結状態なら登録は即座に通り、ブラウザで一度のクリックが授権を終える。共存のための三択はこうだ。推奨は tailscale set --accept-dns=false(MagicDNS を放棄し、Ninja に DNS を独占させ、100.x のアドレスで端末に直結する——もっとも堅実)。あるいは Ninja の設定に .tailscale.com、.ts.net、controlplane.tailscale.com を直結規則として加える(Tailscale の交通をプロキシに迂回させる)。あるいは Tailscale サービスに恒久のプロキシ設定を行う。

四、二つの姿勢の地理学

この事件の地理学は、独立の頁に値する。同じ目的地、海峡を渡る二つの姿勢、そしてまるで違う運命——ドメインを携えて fake-ip の写像に乗る者(curl)は順調に通る。裸 IP を直接ダイヤルする者(tailscaled の DialPlan)は、嗅探の閉じた死の航道にぶつかる。fake-IP 体系の素朴な仮定は「すべての交通はまずドメインを問う」である。だがカーネル級の守護プロセスこそ、ドメインを問わず、IP しか知らない裸の泳者なのである。プロキシと共存しなければならないネットワークにおいて、ドメイン体系に従わないすべてのプロセスには、それぞれ専用の航路が必要なのである。

コメント

← デジタルガーデン