RustDeskのサーバを立ち上げる

2023年4月14日

Rustdeskを試し始めた頃は、割合とすんなり相手方に接続できたのだが、最近はかなり待たされることが多くなった。接続できない時は何度やってもだめ。しかし、接続できる時は何度でもすんなり接続できる。これではあまりに不安定だ。

直接IP接続はどうか?

この話は、RustDeskサーバの立ち上げについてなのだが、それ以前に相手側のIPを直接指定して接続できないものかと考えた。というのも、各種マシンはTailscaleのTailnet内にあり、それぞれVPN内の固定IPが割り振られているからだ。

しかし、残念なことに、これをどうやればいいのか全くわからない。それらしいオプションはあるのだが、開いてみると、ポート番号の指定しかないようだ。自分あるいは相手の固定IPをどうやって指定するのかわからない。

この方法は、とりあえず諦めることにした。

追記:やり方がわかった。RustDeskの直接IP接続を参照のこと。

サーバの起動

本題のRustDeskサーバの立ち上げだ。自身のサーバを立ち上げ、そのドメインをを両方のクライアント側に指定することにより、このサーバを介して接続を試みるようになり、Rustdeskのプロジェクトが提供するサーバがいくら混んでいてもすんなり接続できるようだ。実際にやってみたが、迅速に接続してくれて、とりあえず何の問題も無い。

やり方は、RustDeskドキュメント、SELF-HOSTにある。

これは本当に簡単なものである。Docker-composeを使う場合には、ドキュメントにある通り、以下のような具合だ。

ersion: '3'

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r rustdesk.example.com:21117
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    restart: unless-stopped

特に80, 443番ポートは使っていないので、traefik等のリバースプロキシについて考慮する必要も無い。ポートは、ご覧のように2115から2119番が使われ、上のように記述すれば、Dockerが勝手にオープンしてくれるので、これも気にする必要がない。docker-compose.ymlを書いたら、「docker-compose up -d」すればよい。

気になるところは、「command: hbbs -r rustdesk.example.com:21117」という記述なのだが、とりあえずこれはそのままにしておいた。

クライアント側の設定

両方のクライアントに以下のようにドメインを設定すれば良い。サーバにドメインがついていないい場合は、おそらくそのIPアドレスでも良いだろう。とにかく、2115から2119をオープンしているマシンにたどり着けば何でも良いと思われる。

これだけで、これら二つのクライアントはすんなり接続するようになる。なお、上の図には書いてないが、Relayer Serverにも同じものを指定した方が良い(後述)。

hbbs, hbbrサービス

とりあえずこれで日々の生活がスムーズになるが、しかし、Dockerで起動したサービスのhbbs, hbbrとは何か、「ID Server」にのみ設定して、他のサーバはそのままで良いのかなど疑問がある。ここを深堀りしてみる。

https://github.com/rustdesk/rustdesk-serverにある。

  • hbbs – RustDesk ID/ランデブーサーバ
  • hbbr – RustDeskリレーサーバ

RustDeskのクライアントでは、このユーザ製のサーバを指定する以前にIDが付与されているが、これがランダムな数字なのか、あるいはRustDesk本部サーバから付与されたものなのかはわからない。その一方で、hbbsは「ID/ランデブーサーバ」なのだという。これはIDを付与するという意味ではないかもしれない。クライアントのIDを維持して、その待ち合わせ(ランデブー)を行うという意味だろう。

その一方でRustDeskリレーサーバの意味は明らかで、これは、二つのマシンが直接的には接続できない場合に中継を行う、つまり、通信データが、常にこのサーバを通るということだ。

https://github.com/rustdesk/rustdesk/wiki/FAQの「What does the server do, why do I need it?」に説明されている。

  • It is primarily used to help your RustDesk clients to find each other.
  • Once this is done, it helps you try and get a direct connection between them.
  • If this fails and your client and controlled devices cannot talk directly to each other, the relay part of side the server will be used to handle the connection.

起動したのは、hbbs/hbbrサーバの両方なのだが、クライアントには「ID/ランデブーサーバ」しか指定していない。リレーサーバとしても使いたいならば、「Relay Server」にも同じドメインを記述する必要があるのだろう、おそらくは。当然だが、ID Server, Relay Serverはhbbs, hbbrサーバに対応していると思われるので、同じドメインなりIPなりを記述すれば良いと思われる。

しかし、API ServerとKeyとは何か?

https://rustdesk.com/docs/en/manual/mobile/の「Set ID/Relay Server」に記述があるが、Keyとは、「暗号化のためのあなたの公開鍵(オプション)」なのだそうだ。しかし、これだけではどう使うのかわからない。APIサーバについては何も記述がない。

RustDeskの事情

いろいろ探しているうちに、2022/5のスレッドにたどりついた。where is the web control panel on latest version? #509

これによれば、以前のRustDeskでは、ウェブコンソールというものがあったそうだ。つまり、RustDeskサーバをインストールすれば、GUIでいろいろと操作できたらしい。しかし、削除されてしまった理由というのは、RustDesk Server Proというビジネスユーザ向けの有料サービスを考えているそうだ。ということで、現在はこのあたりの仕組み、APIやらウェブGUIやらは中途半端になっているようだ。

RustDeskに寄与したい人は、Become a sponsor to RustDeskというページがあるのでお願いしたい。この人はシンガポールの人らしい。

まとめ

ともあれ、とりあえずのところはこうだ。

  • RustDeskサーバの構築は簡単
  • クライアント側には、それをID Server、Relay Serverとして指定する

ただし、ひとつの懸念点としては、RustDeskサーバには何の認証も無いので、サーバの存在が知られると、誰にでも使われてしまうことである。もちろん、ランデブーサーバ・リレーサーバとして使われるだけで、帯域が消耗するだけなのだが、何かしらのパスワード的なものが欲しいところだ。

RustDeskのサーバを立ち上げる、その2に続く。