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 + --- - ![interface-pic](https://i.imgur.com/ekA7Hms.png) # 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. ![interface-pic](https://i.imgur.com/CK6pRyq.png) -# 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 +![settings-pic](https://i.imgur.com/lX6egMH.png) -![settings-pic](https://i.imgur.com/6mKkSuh.png) - -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`