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