記事

Tailscaleシリーズ第3編 — 動作原理とコスト・限界 (DERP・MagicDNS・hole punching・年1,100円振り返り)

Tailscaleシリーズ第3編 — 動作原理とコスト・限界 (DERP・MagicDNS・hole punching・年1,100円振り返り)
前提知識 — 先にこちらをご確認ください
TL;DR — 要点まとめ
  • TailscaleのNAT越えは「全部同時に試して最初に通った経路」 — STUN/ICE標準 + UPnP/PMP/PCPポートマップ + DERP fallbackを並列に試行する
  • Symmetric NAT(Hard NAT)はbirthday paradoxで突破 — 256個のポートを開いて無作為にprobe、2,048回で99.9% / 約20秒
  • DERPはP2P失敗時にHTTPSの上で暗号文をそのまま転送するfallback。E2E保証は維持
  • MagicDNSは100.100.100.100のstub resolverでOSのDNSを横取りし、短いホスト名を100.64.x.xに解決する
  • 実コスト — 電気代 約770円/年が事実上すべて。ノートPC・インターネットは埋没コスト
Visitors

Hits

この編で扱うこと

シリーズ最終編です。2つのテーマをまとめます。

Part 1 — 動作原理: 本シリーズのインフラを成立させているメカニズム。家庭NAT 2重の奥にあるノートPC 2台がどうやって直通で通信するのか。STUN・ICE・hole punching・DERP・MagicDNSをひとまとめに整理します。

Part 2 — コスト・限界・振り返り: 年間1,100円インフラの実コスト分解、未検証項目、シリーズ全体の振り返り。

この編単独でも読めるように書いていますが、インフラが何をしているかという全体像は第1・2編にあります。


Part 1 — 動作原理

2つのNAT分類 — 伝統 vs 現代

NAT越えを語るにはまずNATの種類を押さえる必要があります。よく耳にする分類は1990年代後半から使われてきた cone系の4分類 です。

伝統的な分類動作
Full Cone外部の誰からでもNATの外部ポート宛に送れば内部に届く (最も緩い)
Restricted Cone内部が先に送った外部IPからのみ着信可能
Port-Restricted Cone内部が先に送った外部IP+ポートからのみ着信可能
Symmetric宛先が違えば外部ポートも別マッピング (最も厳しい)

この分類は直感的ですが、実際のNAT機器の動きを正確に捉えきれないという批判があり、 RFC 4787 が新しい分類を提案し、Tailscaleもこちらを採用しています。

Tailscaleの表現 — “Endpoint-Independent Mapping (EIM), and the hard variant Endpoint-Dependent Mapping (EDM)” (How NAT traversal works)

Easy NAT (EIM)
Endpoint-Independent Mapping
宛先がどこでも同じ外部ポートを再利用する。STUNで一度発見すれば、他のピアともそのポートで通る。
大半の家庭用ルーター
Hard NAT (EDM)
Endpoint-Dependent Mapping
宛先ごとに異なる外部ポートを割り当てる。STUNで発見したポートはSTUNサーバー専用で、別のピア向けには別ポートを改めて探す必要がある。
一部ISPのCGNAT、企業NAT

この分類が重要なのは、 「両端EIMならhole punchingが比較的容易、片方でもEDMなら困難」 がNAT越え戦略の最初の分岐点だからです。本シリーズの釜山KTルーターと福岡の家庭ルーターはどちらもEIM系として観測されており、P2P directが大きな苦労なく成立します(第1編の測定基準による)。


STUN — 「自分はインターネット上でどう見えているか」

STUN(Session Traversal Utilities for NAT)を一言でまとめると、 「外部のSTUNサーバーへパケットを投げ、そのサーバーが見た自分の外部IP・ポートを返してもらうプロトコル」 です。

ちょっと待って、これだけ確認しておこう

「STUNのRFC番号は5389ではなく8489」

ネット上の古い資料の多くがSTUNを RFC 5389 として引用していますが、2020年2月発行の RFC 8489が5389をobsolete (廃止)しています。つまり現在の標準は8489です。

8489の主な変更点:

  • MESSAGE-INTEGRITY-SHA256 属性の追加 — MD5ベースの認証に加えてSHA-256オプション
  • USERHASH 属性によるユーザー名の匿名化
  • PASSWORD-ALGORITHM 属性によるパスワード保護アルゴリズムの選択
  • nonce cookie メカニズムによるbid-down攻撃への防御

本シリーズ本文ではRFC 8489表記に従います。

Tailscaleの表現 — “Your machine sends a ‘what’s my endpoint from your point of view?’ request to a STUN server, and the server replies with ‘here’s the ip:port that I saw your UDP packet coming from.’”

1
OUT ノードがプライベートIP 192.168.0.10:54321 からSTUNサーバー X.X.X.X:3478 へUDPパケットを送信
2
NAT 家庭ルーターが 192.168.0.10:54321 ↔ public:62000 のマッピングを生成
3
STUN サーバーが「あなたは public:62000 から来た」と応答
4
SHARE ノードが public:62000 をcontrol plane経由でピアに通知

核心となる制約は、STUNの発見結果は そのsocketでのみ使わなければならない という点です — 別のsocketを使うとNATが別のマッピングを作ってしまい、せっかく発見したポートが無意味になります。そのためTailscaleは「通信に使うsocketからSTUNパケットを直接投げる」パターンを採ります。

EIM NATではこれで終わりです — 発見した public:62000 が他のピアともそのまま通用します。EDM NATではあまり役に立たず — 次節のbirthday paradoxへ進む必要があります。


ICE — 「全部同時に試す」

ICE(Interactive Connectivity Establishment, RFC 8445)は、 複数のcandidate(接続候補アドレス)を同時に集めてすべて試行し、最初に応答が返ってきた経路を採用する アルゴリズムです。

Tailscaleが1ノードに対して同時に試行するcandidateは以下の5種類です(公式ブログより)。

1
LANアドレス
同一ネットワークならNAT越え自体が不要。直接通信。
2
STUN WANアドレス
EIM NATで発見した public:port
3
ポートマップアドレス
UPnP-IGD / NAT-PMP / PCPでルーターに明示的にフォワーディングを要求
4
NAT64経路
IPv6-only環境からIPv4ピアと通信
5
DERP relay
上の4つすべてが失敗した時のfallback。常にpreselected

Tailscaleはround-trip latency基準で最速の経路を選び、より良い経路が見つかれば即座にアップグレードする。

このモデルの核心は “all connections start out with DERP preselected” — すべての接続は開始時点でDERP経由で流れており、より良い経路(LAN/STUN/ポートマップ)が見つかった瞬間にデータプレーンを即座にアップグレードします。つまりNAT越えが遅れても、 最初のパケットから通信は始まっている わけです。

Avery Pennarunの一行要約 — “try everything at once, and pick the best thing that works


Hole Punching — 2つのピアが同時にoutbound

大半の家庭用NAT(EIM)は「内部から先に外向きに送ったことのある外部IP・ポートからのinboundは許可する」というステートフルファイアウォールの動作を示します。これがhole punchingの手がかりです。

Peer A (NATの内側)
1. control planeからBのpublicアドレスを受け取る
2. Bへ向けてoutbound UDPパケットを送出
3. NATがマッピングを生成、自身のファイアウォールもBからの応答を許可
同時
Peer B (NATの内側)
1. control planeからAのpublicアドレスを受け取る
2. Aへ向けてoutbound UDPパケットを送出
3. NATがマッピングを生成、自身のファイアウォールもAからの応答を許可

"packets must flow out before packets can flow back in" — Tailscaleのhole punchingの原理

この過程で 最初のoutboundパケットは相手のNATで拒否されます (まだマッピングが無いため到達できない)。しかしその拒否されたパケットは自分のNATにマッピングを作り、続いて相手から飛んでくるoutboundパケットが自分のNATに届いた際に、 ファイアウォールが「これは我々が先に送った先からの応答だ」と認識 して通します。

以降は両端が30秒ごとにkeep-alive pingをやり取りしてNATマッピングを維持します — 一般的な家庭用NATは無通信30秒〜数分でマッピングを失効させるためです。


Symmetric NATとBirthday Paradox

EDM NAT(Hard NAT)では上述のhole punchingが そのままでは通用しません — 宛先ごとに別の外部ポートを割り当てるため、control planeが伝えたポートと相手が実際に受け取るポートが食い違います。

解決策は 確率に頼ること です。片方が256個のポートを同時に開けておき、相手側はその256個のどこかに無作為にprobeを投げます。一致(birthday collision)が起これば穴が開きます。

Probe回数成功確率所要時間 (100 pkt/s)
17450%1.7s
25664%2.6s
1,02498%10s
2,04899.9%~20s

Tailscale公式の数値。256ポートのプール上で無作為にprobeした際の成功確率。

数学的に見ると、可能なポート空間が65,535で片方が256個を開いた場合、無作為なprobe 1回がそのいずれかに当たる確率は256/65,535 ≈ 0.39%。 1 - (1 - 256/65535)^N がN=2,048で0.999を超えます ( birthday paradox と呼ばれるのは √N 効果で探索空間が平方根で縮むため — 線形ではなく)。

100パケット/秒の送信ペースで2,048 probe = およそ20秒。実測では半分以上が2秒以内に通過するとTailscaleが報告しています。

Tailscaleの実測 — “half the time we’ll get through in under 2 seconds” (How NAT traversal works)

より厳しいケース — 両端ともEDM: 探索空間が掛け算になり、99.9%到達まで約28分かかります(170,000 probes / 100 pkt/s)。このようなケースでは事実上DERP fallbackに落ち込みます。

本シリーズのシナリオでは釜山KTルーターがEIM、福岡の家庭ルーターもEIMなので、birthday paradoxが発動する出番はありません — STUN一発で終わります。


DERP — 最後のセーフティネット

P2P directがすべて失敗した場合、 DERP(Designated Encrypted Relay for Packets) がfallbackとして作動します。DERPの特殊性を表で整理します。

観点DERPの動作
プロトコルHTTPS上 (TCP/443) — UDP遮断環境でも通過
データ処理暗号化されたパケットをそのまま転送 — 復号不可 (E2E保証は維持)
ノード側の鍵DERPサーバーには 秘密鍵を渡さない — ノード内にのみ存在
TURNとの関係「DERPはTURNと同じ役割だが、HTTPSストリーム + WireGuard鍵を使う」
グローバルインフラTailscaleが28以上のリージョンで運用、 Personal無料プランに含まれる
開始時の動作「常にDERPがpreselected」 — 最初のパケットから通信開始

DERPが TCP/443 (HTTPS) の上で動作するという点が運用上重要です — UDPが塞がれているカフェ・ホテル・企業ネットワークでもTailscaleが動作する理由です。ドメインは普通のHTTPSトラフィックに見え、パケットの中身は既にWireGuardで暗号化されているので中間者には見えません。

Tailscaleの表現 — “Your traffic remains end-to-end encrypted when it passes through a relay server.”

TURN vs DERP — 何が同じで何が違うか

DERPはIETF標準の TURN(Traversal Using Relays around NAT, RFC 8656) と同じポジションを占めますが、実装は別物です。比較表:

観点TURN (RFC 8656)Tailscale DERP
標準化IETF標準Tailscale独自実装 (オープンソース)
トランスポートUDP / TCP / TLSHTTPS (TCP/443) 専用
認証TURN認証情報 (username/credential)WireGuard鍵
データプレーン暗号文/平文ともに可暗号文のみ (E2E保証)
一般的な用途WebRTCビデオ会議のfallbackメッシュVPNノード間のfallback
運用コスト別途TURNサーバーが必要Tailscaleグローバルインフラ (無料プランに含まれる)

核心の差は「TLS上のHTTPS専用」 という決定です。TURNはUDP・TCPいずれも使いますが、一部の企業ファイアウォールはTURNの標準ポート(3478, 5349)を見抜いて遮断する可能性がある一方、DERPは 一般的なWebトラフィックと区別できないHTTPS の上にあるため、ほぼあらゆる環境で通過します。カフェ・ホテル・空港Wi-Fiでも動作が保証される理由がこれです。

ちょっと待って、これだけ確認しておこう

「DERPサーバーは実はSTUN responderも兼ねている — 1ホストで2役を同時に」

上ではSTUNとDERPを別個のメカニズムとして扱いましたが、運用面では両者はほぼ同じインフラの上にあります — Tailscaleのグローバル DERPノードは HTTPS relayとSTUN responderを1ホストで併設提供 しています。同じノードホストがTCP/443(HTTPS)上のDERP relayとしても応答し、UDP/3478(STUN)としても応答します。

つまり「Tokyoリージョンに DERPノードを1台置く」と — (a) UDPが通る環境ではそのノードが STUNで外部IP・ポート発見 を助けてP2P directを成立させ、(b) UDPが塞がれている環境ではそのノードが HTTPS relayとしてfallback を引き受けます。1ノードが2役を同時にこなす構造が、グローバルDERPインフラのコストを一定水準に抑える根拠の一つになっています。

本シリーズ第1編の tailscale netcheck が28リージョンすべてのDERPに対してRTTを一度に計測できたのも同じ理由 — STUNとDERPで別々のエンドポイントを呼ばずに、1ホストで両方の役割が同時に計測されます。

WebRTCと同じファミリー

興味深い点が一つ — 本シリーズが扱うNAT越え技術は、WebRTC(ブラウザのビデオ会議)と同じ標準の上に立っている という事実です。

技術用途
STUN (RFC 8489)WebRTC通話時の自身の公的IP発見 / Tailscaleノードの外部アドレス発見
ICE (RFC 8445)WebRTC通話の候補収集 + 同時試行 / Tailscaleノードのconnection candidate
TURN (RFC 8656)WebRTC通話のfallback relay / Tailscaleは同じポジションに自前のDERPを使用

つまりGoogle Meet・Zoom通話で2人のユーザーがNATを抜けてP2P映像ストリームを成立させるメカニズムと、 本シリーズが釜山↔福岡のSSH・映像ストリームを成立させるメカニズムは、ほぼ同じIETF標準の上に立っている わけです。メッシュVPNとビデオ会議が近い親戚だというインサイトです。

異なるのは データプレーン です — WebRTCはSRTP(メディア用)、TailscaleはWireGuard。しかしNAT越えのレイヤは同じ標準ファミリーを共有しています。


MagicDNS — 短いホスト名が動く理由

本シリーズで ssh samsung-home-laptop の一行で釜山のノートPCに辿り着けるのはMagicDNSのおかげです。tailnetノードの 短いホスト名を100.64.x.xに自動マッピング する機能です。

動作原理:

1
TailscaleクライアントがOSのDNSを横取りする
クライアント起動時にOSのDNS設定へ自分自身をstub resolverとして登録 (Linux/macOSは `100.100.100.100` 、Windowsは別アダプタのDNS)。
2
tailnetドメインのクエリは自分で処理
samsung-home-laptop あるいは samsung-home-laptop.tailba1ca3.ts.net のようなクエリが来ると、クライアントがcontrol planeから受け取っておいたマッピングテーブルを参照して 100.64.88.55 を応答。
3
一般のインターネットDNSはそのまま流す
naver.com のようなクエリはOSが元々使っていたDNS(8.8.8.8、ISP DNSなど)へそのまま委任。グローバルnameserver利用時は DoH(DNS-over-HTTPS) で自動的に暗号化。
4
検索ドメインの自動付与
ssh samsung-home-laptop のように短い名前を打つと、OSが自動的に .tailba1ca3.ts.net を補ってクエリ — だから短い名前で届く。

要点は、 TailscaleクライアントがOSのDNSを横取りしつつ一般トラフィックは流す というsplit-horizon DNSモデルです。ユーザーは設定なしで ssh samsung-home-laptop と打てて、同時に普段のWebブラウジングにも影響しません。

ちょっと待って、これだけ確認しておこう

「なぜmacOSの host / nslookup はMagicDNSを通らないのか」

macOSの一部CLIツール( host, nslookup )は システムのDNS resolverを迂回して直接DNSサーバーにクエリを投げる 構造のため、Tailscaleのstub resolverを経由しません。Tailscaleの公式ドキュメントもこの制約を明記しています。

通常のアプリ(ブラウザ・SSHクライアント・ ping )はシステムのresolverを経由するので正常に動作します。


動作原理のまとめ

ここまでが本シリーズインフラのあらゆる魔法がどう起こっているかの整理です。一枚にまとめると:

メカニズム役割無料プラン同梱
LAN direct同一ネットワーク内で直通(該当なし)
STUNNAT外部アドレス発見 (EIMでは十分)
UPnP-IGD / NAT-PMP / PCPルーターへの明示的ポートフォワーディング要求
Hole punching両端が同時にoutboundでNATマッピングを生成
Birthday paradox probeEDM NAT越えのための確率的ポート探索
DERP relay上記すべてが失敗した時のHTTPS上fallback (E2E維持)○ (28以上のグローバルリージョン)
MagicDNS短いホスト名をtailnet IPに解決
WireGuard全通信のデータプレーン (Curve25519 + ChaCha20-Poly1305)

この8つが 1つのクライアント内部で自動的に組み合わされて 動作します。ユーザーは tailscale up の一行とadminコンソールでのexit node承認を一度行えばよいだけです。


Part 2 — コスト・限界・振り返り

年間コストの分解

本シリーズが「0円インフラ」あるいは「年間1,100円インフラ」と呼んできたコストの実分解です。

~810
円/年
電気代 (事実上すべて)
7W × 24h × 365日 = 61.32 kWh × 韓国家庭用累進1段 約13円/kWh
0
円/年
Tailscale
Personalプラン無料 (デバイス無制限)
0
円/年
インターネット回線
実家の家族がもとから使っているKT GiGA回線。追加コストなし
0
円/年
ハードウェア
7年物の物置ノートPC (Galaxy Book 950SBE) — 埋没コスト

合計: 年間約800〜1,100円水準。ノートPCのバッテリー劣化は80%充電制限で緩和中。

比較として — 市販VPNサービスの一般的な価格 は月~550〜1,300円、年~6,600〜15,800円の水準です。つまり 本シリーズのインフラの年間コストは商用VPNの約5〜12%水準 ということになります。

他のセルフホストオプションと比べても優位は明らかです。

オプション年間コスト限界
本シリーズ (物置ノートPC + Tailscale Free)約800〜1,100円韓国IPは1か所だけ
AWS Lightsail VPN ($3.50/mo, 韓国リージョン)約5,700円韓国IPは取れるが、ゲーム・銀行の一部でデータセンターIPが遮断される事例あり
セルフホストOpenVPN (Lightsail + 自身の時間)約5,700円 + セットアップ・運用時間hub-and-spoke、NAT越え自動化なし
韓国の家庭にRaspberry Pi 4を新規購入 + 運用約8,800円 (Pi 4 + ケース + SD) + 電気本シリーズと同じ結果だが新規ハード費用
市販の商用VPN (韓国サーバーオプション)~6,600〜15,800円一部の韓国サイトは商用VPN IPを明示的に遮断

ただし、この比較には落とし穴があります。

  • 比較対象が同一ではない — 商用VPNはグローバルなサーバーを通じたIP回避が本質、本シリーズは韓国IP1か所のみという違いがあります。日本IPや米国IPが必要なら別途ノードが必要です。
  • 時間コストが比較に入っていない — 次の段で分けて見ます。
  • 「学習の副産物」 — 実は本シリーズの最大の価値は韓国IP回避という結果よりも、 NAT/DNS/SSH/PowerShell/SchTasksの実測練習 という副産物にあります。その面では時間投資も自分の学習コストとして回収されています。

時間コストの分解

自分の時間を考慮した正直な会計:

段階所要時間備考
セットアップ (実家1回訪問)約4時間install.ps1の1回実行 + adminコンソール作業 + 検証
シリーズ執筆約40時間 (下記分解)本ブログシリーズ3編の累積執筆時間
日常運用 (月)約10分自己修復が大半を処理、statusを一度確認する程度
障害対応 (現在まで)0時間自己修復のトリガー0件

シリーズ執筆時間 — 編・活動別の分解

活動第1編 (動機・実測・構造)第2編 (セットアップ・運用・セキュリティ)第3編 (動作原理・振り返り)合計
資料調査・検証 (RFC、Tailscale公式、Wikipedia)約3h約2h約5h約10h
初稿作成 (韓国語本文)約4h約5h約5h約14h
視覚化 (HTML/CSSダイアグラム)約3h約2h約3h約8h
補強パス (外部資料追加、引用整合性)約2h約2h約3h約7h
編ごと合計約12h約11h約16h約39h

第3編が最も長くなった理由 — NAT分類・STUN・ICE・birthday paradoxといった動作原理は外部資料との整合性検証が他編より厄介 だからです。上の表は推定ですが、シリーズ全体が30〜40時間単位の作業だったという感覚は正確です。コード(install.ps1・setup-helpers.ps1・security-audit.ps1)を書く時間は別にかかっており、それは実家訪問とは別に福岡で累積した時間なので上の表からは分離してあります。

時間を時給¥3,000(便宜的に日本平均)で換算すると、セットアップ+シリーズ執筆が圧倒的に大きいです。しかしその時間は NAT・DNS・Windows自動化・SchTasks・PowerShellの実測学習 として回収されており、シリーズの成果物自体が同じことをやろうとする他の人にとって節約される時間でもあります。

つまり真のコスト比較は「韓国IPがどれくらいの頻度で必要か」に依存します:

  • 頻繁 (週5回以上): 本シリーズのセットアップが明確に優位
  • 時々 (月1〜2回): 商用VPNが時間面で合理的
  • ほぼ使わない: どちらも過剰

限界と未検証項目

本シリーズのインフラは万能ではありません。明示的に未検証の項目 + 既知の限界を整理します。

項目状態対応
停電後のノートPC自動ON未検証 — BIOSのAC Power Recovery設定に依存実家直接訪問以外に検証手段なし
Wi-Fiパスワード変更自動復旧不可 — 家族に新しいパスワードを伝えて再接続を依頼多重化でも解決不可
30日以上の長期無人運用未検証 (シリーズ執筆時点で約15時間しか測定していない)時間経過後に追加で振り返り
韓国IP回避の実効性 (Linkkfなど)30秒のトラフィック測定のみ、実際のサイト別の遮断解除は未検証福岡日常使用でケースごとに確認が必要
釜山実家の家族の不注意シナリオ実験不可家族との事前案内で緩和
日本IP遮断サイトの回避 (逆方向)日本IP exit node未設置福岡デスクトップをexit nodeとして広告すれば可能、未設定

最大の実リスクは 1行目の停電後の自動ON — これが効かないと停電1回で実家訪問が強制されます。次回の実家訪問時にBIOSのAC Power Recoveryを明示的に有効化することが、補強項目としての次の最優先です。


これからの6か月 / 1年ロードマップ

シリーズが終わったからといってインフラが終わったわけではありません。次段階として検討中の項目:

次回の実家訪問時
BIOS AC Power Recoveryの有効化
停電後の自動ON動作を確認。上の限界表1番項目の直接解決。
短期 (1〜2か月)
福岡デスクトップを日本IPのexit nodeとして広告
tailscale up --advertise-exit-node の一行。日本で遮断される韓国サイト(逆方向)も回避可能。実家訪問なしに福岡側で即時可能。
短期 (1〜2か月)
ACL JSON定義による権限分離
第2編のACLパターンの適用。tag:exit-node + tag:client分類でssh ポリシーを明示化。deny-by-defaultで爆発半径を最小化。
中期 (3〜6か月)
subnet routerの試行 — 実家LANの他デバイスへのアクセス
実家の他デバイス(例: 親のPC、NAS)をTailscaleに直接合流させずとも、ノートPC経由で到達可能になる。--advertise-routes=192.168.0.0/24
長期 (6〜12か月)
30日以上の長期無人運用データ収集 + 振り返り
現在は約15時間しか測定していない。metrics-collector.ps1が5分間隔で7か月分のデータを蓄積する予定 — その資料に基づく長期安定性パターンの分析。
条件付き (シリーズ外)
Headscaleセルフホストの検討
Tailscale社への依存を外したい場合のオプション。ただし調整サーバー運用の負担 + 無料DERPインフラ喪失というトレードオフがある。

この6項目のうち 1・2・3番が短期の優先順位 — 停電自動ON、日本IP exit node、ACLはいずれも効果の大きい作業です。4・5番は時間が作ってくれるデータに基づく振り返り、6番は会社依存自体を外したい場合にのみ意味のあるオプションです。


シリーズ振り返り — 何を学んだか

最後にシリーズ全体の振り返りです。韓国IP回避インフラを作った成果物以上に、 作る過程で学んだこと の方が大きいです。

1. 無料SaaSと家庭環境の組み合わせ

Tailscaleの無料プランが 「個人ユーザーでも企業級インフラをそのまま使えるよう開放したもの」 だという点が最も興味深い発見です。6 user / デバイス無制限 / Exit Node・MagicDNS・ACLのすべてを含む — これが0円で可能なコスト構造の根拠(control/data planeの分離)は第1編で解いてあります。結果的に、釜山↔福岡のP2PメッシュVPNを 家庭NAT 2重の奥で、新規ハードウェアなしに、コスト1,100円以内で 作れるというデモになりました。

2. 7年物の物置ノートPCも復活できる

Samsung Galaxy Book 950SBE (2018年発売、i7-8565U 15W TDP)が 無人24/7のexit nodeとして十分に動く という事実が、本シリーズのもう一つの成果です。WireGuard capが約100〜200 Mbpsで家庭回線よりずっと速く、クラムシェルidleの7Wはデスクトップ100W+に対して一桁です。 新しいハードウェアが要らないインフラ という点がコストモデルの肝です。

3. Windows無人運用の落とし穴と回避策

Windows 11ノートPCを無人サーバーとして使うのは意外と厄介です — Modern Standbyの部分スリープ、Windows Updateの自動再起動、OpenSSHの administrators_authorized_keys のACL、PowerShellの '""' パスフレーズ落とし穴 — これらはすべてシリーズ執筆中にぶつかった実測です。それぞれの回避策は第2編にまとめてあり、同じことをしようとする他の人にそのまま役立ちます。

4. PowerShell権限分離パターン

Linuxの sudo のない環境で 「通常のSSHセッションは日常権限、権限昇格はSchTasks SYSTEM」 に分離するパターンが運用上きれいだという発見。日常SSHが管理者権限を持たないので事故面が小さく、権限昇格は検証済みスクリプト内でのみ起きるのでauditが容易です。このパターンはTailscaleとは無関係に、Windowsリモート運用一般に応用可能です。

5. 障害シナリオを先に書いておくと自動化が可能になる

tailnet-ops/docs/recovery.md に整理した6つのシナリオ(SSH不通 / 鍵紛失 / 停電 / Wi-Fi変更 / 鍵失効 / 自己修復破損)それぞれに復旧ツリーを用意しています。この文書を先に書いておいたことで、自己修復用のSchTasks 4種が自然と設計でき — 障害を想像することが自動化の出発点になる という一般パターンの小さな事例になりました。


シリーズ整理

核心
第1編 — 動機・実測・構造福岡1年+の累積 / 稼働結果 (P2P 50ms, Tunnel DOWN 24.9 Mbps, 無人15h+) / Tailscale・WireGuard・メッシュVPNの構造
第2編 — セットアップ・無人運用・セキュリティ実家1回訪問の5軸セットアップ / 自己修復4種SchTasks / 13項目のセキュリティチェック
第3編 (本記事)動作原理 (NAT分類・STUN・ICE・hole punching・birthday paradox・DERP・MagicDNS) / 年間1,100円コスト分解 / 限界と振り返り

3編まとめでシリーズが完結しました。韓国IP回避という結果そのものよりも、 家庭NAT 2重と7年物の物置ノートPC、そして無料SaaSの組み合わせでどこまで行けるか の小さなケーススタディとして残れば嬉しく思います。


参考資料

シリーズ完結。第1・2・3編すべてお読みいただきありがとうございました。

この記事は著者の CC BY 4.0 ライセンスの下で提供されています。