[{"data":1,"prerenderedAt":294},["ShallowReactive",2],{"content-/tailscale-rdp-setup-review":3,"all-pages-for-dir":292,"og-image-/tailscale-rdp-setup-review":293},{"id":4,"title":5,"body":6,"category":275,"concepts":276,"description":277,"extension":278,"meta":279,"navigation":200,"ogImage":276,"path":280,"project_name":275,"published":281,"publishedAt":282,"seo":283,"stem":284,"tags":285,"todo":276,"unpublished":281,"updatedAt":276,"__hash__":291},"pages/2026-07/2026-07-05/tailscale-rdp-setup-review.md","Tailscale + RDP手順書をレビューして落とし穴を潰す — キー失効と無人モードをcodexと詰めた",{"type":7,"value":8,"toc":264},"minimark",[9,13,18,21,46,49,52,55,58,61,64,84,87,90,93,96,103,106,114,117,120,128,131,134,137,145,156,159,162,165,173,176,183,186,189,247,250],[10,11,12],"p",{},"自宅にWindows機が2台ある。片方（サブ機・Win11 Home）から、もう片方（メイン機・Win11 Pro）を遠隔で触りたい。そのための「Tailscale + リモートデスクトップ（RDP）」手順書は前に書いてあったので、今日はそれをClaude Codeにレビューさせた。骨子は正しかったが、「数か月後に急に繋がらなくなる」落とし穴が1つ抜けていた。そこを補足して、さらにOpenAIのcodexにセカンドオピニオンを取ったら、私が見落としていた点をもう1つ拾ってくれた、という一日。",[14,15,17],"h2",{"id":16},"何の手順書か役割だけ整理","何の手順書か（役割だけ整理）",[10,19,20],{},"先にPCの役割を1行で整理しておく。",[22,23,24,36],"ul",{},[25,26,27,31,32,35],"li",{},[28,29,30],"strong",{},"メイン機","（つながれる側）= Win11 ",[28,33,34],{},"Pro","。RDPのホストになれるのはこっち",[25,37,38,41,42,45],{},[28,39,40],{},"サブ機","（つなぐ側）= Win11 ",[28,43,44],{},"Home","。RDPホストにはなれない。発信専用",[10,47,48],{},"手順書の骨子は3つ。①この役割の非対称性（Homeはホストできないのでメイン機がPro必須）、②Tailscale（VPN）を通すのでルーターのポート開放は不要、③あとはメイン機でRDPを有効化して、サブ機からTailscaleのIP宛に繋ぐだけ。",[10,50,51],{},"Claude Codeに読ませた第一声は「このまま実行すれば通ります」だった。役割整理もポート開放不要の理屈も全部正しい、と。手順書そのものはすでに別記事として存在するので、ここでは中身を丸ごと再掲しない。今日の主役は「レビューで何が抜けていたか」のほうだ。",[10,53,54],{},"そもそも一度書いた手順書をなぜ今さらレビューにかけたかというと、書いた直後は「初回で動くこと」しか検証していなかったからだ。実際にサブ機からメイン機を触るのはこれからで、明日その設定を進めたい。動かす前に、手順書に穴がないかもう一度点検しておきたかった。",[14,56,57],{"id":57},"レビューで見つけた落とし穴",[10,59,60],{},"骨子は正しい。ただ、初回セットアップが通ることと、半年後も通り続けることは別の話だった。レビューで浮かんだのは「現地に行かないと復旧できない」系の落とし穴で、しかも初日には絶対に踏まない。全部、しばらく経ってから牙をむくやつだ。",[10,62,63],{},"補足として3点を書かせた。",[22,65,66,72,78],{},[25,67,68,71],{},[28,69,70],{},"補足1：Tailscaleのキー失効。"," Tailscaleのデバイス鍵はデフォルトで約180日で切れる。常時ホストのメイン機がこれで失効すると、手元で再ログインするまでTailnetから外れて、リモートから一切見えなくなる。管理コンソールでメイン機だけ「キー有効期限を無効化（Disable key expiry）」しておくべき。",[25,73,74,77],{},[28,75,76],{},"補足2：RDPの資格情報はPINじゃない。"," 普段メイン機にPINや顔認証（Windows Hello）でログインしていても、RDPで入るときはPINではなくMicrosoftアカウントのパスワードが要る。ここを勘違いすると初回接続で普通に弾かれる。",[25,79,80,83],{},[28,81,82],{},"補足3：BitLockerのプリブート認証。"," 起動時にPINやパスワードを要求するBitLocker構成だと、再起動後にWindowsが立ち上がる前（=Tailscaleが動く前）の画面で止まる。そこは手元でしか解除できないので、リモート復旧が詰む。TPMによる自動解除なら問題なし。",[10,85,86],{},"3つとも「初日は動くのに、キーが切れた日・再起動した日に突然死ぬ」タイプ。手順書に初回手順しか書いていないと、半年後の自分が原因不明のまま途方に暮れる。",[14,88,89],{"id":89},"codexにセカンドオピニオンを取った",[10,91,92],{},"この補足3点、自分とClaude Codeだけで「正しいはず」と決めるのが少し不安だった。Tailscaleの180日とか、Windows Helloの挙動とか、断定を含んでいる。そこで「一応OpenAIのcodexのレビューを受けてもらえますか」と頼んで、別モデル（gpt-5.5）にセカンドオピニオンを取った。",[10,94,95],{},"質問の投げ方は工夫した。手順書を丸ごと渡すのではなく、「補足3点それぞれが技術的に正確か・条件付きか・不正確か、手順書に入れる重要度は高中低のどれか」を問う形にした。瑣末なクソリプはいらない、致命的な誤りと重要な見落としだけ挙げてくれ、と添えて。",[10,97,98,99,102],{},"返ってきた判定は、3点とも",[28,100,101],{},"重要度「高」","。しかも「現地に触れないと復旧できない系だから重い」という、私がぼんやり感じていた不安の正体を言語化してくれた。",[10,104,105],{},"うれしかったのは、私の断定にちゃんと条件を付け足してくれたことだ。",[22,107,108,111],{},[25,109,110],{},"補足2（PINじゃない）には、「ローカルアカウントならローカルのパスワード、企業管理のWindows Hello for Business構成ではPINや生体でRDP認証が通る例外もある」と。個人利用なら「MSアカウントのパスワード」でいいが、言い切りすぎないほうがいい。",[25,112,113],{},"補足3（BitLocker）には、「TPMのみの自動解除なら普通は問題ないが、BIOS/UEFIを変更するとBitLocker回復画面に入って、そこでも同じく詰まる」と。プリブートPINだけでなく回復画面も同じ罠だ、というのは私の頭になかった。",[10,115,116],{},"断定を条件付きに直せるのは、公開手順書としてはかなり大事なところ。半年後の自分が「PINで通るって書いてあるのに弾かれた」と混乱する未来を1つ潰せた。",[10,118,119],{},"そして、私が見落としていた4点目を追加で拾ってくれた。",[22,121,122],{},[25,123,124,127],{},[28,125,126],{},"補足4：Tailscaleの「Run unattended（無人モード）」を有効化する。"," Windowsではログインユーザーとしてではなく、システムとしてTailscaleを動かさないと、再起動後や未ログイン状態でメイン機がTailnetに出てこないことがある。Tailscale公式のRDP手順でも案内されている設定だという。",[10,129,130],{},"これは効いた。常時ホストなのに「誰かがログインしていないとTailnetから消える」なんて、初日には気づきようがない。まさに補足1〜3と同じ「あとで詰む」系で、レビューをかけて正解だった。",[14,132,133],{"id":133},"手順書に反映した",[10,135,136],{},"「全部入れといてください」と伝えて、4点＋codexの但し書きを手順書の計6箇所に反映させた。常時接続の設定、資格情報の注意、再起動とBitLockerの注意、トラブルシュート表、運用メモ、チェックリスト。編集後に構造が崩れていないか（見出しの並びや手順の通し番号がズレていないか）も確認させて、崩れていないことを見た。",[10,138,139,140,144],{},"外部の設定は、Tailscale管理コンソールの ",[141,142,143],"code",{},"Disable key expiry"," が肝になる。ただしcodexの但し書きどおり、「PCを紛失・廃棄したときは管理画面から必ずそのデバイスを削除する」という一文もセットで入れた。期限を切らない代わりに、いなくなった端末は自分で消す責任が残る。",[10,146,147],{},[148,149,155],"a",{"href":150,"target":151,"rel":152},"https://tailscale.com/kb/1028/key-expiry","_blank",[153,154],"noopener","noreferrer","Tailscale KB: Key expiry",[14,157,158],{"id":158},"ついでに今のメイン機の状態も見てもらった",[10,160,161],{},"手順書が固まったので、「今このメイン機で設定・確認しなきゃいけないことがあるはず」と思って、現状を読み取り確認させた（変更が要るものは変更前に必ず確認、という条件付きで）。",[10,163,164],{},"読み取った結果、下地はおおむね整っていたが、詰めておくべき点が2つ見つかった（具体的な待受ポートやアドレスなどの構成値は、公開記事なのでここには書かない）。",[22,166,167,170],{},[25,168,169],{},"スリープが有効になっていた。常時ホストにするなら、寝ている間に本体がスリープしたら元も子もない。",[25,171,172],{},"Tailscaleの状態が「starting / NoState」でIPが取れず、オンライン扱いになっていなかった。",[10,174,175],{},"この2つ目が皮肉で、まさにcodexが追加してくれた補足4（Run unattended未設定）が原因の可能性が高い。理屈で「あとで詰む」と書いた落とし穴に、同じ日に自分のメイン機が片足を突っ込んでいたわけだ。レビューで拾った知識が、そのまま自分の環境の診断名になった。",[10,177,178,179,182],{},"途中、Tailscaleのコマンド出力がShift-JISに化けてJSONのパースが失敗する小さな罠も踏んだ。文字コードをUTF-8に指定し直して取り直したが、それでもCLIが ",[141,180,181],{},"NoState"," を返し続けたので、深追いはやめてGUI（トレイアイコン）確認に切り替える、と判断した。BitLockerの状態は管理者権限がないと読めなかったので、これも明日に回す。",[14,184,185],{"id":185},"明日やること",[10,187,188],{},"今日はメイン機の下地確認と手順書の補強までで、実接続テストとサブ機側は手つかず。忘れないように、続きのメモをmdx-playground側に残させた（別ディレクトリに保存していないか、保存先も実際に確認させた）。",[22,190,193,207,213,219,225,231,237],{"className":191},[192],"contains-task-list",[25,194,197,202,203,206],{"className":195},[196],"task-list-item",[198,199],"input",{"disabled":200,"type":201},true,"checkbox"," メイン機のスリープを無効化する（",[141,204,205],{},"powercfg /change standby-timeout-ac 0","）",[25,208,210,212],{"className":209},[196],[198,211],{"disabled":200,"type":201}," Tailscaleを無人モード（Run unattended）にして、トレイが「Connected」になるまで見届ける",[25,214,216,218],{"className":215},[196],[198,217],{"disabled":200,"type":201}," 接続後にメイン機のTailscale IPを控える（サブ機の接続先になる）",[25,220,222,224],{"className":221},[196],[198,223],{"disabled":200,"type":201}," 管理コンソールでメイン機のキー有効期限を無効化する",[25,226,228,230],{"className":227},[196],[198,229],{"disabled":200,"type":201}," 管理者PowerShellでBitLockerのKey Protectorsを確認する（TPMのみなら対応不要）",[25,232,234,236],{"className":233},[196],[198,235],{"disabled":200,"type":201}," サブ機（Home）にTailscaleをインストールしてConnected確認",[25,238,240,242,243,246],{"className":239},[196],[198,241],{"disabled":200,"type":201}," サブ機から ",[141,244,245],{},"mstsc"," でメイン機へ接続テスト。ダメなら3389番ポートで疎通を切り分ける",[14,248,249],{"id":249},"学び",[22,251,252,255,258,261],{},[25,253,254],{},"手順書のレビューは「初回で動くか」より「半年後も動き続けるか」で見ると、初日には踏まない落とし穴（キー失効・再起動後の未接続・プリブート認証）が一気に見えてくる。全部「現地に行かないと直せない」ので、リモート前提の構成では特に重い。",[25,256,257],{},"自分の補足に断定が混じっているときは、別モデルにセカンドオピニオンを取る価値がある。今日はcodexが3点を条件付きに整理し直したうえ、4点目を拾ってくれた。人間がやったのは「不安だから確認したい」と判断したことだけで、検証は道具に回せた。",[25,259,260],{},"レビューで得た知識がそのまま自分の環境の診断に効くことがある。「Run unattendedが要る」と書いた直後に、自分のメイン機がまさにそれで未接続だった。理屈と実物が同じ日に噛み合うと、腹落ちの速度が違う。",[25,262,263],{},"CLIの出力が化けたら深追いしない。Tailscaleのコマンドが文字化けでパースに失敗し、UTF-8で取り直してもCLIが状態を掴めないままだった。ここで粘っても消耗するだけなので、GUI確認に切り替えると決めた。ツールの一系統が詰まったら別系統に逃がす、という切り替えの早さは覚えておきたい。",{"title":265,"searchDepth":266,"depth":266,"links":267},"",2,[268,269,270,271,272,273,274],{"id":16,"depth":266,"text":17},{"id":57,"depth":266,"text":57},{"id":89,"depth":266,"text":89},{"id":133,"depth":266,"text":133},{"id":158,"depth":266,"text":158},{"id":185,"depth":266,"text":185},{"id":249,"depth":266,"text":249},"personal",null,"サブ機からメイン機へのリモートデスクトップ手順書をレビュー。数か月後に急に繋がらなくなる落とし穴を見つけて補足し、OpenAIのcodexにセカンドオピニオンを取ったら見落としをもう1つ拾ってくれた日の記録。","md",{},"/tailscale-rdp-setup-review",false,"2026-07-05T00:00:00.000Z",{"title":5,"description":277},"2026-07/2026-07-05/tailscale-rdp-setup-review",[286,287,288,289,290],"Tailscale","RDP","リモートデスクトップ","環境構築","Codex","zdmVDz1a2WgPrZ8J_ud7FzxX076vtz_G3ABr7FAV5EQ",[],"https://log.eurekapu.com/og/blog/tailscale-rdp-setup-review.png?v=2026-07-05T00%3A00%3A00.000Z&title=Tailscale%20%2B%20RDP%E6%89%8B%E9%A0%86%E6%9B%B8%E3%82%92%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%97%E3%81%A6%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4%E3%82%92%E6%BD%B0%E3%81%99%20%E2%80%94%20%E3%82%AD%E3%83%BC%E5%A4%B1%E5%8A%B9%E3%81%A8%E7%84%A1%E4%BA%BA%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92codex%E3%81%A8%E8%A9%B0%E3%82%81%E3%81%9F&author=Kei%20Komatsu&sig=d078348ca96f0ddb",1783483676804]