rustdesk 实验

RustDesk 是开源商业远程桌面,支持 self-host,文档详尽工具链完备社区健全。

rustdesk 实验

安装 rustdesk server

https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/

服务端存在两个可执行文件:

  • hbbs - RustDesk ID/Rendezvous server

  • hbbr - RustDesk Relay server

开放网络

# 需要放开的端口
# tcp 22 [ssh]
# tcp 21115 [hbbs NAT类型测试]
# tcp 21116 [hbbs TCP打洞、建连服务]
# tcp 21117 [hbbr 中继服务监听端口]
# tcp 21118 21119 [websocket 端口;若无需网页,可以不开放]
# udp 21116 [hbbs ID注册、心跳服务]

# 实验环境是 centos8,通过 iptables 控制流量
# 参考:https://www.heficed.com/tutorials/vps/how-to-configure-iptables/
vi /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables

docker-compose

config compose

services:
hbbs:
container_name: hbbs
ports:
- 21115:21115
- 21116:21116 # hbbs TCP打洞、建连服务
- 21116:21116/udp # hbbs ID注册、心跳服务
- 21118:21118 # hbbs websocket
image: rustdesk/rustdesk-server:latest
command: hbbs -r <domain>:21117 # 填入个人域名或 IP + hbbr 服务端口
volumes:
- /root/2024-1-24-rustdesk/hbbs-data:/root # 自定义挂载目录
depends_on:
- hbbr
restart: always

hbbr:
container_name: hbbr
ports:
- 21117:21117 # hbbr 服务监听端口
- 21119:21119 # hbbr websocket
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- /root/2024-1-24-rustdesk/hbbr-data:/root # 自定义挂载目录
restart: always

docker-compose up 失败了。这个报错。意思是镜像太老了。

➜  2024-1-24-rustdesk docker-compose -p rustdesk up
Creating network "rustdesk_default" with the default driver
Creating hbbr ... done
Creating hbbs ... done
Attaching to hbbr, hbbs
hbbr | [2024-01-24T06:02:57Z ERROR hbbr::lic] Registered email required (-m option). Please pay and register on https://rustdesk.com/server.
hbbs | [2024-01-24T06:02:58Z ERROR hbbs::lic] Registered email required (-m option). Please pay and register on https://rustdesk.com/server.

# aliYun 主机直接拉到的 latest 是 2 年前的
➜ 2024-1-24-rustdesk docker images | grep rust
rustdesk/rustdesk-server latest b732f09f2d6e 2 years ago 85.3MB

# 换台主机不走国内缓存
$ docker pull rustdesk/rustdesk-server
Using default tag: latest
latest: Pulling from rustdesk/rustdesk-server
Digest: sha256:bb758d0a1848add43ea45a04e735dc33bdd2ed7e4032d8560929b15bd1127a14
Status: Image is up to date for rustdesk/rustdesk-server:latest
docker.io/rustdesk/rustdesk-server:latest
$ docker images | grep rustdesk
rustdesk/rustdesk-server latest 2970501b7978 7 weeks ago 96.3MB
$ docker save rustdesk/rustdesk-server:latest -o rustdesk-server.tar
$ dua rustdesk-server.tar
98.68 MB rustdesk-server.tar

# 拷贝、load
➜ 2024-1-24-rustdesk docker load -i rustdesk-server.tar
d3fa9d362c05: Loading layer [==================================================>] 75.18MB/75.18MB
64d8ba0af89e: Loading layer [==================================================>] 14.3MB/14.3MB
c0cf2953b00b: Loading layer [==================================================>] 9.173MB/9.173MB
5f70bf18a086: Loading layer [==================================================>] 1.024kB/1.024kB
The image rustdesk/rustdesk-server:latest already exists, renaming the old one with ID sha256:b732f09f2d6e65dbf6e8d1dfbeebeff3ea188adda1b6e071fcc65eb6176b9748 to empty string
Loaded image: rustdesk/rustdesk-server:latest

➜ 2024-1-24-rustdesk docker images | grep rustdesk
rustdesk/rustdesk-server latest 2970501b7978 7 weeks ago 96.3MB
rustdesk/rustdesk-server <none> b732f09f2d6e 2 years ago 85.3MB

# 再次启动,启动成功
➜ 2024-1-24-rustdesk mkdir rustdesk; mv docker-compose.yml rustdesk/; cd rustdesk
➜ rustdesk docker-compose up -d
➜ rustdesk docker-compose logs -f
hbbr is up-to-date
hbbs is up-to-date
Attaching to hbbr, hbbs
hbbr | [2024-01-24 06:24:51.782760 +00:00] INFO [src/relay_server.rs:61] #blacklist(blacklist.txt): 0
hbbr | [2024-01-24 06:24:51.782781 +00:00] INFO [src/relay_server.rs:76] #blocklist(blocklist.txt): 0
hbbr | [2024-01-24 06:24:51.782784 +00:00] INFO [src/relay_server.rs:82] Listening on tcp :21117
hbbr | [2024-01-24 06:24:51.782786 +00:00] INFO [src/relay_server.rs:84] Listening on websocket :21119
hbbr | [2024-01-24 06:24:51.782795 +00:00] INFO [src/relay_server.rs:87] Start
hbbr | [2024-01-24 06:24:51.782832 +00:00] INFO [src/relay_server.rs:105] DOWNGRADE_THRESHOLD: 0.66
hbbr | [2024-01-24 06:24:51.782835 +00:00] INFO [src/relay_server.rs:115] DOWNGRADE_START_CHECK: 1800s
hbbr | [2024-01-24 06:24:51.782837 +00:00] INFO [src/relay_server.rs:125] LIMIT_SPEED: 4Mb/s
hbbr | [2024-01-24 06:24:51.782840 +00:00] INFO [src/relay_server.rs:136] TOTAL_BANDWIDTH: 1024Mb/s
hbbr | [2024-01-24 06:24:51.782842 +00:00] INFO [src/relay_server.rs:146] SINGLE_BANDWIDTH: 16Mb/s
hbbs | [2024-01-24 06:24:52.390407 +00:00] INFO [src/common.rs:143] Private/public key written to id_ed25519/id_ed25519.pub
hbbs | [2024-01-24 06:24:52.390429 +00:00] INFO [src/peer.rs:84] DB_URL=./db_v2.sqlite3
hbbs | [2024-01-24 06:24:52.441011 +00:00] INFO [src/rendezvous_server.rs:99] serial=0
hbbs | [2024-01-24 06:24:52.441032 +00:00] INFO [src/common.rs:46] rendezvous-servers=[]
hbbs | [2024-01-24 06:24:52.441035 +00:00] INFO [src/rendezvous_server.rs:101] Listening on tcp/udp :21116
hbbs | [2024-01-24 06:24:52.441037 +00:00] INFO [src/rendezvous_server.rs:102] Listening on tcp :21115, extra port for NAT test
hbbs | [2024-01-24 06:24:52.441039 +00:00] INFO [src/rendezvous_server.rs:103] Listening on websocket :21118
hbbs | [2024-01-24 06:24:52.441057 +00:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp [::]:21116: Ok(212992)
hbbs | [2024-01-24 06:24:52.441104 +00:00] INFO [src/rendezvous_server.rs:138] mask: None
hbbs | [2024-01-24 06:24:52.441108 +00:00] INFO [src/rendezvous_server.rs:139] local-ip: ""
hbbs | [2024-01-24 06:24:52.441132 +00:00] INFO [src/common.rs:46] relay-servers=["121.40.102.177:21117"]
hbbs | [2024-01-24 06:24:52.441179 +00:00] INFO [src/rendezvous_server.rs:153] ALWAYS_USE_RELAY=N
hbbs | [2024-01-24 06:24:52.441197 +00:00] INFO [src/rendezvous_server.rs:185] Start
hbbs | [2024-01-24 06:24:52.442243 +00:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp [::]:0: Ok(212992)
hbbs | [2024-01-24 06:24:52.443419 +00:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp 0.0.0.0:0: Ok(212992)

配置 rustdesk client

使用很简单,就是设置 ID/中继服务器 的时候要注意一下

image-20240124161017450
  1. ID 服务器就是 server-domain:21116
    • 注意要用域名,不能用 IP
    • 实验中使用 IP 填写,在「共享屏幕」页尝试加入 RustDesk 网络,会一直失败
    • 改为使用域名填写,「共享屏幕」页不再报错
  2. 中继服务器别填
    • 客户端连到 ID 服务器的时候会向 hbbs 查询中继服务器的
    • 所以如果 hbbs 启动的时候有 -r ...:21117,那就别写中继服务器这一栏
    • 客户端这边手动填写的中继服务器优先级高于 hbbs -r 配置的
  3. API 服务器忽略,是 Pro 版的东西
  4. Key 建议是要填
    • 是 hbbs 启动以后会自动生成的
    • 以实验中的配置而言,就是在 /root/2024-1-24-rustdesk/hbbs-data/id_ed25519.pub
    • 打印这个公钥的内容,复制粘贴就好了(或者 vi 进去看看,注意别复制错了)