Saturday, December 30, 2023

Goodbye Teamviewer, Hello RustDesk!

Sometime in the last month TeamViewer has dropped their free for personal use policy, or changed the algorithm it uses to detect commercial use.  It now requires a minimum of $298.80/year (with auto-renewal) for a single license.  I've been using TeamViewer to help friends and relatives with computer problems for many years, so this started me on a bit of exploration of the alternatives.  The TeamViewer Reddit threads about this indicate that many others are frustrated with this change as well, and like me, were surprised at the change made without prior notice.  After having similar problems with many major TeamViewer releases, and not liking the new interface, I've decided it's time to look for something better.
Former TeamViewer promise to keep it free for personal use.

After looking at several alternatives, one stood out from the rest as the basic portions are free and open source!  Giving it a quick try I found it even easier than TeamViewer to use, as the person I'm trying to help can just accept the connection without having to tell me the password several times, or use words like bravo, or Victor to distinguish similar sounding letters like b, d, g, p, t and v.

This alternative is RustDesk, which you can download here.  You'll find the most common system install links just under the big colorful scam warning telling you not to install this software on the advice of someone you don't know well and trust.

As switching remote desktop tools can be a bit confusing, I'd like to share what I've learned in my initial use of the RustDesk client, and the community level RustDesk Server.  I will also be sharing my experience with RustDesk at the January 18, 2024 Champaign-Urbana Computer Users Group meeting.

While the terms client and server are used in different ways in different contexts (like with Virtual Network Computing: VNC), RustDesk uses them as most end-users would think of them.  A client, like a web browser is something you run on your computer that accesses servers in the cloud (e.g. in a data center) and the default servers managed by RustDesk are in several data centers world wide.

Here is a screenshot of the Windows RustDesk client version 1.2.3 released 2023-10-13 with the free (noted in green or orange) and paid (noted in red) features annotated:
Everything necessary to help someone who can install the client for themselves is available with just a client installed at each end.  Connecting is even easier than TeamViewer, as the person being helped can just accept the connection after sharing their ID, rather than reading the password to the helper.

If you want to access your own systems remotely, you'll need a permanent password.  That can be accomplished by running your own server, entering the hostname (e.g. rustdesk.example.com) and the server key in the Network settings, and then the password in Security settings.
When I want to help someone who doesn't need a stored password on my server, I just erase my server information before that session, and then paste it back in afterward to access my own systems.  I have found the free ArsClip clipboard manager handy for this.



Due to the 4K high resolution display I normally use, I prefer to change the "Default view style" from "Scale original" to "Scale adaptive" in the Display settings.
After starting with the Windows client, it took me a little time to find the settings in the Linux client as I'd gotten used to the hamburger menu in the upper right.  This client does not have a consistent user interface, and only offers settings via the three dots near the client ID.
I don't understand this, but the above screen shot was taken on my Windows system viewing my Linux client on the rpi with the RustDesk server being used, but the status indicated it was not connected to the server on the same system as the client!  Is this some weird issue with the way my old router does NAT?

I have several systems at home that I want to monitor when I'm away, so I've installed the free server on my rpi (Raspberry Pi 4 Model B) to connect via a permanent password.  I also help several people who have lost their vision late in life, and don't know how to use a screen reader.  For them it is easiest if I can take control of their computer when they call me for help.

If this does not prove reliable enough, I may need to consider spending $4 or $5 a month for a virtual private server (VPS) to host the service in a real data center with a static IP address.

Setting up a server for an average user is not a trivial task as it requires an understanding of many details like DNS, security, firewalls, port forwarding through NAT, etc.  I made quite a few mistakes along the way, and will share a few to perhaps fill in some of the gaps in the RustDesk documentation.

I installed docker on my system thinking it was required, and then decided I didn't really need it.

The next thing I did was download and install the client and then followed these server install instructions on my rpi.   This involved downloading two files with curl, installing the client with apt install, and running the 2nd to configure the server.  After several tries where curl just gave me a zero byte length file for the client, I just downloaded it with Firefox, and that worked fine.  Later I was told to add the L option to follow local location redirects, which solves that problem.

The 2nd one was not a problem.  These are the install commands/files that were current at the time for my Raspberry Pi 4, with -O updated to -OL.
curl -OL https://github.com/rustdesk/rustdesk/releases/download/1.2.3/rustdesk-1.2.3-armv7-sciter.deb
sudo apt install -f ./rustdesk-1.2.3-armv7-sciter.deb
curl -O https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh
chmod +x install.sh
sudo ./install.sh
Except for having to download rustdesk-1.2.3-armv7-sciter.deb with Firefox instead of curl, this worked, and gave me my server key to use with my subdomain name.  Then all I had to do was enter the ports to forward in my router.

The first problem I had was that I chose to use one of my own domains to use for a server name.  I've been retired from IT work for almost two decades, so I haven't had to think about DNS details in a long time.  Most of the time software like cPanel or Let's Encrypt takes care of the niggly details for me.  I use an inexpensive hosting service (which I highly recommend) that like many, with rising license fees has switched from cPanel to DirectAdmin.  The one thing cPanel really does better is dynamic DNS updates of A records for a subdomain.  I tried in vain to get the DirectAdmin scripts for this I could find online to work, but even with AI code generation to help, I couldn't.  I was afraid to run the install script a 2nd time, as I don't know if it'll only work as a fresh install.

For days I was stumped at how to solve this problem until I read this in a help item at freedns.afraid.org which said: "If you ... have multiple hostnames to update, you can leave 1 of them an A record, and make the rest of them CNAME's so you do not have to issue multiple updates each time."  I had set up my RustDesk server to use my own domain name rather than the one FREE DNS gives me.  I had totally forgotten that I didn't need to dynamically update it with DirectAdmin, as I could just use a CNAME DNS record that points to my free DDNS name!  The moral of the story is to get your DNS working for the server name before installing the server.

I could not find any detailed server administration documentation for the free server, except for a user provided set of uninstall commands.

As this diagram from a ham radio blog about configuring the Windows RustDesk server points out, it avoids LAN/WAN route confusion if you can put your server on a VPS rather than a home Raspberry Pi 4 as I did.
I still haven't found the right settings in my old ASUS router to make the NAT performance better on my home network.  The article suggests using a DNS feature of the router, but mine doesn't have that.  I can probably use a Static Route for my LAN instead, but I've not tried that yet as that involves more details to look up!  I also wonder if it'd help to put my private IP address in the rpi hosts file?

Even though connections to my rpi running both the server and client often require many attempts, this setup seems to work pretty well for all other hosts I've tried.

References:
rustdesk/rustdesk · Discussions · GitHub

Alternative remote help software includes:
DWService - web-based remote access, remote administration, remote support
                    See also: Computer Remote Control using DWService
Chrome Remote Desktop (Does not help you track your remote passwords easily.)

AnyDesk (3 managed devices at the free level)