Ubuntu Weekly Recipe

第763回RustDeskですいすい繋がるリモートデスクトップを実現する

今回はオープンソースでマルチプラットフォームなリモートデスクトップソフトウェアであるRustDeskを紹介します。

RustDeskとは

RustDeskはオープンソースでマルチプラットフォームなリモートデスクトップソフトウェアです。あけすけな表現をするとセルフホストできるTeamViewerAnyDeskのようなものです。

使い勝手もおおむね同じで、今回構築する中継サーバーに接続することによりルーター等の設定を変更しなくてもすいすい繋がるリモートデスクトップ環境を構築できます。

サーバーはUbuntuやDebianとWindowsが想定されていますが、クライアントはUbuntu/Debian/Windows/macOS/Android/iOSなど、何にでも対応しています。ただし今回はUbuntuとWindowsしか取り上げません。

TeamViewerやAnyDeskを使用したことがある場合はピンとくるでしょうが、アクセスに必要なのは9桁の数字のIDとパスワードだけです。そのため画面構成はシンプルです。ただし、RustDesk 1.1.9図1と1.2.0開発版図2では、かなりの違いが見られます。

図1 RustDesk 1.1.9のスクリーンショット
図1
図2 RustDesk 1.2.0開発版のスクリーンショット
図2

RustDeskサーバーのインストール形態

RustDeskサーバーをインストールする方法はおもに3種類あります。

  1. インストールスクリプトを実行する
  2. Dockerを使用する
  3. Debパッケージを使用する

1と2に関してはマニュアルが用意されているため、これを読むのがいいでしょう。どちらもすごく簡単にインストールできます。

今回はあえて公式にリリースされているDebパッケージからインストールする方法を紹介します。もちろん筆者はこれがベストであるという考えのもとで紹介していますが、とにかく手頃なほうがいいのであればインストールスクリプトを、他にもいろいろDockerを動しているのであればDockerを使うといいでしょう。

インストールするサーバーの準備

早速インストールするサーバーを準備します。今回は、というか今回もVPSを使用しています。VPSの設定は第751回を参考にしてください。

RustDeskはデフォルトでポート21115〜21119(TCP)と21116(UDP)を使用します。事前にこのポートを空けておいてください。

$ sudo ufw allow 21115:21119/tcp
$ sudo ufw allow 21116/udp

ドメインは割り当ててあってもなくても構いませんが、割り当てておくほうがいいに越したことはありません。

RustDeskサーバーのインストール

それではRustDeskサーバーをインストールを行います。

初期設定

まず何はなくともパッケージが必要ですが、UbuntuのリポジトリにはないためGitHubのリリースページからダウンロードします。今回使用したバージョンは1.1.7-4で、rustdesk-server-hbbr_1.1.7_amd64.deb、rustdesk-server-hbbs_1.1.7_amd64.deb、rustdesk-server-utils_1.1.7_amd64.debを実際にインストールしました。ページにアクセスしただけだとrustdesk-server-utilsが見えないので気をつけてください。またarm64とamd64を見間違えやすいので注意しましょう[1]

ダウンロードしたパッケージをインストールします。3つとも同じフォルダーに入れて、次のコマンドを実行するのがいいでしょう。

$ sudo apt install ./rustdesk-server-*.deb

root権限で動かすのも何なので、専用のユーザーを作成します。ユーザー名はもちろんrustdeskです。次のコマンドを実行してください。

$ sudo adduser --system --group --no-create-home rustdesk

インストール時に作成されたフォルダーやファイルがあるので、これらのパーミッションを変更します。次のコマンドを実行してください。

$ sudo chown -R rustdesk: /var/lib/rustdesk-server/ /var/log/rustdesk/

2つのサーバーの動作設定

先ほど3つのパッケージをインストールしました。1つはユーティリティであることは明白ですが、hbbrとhbbsはどちらもサーバーです。hbbrがリレーサーバー、hbbsがシグナルサーバーです。とにかくどちらも必要なので設定します。

Debパッケージなのでインストールするだけで動作しますが、いくつかunitファイルを修正する必要があります。まずはリレーサーバーから設定します。次のコマンドを実行してください。

$ sudo systemctl edit --full rustdesk-hbbr.service

エディターが起動しますので、次のように変更してください。

[Unit]
Description=Rustdesk Relay Server

[Service]
Type=simple
LimitNOFILE=1000000
ExecStart=/usr/bin/hbbr -k _
WorkingDirectory=/var/lib/rustdesk-server/
User=rustdesk
Group=rustdesk
Restart=always
StandardOutput=append:/var/log/rustdesk/rustdesk-hbbr.log
StandardError=append:/var/log/rustdesk/rustdesk-hbbr.error
# Restart service after 10 seconds if node service crashes
RestartSec=10

[Install]
WantedBy=multi-user.target

修正するのは、⁠Users=」「Group=」に先ほど追加したユーザー(とグループ)を指定するのと、⁠ExecStart=」にオプションを付けることです。

修正を終わらせ、今度はシグナルサーバーの設定を変更します。次のコマンドを実行してください。

$ sudo systemctl edit --full rustdesk-hbbs.service

以下のように修正します。

[Unit]
Description=Rustdesk Signal Server

[Service]
Type=simple
LimitNOFILE=1000000
ExecStart=/usr/bin/hbbs -k _
WorkingDirectory=/var/lib/rustdesk-server/
User=rustdesk
Group=rustdesk
Restart=always
StandardOutput=append:/var/log/rustdesk/rustdesk-hbbs.log
StandardError=append:/var/log/rustdesk/rustdesk-hbbs.error
# Restart service after 10 seconds if node service crashes
RestartSec=10

[Install]
WantedBy=multi-user.target`

修正点はリレーサーバーと同じです。

修正が終わったら、リレーサーバーとシグナルサーバーを再起動します。次のコマンドを実行してください。

$ sudo systemctl restart rustdesk-hbbr.service
$ sudo systemctl restart rustdesk-hbbs.service

ここで次のコマンドを実行して、動作を確認してください。

$ sudo rustdesk-utils doctor rustdesk.example.com

rustdesk.example.comはもちろんサーバーのドメイン名またはIPアドレスに置き換えてください。

このような結果が返ってくれば、正しく動作しています。

$ sudo rustdesk-utils doctor (hidden)
Checking server:  (hidden)

Found 1 IP addresses: 
 - (hidden)

Checking IP address: (hidden)
Is IPV4: true
Is IPV6: false
Reverse DNS lookup: '(hidden)' DOESN'T MATCH server address '(hidden)'
TCP Port 21114 (API): ERROR
TCP Port 21115 (hbbs extra port for nat test): OK in 0 ms
TCP Port 21116 (hbbs): OK in 0 ms
TCP Port 21117 (hbbr tcp): OK in 0 ms
TCP Port 21118 (hbbs websocket): OK in 0 ms
TCP Port 21119 (hbbr websocket): OK in 0 ms

APIサーバーは使用していないため(そもそもポートを開けてもいないので⁠⁠、エラーで問題ありません。

クライアントインストールスクリプトの準備

RustDeskではクライアントを簡単にインストールできるスクリプトが用意されています。これを使用できるようにします。

事前に/var/lib/rustdesk-server/にある拡張子が「.pub」のファイル名を控えておいてください。ここではid_XX00000.pubとしています。もちろんドメイン名もrustdesk.example.comではなくお使いのドメイン名またはIPアドレスに置き換えてください。

以上の注意を踏まえ、次のコマンドを実行してください。

$ wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/WindowsAgentAIOInstall.ps1
$ wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/linuxclientinstall.sh
$ sed -i "s|wanipreg|rustdesk.example.com|g" WindowsAgentAIOInstall.ps1
$ sed -i "s|keyreg|$(cat /var/lib/rustdesk-server/id_XX00000.pub)|g" WindowsAgentAIOInstall.ps1
$ sed -i "s|wanipreg|rustdesk.example.com|g" linuxclientinstall.sh
$ sed -i "s|keyreg|$(cat /var/lib/rustdesk-server/id_XX00000.pub)|g" linuxclientinstall.sh

Ubuntuであればlinuxclientinstall.shを、WindowsであればWindowsAgentAIOInstall.ps1をRustDeskクライアントをインストールしたいPCにコピーしてください。基本的には同一ネットワーク内にあるPCに設定することが多いでしょうから、NASに置いておくと簡単にインストーラーが実行できて便利でしょう。

インストールは以上で終了です。

注意点

検証中に気づいた注意点がいくつかありますので紹介します。

IPV6

RustDeskサーバーはIPv6に対応しているはずなのですが、筆者は動作を確認できませんでした。

後ほど紹介しますが、RustDeskサーバーの挙動を確認するコマンドがあって、それを実行してみたところ次のような結果になりました。

$ sudo rustdesk-utils doctor rustdeskv6.(hidden)
Checking server:  rustdeskv6.(hidden)

Found 1 IP addresses: 
 - (hidden)

Checking IP address: (hidden)
Is IPV4: false
Is IPV6: true
Reverse DNS lookup: '(hidden)' DOESN'T MATCH server address '(hidden)'
TCP Port 21114 (API): ERROR
TCP Port 21115 (hbbs extra port for nat test): ERROR
TCP Port 21116 (hbbs): ERROR
TCP Port 21117 (hbbr tcp): ERROR
TCP Port 21118 (hbbs websocket): ERROR
TCP Port 21119 (hbbr websocket): ERROR

今のところIPv6は使用しないほうがよさそうです。IPv4とIPv6で同じホスト名を割り当てている場合はご注意ください(経験者談⁠⁠。

RustDeskクライアントとUbuntuのバージョン

Ubuntu(というかLinuxディストリビューション)で使用する場合、RustDeskクライアントのバージョンが1.1.9であれば22.04 LTSまでとなります。というのも、22.10以降はサウンドサーバーがPipeWireになっており、PulseAudio前提の1.1.9はインストールできないためです。対策としては開発版である1.2.0をインストールすることになります。1.2.0がリリースされたらこの問題はなくなることでしょう。

Waylandサポート

Waylandサポートはなくはないのですが、現在はまだ開発版の1.2.0でのことです。1.1.9では使用できませんし、1.2.0でも実験的とのことで現状は使用できないと思っておいたほうがいいでしょう。実際に試しても使用できませんでした。リリース時にはまた変わるかもしれませんが。

PowerShellの権限

Windowsで先ほど編集したRustDeskクライアントのインストールスクリプトを実行しても、セキュリティの都合でインストールできないことがあります。その場合はドキュメントを参考に権限を緩めてください。ここではWindowsのことなので詳しい解説はしません。

おすすめ記事

記事・ニュース一覧