how to connect to a remote desktop behind a router?

Here's my setup: I have a laptop that I roam around everywhere with, and I have a desktop computer at home that is connected to the web using a router with NAT.

My objective here is to create an SSH server which I can use for the purpose of file storage/access as well as using it as a proxy server. However, the problem is that the desktop (which i'm using as the SSH server) is on a router behind a NAT. This means I can't connect to the server from outside my home network.

I want to be able to connect directly to my desktop from an outside network using the laptop. Here are the options I've found on the web so far:

  1. Teamviewer - I really don't want to use this, I tried it and didn't like it one bit.

  2. Configure port forwarding on the router - Again, not an option since the router is actually operated by the ISP and they won't let me reconfigure it.

  3. Using a program called pwnat which I found here - This seems like the most viable of all my options, but I haven't been able to figure out how to get it to work. Also, from the poor documentation, it seems to be quite a pain to use as well.

  4. Reverse tunnel as show here - This cannot work as I don't have a "middle" computer

Is there some way I can make the connection through SSH from the laptop on a regular basis? Otherwise, is there some other alternative that will let me use the desktop as a file server and proxy?

Edit: There was another alternative provided below by ObsessiveFOSS

  1. Using the gogo6 client - Seemed like a good option, but I couldn't make it work. Possibly because my ISP/Router doesn't appear to support IPv6.

Solution 1:

You can use Gogo6 and get an IPv6 address at the same time:

On the server, download and install the Gogo6 client with:

sudo apt-get install gogoc

And get an account at http://www.gogo6.com/freenet6/registration for Freenet6.

Then, run gksudo gedit /etc/gogoc/gogoc.conf(still on the server) and set the following settings:

userid=your_user_name_you_set_up_with_the_link_above
passwd=your_password

Save and reboot. You can now access your_user_id.broker.freenet6.netas long as the SSH client is set up to bind to that interface. You can just bind it to 0.0.0.0, which is the default IIRC.

It should allow access from IPv4 hosts, but I will check on that.