diff --git a/rustdesk/readme.md b/rustdesk/readme.md
index b35b50f..06957a6 100644
--- a/rustdesk/readme.md
+++ b/rustdesk/readme.md
@@ -6,31 +6,27 @@
# Purpose & Overview
-Remote desktop application.
+Remote desktop access.
* [Official site](https://rustdesk.com/)
* [Github](https://github.com/rustdesk/rustdesk)
-* [DockerHub](https://hub.docker.com/r/rustdesk/rustdesk-server)
-
-Rustdesk is a young opensource replacement for TeamViewer or Anydesk.
-The major aspects is that it does NAT punching,
-and lets you host all the infrastructure for it to function.
+* [DockerHub for S6](https://hub.docker.com/r/rustdesk/rustdesk-server-s6)
+Rustdesk is a new opensource replacement for TeamViewer or Anydesk.
+The major aspects are that it does NAT punching,
+and lets you host all the infrastructure for it to function.
Written in rust(gasp), with Dart and Flutter framework for client side.
-The architecture is relatively simple.
-
-* run server reachable online
-* install clients on PCs you want to connect from/to
-
-Server sits online and clients register with it when installed/run.
-Thanks to keeping communication with the server open, they are able to punch
-a hole in NAT and so a connection can be initialized from the outside
-without the need for opening of ports.
+The idea is:
+* run a rustdesk server reachable online
+* install clients on machines you want to connect from / to
+* the clients application keeps a regular heartbeat communication
+ with the server, this punches hole in the NAT and so allows connection
+ initialized from the outside without doing port forwarding
+
---
-

# Files and directory structure
@@ -40,12 +36,12 @@ without the need for opening of ports.
└── ~/
└── docker/
└── rustdesk/
- ├── data/
- ├── .env
- └── docker-compose.yml
+ ├── 🗁 rustdesk_data/
+ ├── 🗋 .env
+ └── 🗋 docker-compose.yml
```
-* `data/` - persistent data, contains sqlite database and the api key
+* `rustdesk_data/` - persistent data, contains sqlite database and the keys
* `.env` - a file containing environment variables for docker compose
* `docker-compose.yml` - a docker compose file, telling docker how to run the containers
@@ -55,43 +51,51 @@ The directory is created by docker compose on the first run.
# docker-compose
Using an edited version of [S6-overlay based compose.](https://github.com/rustdesk/rustdesk-server#s6-overlay-based-images)
-It's a simpler, single container approach, without the noise of hbbs/hbbr.
+It's a simpler, single container approach. The complexity of hbbs/hbbr hidden.
It also has health check implemented.
-There is no network section since its fine to run this completely isolated.
+There is no network section since no working http traffic yet. So just mapped
+ports on to docker host do their thing.
`docker-compose.yml`
```yml
services:
rustdesk:
- image: rustdesk/rustdesk-server-s6:latest
+ image: rustdesk/rustdesk-server-s6:1.1.7-1
container_name: rustdesk
hostname: rustdesk
restart: unless-stopped
env_file: .env
ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
+ - "21116:21116"
+ - "21115:21115"
+ - "21116:21116/udp"
+ - "21117:21117"
+ - "21118:21118"
+ - "21119:21119"
volumes:
- - ./data:/data
+ - ./rustdesk_data:/data
```
`.env`
```bash
# GENERAL
-MY_DOMAIN=example.com
-DOCKER_MY_NETWORK=caddy_net
TZ=Europe/Bratislava
# RUSTDESK
RELAY=rust.example.com:21117
-ENCRYPTED_ONLY=0
+ENCRYPTED_ONLY=1
+# KEY_PRIV=
+# KEY_PUB=
```
+In the `.env` file encryption only is enabled, so that only clients that have
+correct public key will be allowed access to the rustdesk server.
+The keys are generated on the first run of the compose and can be found in
+`rustdesk_data` directory. Once generated they should be added to the `.env` file
+for easier migration. The public key will need to be distributed with
+the clients apps install.
+
# Port forwarding
as can be seen in the compose
@@ -111,53 +115,82 @@ and 21118 and 21119 are used to support web clients.

-# The usage on clients
-
+# The installation on clients
* download and install the client apps from [the official site](https://rustdesk.com/)
-* three dots near ID > ID/Relay Server > ID Server: rust.example.com > OK
-* the green dot at the bottom should stay green saying "ready"
+* three dots near ID > ID/Relay Server
+ * ID Server: rust.example.com
+ * Key: *\*
+* the green dot at the bottom should be green saying "ready"
* done
-* in the docker server logs you should see machines public IP and ID code it was given
-# Encrypted use
+
-
-
-For encrypted communication and to prevent undesirables access to the server
-
-* the encryption public key is on the docker host:
- `~/docker/rustdesk/data/id_ed25519.pub`
-* you can manually add it to any client application
- three dots near ID > ID/Relay Server > Key: 3AVva64bn1ea2vsDuOuQH3i8+2M=
-* to only allow clients with the key on server:
- in the env_file set `ENCRYPTED_ONLY=1` and down/up the compose.
-
-[On windows](https://rustdesk.com/docs/en/self-host/install/#put-config-in-rustdeskexe-file-name-windows-only)
-one can deploy client with these settings pre-set by renaming
-the installation file to: `rustdesk-host=,key=.exe`
+**On windows** one [can](https://rustdesk.com/docs/en/self-host/install/#put-config-in-rustdeskexe-file-name-windows-only)
+deploy client with **pre-set settings** by renaming the installation file to:
+`rustdesk-host=,key=.exe`
example: `rustdesk-host=rust.example.com,key=3AVva64bn1ea2vsDuOuQH3i8+2M=.exe`
If by chance the public key contains symbols not usable in windows filenames,
down the container, delete the files `id_ed25519` and `id_ed25519.pub`,
-up the container
+up the container and try with the new keys.
+
+# Extra info
+
+* You really really **really want to be using domain and not your public IP**
+ when instaling clients and setting ID server. That domain can be changed
+ to different IP any time you want. IP not.
+* You wont get much response on github if questions is around selfhosting.
+ [#763](https://github.com/rustdesk/rustdesk/discussions/763),
+ maybe trying [their discord.](https://discord.com/invite/nDceKgxnkV)
+* `tcpdump -n udp port 21116` to **see heartbeat** udp traffic, seems machines
+ report-in every \~13 seconds.
+* on **windows** machine a **service** named `rustdesk` is enabled.
+ Disable it if want machine accessible only on demand,
+ when someone first runs rustdesk.
+ In powershell - `Set-Service rustdesk -StartupType Disabled`
# Trouble shooting
-From what I read, most client side issues come from two differently set rustdesk
-client applications running on the same machine.
+#### If just one machine is having issues.
-Uninstall/remove all, plus delete:
+uninstall, plus delete:
* `C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk`
* `%AppData%\RustDesk`
-restart and do fresh client install
+Restart. Reinstall.
+Do not use the installer you used berfore, **download** from the site latest.
-# Update
+---
-Manual image update:
+#### Error - Failed to connect to relay server
+
+* I had wrongly set env variable `RELAY`
+* generally issue might be with port 21117 if green dot is green
+
+---
+
+#### Investigate port forwarding
+
+Install netcat and tcpdump on the docker host.
+
+* docker compose down rustdesk container so that ports are free to use
+* start small netcat server listening on whichever port we test
+ `sudo nc -u -vv -l -p 21116`
+* on a machine somewhere else in the world, not on the same network, try
+ `nc -u 21116`
+
+If you start writing something, it should appear on the other machine, confirming
+that port forwarding works.
+The -u flag for netcat command is for udp port testing, without it its for tcp.
+
+Also useful command can be `tcpdump -n udp port 21116`
+When port forwarding works, one should see heartbeat chatter,
+as machines with installed rustdesk are announcing themselves every \~13 seconds.
+
+# Manual image update:
- `docker-compose pull`
- `docker-compose up -d`