---
title: "Build Your Own TeamViewer with Open-Source and Free RustDesk"
description: "An introduction to using the open-source and free RustDesk with Docker to self-host a relay server, creating a secure and stable remote desktop tool to replace TeamViewer."
canonical_url: "https://blog.markkulab.net/en/post/custom-your-remote-tool-like-team-viewer"
author: "Mark Ku"
author_url: "https://blog.markkulab.net/en/author/mark-ku"
site: "Mark Ku's Tech Notes"
date_published: "2023-08-27 01:01:35 +0800"
category: "Infra"
tags: ["rustdesk", "remote desktop", "teamviewer", "docker", "self-hosted", "infra"]
language: "en"
license: "CC BY 4.0"
license_url: "https://creativecommons.org/licenses/by/4.0/"
attribution: "when reusing or quoting, credit the author and link back to the original"
---

# Build Your Own TeamViewer with Open-Source and Free RustDesk

## Introduction
You've probably all heard of or used the well-known remote desktop tool, TeamViewer. But when it started charging, we began a constant search for free alternatives. I've tried options like AnyDesk and AweSun, but they often suffered from unexplained lag or disconnections. Finally, I found RustDesk—an open-source, free, and easy-to-use remote connection tool that we can self-host with Docker.

## Advantages of RustDesk
* **Efficient and Secure:** RustDesk is written in Rust, a highly efficient and secure programming language.
* **Multi-Platform Support:** It works seamlessly on Windows, Linux, macOS, and even iOS and Android.
* **Simple and Easy to Use:** The user experience is as intuitive as TeamViewer, and it uses NAT traversal to ensure stable connections.
* **Private and Flexible:** RustDesk allows you to host your own relay server, giving you greater control over your privacy.
* **Stable Connections:** RustDesk maintains a stable connection even on unreliable networks.
* **Open and Free:** You can use RustDesk completely for free, and its open-source code allows you to inspect or modify it at any time.
Come and experience your very own RustDesk remote desktop tool!

## Prerequisites
* An Ubuntu server to install the RustDesk Server on.
* A dedicated IP address configured for your Ubuntu server.
* [Docker installed](https://docs.docker.com/engine/install/ubuntu/) on the Ubuntu server.

## First, Install the RustDesk Server

### On your Ubuntu server with Docker installed, create a `docker-compose.yaml` file.
```
vim docker-compose.yml
```
###
```
version: '3'

networks:

  rustdesk-net:

    external: false

services:

  hbbs:

    container_name: hbbs

    ports:

      - 21115:21115

      - 21116:21116

      - 21116:21116/udp

      - 21118:21118

    image: rustdesk/rustdesk-server:latest

    # yourIP 換成你的外部網路 IP 

    command: hbbs -r {yourIP}:21117

    volumes:

      - ./data:/root

    networks:

      - rustdesk-net

    depends_on:

      - hbbr

    restart: unless-stopped



  hbbr:

    container_name: hbbr

    ports:

      - 21117:21117

      - 21119:21119

    image: rustdesk/rustdesk-server:latest

    command: hbbr

    volumes:

      - ./data:/root

    networks:

      - rustdesk-net

    restart: unless-stopped

```
### Start the Service

```
sudo docker compose up -d

```
### Disable the Firewall
```
sudo ufw allow 21115:21119/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 21116/udp
sudo ufw enable
```

### Test (PowerShell)

```
test-netconnection domain.com -p 21115
```

```
docker logs containerID
```

## Configure the Client
### First, [download and install the RustDesk client](https://github.com/rustdesk/rustdesk/releases/tag/1.2.2).
### Next, let's set a permanent password for this client. Go to Settings > Unlock Security Settings > Set permanent password.
![RustDesk security settings with permanent password option highlighted](https://blog.markkulab.net/content/markku/posts/custom-your-remote-tool-like-team-viewer/images/1.png)
### Then, configure it to use the RustDesk Server you set up earlier. Unlock Network Settings > Relay Server > {YourPublicIP}:21116

P.S. The latest versions now require you to [enter a key](https://www.google.com/search?q=hbbs+key+%E7%9B%AE%E9%8C%84&rlz=1C1ONGR_zh-TWTW1121TW1121&oq=hbbs+key+%E7%9B%AE%E9%8C%84&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIHCAEQIRigATIHCAIQIRigATIHCAMQIRigAdIBCDM5NDBqMGoxqAIAsAIA&sourceid=chrome&ie=UTF-8), so you'll need to enter the `hbbs` container to find out what the key is.
![RustDesk network settings showing relay server IP and key](https://blog.markkulab.net/content/markku/posts/custom-your-remote-tool-like-team-viewer/images/2.png)
### Check the status bar at the bottom. If it shows 'Ready', the connection is successful.
![RustDesk application showing Ready status and remote desktop interface](https://blog.markkulab.net/content/markku/posts/custom-your-remote-tool-like-team-viewer/images/3.png)
### Connection Screen
![RustDesk password prompt for remote desktop connection](https://blog.markkulab.net/content/markku/posts/custom-your-remote-tool-like-team-viewer/images/4.png)
### In Use - Desktop Version
![Desktop screenshot with futuristic gun wallpaper and application icons](https://blog.markkulab.net/content/markku/posts/custom-your-remote-tool-like-team-viewer/images/5.png)
### In Use - Mobile Version
![Windows desktop with RustDesk icon and remote access controls](https://blog.markkulab.net/content/markku/posts/custom-your-remote-tool-like-team-viewer/images/6.png)

### [Enable/Disable Wayland on Ubuntu 20.04 Desktop](https://blog.csdn.net/qq_35097289/article/details/131806855)

---

## About this article and its author

Originally published on [Mark Ku's Tech Notes](https://blog.markkulab.net/en/post/custom-your-remote-tool-like-team-viewer)

License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — when reusing or quoting, credit the author and link back to the original

### About the author

**[Mark Ku](https://blog.markkulab.net/en/author/mark-ku)** — Software Solution Provider

- 10+ years senior software engineer, now an AI Builder
- Focused on large-platform architecture — North-American e-commerce, AI SaaS subscription billing
- Combining AI Agents and automation to build evolvable product foundations

### Free tools built by the author

All of these are free to use:

- [Free PDF Sign Tool](https://blog.markkulab.net/en/tools/pdf-sign): Online PDF sign tool — draw, type, or upload a signature, then drag, resize, and download. Everything runs in your browser; nothing is uploaded.
- [VS Code Refactory](https://blog.markkulab.net/en/tools/refactory): Refactory is a VS Code refactoring extension: 34 actions plus a 37-rule code-smell inspection layer with a Code Health dashboard, across 18 languages, backed by 534 tests. It learns your repo's conventions: where interfaces live, where DI is registered, whether 'use client' belongs. It ranks files by git churn × complexity so you know what to fix first, and hands any smell to the Claude Code already on your machine. Free to use, and your source never leaves your computer.
- [DB-Kit Database Manager](https://blog.markkulab.net/en/tools/db-kit): DB-Kit is a lightweight, cross-platform database manager built with Tauri + Rust + React. Manage MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, SQLite, MongoDB, Redis, Kafka, Elasticsearch and RabbitMQ from one consistent interface: passwords encrypted in the OS keychain, SSH tunnels, full CRUD, a visual query builder, stacked multi-statement result sets, cross-connection data transfer and compare/sync, Excel / CSV import & export, visualized execution plans, ER diagrams, scheduled backups, SQL stress testing with p50–p99 latency percentiles, a 15-rule SQL review engine, Kafka message browsing with monitoring & alerts, a bilingual UI (Traditional Chinese / English), a built-in AI assistant (natural-language SQL, AI review and tuning advice) and the dbk CLI. Free and open source (MIT), with installers for Windows, macOS and Linux.
- [VS Code Super Mermaid](https://blog.markkulab.net/en/tools/super-mermaid): Super Mermaid is a VS Code extension for beautiful Mermaid diagrams out of the box: auto-colored live preview, mouse pan & zoom, high-res PNG / SVG export, 21 templates and multiple themes. Free and open source (MIT).
- [React Super Mermaid](https://blog.markkulab.net/en/tools/react-super-mermaid): react-super-mermaid is an open-source React component library: render beautiful Mermaid diagrams with a single <MermaidViewer>, with built-in colorful / sketch themes, pan & zoom, in-diagram search, and high-res SVG / PNG export. Lightweight, SSR-safe, fully typed. Free and open source (MIT).
- [Jira / Confluence Super Mermaid](https://blog.markkulab.net/en/tools/jira-super-mermaid): An Atlassian Forge app: write Mermaid syntax directly inside a Jira issue or a Confluence page and get flowcharts, sequence diagrams, state machines and Gantt charts. 11 diagram types, SVG / PNG export, light and dark themes, full CJK support. Runs on Atlassian: your diagrams live in your own site and the app calls no third-party service. Free, coming soon to the Atlassian Marketplace.
- [Mermaid Live Preview](https://blog.markkulab.net/en/tools/mermaid-preview): Write Mermaid in your browser, see it render instantly, and share the whole diagram as a single link. No sign-up, nothing uploaded to a server, and mermaid.live share links work as-is.
- [React Intl Phone Number](https://blog.markkulab.net/en/tools/react-intl-phone-number): react-intl-phone-number is an open-source React component: framework-agnostic and antd-free, with E.164 in/out, a searchable flag / country-code dropdown, configurable validation levels (strict / mobile-strict / loose), themeable CSS, and i18n — phone logic powered by google-libphonenumber. Lightweight and fully typed. Free and open source (MIT).
- [Uptime Kuma Cluster](https://blog.markkulab.net/en/tools/uptime-kuma-cluster): Turn single-node Uptime Kuma into a highly available cluster: OpenResty + Lua smart load balancing, shared MariaDB state, health checks and automatic failover, plus cluster-management REST APIs. One Docker Compose command to start. Free and open source (MIT).
- [Special Education](https://blog.markkulab.net/en/education): Learning materials crafted for special education students

### Daily podcasts

- [Mark's Tech Insights — Daily AI News](https://blog.markkulab.net/en/category/tech-news): Daily curated AI and tech trends. Catch the latest developments via audio summaries — covering AI applications, software architecture, DevOps, and engineering practice. — RSS: https://blog.markkulab.net/feed.xml
- [AI股市蝦聊](https://blog.markkulab.net/en/category/ai-stock-chat): Every trading day, an AI-analyzed take on the Taiwan stock market, delivered as a two-host conversation covering the session and the next-day outlook. — RSS: https://blog.markkulab.net/ai-stock-chat/feed.xml
- [開源好物週報](https://blog.markkulab.net/en/category/open-source-weekly): A weekly two-host pick of free open-source tools surfaced from real Hacker News, GitHub, and Reddit buzz — what pain they solve and the fastest way to get started. — RSS: https://blog.markkulab.net/open-source-weekly/feed.xml

### Newsletter

[Subscribe to the newsletter](https://blog.markkulab.net/en/subscribe) — Be the first to know about new posts. No spam, unsubscribe anytime.
