Tailscaleでスリープ中PCを起こす構成を、通信経路から順に整理する

結論

外出先からTailscale経由で自宅PCをWake on LANで起こすときは、Subnet Routerが作るIP経路だけで成功を判断できません。LAN側でマジックパケットを送る常時起動端末と、スリープ中もネットワークアダプターが起動信号を待てる条件を分けて確認します。

Subnet Routerを有効にすると、Tailscaleを入れられないLAN内機器のIPアドレスへ通信できます。ただし、離れた場所からLAN内へブロードキャストする通信を、そのまま自宅LANへ転送する機能ではありません。

Wake on LANでは、対象PCを起こすマジックパケットをネットワークアダプターへ届けます。よく使われるのは、UDPを使って同じLAN内へ一斉に送る方法です。

Tailscale側:LANのIP範囲までの経路を作る
LAN側   :対象PCのネットワークアダプターへ
              マジックパケットを送る

そのため「LAN宛てのIP経路を設定したので、ブロードキャストも必ず届く」とは判断できません。実際の動作は環境によって変わります。確認する条件は次の4つです。

  • 使うOS
  • Tailscaleの設定
  • Wake on LANを送るアプリ(WoLアプリ)
  • マジックパケットの宛先

まず、同じLAN内から対象PCを起動できるかを確認します。

僕の構成では、起動中のAndroidを自宅LAN側へ置きました。外出先から操作し、PCが起動するところまで確認しました。

ただし、Android版TailscaleとWoLアプリが、受け取った通信をどのようにLANへ送るかは未確認です。構成を再現するときは、Android経由でLAN内のIPへ届くことと、WoL操作で実際にPCが起動することを分けて試します。

参考:Subnet routersKernel vs. netstack subnet routing

IP経路だけではWoLの成功を判断できず、LAN側でマジックパケットを送る役割が必要です。次は、スリープ中のPC自身がその役割を担えるかを見ます。

LAN側に送信役が必要でも、PCがスリープしてTailscaleも止まる構成では、そのPC自身に送信役を任せられません。

TailscaleはOS上で動くソフトウェアです。PCがスリープし、OSとアプリの実行が止まれば、Tailscaleも新しい通信へ応答できません。

一方、Wake on LANに対応したネットワークアダプターは、対応する低電力状態でマジックパケットを検知し、PCへ復帰を要求できます。この役割は、停止したTailscaleアプリではなく、通電が続くネットワークアダプターが担います。

スリープ中のPC
├─ Tailscaleアプリ:停止しており応答できない
└─ Wake on LAN対応ネットワークアダプター:
    条件が合えばマジックパケットを待てる

利用できるスリープ状態やWake on LANの可否は、次の条件で変わります。

  • PCが対応するスリープ状態
  • ネットワークアダプター(NIC)とドライバーのWake設定
  • UEFI(PC起動前の設定画面)のWake設定
  • 有線または無線の接続方法

Windowsならpowercfg /aで利用可能なスリープ状態を確認し、デバイス側のWake設定も別に確認します。

この制約を避けるには、自宅LANへ常時起動の端末を置きます。外部からはその端末までTailscaleで到達し、最後のWake on LANはLAN側から送る役割分担です。

参考:Wake on LAN behaviorAbout Network Wake-Up Events

スリープ中のPCとは別に、Tailscaleへ応答してLAN側からWoLを送れる常時起動端末が必要です。続けて、その役割をAndroidへ任せる場合の確認へ進みます。

その常時起動端末として、僕は使っていなかったAndroidを置きました。初回の起動成功だけでなく、画面消灯後と再起動後も中継できるかを確認します。

自宅LAN宛ての通信をAndroid経由で送れるよう、LANの経路をTailscaleへ知らせました。外出先のスマホからWoLアプリを操作すると、PCが起動するところまでは確認しました。

ただし、Androidの省電力機能であるDozeやApp Standbyにより、未使用時にはバックグラウンドのCPU処理やネットワーク利用が制限されます。端末メーカー独自の省電力設定が重なる場合もあります。

確認は次の順に分けます。

  1. 画面を点灯した状態で、Tailscale経由の到達とPC起動を確認する
  2. 画面を消し、時間を置いた後も同じ操作を繰り返す
  3. 失敗時は、Wi-Fi、Tailscale接続、アプリの省電力対象を一つずつ確認する
  4. 端末の再起動後にも、Wi-Fi、Tailscale接続、WoLアプリが使える状態へ戻るか確認する

設定名や制限はAndroidの版とメーカーで変わります。特定の画面名を手順として固定せず、画面消灯後と再起動後の動作を合格条件にします。

参考:Subnet routers — AndroidOptimize for Doze and App Standby

TailscaleのIP経路とWoLの到達を分けると、スリープ中のPCとは別に常時起動端末を置く理由が見えます。Androidを使う場合は、PCが一度起動したことだけで終えず、中継役を継続できる条件まで確認します。