Tailscaleを入れて、外出先から自宅PCにリモートデスクトップでつなげるようにしたのに、いざ使おうとしたらつながらない。Tailscaleが悪いのか、Windowsの設定が悪いのか、そもそもPCが起動しているのかも、外からではよく分からない。
私はTailscaleでポート開放なしに自宅PCへリモートデスクトップする記事で、自宅の母艦デスクトップPCに外出先のノートPCからつなぐ環境を作った。そのときも、「経路(Tailscale)」「画面(リモートデスクトップ)」「ターミナル(SSH)」の3つの層に分けて考えるようにしていた。つながらないときも同じで、どの層で止まっているかを先に切り分けると、原因をかなり絞り込める。
結論から書くと、まずつなぐ側のPCでtailscale pingを打つ。返事がなければTailscale側(相手がオフライン、再起動後に切れている、鍵の期限切れ、スリープなど)、返事があるのにつながらなければWindows側(リモートデスクトップの設定、ファイアウォール、資格情報)の問題だ。
この記事では、その切り分けの手順と、それぞれの層で確認するポイントをまとめる。Tailscaleの導入手順そのものは前の記事に書いているので、ここでは「一度は作ったのに、つながらない」場面に絞る。
まず切り分け:Tailscaleの問題か、Windowsの問題か
つなぐ側のPC(外出先のノートPCなど)でPowerShellを開き、次の3つを順に実行する。desktop-pcの部分は、つなぎたいPCのマシン名(Tailscaleの管理コンソールのMachinesに出ている名前)に置き換える。
tailscale status tailscale ping desktop-pc Test-NetConnection desktop-pc -Port 3389
tailscaleコマンドが見つからないと言われたら、& "C:\Program Files\Tailscale\tailscale.exe" statusのようにフルパスで実行する。
tailscale status:tailnetに参加している端末の一覧が出る。つなぎたいPCの行にofflineと出ていれば、相手のTailscaleが動いていない。そもそも一覧に出てこない場合は、アクセス制御で見えなくなっている可能性があるtailscale ping:Tailscaleの経路だけを使って相手に届くかを確かめる。pongが返ってくれば経路はつながっている。直接つながっているか、リレーサーバー(DERP)経由かも表示されるTest-NetConnection:リモートデスクトップが使う3389番ポートに届くかを確かめる。TcpTestSucceededがTrueなら、相手のリモートデスクトップは接続を受け付けている
Test-NetConnectionでポートの疎通を確かめる方法は、PowerShellでTCPポートの疎通を確認する記事でも詳しく書いている。
結果の見方は次のとおり。
tailscale pingが返ってこない:Tailscale側の問題。次の「Tailscale側で確認すること」へtailscale pingは返るが、TcpTestSucceededがFalse:経路はつながっているが、相手のPCが3389番を受け付けていない。「Windows側で確認すること」の原因⑥⑦へ- どちらも通るのに、リモートデスクトップで入れない:ほぼ資格情報(ユーザー名・パスワード)の問題。原因⑧へ
Tailscale側で確認すること
原因①:相手のPCが再起動・サインアウトして、Tailscaleが切れている
一番はまりやすいのがこれだ。WindowsのTailscaleは、初期設定のままだとユーザーがサインインしている間だけtailnetにつながる。Windows Updateで夜中に再起動されたり、サインアウトしたりすると、誰かがそのPCにサインインし直すまでTailscaleは切れたままになる。自宅に置いたPCに外からつなぎたいのに、そのPCの前に誰もいなければ、どうにもならない。
リモートデスクトップを閉じるときに「切断」ではなく「サインアウト」を選んだ場合も、同じ状態になる。
対策は、TailscaleのRun unattended(無人実行)を有効にすることだ。これを有効にすると、誰もサインインしていない状態でもTailscaleがつながったままになる。つながる側(自宅PC)で次のどちらかを行う。
- タスクトレイのTailscaleアイコンを右クリック →「Preferences」→「Run unattended」を選び、確認が出たら「Yes」を押す。チェックが付けば有効
- PowerShellやコマンドプロンプトで次のコマンドを実行する
tailscale set --unattended=true
注意点として、Run unattendedを有効にしたWindowsアカウントが、そのPCのTailscaleの設定の持ち主になる。家族と共用しているPCなどでは、ほかのユーザーがTailscaleの設定を変えられなくなる。戻すときは同じメニューのチェックを外すか、tailscale set --unattended=falseを実行する。
有効にしたら、一度サインアウトした状態で、つなぐ側からtailscale pingが返るかを確かめておくと安心だ。返らない場合は、services.mscでTailscaleのサービスが「自動」「実行中」になっているかを見る。
原因②:Tailscaleの鍵の有効期限が切れている
Tailscaleの端末の鍵には、初期設定で180日の有効期限がある。期限が切れると、その端末で再認証(ログインし直し)するまでtailnetから外れる。外出先から見ると、ある日突然つながらなくなる。
Tailscaleの管理コンソールのMachinesを開くと、各端末の鍵の期限が確認できる。切れていたら、その端末でTailscaleにログインし直す。
私は自宅に置きっぱなしの母艦デスクトップPCだけ、Machinesの「…」メニューから「Disable key expiry」を選んで、鍵の有効期限を無効にしている。ただし、無効にした鍵は手動で失効させるまでずっと有効になる。持ち歩くノートPCには向かない設定なので、どの端末で無効にするかはよく考えてほしい(このトレードオフは前の記事で詳しく書いた)。
原因③:相手のPCがスリープ・休止状態になっている
相手のPCがスリープや休止状態に入っていると、Tailscaleも止まっているので外からはつながらない。Tailscaleで外からPCを起こすことはできないので、外からつなぐPCはスリープしない設定にしておく。
Windows11なら、「設定」→「システム」→「電源」(ノートPCは「電源とバッテリー」)で、電源接続時にスリープ状態にする時間を「なし」にする。画面の電源を切る時間は短いままでかまわない。
原因④:新しい端末がDevice Approvalの承認待ちになっている
管理コンソールでDevice Approval(デバイス承認)を有効にしている場合、新しく追加した端末は管理者が承認するまでtailnetの端末と通信できない。ノートPCを買い替えたり、Tailscaleを入れ直したりした直後につながらないなら、Machinesでその端末が承認待ちになっていないかを確認して、承認する。
Device Approvalはアカウントを乗っ取られたときの保険として、私も有効にしている設定だ。外出先で新しい端末を追加するなら、スマホなどから管理コンソールを開いて承認できるようにしておくと困らない。
なお、tailnetのアクセス制御(Access controlsのポリシー)を自分で書き換えている場合は、そこで通信が止められていないかも確認する。初期設定のままなら、同じtailnetの端末同士は通信できる。
原因⑤:MagicDNSの名前が引けていない
tailscale pingにマシン名を渡して失敗する場合は、名前の解決でつまずいている可能性もある。Machinesに出ている100.x.x.xのTailscale IPで、もう一度tailscale pingしてみる。IPなら通るなら、MagicDNSの設定か、マシン名の打ち間違い(PC名を変えたなど)を疑う。
相手のPCのTailscale IPは、相手のPCで次のコマンドを実行しても確認できる。
tailscale ip -4
リモートデスクトップ接続のコンピューター名にも、MagicDNS名の代わりにこのIPを入れてつなげられる。
Windows側で確認すること
tailscale pingが返ってくるなら、経路はつながっている。ここからは、つなぎたいPC側のWindowsの設定を確認する。外から操作できない状態なので、家に帰ってから確認するか、後で書くSSHを入れておいた場合はそこから確認する。
原因⑥:リモートデスクトップが無効、またはHomeエディション
「設定」→「システム」→「リモートデスクトップ」がオンになっているかを確認する。大型アップデートのあとなどに、設定が変わっていないかも見ておく。
また、リモートデスクトップで接続を受ける側になれるのは、Windows11のPro以上だけだ。Homeエディションにはこの設定項目がない。つなぐ側(クライアント)はHomeでも問題ない。
原因⑦:ファイアウォールで3389番が止められている
tailscale pingは返るのにTcpTestSucceededがFalseになる場合は、相手のPCのファイアウォールを疑う。リモートデスクトップを有効にすると、Windows Defenderファイアウォールの「リモート デスクトップ」の規則も有効になるが、規則が適用されるネットワークの種類(プロファイル)によっては、Tailscale経由の通信が止められることがある。
相手のPCで、管理者権限のPowerShellから次の2つを確認する。1つ目でTailscaleのネットワークがどのプロファイル(NetworkCategory)になっているか、2つ目でリモートデスクトップの規則がどのプロファイルで有効になっているかが分かる。
Get-NetConnectionProfile | Select-Object InterfaceAlias, NetworkCategory Get-NetFirewallRule -Group "@FirewallAPI.dll,-28752" | Select-Object DisplayName, Enabled, Profile
2つ目の-Groupに指定している文字列は、「リモート デスクトップ」の規則グループを表すWindows共通の名前で、日本語版でもそのまま使える。
Tailscaleは通常、自分のネットワークを「プライベート」に設定する。InterfaceAliasがTailscaleの行がPublicになっていて、リモートデスクトップの規則がPublicで有効になっていない場合は、Tailscaleのネットワークをプライベートに変える。
Set-NetConnectionProfile -InterfaceAlias Tailscale -NetworkCategory Private
Windows Defenderファイアウォールではなく、市販のセキュリティソフトのファイアウォールを使っている場合は、そちらの設定でTailscaleのネットワークアダプターや3389番への受信が止められていないかを確認する。ほかのVPNソフトを同時に使っている場合も、経路がぶつかってつながらないことがある。
原因⑧:ユーザー名・パスワード(資格情報)が通らない
接続の画面までは進むのに、「お使いの資格情報は機能しませんでした」や「ログオンに失敗しました」と出る場合は、Tailscaleではなく認証の問題だ。
Microsoftアカウントでサインインしているなら、ユーザー名にはMicrosoftアカウントのメールアドレス、パスワードにはMicrosoftアカウントのパスワードを入れる。普段の画面ロック解除で使っているPINや顔認証(Windows Hello)では、リモートデスクトップにはサインインできない。
さらに、「設定」→「アカウント」→「サインインオプション」で「セキュリティ向上のため、このデバイスではMicrosoftアカウント用にWindows Helloサインインのみを許可する」がオンになっていると、パスワードを入れても通らないことがある。その場合は、相手のPCで次の順に試す。
- 上の「Windows Helloサインインのみを許可する」をオフにする
- 一度ロック(またはサインアウト)して、サインインオプションからパスワードを選び、パスワードでサインインし直す
- もう一度リモートデスクトップで接続する
これも相手のPCの前で操作する必要があるので、外出先でつながらなくなってから気付くと手遅れになる。出かける前に一度、家の中から接続を試しておくのが確実だ。
SSHを入れておくと、外から原因を確かめられる
Windows側の原因は、どれも相手のPCで確認する必要がある。私は前の記事の環境を作るときに、リモートデスクトップの調子が悪いときの保険として、母艦にOpenSSH Serverも入れておいた。tailscale pingが返る状態なら、SSHで入って原因⑥⑦をその場で確認できる。
たとえば、SSHで入ったあとにPowerShellで次を実行すると、リモートデスクトップのサービスが動いているか、自分のPCで3389番が待ち受けているかが分かる。
Get-Service TermService Get-NetTCPConnection -LocalPort 3389 -State Listen
ただし、SSHもTailscaleの経路を通るので、原因①〜③のようにTailscale自体が切れている場合はSSHでも入れない。Run unattendedとスリープの設定は、先に済ませておきたい。
まとめ
- まず
tailscale pingで、Tailscaleの経路がつながっているかを確かめる - 返ってこないなら、相手のPCの再起動・サインアウト(Run unattendedで防げる)、鍵の期限切れ、スリープ、Device Approvalの承認待ちを確認する
- 返ってくるのに
Test-NetConnectionで3389番が通らないなら、リモートデスクトップの設定とファイアウォール(Tailscaleのネットワークのプロファイル)を確認する - 接続画面で弾かれるなら、Microsoftアカウントのパスワードと「Windows Helloサインインのみを許可する」の設定を確認する
- 外出前に、家の中から一度接続を試しておくのが一番の予防になる


コメント