はじめに
最近AnyDesk
が無料版だと5分でセッション切れになる改悪が来てしまいました。
そこで、リレーサーバー(hbbs
)とID/シグナリングサーバー(hbbr
)をセルフホストすることで制限なく使用できるRustDesk
環境を構築していこうと思います。
RustDeskについて
コロナ禍にTeamViwerのライセンス料にたまげたPurslane Limitedが開発しました。
基本的にはhbbr
経由のホールパンチングでP2P通信を行いますが、ホールパンチングに失敗した場合はhbbr
を経由しての通信に切り替わります。
実際に使っている感想としては、セルフホストサーバーに接続していればAnyDeskとまったく変わらないパフォーマンスが得られます。
ただし、コミュニティーサーバーへ接続しているとかなりラグや引っ掛かりがあります。
AnyDeskと同じようにファイル転送やTCPトンネリングが使えます。
さらに、相手方のカメラを見たりターミナルを起動することもできます。
構築
docker composeファイルが用意されているので、そちらを使用します。
また、hbbs
とhbbr
が各クライアントとの通信用に以下のポートを使用します。
- TCP:
21115-21119
(Pro版のみ21114
も) - UDP:
21116
docker compose
$ mkdir rustdesk && cd ./rustdesk
$ tee docker-compose.yml > /dev/null <<'EOF'
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs -r hbbr:21117
volumes:
- ./data:/root
ports:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
- "21118:21118"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
ports:
- "21117:21117"
- "21119:21119"
restart: unless-stopped
EOF
ファイアーウォール設定
1行1行開けるのはめんどくさくてやってられないので、firewalld
のXML書式を使って一括で開放します。
$ sudo tee /etc/firewalld/services/rustdesk.xml > /dev/null <<'EOF'
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>RustDesk</short>
<description>Ports required for the RustDesk.</description>
<port protocol="tcp" port="21115"/>
<port protocol="tcp" port="21116"/>
<port protocol="udp" port="21116"/>
<port protocol="tcp" port="21117"/>
<port protocol="tcp" port="21118"/>
<port protocol="tcp" port="21119"/>
</service>
EOF
sudo firewall-cmd --reload
sudo firewall-cmd --add-service=rustdesk --permanent
sudo firewall-cmd --reload
クライアント設定
クライアントの設定をするためにサーバーが生成した公開鍵を取得します。
$ cat ./data/id_ed25519.pub
この公開鍵を控えておきます。
クライアントを起動したら、設定
-> ネットワーク
-> 認証/中継サーバー
へ移動します。
次のように設定します。
- 認証サーバー:
hbbs
のアドレス/ドメイン - 中継サーバー:
hbbr
のアドレス/ドメイン - APIサーバー: Pro版でなければ空欄
- Key: 先ほど取得した公開鍵
これでセルフホストサーバーへの接続が完了したので、あとは画質やらコーデックやら無人アクセスやらを適宜調整してあげればOKです。
おわり
起動後ログインする前から接続でき、UACもこちらから許可できるので、これとWoLさえ組みあわせられればだいたい外からなんでもできます。