As an alternative to using @Thomas Pornin's answer (where he suggested to use SSH) you can use the Azure service bus to maintain a transparent connection from a local port to a remote server.

If this .Net client is installed locally, and the .Net server is running on a trusted server you won't need to worry about MITM since the client validates the HTTPS certificate located on the service bus.

**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.

![alt text][1]

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.aspx 

... 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.

  [1]: https://i.sstatic.net/Ij0my.png