今回はオープンソースでマルチプラットフォームなリモートデスクトップソフトウェアであるRustDeskを紹介します。
RustDeskとは
RustDeskはオープンソースでマルチプラットフォームなリモートデスクトップソフトウェアです。あけすけな表現をするとセルフホストできるTeamViewerやAnyDeskのようなものです。
使い勝手もおおむね同じで、今回構築する中継サーバーに接続することによりルーター等の設定を変更しなくてもすいすい繋がるリモートデスクトップ環境を構築できます。
サーバーはUbuntuやDebianとWindowsが想定されていますが、クライアントはUbuntu/
TeamViewerやAnyDeskを使用したことがある場合はピンとくるでしょうが、アクセスに必要なのは9桁の数字のIDとパスワードだけです。そのため画面構成はシンプルです。ただし、RustDesk 1.
RustDeskサーバーのインストール形態
RustDeskサーバーをインストールする方法はおもに3種類あります。
- インストールスクリプトを実行する
- Dockerを使用する
- Debパッケージを使用する
1と2に関してはマニュアルが用意されているため、これを読むのがいいでしょう。どちらもすごく簡単にインストールできます。
今回はあえて公式にリリースされているDebパッケージからインストールする方法を紹介します。もちろん筆者はこれがベストであるという考えのもとで紹介していますが、とにかく手頃なほうがいいのであればインストールスクリプトを、他にもいろいろDockerを動しているのであればDockerを使うといいでしょう。
インストールするサーバーの準備
早速インストールするサーバーを準備します。今回は、というか今回もVPSを使用しています。VPSの設定は第751回を参考にしてください。
RustDeskはデフォルトでポート21115〜21119
$ sudo ufw allow 21115:21119/tcp $ sudo ufw allow 21116/udp
ドメインは割り当ててあってもなくても構いませんが、割り当てておくほうがいいに越したことはありません。
RustDeskサーバーのインストール
それではRustDeskサーバーをインストールを行います。
初期設定
まず何はなくともパッケージが必要ですが、UbuntuのリポジトリにはないためGitHubのリリースページからダウンロードします。今回使用したバージョンは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
修正するのは、
修正を終わらせ、今度はシグナルサーバーの設定を変更します。次のコマンドを実行してください。
$ 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.
このような結果が返ってくれば、正しく動作しています。
$ 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/
以上の注意を踏まえ、次のコマンドを実行してください。
$ 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.
インストールは以上で終了です。
注意点
検証中に気づいた注意点がいくつかありますので紹介します。
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
Waylandサポート
Waylandサポートはなくはないのですが、現在はまだ開発版の1.
PowerShellの権限
Windowsで先ほど編集したRustDeskクライアントのインストールスクリプトを実行しても、セキュリティの都合でインストールできないことがあります。その場合はドキュメントを参考に権限を緩めてください。ここではWindowsのことなので詳しい解説はしません。