AlmaLinux 10で自前のRustDeskサーバーを構築する【Docker版】

RustDeskはオープンソースのリモートデスクトップソフトウェアです。TeamViewerやAnyDeskのような操作感を、自分のサーバーで完結させられるのが大きな魅力です。

公式の公開サーバーをそのまま使うこともできますが、自分専用のRustDeskサーバーをVPS上に構築すれば、混雑に左右されず安定した運用ができます。

この記事では、AlmaLinux 10 のVPSにDockerでRustDeskサーバー(hbbs / hbbr)を立てる手順を、つまずきやすいポイントも含めて解説します。

RustDeskサーバーの仕組み

最初に押さえておきたいのは、RustDeskは基本がP2P(直接接続)だということです。

自前サーバーは2つのコンポーネントから成ります。

  • hbbs(ID/Rendezvousサーバー)… 端末の登録、相手探し、NAT越えの仲介を担当
  • hbbr(Relayサーバー)… NAT越えに失敗したときだけ通信を中継

接続の流れはこうなります。

自宅PC
    │
    ├──── VPS(RustDesk Server)
    │         ├ hbbs(お見合い・NAT越え仲介)
    │         └ hbbr(直結できないときだけ中継)
    │
外出先PC

NAT越え(ホールパンチング)に成功すれば、映像や操作のデータは端末同士を直接流れ、サーバーは関与しません。直結できなかったときだけhbbr経由のリレーになります。

つまり「自前サーバー=全部サーバー経由で遅い」ではなく、直結できる環境ならサーバーでもP2Pで高速、というのが正しい理解です。

動作環境

  • AlmaLinux 10
  • Docker Engine / Docker Compose
  • グローバルIPを持つVPS(リレーになったときの速度を考えると国内VPSが望ましい)

以下のコマンドは root で実行する前提です。一般ユーザーで作業する場合は各コマンドの先頭に sudo を付けてください。

1. Dockerをインストールする

Docker公式リポジトリを追加します(centos用リポジトリはRHEL系共通でAlmaLinux 10でも使えます)。

dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Docker本体をインストールします。

dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin

起動と自動起動の有効化:

systemctl enable --now docker

確認:

docker --version
systemctl status docker

2. ファイアウォール(firewalld)を開放する

AlmaLinuxは ufw ではなく firewalld が標準です。RustDeskで使うポートを開けます。

firewall-cmd --permanent --add-port=21115-21119/tcp
firewall-cmd --permanent --add-port=21116/udp
firewall-cmd --reload

開放されたか確認:

firewall-cmd --list-ports

各ポートの用途は以下のとおりです。

ポートプロトコル用途
21115TCPNATタイプ判定
21116TCP + UDPID登録・ハートビート(UDP)、接続(TCP)
21117TCPリレー(hbbr)
21118TCPWebクライアント用(任意)
21119TCPWebクライアント用(任意)

21116はTCPとUDPの両方が必要です。UDPを忘れると接続が不安定になるので注意してください。

また、VPS提供元(さくら、ConoHa、AWSなど)のコンソール側にもファイアウォールやパケットフィルタ、セキュリティグループがあることが多いです。サーバー内のfirewalldだけ開けてもクラウド側で塞がっていると通じないので、両方を確認してください。

3. 作業ディレクトリを作成する

mkdir -p /opt/rustdesk
cd /opt/rustdesk

4. docker-compose.yml を作成する

vi docker-compose.yml

内容は以下のとおりです。

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

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

ポイントは2つです。

  • network_mode: host … クライアントの実IPが正しく見えるようになり、P2P直結の成功率が上がります
  • ボリュームの :Z … AlmaLinuxはSELinuxがデフォルトで有効なため、:Z を付けてSELinuxコンテキストを自動付与しておくと、./data への書き込み拒否(鍵が生成されない等)を防げます。詳しくは後述します。

5. RustDeskサーバーを起動する

docker compose up -d

コンテナを確認:

docker ps

hbbshbbr の2つが起動していれば成功です。

CONTAINER ID   IMAGE                      ...   NAMES
xxxxxxxxxxxx   rustdesk/rustdesk-server   ...   hbbr
xxxxxxxxxxxx   rustdesk/rustdesk-server   ...   hbbs

6. 公開鍵を確認する

起動すると ./data に鍵が生成されます。クライアント設定で使う公開鍵を確認します。

cat /opt/rustdesk/data/id_ed25519.pub

次のような文字列が表示されます。これを控えておきます。

VQm3Nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

7. RustDeskクライアントを設定する

RustDeskアプリで「設定 → ネットワーク → ID/リレーサーバー」を開き、以下を入力します。

  • IDサーバー:VPSのIPアドレス、またはドメイン名(例 rustdesk.example.com
  • Relayサーバー:空欄でOK(hbbsが接続時に自動で伝えます。明示的に同じIP/ドメインを入れても動作します)
  • APIサーバー:空欄でOK
  • Key:手順6でコピーした id_ed25519.pub の内容

接続する両方の端末に同じ設定を入れてください。IDの横が緑色になれば登録成功です。

8. 動作確認

自宅PCと外出先PCの両方に同じサーバー設定を入れたら、実際に接続してみます。接続中の画面で接続種別を確認できます。

  • Direct(直接) … P2P直結に成功。サーバーは関与せず高速
  • Relay(中継) … hbbr経由。直結できなかったケース

Directになっていれば、自前サーバーでもしっかりP2Pで動いている証拠です。

ドメインを利用する場合

IPアドレス直打ちでも動きますが、DNSにAレコードを登録しておくとドメイン名で設定できます。

rustdesk.example.com  →  VPSのグローバルIP

クライアントのIDサーバー欄にこのドメインを入れればOKです。

つまずきやすいポイント:SELinux

AlmaLinux 10はSELinuxがデフォルトでenforcingです。network_mode: host のコンテナ自体は通常動きますが、ボリュームマウント(./data)への書き込みが拒否され、鍵ファイルが生成されないことがあります。

本記事のcompose設定では最初からボリュームに :Z を付けて対策していますが、もし起動後に id_ed25519.pub が見当たらない、コンテナが安定しないといった症状が出たら、まずSELinuxを疑います。

ausearch -m avc -ts recent   # 拒否ログが出ているか確認

:Z を付けても解決しない場合の確認ポイントとして、ディレクトリの所有権やパスの指定ミスも見直してみてください。

まとめ

RustDeskサーバーはDockerを使えば数分で構築できます。

  • AlmaLinux 10へDockerを導入
  • firewalldで必要ポートを開放(21116のUDPを忘れずに)
  • hbbs / hbbr を起動
  • 公開鍵を取得し、クライアントに設定
  • SELinux対策として :Z を付けておく

Ubuntuでの構築と比べた主な違いは、aptdnfufwfirewalld、そしてSELinuxの考慮の3点です。ここさえ押さえれば、AlmaLinux 10でも安定したリモート接続環境を自前で持てます。公式サーバーに依存しないので、混雑や仕様変更に振り回されないのも自前運用の強みです。

コメント