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
各ポートの用途は以下のとおりです。
| ポート | プロトコル | 用途 |
|---|---|---|
| 21115 | TCP | NATタイプ判定 |
| 21116 | TCP + UDP | ID登録・ハートビート(UDP)、接続(TCP) |
| 21117 | TCP | リレー(hbbr) |
| 21118 | TCP | Webクライアント用(任意) |
| 21119 | TCP | Webクライアント用(任意) |
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
hbbs と hbbr の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での構築と比べた主な違いは、apt → dnf、ufw → firewalld、そしてSELinuxの考慮の3点です。ここさえ押さえれば、AlmaLinux 10でも安定したリモート接続環境を自前で持てます。公式サーバーに依存しないので、混雑や仕様変更に振り回されないのも自前運用の強みです。

コメント