๐Ÿ–ฅ๏ธ How to Set Up a VNC Server with x11vnc โ€” From LAN to Remote Access

Ever wanted to control your Linux desktop from another PC, laptop, or even your Android phone?

In this tutorial, weโ€™ll build a complete remote-desktop setup using:

  • :penguin: Linux
  • :desktop_computer: x11vnc
  • :mobile_phone: AVNC on Android
  • :globe_with_meridians: Local network access
  • :fire: UFW firewall
  • :globe_showing_europe_africa: Internet access
  • :locked_with_key: SSH tunneling
  • :construction: CGNAT troubleshooting
  • Patience

The goal is to start with a simple VNC connection inside your home network and then build toward a secure remote-access setup.

Important: VNC works very well on a trusted LAN, but directly exposing port 5900 to the public Internet is not the approach Iโ€™d recommend. Weโ€™ll cover port forwarding so you understand how it works, but the preferred remote setup in this guide is VNC over SSH or a VPN.


:puzzle_piece: What Are We Building?

Weโ€™ll start with this:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              HOME NETWORK                โ”‚
โ”‚                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ Linux PC     โ”‚       โ”‚ Android    โ”‚  โ”‚
โ”‚  โ”‚              โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”‚ Phone      โ”‚  โ”‚
โ”‚  โ”‚ x11vnc :5900 โ”‚  VNC  โ”‚ AVNC       โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Then weโ€™ll understand how Internet access works:

             INTERNET
                 โ”‚
                 โ–ผ
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚   ROUTER    โ”‚
          โ”‚ NAT / FW    โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
                 โ–ผ
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚  Linux PC   โ”‚
          โ”‚             โ”‚
          โ”‚ x11vnc :5900โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

And finally, the safer remote design:

             INTERNET
                 โ”‚
                 โ”‚ encrypted SSH
                 โ–ผ
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚   ROUTER    โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
                 โ–ผ
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚  Linux PC   โ”‚
          โ”‚             โ”‚
          โ”‚ SSH         โ”‚
          โ”‚     โ”‚       โ”‚
          โ”‚ x11vnc :5900โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ–ฒ
                 โ”‚
              AVNC

:toolbox: Requirements

Linux PC

Youโ€™ll need:

  • A Linux desktop running X11
  • x11vnc
  • A user account logged into the graphical desktop
  • Network connectivity

Client

You can use:

  • AVNC on Android
  • TigerVNC Viewer
  • Remmina
  • RealVNC Viewer
  • Other compatible VNC clients

For this tutorial, Iโ€™ll use AVNC on Android.

AVNC is an Android VNC client and includes features such as SSH tunneling, TLS support, clipboard synchronization, view-only mode, and automatic server discovery.


:one: Check Whether Youโ€™re Using X11

This tutorial uses x11vnc, which shares an existing X11 display.

Run:

echo $XDG_SESSION_TYPE

If you get:

x11

youโ€™re good.

If you get:

wayland

x11vnc may not be the correct solution for your desktop session.

Check your display:

echo $DISPLAY

A common result is:

:0

x11vnc is specifically designed to connect to real X11 displays.


:two: Install x11vnc

Debian / Ubuntu / Linux Mint / Ubuntu-based distributions

sudo apt update
sudo apt install x11vnc

Fedora

sudo dnf install x11vnc

Arch Linux

sudo pacman -S x11vnc

Verify:

x11vnc -version

:three: Create a VNC Password

Donโ€™t leave your VNC server unauthenticated.

Create the VNC directory:

mkdir -p ~/.vnc

Then create a password:

x11vnc -storepasswd ~/.vnc/passwd

Youโ€™ll be asked for a VNC password.

You should now have:

~/.vnc/passwd

The x11vnc documentation specifically recommends using a VNC password through options such as -rfbauth or -passwdfile.


:four: Find Your Linux PCโ€™s Local IP

Run:

hostname -I

For example:

192.168.1.100

Your address will probably be different.

You can also inspect the interfaces with:

ip addr

For the rest of this tutorial, Iโ€™ll use:

192.168.1.100

Replace that with your actual address.


:five: Start x11vnc

Now start the server:

x11vnc \
  -display :0 \
  -rfbauth ~/.vnc/passwd \
  -forever \
  -shared

The important options are:

-display :0

Share the X11 display :0.

-rfbauth ~/.vnc/passwd

Use the VNC password.

-forever

Keep listening after a client disconnects.

-shared

Allow multiple VNC clients.

When x11vnc starts listening, it normally reports a port such as:

PORT=5900

For display :0, TCP 5900 is the usual VNC port.


:six: Connect Using AVNC

Open AVNC on your Android phone.

Create a new server.

Use:

Host:
192.168.1.100

Port:
5900

Then enter the VNC password.

Your phone and Linux PC must currently be reachable from the same LAN.

For example:

Android
192.168.1.50
      โ”‚
      โ”‚ Wi-Fi
      โ–ผ
   Router
      โ”‚
      โ”‚ Ethernet/Wi-Fi
      โ–ผ
Linux PC
192.168.1.100
      โ”‚
      โ–ผ
x11vnc :5900

If everything works, you should now see your Linux desktop on your phone.

:tada: LAN VNC is working.


:camera_with_flash: What You Should See in AVNC

Your AVNC connection should look conceptually like:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚       VNC Connection    โ”‚
โ”‚                         โ”‚
โ”‚ Host: 192.168.1.100     โ”‚
โ”‚ Port: 5900              โ”‚
โ”‚                         โ”‚
โ”‚ Password: ********      โ”‚
โ”‚                         โ”‚
โ”‚          CONNECT        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

The exact AVNC interface may differ between versions.


:seven: Configure the Firewall

If youโ€™re using UFW:

sudo ufw status

If UFW is enabled, allow VNC only from your local network.

For example, if your LAN is:

192.168.1.0/24

use:

sudo ufw allow \
  from 192.168.1.0/24 \
  to any port 5900 \
  proto tcp

Then check:

sudo ufw status

You should see a rule allowing TCP 5900 from your LAN.

Why not simply do this?

sudo ufw allow 5900/tcp

That allows connections to port 5900 from anywhere that can reach the machine.

For a normal home LAN setup, restricting it to your local subnet is a better default.


:eight: Test the VNC Port

From another Linux machine on the same network:

nc -vz 192.168.1.100 5900

A successful result should indicate that TCP port 5900 is reachable.

You can also check the server itself:

ss -lntp | grep 5900

If x11vnc is listening, you should see TCP port 5900.


:nine: Give Your Linux PC a Stable LAN Address

If your Linux PC changes from:

192.168.1.100

to:

192.168.1.127

your AVNC connection will stop working.

A simple solution is to create a DHCP reservation in your router.

For example:

Linux PC MAC address
        โ†“
192.168.1.100

Your router will then keep assigning that address to the machine.


:globe_showing_europe_africa: 1โ€‹:zero: What Changes When You Leave Your Home?

Inside your LAN, your phone can connect directly to:

192.168.1.100:5900

But 192.168.x.x addresses are private addresses.

Your phone on mobile data cannot normally connect directly to:

192.168.1.100

You need a way through your home router.

Thatโ€™s where NAT and port forwarding come in.


:one::one: Port Forwarding Explained

Suppose your Linux PC is:

192.168.1.100

You could configure your router like this:

External TCP port: 5900

Internal IP:
192.168.1.100

Internal TCP port:
5900

Conceptually:

                INTERNET
                    โ”‚
                    โ”‚ TCP 5900
                    โ–ผ
             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ”‚   ROUTER    โ”‚
             โ”‚             โ”‚
             โ”‚ Port 5900   โ”‚
             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚
                    โ”‚ NAT
                    โ–ผ
             192.168.1.100
                    โ”‚
                    โ–ผ
               x11vnc :5900

The exact interface depends on your router.

You may see names such as:

  • Port Forwarding
  • NAT
  • Virtual Server
  • Port Mapping
  • NAT Rules

:warning: 1โ€‹:two: Donโ€™t Rush to Expose Port 5900

This is the most important part of the tutorial.

Port forwarding makes a service reachable from the Internet.

That means:

Before:

Internet
   X
   โ”‚
   โ”‚ blocked
   โ–ผ
x11vnc

After:

Internet
   โ”‚
   โ–ผ
Router
   โ”‚
   โ–ผ
x11vnc :5900

Now your VNC service is exposed to the public Internet.

A VNC password is useful, but a password alone should not be your entire Internet security strategy.

For remote access, I recommend using:

SSH tunneling or a VPN instead of directly exposing VNC.


:locked_with_key: 1โ€‹:three: Install an SSH Server

On Debian/Ubuntu:

sudo apt install openssh-server

Check it:

sudo systemctl status ssh

Test SSH from another machine on your LAN:

ssh [email protected]

Replace username with your Linux username.

Donโ€™t move to Internet access until SSH works locally.


:locked: 1โ€‹:four: Restrict x11vnc to Localhost

For SSH tunneling, you can make x11vnc listen only on localhost:

x11vnc \
  -localhost \
  -display :0 \
  -rfbauth ~/.vnc/passwd \
  -forever

Now x11vnc isnโ€™t intended to accept direct connections from other network interfaces.

The SSH connection will carry the VNC traffic.

This is also the SSH-tunnel approach documented by upstream x11vnc.


:metro: 1โ€‹:five: Create the SSH Tunnel

From the remote device:

ssh -L 5900:localhost:5900 username@YOUR_PUBLIC_IP

For example:

ssh -L 5900:localhost:5900 [email protected]

Keep this SSH session open.

The tunnel looks like:

Remote device
      โ”‚
      โ”‚ localhost:5900
      โ–ผ
    SSH
      โ”‚
      โ”‚ encrypted tunnel
      โ–ผ
Linux PC
      โ”‚
      โ–ผ
localhost:5900
      โ”‚
      โ–ผ
   x11vnc

The x11vnc documentation itself gives an SSH tunneling pattern using:

ssh -t -L 5900:localhost:5900

and recommends tunneling VNC through an encrypted channel such as SSH.


:mobile_phone: 1โ€‹:six: Connect AVNC Through the Tunnel

Now configure AVNC to connect to:

Host:
127.0.0.1

Port:
5900

Not:

YOUR_PUBLIC_IP:5900

The connection is:

AVNC
 โ”‚
 โ”‚ localhost:5900
 โ–ผ
SSH tunnel
 โ”‚
 โ–ผ
Linux PC
 โ”‚
 โ–ผ
x11vnc

AVNC also has a built-in SSH tunnel feature, so you donโ€™t necessarily need a separate SSH application on Android.


:brain: 1โ€‹:seven: The Difference Between the Two Setups

Direct VNC

AVNC
 โ”‚
 โ”‚ Internet
 โ–ผ
Router
 โ”‚
 โ”‚ TCP 5900
 โ–ผ
x11vnc

Simple, but not my preferred Internet configuration.

VNC over SSH

AVNC
 โ”‚
 โ”‚ SSH
 โ–ผ
Router
 โ”‚
 โ–ผ
Linux PC
 โ”‚
 โ”œโ”€โ”€ SSH
 โ”‚
 โ””โ”€โ”€ x11vnc :5900

The VNC connection travels through the encrypted SSH tunnel.


:globe_with_meridians: 1โ€‹:eight: What If Your Public IP Changes?

Residential connections may have dynamic public IP addresses.

For example:

Today:
203.0.113.50

Later:

203.0.113.81

Then you would have to find the new address.

A common solution is Dynamic DNS (DDNS).

Instead of connecting to:

203.0.113.50

you can use a hostname such as:

my-linux-pc.example.net

The DDNS service updates the hostname when your public IP changes.


:construction: 1โ€‹:nine: What If Port Forwarding Doesnโ€™t Work?

Donโ€™t immediately assume you configured the router incorrectly.

Your ISP may use CGNAT.

The architecture can look like:

Internet
   โ”‚
   โ–ผ
ISP CGNAT
   โ”‚
   โ–ผ
Your Router
   โ”‚
   โ–ผ
Linux PC

In this situation, your router may not actually have a publicly reachable IPv4 address.

You can configure:

TCP 22 โ†’ Linux PC

or:

TCP 5900 โ†’ Linux PC

perfectly and still be unable to connect from outside.


:wireless: 2โ€‹:zero: What Can You Use Instead of Port Forwarding?

If youโ€™re behind CGNAT, or simply donโ€™t want to expose services directly, consider:

  • WireGuard
  • Tailscale
  • ZeroTier
  • Another private VPN/overlay network

The architecture becomes:

Phone
  โ”‚
  โ”‚ Private VPN
  โ–ผ
Linux PC
  โ”‚
  โ–ผ
x11vnc

This is often much cleaner than exposing VNC directly.


:test_tube: 2โ€‹:one: Troubleshooting Checklist

x11vnc isnโ€™t starting

Check:

echo $DISPLAY

Try:

x11vnc -display :0

Make sure an X11 desktop session is actually running.


AVNC canโ€™t connect on LAN

Check the IP:

hostname -I

Check the VNC server:

ss -lntp | grep 5900

Check UFW:

sudo ufw status

Check connectivity:

nc -vz 192.168.1.100 5900

It works locally but not remotely

Check:

  1. Router port forwarding
  2. Linux firewall
  3. Correct internal IP
  4. Public IP
  5. ISP CGNAT
  6. Whether the router itself has a public IPv4 address

SSH works but AVNC doesnโ€™t

Check that the tunnel exists:

ss -lntp | grep 5900

Then make AVNC connect to:

127.0.0.1:5900

not the public IP.


:key: 2โ€‹:two: Improve SSH Security

If youโ€™re exposing SSH for remote access, donโ€™t stop at the default configuration.

Consider:

  • SSH keys
  • Disabling password authentication
  • Firewall restrictions
  • Keeping OpenSSH updated
  • Brute-force protection
  • A VPN instead of public SSH when appropriate

For example, SSH keys are preferable to relying solely on a password.

Changing SSH from port 22 to another port can reduce automated scanning noise, but it is not a replacement for real authentication and firewall security.


:high_voltage: 2โ€‹:three: Performance Tips for Old PCs

VNC can work surprisingly well on older hardware, but desktop effects can make remote control slower.

For a lightweight desktop, consider disabling:

  • Transparency
  • Heavy animations
  • Blur effects
  • Large wallpapers
  • Unnecessary compositing effects

You can also experiment with x11vnc options related to performance.

The goal is simple:

Less rendering
      โ†“
Less data
      โ†“
Less bandwidth
      โ†“
Better remote desktop experience

This can be particularly useful when the Linux machine is old or running over a slower network.


:toolbox: 2โ€‹:four: Useful x11vnc Options

Hereโ€™s a small cheat sheet:

Option Purpose
-display :0 Share X11 display :0
-rfbauth ~/.vnc/passwd Use VNC password
-forever Continue after disconnect
-shared Allow multiple clients
-localhost Restrict connections to localhost
-rfbport 5900 Explicitly select VNC port
-auth guess Try to locate X authority

For example:

x11vnc \
  -display :0 \
  -rfbauth ~/.vnc/passwd \
  -forever \
  -shared

The upstream documentation lists these options and describes -display, -rfbport, -localhost, authentication, and other configuration modes.


:rocket: 2โ€‹:five: Make It Start Automatically

Once the manual setup works, you can automate it with a systemd user service.

For example:

~/.config/systemd/user/x11vnc.service

A basic service could look like:

[Unit]
Description=x11vnc server
After=graphical-session.target

[Service]
ExecStart=/usr/bin/x11vnc -display :0 -rfbauth %h/.vnc/passwd -forever -shared
Restart=on-failure

[Install]
WantedBy=default.target

Then:

systemctl --user daemon-reload
systemctl --user enable --now x11vnc.service

However, desktop-session timing and Xauthority permissions vary between distributions and display managers.

Get the manual command working first. Automate second.


:test_tube: 2โ€‹:six: Recommended Testing Order

Donโ€™t configure everything at once.

Test it in this order:

Test 1 โ€” Local machine

x11vnc -display :0

โ†“

Test 2 โ€” LAN

Linux PC โ†โ†’ AVNC

โ†“

Test 3 โ€” Firewall

Confirm UFW allows LAN access.

โ†“

Test 4 โ€” SSH

Remote machine โ†โ†’ SSH โ†โ†’ Linux PC

โ†“

Test 5 โ€” SSH tunnel

Remote VNC client
        โ†“
    SSH tunnel
        โ†“
     x11vnc

โ†“

Test 6 โ€” Internet

Only after everything above works should you configure remote access.

This makes troubleshooting much easier.


:chequered_flag: Final Setup

For a simple home LAN:

                 HOME LAN

       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚                       โ”‚
       โ”‚  Linux PC             โ”‚
       โ”‚  192.168.1.100        โ”‚
       โ”‚                       โ”‚
       โ”‚  x11vnc :5900         โ”‚
       โ”‚       โ–ฒ               โ”‚
       โ”‚       โ”‚               โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
               โ”‚
              VNC
               โ”‚
               โ–ผ
          Android / AVNC

For remote access:

                    INTERNET
                        โ”‚
                        โ”‚ SSH / VPN
                        โ–ผ
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚   ROUTER    โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚
                        โ–ผ
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚   Linux PC  โ”‚
                 โ”‚             โ”‚
                 โ”‚    SSH      โ”‚
                 โ”‚      โ”‚      โ”‚
                 โ”‚ x11vnc :5900โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ–ฒ
                        โ”‚
                       AVNC

:penguin: Conclusion

With x11vnc and AVNC, you can turn a Linux desktop into a simple remote graphical workstation.

The interesting part isnโ€™t really VNC itself.

Itโ€™s understanding how all the pieces fit together:

X11
 โ†“
x11vnc
 โ†“
TCP 5900
 โ†“
LAN
 โ†“
AVNC

And when you need remote access:

X11
 โ†“
x11vnc
 โ†“
SSH / VPN
 โ†“
Internet
 โ†“
AVNC

This can be particularly useful for old computers that arenโ€™t powerful enough to carry around but still make perfectly good home servers or workstations.

Have you used VNC on Linux before?

What do you prefer for remote access:

  • x11vnc
  • TigerVNC
  • RustDesk
  • SSH + VNC
  • WireGuard/Tailscale
  • Something else?

Share your setup and letโ€™s compare them. :penguin:

Okay so I read this whole thing top to bottom and I want to say up front, the testing order at the end is the best part. Test local, then your home network, then the firewall, then remote. That is the exact thing I wish somebody had beaten into my skull two years ago when I was flailing around at 1am wondering why nothing worked.

But I want to push back on the shape of the guide. I think it teaches the 2012 version of remote access, and I want to show you why using my own setup. I am going to keep this readable for folks who are not deep in this stuff yet, because I was that person very recently.

Quick disclaimer. I am a student. Mid degree, lab in my closet, and I break it about once a week. Everything below is stuff I measured on my own gear. Not stuff I read somewhere. If I got something wrong, come at me, that is why I am posting.

Also I am borrowing the diagram format because it is honestly the best part of the writeup.

First, what port forwarding actually is

For anybody new here. Your router is the gate at the end of the driveway. Anything you go out and get comes back through just fine. But nobody coming down the road gets past that gate unless you specifically tell it to let them in.

Port forwarding is you telling the gate โ€œif somebody pulls up asking for door number 5900, let them through and point them at the computer in the office.โ€ That is how this guide makes your desktop reachable from off the property.

Works great when your place has an address people can actually drive to. Mine does not.

CGNAT is not a footnote. CGNAT is my internet.

The guide puts CGNAT at step 19, tucked under โ€œhmm, what if port forwarding does not work.โ€ I want to move it way up front, because for a lot of us it is not a maybe. It is where we start.

Here is my situation. I live on a county road in rural Texas. Nobody ran fiber out here and nobody is going to. So my internet comes over 5G, same as a whole lot of people out in the country now.

What that means in plain terms is my provider never gave my house its own address on the internet. Think of every customer on the tower sharing one mailbox out at the highway. I can drop letters in that box all day long and they go where they are supposed to go. But if you wanted to mail something back to ME specifically, there is nothing to write on the envelope. There is no box number. The carrier would have no idea which of us it was for, so it just does not happen.

                THE INTERNET
                     |
                     v
        +----------------------------+
        |   ONE SHARED MAILBOX       |   the real address on the
        |   OUT AT THE HIGHWAY       |   internet lives up HERE
        |   (me and everybody else   |   and it is not mine
        |    on this tower)          |
        +-------------+--------------+
                      |
                      v
        +----------------------------+
        |      MY HOME GATEWAY       |
        |                            |
        |  [ Port Forwarding ] <---- |   this menu exists
        |     and it does nothing    |   it is decoration
        +-------------+--------------+
                      |
                      v
                 my home network


   somebody tries to reach my place from the internet:

        internet --X   it never even gets to my gate

So I cannot port forward. Not โ€œI have not figured it out.โ€ I physically cannot. The setting sits right there in the menu and it is a button that goes nowhere.

And I am not some weird edge case. Rural 5G, fixed wireless, satellite, a pile of fiber resellers, giant chunks of the world outside the US. All built this way. So when a guide says โ€œforward the port, and if that fails here is a backup plan,โ€ a big chunk of the readers are about to lose two hours in a router menu that was never going to work for them.

Step 18 has the same problem. That section solves โ€œmy address on the internet keeps changing.โ€ I do not have one at all. It is fixing a problem I am not allowed to have.

โ€œA password alone should not be your whole strategyโ€ is way too polite

The guide says it. Says it nicely. Let me put real numbers on it, because I have them.

I run a couple of servers at a cloud provider that DO have their own address on the internet, with a remote login door open on purpose. I wanted to watch what happens to a machine that just sits out there in the open.

   MY MACHINE OUT ON THE INTERNET     MY MACHINES ON THE PRIVATE NET
   ------------------------------     ------------------------------

        the whole internet            the outside world cannot
              |                       even see these exist
              | 95 to 99 break in            |
              | attempts EVERY DAY           |
              v                              v
        the login door                 a guest list check
              |                              |
              v                              v
        blocked, over and over         only my own devices get in
        automatically, all day


   that box is IDLE. nobody knows it exists. I never told a soul.
   it got found in HOURS and it has never stopped getting hit since.

Ninety five to ninety nine a day. On a boring machine nobody has ever heard of. Forever. That is just what happens the second something has an address on the internet. Automated scanners find it and they do not stop.

Now think about what it means to put a remote DESKTOP door out there instead of a text login.

   they break the remote login   ->  they get a command prompt

   they break the remote DESKTOP ->  they are sitting in your chair
                                     your browser, already logged in
                                     your saved passwords
                                     your email, your bank tab
                                     everything you left open

The guide calls that โ€œsimple, but not my preferred configuration.โ€ I want to go harder. On a home connection it is a liability with a countdown timer on it.

I can prove the difference instead of arguing about it

Here is the part I actually wanted to share. At some point I got tired of guessing so I ran a vulnerability scanner at my own machines. That is just a tool that pokes at a computer from the outside and reports back every weakness it finds.

Same three servers. Same scanner. The only thing I changed was where I scanned FROM.

 POSITION 1  -  scanner sitting on the same home network
 ---------------------------------------------------------------
   it can see roughly a dozen open doors on each machine
   RESULT:  6 minor issues found


 POSITION 2  -  scanner coming in through my private network
 ---------------------------------------------------------------
   it can see exactly ONE door, and only after proving who it is
   RESULT:  ZERO issues. at any severity.
            it scanned for 103 minutes and found nothing.


 POSITION 3  -  scanner stuck in a walled off part of my network
 ---------------------------------------------------------------
   the firewall said no
   RESULT:  zero results in 91 seconds
            that is not a failed scan. that is the wall working.

Same machines all three times. One variable. The only thing that changed is how much the network lets a stranger touch before they prove who they are.

That is the whole argument. Port forwarding can never make it, because opening things up is its entire job.

Okay so what do I actually run

Instead of putting a door out on the internet, I built a private network that follows my devices around. Phone, laptop, the servers in my closet, even machines at a cloud provider. They all talk to each other directly and encrypted, and the outside world cannot see any of it.

                    +------------------------+
                    |   MY PRIVATE NETWORK   |
                    |   encrypted, invisible |
                    |   from the outside     |
                    +-----------+------------+
                                |
     +---------+--------+-------+------+--------+---------+
     |         |        |              |        |         |
   phone    laptop   big server    lab servers storage  cloud
                                                        servers

   every device gets a private address and a name
   that never changes on me

   zero port forwards. zero doors on the internet.

Three things I like about it.

Gear that cannot join still comes along. Some stuff is too dumb or too locked down to install anything on. A printer. A storage box. So one machine volunteers to speak for the whole house.

   the dumb gear that cannot join
   (printer, storage box, switch controls)
             |
             | plain old home network
             v
   +----------------------+
   |  one machine that    |   it announces
   |  CAN join the        |   "hey, I can reach
   |  private network     |    everything at my house"
   +----------+-----------+
              |
      MY PRIVATE NETWORK
              |
              v
        me, on my phone, 900 miles from my closet

Access is tied to ME, not to a pile of saved key files. Old way, you copy a key onto every machine, and if you lose a laptop you go hunting for every copy of it. My way, my device is on a list. Lose the laptop, pull it off the list. One click and it is gone everywhere at once.

My cloud servers and my closet are on the same network now.

   MY CLOSET                                A CLOUD PROVIDER
   ---------                                ----------------
   big server                               two servers
   lab servers     <==== PRIVATE NET ====>  (a continent away)
   storage
   monitoring

   they trade data like they are sitting on the same shelf
   no tunnel to configure. no fixed addresses. nothing exposed.

I still feel like I am getting away with something every time I look at that.

Where the guide is right, and what I keep from it

I am not against VNC at all. There are two things my private network does not solve, so here is my real setup in three tiers.

 TIER 1  -  daily driver, 99% of the time
 ---------------------------------------------------------------
   me ---> private network ---> text based remote login ---> server


 TIER 2  -  I need to actually SEE the desktop
 ---------------------------------------------------------------
   me ---> private network ---> VNC
                                ^
                                set so it only ever answers
                                the machine itself. it is not
                                listening to the network at all.


 TIER 3  -  the machine is BROKEN and tiers 1 and 2 are gone
 ---------------------------------------------------------------
   me ---> the host it runs on ---> a service door built into the
                                    virtualization software
                                    ^
                                    needs NO working networking
                                    inside that machine

Tier 2 is step 14 of the guide and I think step 14 is exactly right. Tell VNC to only answer local requests, then reach it over the private network instead of hand building a tunnel. One line change, keep it.

Tier 3 is the one nobody writes about and it is the one that got me. If a machineโ€™s networking is wrecked, the private network dies right along with it, because it is riding on top of the regular networking. Ask me how I know.

   what I expected                  what actually happened
   ---------------                  ----------------------
   normal network broken            normal network broken
        |                                |
        v                                v
   fall back to the                 private network ALSO dead
   private network                  because it was riding on
        |                           the thing that just died
        v                                |
   I fix it, I am a genius               v
                                   fully stranded machine and
                                   me staring at a dead terminal
                                   at midnight

What saved it was that service door built into the virtualization software. It does not touch the network at all, so it worked when nothing else did. That is why tier 3 exists.

You asked what we prefer, so here is my honest answer

You listed the options at the end. x11vnc, TigerVNC, RustDesk, SSH plus VNC, WireGuard or Tailscale, something else.

My answer is your last two, stacked together.

Private network as the transport. Text based remote login on top of it for almost everything. And x11vnc locked to local only for the times I actually need to see a screen. I have not touched RustDesk, and I am honestly curious whether anybody here likes it, because it is the one thing on your list I have zero hands on time with.

Here is my stack in your format:

   YOUR REMOTE ACCESS STACK        MY REMOTE ACCESS STACK
   ------------------------        ----------------------
   the desktop                     the desktop
        |                               |
      x11vnc                          x11vnc
        |                          (answers only itself)
     port 5900                          |
        |                          private encrypted network
   port forward / SSH tunnel            |
        |                          a check that I am me
    the internet                        |
        |                               |
      my phone                       my phone

Same shape. I just swapped the middle out. Where your guide has a door on the gate, I have a private network with a guest list, and the door on the gate does not exist at all.

And your last point is the best one in the whole guide

You said this is great for old computers that are not worth carrying around but still make perfectly good home servers. I want to co sign that hard.

The main box in my closet is a decade old workstation somebody else gave up on. Two ancient server processors, a pile of memory nobody wanted, and it happily runs my entire lab. That machine is the whole reason I have anything to write about. I would never haul it anywhere. I do not have to. I get to it from my phone.

That is the actual magic here and I think you buried it in the last paragraph. Old hardware plus remote access equals a lab you can actually afford. That should be the pitch at the TOP of the guide.

Tradeoffs, because I am not selling you anything

  • The easy versions of the private network approach mean trusting an outside company to help your devices find each other. You can run that piece yourself. Plain WireGuard is the do it all yourself version.
  • If you only ever use this inside your own house and never from outside, your original setup is fine and it is simpler. I mean that.
  • Moving the login to a different door number cuts log noise. It is not security. You already said that and you are right.

What I would change about the guide

I would move the private network from #20 up to #2. Keep step 14, the local only VNC part, exactly as written, because it pairs perfectly. Push port forwarding to the back as the way we used to do it, with a note that a lot of people cannot do it at all anymore.

But the real question for the thread. How many of you can even port forward these days? Go look at the address your router thinks it has on the internet. If it starts with 100.64, sections 11 through 18 were never written for you.