Tailscale + RustDesk

Windows 11のリモート接続環境を構築する

2026-11-03

目指した接続環境

  • 外出先から、自宅のWindows 11 PCを操作する。
  • 高速で低遅延な接続と、セキュリティを両立する。
  • ルーターの手動ポート開放や、IPアドレスの手動固定を避ける。
  • 将来は研究室の解析用PCの共有にも応用する。

接続に成功し、操作は体感的に快適だった。

速度の定量測定は未実施。Tailscale経由が常に高速とは限らない。

TailscaleとRustDeskの役割

Tailscale:PC同士を安全につなぐ

WireGuardによるVPNを構築し、通信を暗号化する。各PCに仮想IPアドレスを割り当てる。

RustDesk:画面を表示して操作する

接続先の画面を転送し、キーボード・マウス操作を送る。今回はTailscaleのIPへ直接接続する。

VPNは仮想的なネットワーク。Tailscaleのネットワークを「Tailnet」と呼ぶ。

接続経路

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#eaf4ec", "primaryTextColor": "#142b3a", "primaryBorderColor": "#287a43", "lineColor": "#526674", "clusterBkg": "#f2f7f3", "clusterBorder": "#bdcfbf", "edgeLabelBackground": "#ffffff", "fontFamily": "Arial, BIZ UDPGothic, BIZ UDPゴシック, sans-serif"}}}%%
flowchart LR
    subgraph client["外出先のWindows 11 PC"]
        r1["RustDesk<br/>画面表示・操作入力"] <--> t1["Tailscale"]
    end
    subgraph host["自宅のWindows 11 PC"]
        t2["Tailscale"] <--> r2["RustDesk<br/>TCP 21118"]
    end
    t1 <-->|"WireGuardで暗号化"| t2

  • RustDeskの直接IPアクセス:IDの代わりにIPとポートを指定する。
  • TailscaleのP2P直接接続:端末同士が直接通信する経路。
  • Tailscaleが直接接続できない場合は、DERPなどで中継される。

RustDeskで直接IPアクセスを使っていても、Tailscale側は中継になり得る。

セットアップの順序

  1. 両PCにTailscaleをインストールし、同じTailnetに登録する。
  2. 接続先で Run unattended と Allow incoming connections を確認する。
  3. 両PCにRustDeskをインストールする。
  4. 接続先で直接IPアクセス、強固な固定パスワード、サービスを設定する。
  5. TCP 21118の受信制御と自動起動を確認する。
  6. 電源接続時の自動スリープを無効にし、再起動後も接続を確認する。

RustDeskに入力する接続先

接続先のTailscale IPと、RustDeskの直接IPアクセス用ポートを指定する。

100.101.102.103:21118
役割 Tailscale IPv4アドレス
接続先:自宅PC 100.101.102.103
接続元:外出先PC 100.101.102.104

IPは説明用のダミー値。実際の端末の値へ置き換える。ポートはサービスを識別する番号。

ファイアウォールは必要な通信だけ許可

接続先PCの管理者PowerShellで実行する。

$SourceTailscaleIP = '100.101.102.104' # 実際の接続元IPへ置換
New-NetFirewallRule `
  -Name 'RustDesk-via-Tailscale' `
  -DisplayName 'RustDesk via Tailscale' `
  -Direction Inbound -Protocol TCP -LocalPort 21118 `
  -RemoteAddress $SourceTailscaleIP -Action Allow
  • 既存の広い許可規則は、追加だけでは狭まらない。
  • 明示的なブロック・組織ポリシー・Tailscaleのアクセス制御も確認する。
  • ファイアウォール全体を無効化しない。

診断コマンドの役割

テスト 確認できること
tailscale ping Tailscaleの応答・直接/中継の経路
tailscale ping --tsmp OSのIPスタックを迂回した到達性
tailscale ping --icmp 暗号化経路を通るICMPの到達性
Test-NetConnection ... -Port 21118 対象ポートへのTCP接続
Get-NetTCPConnection ... -State Listen 接続先PC内の待ち受け状態

Tailscale pingの成功と、RustDeskへの接続成功は別。

接続をテストする

接続元PCで、ネットワークとTCPを確認する。

tailscale ping 100.101.102.103
tailscale ping --tsmp 100.101.102.103
tailscale ping --icmp 100.101.102.103
Test-NetConnection 100.101.102.103 -Port 21118

接続先PCで、待ち受けとlocalhostへの接続を確認する。

Get-NetTCPConnection -LocalPort 21118 -State Listen
Test-NetConnection 127.0.0.1 -Port 21118

実際の障害:pingは通るのに接続できない

確認項目 結果
Tailscale ping 成功:エンドポイント経由でP2P成立
接続元 → 接続先のTCP 21118 失敗:TcpTestSucceeded : False
接続先の待ち受け :: のTCP 21118が Listen
接続先 → 127.0.0.1:21118 TCP成功
接続先 → 自分のTailscale IP TCP失敗
TSMP / ICMP 成功 / タイムアウト

設定を調べても、すぐには改善しなかった

  • TCP 21118の受信許可を追加 → 改善せず。
  • 診断用ICMPv4 Echo Requestも許可 → 改善せず。
  • Tailscaleアダプターは Up、プロファイルは Private。
  • 受信許可規則とローカル規則の適用は有効。
  • 調べた範囲で明示的なブロックは見つからなかった。
  • Tailscale側でも対象通信の許可を確認した。

これらの結果だけで、ファイアウォールが原因とは断定できない。

両PCの再起動後に接続成功

接続元・接続先を再起動した後、RustDeskで接続できた。

  • 操作は体感的に非常に速く、快適だった。
  • 正確な原因は未特定。 片方だけの再起動で解決したかも不明。
  • サービス・アダプター・フィルタードライバーなどの再初期化は、可能性にとどまる。
  • NordVPNの接続前後で同様に失敗しており、それだけを原因とは判断できない。

接続できないときの確認順序

  1. 電源・スリープ・Tailscaleでのオンライン状態
  2. tailscale ping とTailscaleの着信許可
  3. RustDeskの直接IPアクセス・サービス・TCP待ち受け
  4. Windowsの受信規則とTailscaleのアクセス制御
  5. 他のVPNやセキュリティソフトの影響
  6. 作業を保存し、両PCを再起動して再確認

ICMP許可はRustDeskの必須条件ではない。診断用規則は、不要になったら対象を限定して削除する。

研究室で解析用PCを共用する場合

  • 利用者ごとにTailscaleアカウントを用意する。
  • 解析用PCだけを共有し、通信相手・ポートを制限する。
  • RustDeskの固定パスワードと利用権限を管理する。
  • 同じデスクトップを操作するため、利用時間を調整する。
  • 実行中の解析ジョブと出力ファイルを保護する。
  • 機関のVPN・P2P規程と、最新のプラン条件を確認する。

独立して解析ジョブを実行したい場合は、SSH・Linuxサーバー・ジョブ管理も候補。

まとめ・詳しい手順

  • Tailscaleが安全な通信経路、RustDeskが画面操作を担当する。
  • 手動のポート開放・IP固定なしで接続できた。
  • ping、TCP到達性、待ち受けは分けて確認する。
  • 今回は両PCの再起動で解決したが、原因は未特定。

ブログ記事へ戻る

公式資料:Tailscale / RustDesk / Windowsファイアウォール

操作:左右キーで移動 / Escで一覧 / Sで発表者ビュー