As an alternative to using @Thomas Pornin's answer (where he suggested to use SSH) you can use the service bus to maintain a transparent connection from a local port to a remote server.
The "authentication" occurs when the proxy client software connects to the service bus... the endpoint of this service bus can be anything, such as an intranet, corporate proxy, etc. Once the client software authenticates you, a mini-vpn is created (just like SSH).
How to get started
This .Net client is installed locally, and the target is a proxy or some other device you need to trust.
Install Port Bridge
Note: Mentally replace SQL Client and 1433 with a port of your choosing... it's all the same with this TCP based proxy
This project allows several NAT'ed servers to access several NAT'ed clients across the internet over a single service bus connection.
It's a pretty smart implementation that will really get you thinking. Below is the source
http://blogs.msdn.com/b/clemensv/archive/2009/11/18/port-bridge.aspxLink
... and another explanation of the same.
http://brentdacodemonkey.wordpress.com/2010/05/05/azure-appfabric-%e2%80%93-a-bridge-going-anywhere/
Also, there is a related project called "SocketShifter" on codeplex: http://socketshifter.codeplex.com/ Although the codeplex site advises using portbridge, I do see check ins as of (Aug 2010) and not sure which one is more up-to-date. It may be worth investigating.