DockerでRustDeskサーバーを構築:ホームラボに最適なプライベートリモートデスクトップ

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

プロプライエタリなツールが限界な理由

ヘッドレスサーバー、仮想マシン(VM)、ワークステーションの管理は、ホームラボ生活の一部です。長年、私たちはTeamViewerやAnyDeskに頼ってきました。それらは確かに機能していましたが、ある時を境に使えなくなります。多くの人が、何か重要な問題を解決しようとしている最中に「商用利用が検出されました」というポップアップに遭遇したことがあるでしょう。かつては無料だった機能のために月額20ドルのサブスクリプションを要求される、非常にストレスのたまる障害です。

問題はコストだけではありません。プライバシーも重要です。パブリックなツールを使用すると、マウスの動きやキー入力のすべてが企業のサーバーを経由します。他国にあるリレーサーバーが過負荷になると、トラブルシューティングが不可能なほどのラグ(遅延)が発生します。セルフホスト愛好家にとって、わずか1メートル先にあるサーバーを管理するためにクラウドを経由するのは、不適切な設計に感じられるはずです。

なぜパブリックリレーは頻繁に失敗するのか

これを解決するには、その仕組み(配管)を見る必要があります。ほとんどのリモートツールは、IDサーバーリレーサーバーを使用します。IDサーバーは電話帳のような役割を果たし、ラップトップがサーバーを見つけるのを助けます。頑固なファイアウォールのせいで直接のピアツーピア(P2P)接続が失敗した場合、トラフィックはリレーサーバーを経由してトンネリングされます。

パブリックリレーは混雑していることが多いです。カーソルの反応に2秒かかる場合、データが大陸を横断して遠回りしているのが原因です。自前のサーバーをホストすることで、その「電話帳」と「トンネル」を自分のネットワーク内に持ち込むことができます。完全な自律性が手に入り、さらに重要なことに、企業の利用規約の変更に振り回されることもなくなります。

競合比較:RustDeskが選ばれる理由

MeshCentralやApache Guacamoleも堅実な選択肢ですが、重くなることがあります。MeshCentralは強力ですが、ボタンが多すぎてコクピットのような複雑さを感じます。Guacamoleはブラウザで動くのは素晴らしいですが、ファイル転送などの専用アプリが持つ「軽快さ」に欠けます。RustDeskはそのバランスが絶妙です。Rustで書かれているため非常に軽量で、通常の使用メモリは50MB未満です。Windows、Linux、macOS、モバイル向けのネイティブアプリがあり、プロ級のエクスペリエンスを無料で享受できます。

5分でサーバーをセットアップする

Dockerはこのサーバーを動かす最も速い方法です。インストール環境を分離でき、アップデートもコマンド一つで完了します。私はこのセットアップを使って異なる都市にある複数のサーバーを管理していますが、不安定な4Gモバイル回線でも非常に安定して動作しています。

前提条件

  • DockerとDocker Composeがインストールされたサーバー。
  • 基本的なターミナル操作スキル。
  • ファイアウォールでポート 21115-21119 (TCP) と 21116 (UDP) を開放していること。

ステップ 1:プロジェクトディレクトリの作成

専用のフォルダを作成して整理しましょう。

mkdir -p ~/rustdesk-server && cd ~/rustdesk-server

ステップ 2:Docker Composeの設定を定義する

2つのコンテナが必要です。hbbs(IDサーバー)とhbbr(リレーサーバー)です。docker-compose.ymlファイルを作成します。

version: '3'

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r サーバーのIPまたはドメイン
    volumes:
      - ./data:/root
    network_mode: host
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: host
    restart: unless-stopped

プロのアドバイス: サーバーのIPまたはドメイン を実際のパブリックIPまたはDDNSに置き換えてください。network_mode: host を使用するのが、NATの煩わしさを避け、RustDeskが必要とする広範なポートを処理する最も簡単な方法です。

ステップ 3:サービスの起動

バックグラウンドでコンテナを起動します:

docker compose up -d

他人がリレーを乗っ取るのを防ぐため、サーバーは自動的にセキュリティキーを生成します。次のコマンドで取得してください:

cat ./data/id_ed25519.pub

クライアントの設定

次に、RustDeskクライアントがパブリックなネットワークではなく、自前のプライベートサーバーを使用するように設定します。

  1. RustDeskクライアントを開きます。
  2. メニューの3点ドットをクリックし、設定 > ネットワークを選択します。
  3. ネットワーク設定のロックを解除をクリックします。
  4. IDサーバーフィールドに、サーバーのIPアドレスを入力します。
  5. 先ほど生成したキーをKeyフィールドに貼り付けます。

下部に「Ready(準備完了)」と表示されれば、セルフホスト化は完了です。

パフォーマンスとセキュリティの現実

パフォーマンスの向上は劇的です。パブリックリレーでは150msだった遅延が、ローカルサーバーでは10ms以下にまで低下するのを確認しました。リモートセッションが、まるでマシンの目の前に座っているかのような感覚になります。

セキュリティもより強固になります。必須の公開鍵により、自分だけが帯域を利用できることが保証されます。最大限のセキュリティを確保したい場合は、インターネットにポートを開放せず、代わりにTailscaleやWireGuardなどのVPNを使用することもできます。これにより、リモートデスクトップのインフラ全体をパブリックなWebから隠しつつ、世界中のどこからでもアクセスできるようになります。

このセットアップは、今や私のホームラボ管理のバックボーンです。軽量で、データが尊重され、深夜2時にサーバーを修理する必要があるたびにお金を要求されることもありません。

Share: