RustDeskのサーバを立ち上げる、その2

2024年1月24日

RustDeskのサーバを立ち上げるの続きである。

INSTALL RUSTDESK SELF-HOSTED SERVER ON RASPBERRY PI HARDWARE ARMV8.という記事があるので、この内容を検証してみる。

先の記事の懸念点としては、IP/ランデブーサーバ、リレーサーバを大公開してしまうと、存在を知っている者であれば、誰でも使えてしまうことだ。これに制限をかけたい。上の記事にあるように接続を暗号化し、パブリックキーをクライアント側に指定してみる。

以下のコマンド修正とあるのが、修正したコマンドだ。単純に、「-k _」を追加してある。

version: '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 -k _
    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 -k _
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    restart: unless-stopped

※hbbsのオプション「-r rustdesk.example.com:21117」の意味は後述。

これで起動してみると、

docker-compose down
docker-compose up -d
docker-compose logs -f

以下の出力だ。

Attaching to hbbs, hbbr
hbbr    | [2023-03-30 05:26:58.205091 +00:00] INFO [src/common.rs:121] Private key comes from id_ed25519
hbbr    | [2023-03-30 05:26:58.205122 +00:00] INFO [src/relay_server.rs:580] Key: OK5BjEPttTQzstDo*****************************
hbbr    | [2023-03-30 05:26:58.205134 +00:00] INFO [src/relay_server.rs:60] #blacklist(blacklist.txt): 0
hbbr    | [2023-03-30 05:26:58.205140 +00:00] INFO [src/relay_server.rs:75] #blocklist(blocklist.txt): 0
hbbr    | [2023-03-30 05:26:58.205143 +00:00] INFO [src/relay_server.rs:81] Listening on tcp :21117
hbbr    | [2023-03-30 05:26:58.205145 +00:00] INFO [src/relay_server.rs:83] Listening on websocket :21119
hbbr    | [2023-03-30 05:26:58.205157 +00:00] INFO [src/relay_server.rs:86] Start
hbbr    | [2023-03-30 05:26:58.205193 +00:00] INFO [src/relay_server.rs:106] DOWNGRADE_THRESHOLD: 0.66
hbbr    | [2023-03-30 05:26:58.205205 +00:00] INFO [src/relay_server.rs:115] DOWNGRADE_START_CHECK: 1800s
hbbr    | [2023-03-30 05:26:58.205208 +00:00] INFO [src/relay_server.rs:124] LIMIT_SPEED: 4Mb/s
hbbr    | [2023-03-30 05:26:58.205211 +00:00] INFO [src/relay_server.rs:134] TOTAL_BANDWIDTH: 1024Mb/s
hbbr    | [2023-03-30 05:26:58.205214 +00:00] INFO [src/relay_server.rs:148] SINGLE_BANDWIDTH: 16Mb/s
hbbs    | [2023-03-30 05:26:58.782105 +00:00] INFO [src/common.rs:121] Private key comes from id_ed25519
hbbs    | [2023-03-30 05:26:58.782129 +00:00] INFO [src/rendezvous_server.rs:1185] Key: OK5BjEPttTQzstDoO*********************
hbbs    | [2023-03-30 05:26:58.782145 +00:00] INFO [src/peer.rs:84] DB_URL=./db_v2.sqlite3
hbbs    | [2023-03-30 05:26:58.784391 +00:00] INFO [src/rendezvous_server.rs:100] serial=0
hbbs    | [2023-03-30 05:26:58.784412 +00:00] INFO [src/common.rs:46] rendezvous-servers=[]
hbbs    | [2023-03-30 05:26:58.784416 +00:00] INFO [src/rendezvous_server.rs:102] Listening on tcp/udp :21116
hbbs    | [2023-03-30 05:26:58.784419 +00:00] INFO [src/rendezvous_server.rs:103] Listening on tcp :21115, extra port for NAT test
hbbs    | [2023-03-30 05:26:58.784421 +00:00] INFO [src/rendezvous_server.rs:104] Listening on websocket :21118
hbbs    | [2023-03-30 05:26:58.784443 +00:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp [::]:21116: Ok(212992)
hbbs    | [2023-03-30 05:26:58.784477 +00:00] INFO [src/rendezvous_server.rs:139] mask: None
hbbs    | [2023-03-30 05:26:58.784480 +00:00] INFO [src/rendezvous_server.rs:140] local-ip: ""
hbbs    | [2023-03-30 05:26:59.022332 +00:00] INFO [src/common.rs:46] relay-servers=[]
hbbs    | [2023-03-30 05:26:59.022437 +00:00] INFO [src/rendezvous_server.rs:156] ALWAYS_USE_RELAY=N
hbbs    | [2023-03-30 05:26:59.022490 +00:00] INFO [src/rendezvous_server.rs:177] Start
hbbs    | [2023-03-30 05:26:59.022532 +00:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp 0.0.0.0:0: Ok(212992)

さらに、以下でも同じキーが表示される。

# cat data/*.pub
OK5BjEPttTQzst*********************

動作確認

キーを指定せずに以前の状態で接続しようとすると以下になる。

キーを指定してみる。

なんと、どういう仕組みなのかわからないのだが、接続「する」側のキー指定だけで十分だった。「される」側はキー指定していないが、きちんと接続される。

※どういうことなのかわからないが、その後やってみると、「される」側もキー指定しないと接続できない。

ということは、もしこのサーバの存在が知られてしまい、しかしキーが無い場合は、ランデブーのための登録はできてしまうが、実際には接続できないため、意味が無いということになる。

ともあれ、「接続される」オンリーのマシンへのキーの設定が不要なのは助かる。面倒なので。

リレーサーバは機能しているのか?

リレーサーバは、直接接続ができなかった場合に代替手段として、中継を行うものだ。したがって、直接接続できる環境では、リレーサーバは使われない。

また、キー無しでは、接続できない、つまりID/ランデブーサーバは使えないことがわかったが、キー無しでリレーサーバは使われてしまうのだろうか?

先のログに気になる物がある。

hbbs    | [2023-03-30 05:26:59.022332 +00:00] INFO [src/common.rs:46] relay-servers=[]
hbbs    | [2023-03-30 05:26:59.022437 +00:00] INFO [src/rendezvous_server.rs:156] ALWAYS_USE_RELAY=N
hbbs    | [2023-03-30 05:26:59.022490 +00:00] INFO [src/rendezvous_server.rs:177] Start

何かしらのオプションを設定すれば、常にリレーサーバを使わせるようにできるようだ。https://github.com/rustdesk/rustdesk-server/issues/59を見てみると、.envファイルにALWAYS_USE_RELAY=Yと書けば良いらしい。

しかし、これをやってみたのだが、先のログは変わらず。つまり、ALWAYS_USE_RELAY=Nのままだ。

追記:マニュアルの間違いで、.envファイルではなく、環境として書かないと効果がない。また、hbbsへの指定しか効果がない。具体的には、以下である。

  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    environment:
      - "ALWAYS_USE_RELAY=Y"

あるいは、env_fileの方法もある。

  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    env_file:
      - env.file
~~~

env.file

ALWAYS_USE_RELAY=Y
“`

追記終わり

とりあえずここまでだが、ちゃんと動作するにも関わらず、プログラムが未完成で文書も不足しており、どう使ってやればいいのかわからないのは大変残念なことだ。TeamViewerやAnyDeskを駆逐してしまうポテンシャルを持っているにも関わらず。

Keyの意味

説明をちゃんと読んでみるとこういうことらしい。秘密鍵、公開鍵のペアは必ず作成され、この公開鍵をクライアント側に指定しないと、接続が暗号化されない(これはサーバに対する接続のみということと思われる※)。その上で、hbbs及びhbbrで「-k _」を指定した場合には、正しく公開鍵を指定しないと接続自体が拒否される、ということらしい。

※RustDeskの売りとしては、エンド・トゥ・エンドの暗号化ということになっているので、サーバの公開鍵指定は、サーバに対する通信のみが暗号化されないの意味と思われる。

追加:リレーサーバの指定について

あとで、https://rustdesk.com/docs/en/self-host/install/の「STEP 2 : Run hbbs and hbbr on your server」部分を読んでみてわかったのだが、hbbsの-rオプションはリレーサーバの指定だそうだ。この例では、ID/ランデブーサーバとリレーサーバの二つ共を起動しているため、rustdesk.example.com部分は、このサーバのドメインを指定すればよい。デフォルトの21117であれば、記述の必要は無いようだ。

また、クライアント側のID Server、Relayer Serverの二つの指定は不要で、Relay Server指定がなければ、hbbs -r に指定されたサーバが使われるということらしい。