In ideal world every user knows how to forward ports in NAT routers, use perl-scripts to knock on firewalls, establish ssh-tunnels and start a vncserver. The world is indeed not ideal and from time to time I wish to use establish a remote desktop connection or VNC to a less technical inclined friend to help the solve a problem on their computer.
The ideal but non-existing solution
The ideal solution would be to have piece of software that met the following demands:
- Secure – uses passwords and encrypts the sesssion
I can easily support Windows and Apple users using TeamViewer a commercial product free for personal use. This program is really easy since it does works trough a NAT router and it is encrypted. The only problem is that it is not cross-platform. That said I can support Windows and Mac users running Teamviewer in wine but I can not use it to support a another Linux user.
Common solutions – never meets all the demands
When looking around on the net it seems that most people are ignorant of at least one of the problems in demands I listed.
Most of the time I see people write that the non-technical user should open ports for VNC in their router. This is crazy-talk. Non-technical users wouldn’t know how to do this and there is also the chance that they don’t have administrator rights on the router. A NAT router accepts all outgoing connections and rejects all incoming connections that don’t have origins inside the NAT. There exists clever ways to get through NAT routers, such as the nat-traverse – Use of UDP to traverse NAT gateways [sourceforge.net], but this again is not simple.
Another problem often ignored is that VNC connections is unencrypted should be send through a SSH tunnel or similar to avoid bad guys to listen-in. Creating SSH-tunnel requires some technical skills which I don’t assume that non-technical user posses.
The best solution so far
The best solution I have seen so far is the Remote Help Assistant [launchpad.net]. This python application tries to accomplish the goal of Teamviewer for Linux users. It is not cross-platform but does try to make the support experience easy and secure for non-technical users. The program is still under development and still needs work since it tells user to open ports in routers if they are behind a NAT router. In any case i think this is closest to the perfect solution I have seen so far and anyone interested should test it and give bug and general feedback so the program can mature.
- Recovery/Remote [wiki.ubuntu.com] – Describes the exact problem.
- Remote Help Assistant [launchpad.net] – This python application is the best solution so far but is still under development.
- gitso [code.google.com] – A small cross-platform program. Lacks NAT-transversal ability.
- VNC [help.ubuntu.com]. – General description of VNC and usage.
- NAT traversal [wikipedia.org]