NoMachine[1] works well for me. Although it won't help with firewall issues. I'm lucky enough that the desktop machine in my office has a public IP. x11vnc[2] is a nice lightweight alternative that basically allows you to use any standard VNC client to connect to an existing X session.
[1] https://www.nomachine.com/ [2] http://www.karlrunge.com/x11vnc/