I can't really figure out what forum to ask this in. It's really a networking question, but right now it's not about any particular brand or technology or even programming language. So if you think there's a better forum to ask this in, please let me know.
The goal
Perform regular internet activity of any kind from a location that only allows port 80 traffic over its firewall. Bonus: encrypt all traffic.
Resources
I have a spare computer at home that is reachable over the internet and can have any software loaded or be configured in any way. I am using dynamic DNS for it.
Ideas so far
• Install VPN software at home, create a VPN tunnel over port 80 to that system, use a pre-built proxy server or just use RDP to remote control the computer and do what I want. Problems: clunky (working inside of an RDP window). Requires installing VPN client software on local computer. Requires double-downloading: once to home computer, once to firewalled computer. Not sure if any VPN software will let me use port 80. I might be able to use the home internet connection directly via being virtually on my home LAN, but then there are routing problems. I want some programs and instances to use the proxy, but others not to.
• Use the VPN with a local virtual machine that can have its routing table rewritten (answering one of the problems of the previous point but adding the additional problem of installing a virtual machine).
• Use an anonymizer/web proxy such as [/white]/ww[white][/white]w.freeproxy.ru/en/free_proxy/cgi-proxy.htm]these. Problems: doesn't work for every ftp site. Secure data is exposed to third party. Not 100% reliable. Sites may be blocked by firewall. Doesn't support things like remote desktop. Doesn't help me reach inside my own home firewall to do things on my home computer.
• Write my own application that does these routing/proxy/tunneling functions.
Let's say I want to connect to ftp:/[white][/white]/ft[white][/white]p.somesite.com:21/filename.zip.
what if I construct a URL to talk to my application at mydomain.com, like so:
[tt] ftp:/[white][/white]/port-21.ft[white][/white]p.apple.com.proxy.mydomain.com:80/file.zip[/tt]
This would be an instruction to my application to basically be a router, converting my port 80 connection to it to a port 21 connection to ft[white][/white]p.apple.com/file.zip
- It wouldn't need to know the protocol because it is only relaying traffic back and forth.
- It would simply forward every packet between me and the ftp site, doing a flip of the ports
Or lets say I wanted to do some banking to https:/[white][/white]/ww[white][/white]w.wamu.com
it could be something like this:
[tt] https:/[white][/white]/port-443.ssl-intermediate.url-rewrite.prot-https.ww[white][/white]w.wamu.com.proxy.mydomain.com:80[/tt]
This would instruct the software to act as a web server insofar as it decrypts the SSL session to do any necessary URL rewriting in the transmitted page, then establish its own connection to ala https:/[white][/white]/ww[white][/white]w.wamu.com:443.
I was thinking about representing the information in the domain name because of cases where the connection I want to make does not use directories (such as RDP) so I couldn't use a scheme like:
[tt]proxy1
ort1/proxy2
ort2/ww[white][/white]w.address.com/url[/tt]
or
[tt]http:/[white][/white]/proxy1
ort1/-_-/http:/[white][/white]/proxy2
ort2/-_-/http:/[white][/white]/ww[white][/white]w.address.com/url[/tt]
I already confirmed that using dynamic DNS I can add all the garbage I want in front of the real domain name. If it is mydomain.com, using anything.I.want.here.mydomain.com works. And at least for web requests, I should see in the headers what page is being requested. Of course, I am not so sure that I can read out the full-text domain name for things like an RDP connection, so that's a big problem.
So maybe I could do something like a mix of the VPN + the proxy/routing application. Or perhaps I could always submit two requests! The first could be information about how to handle the next request from me. Then the next request works correctly.
Okay, so totally aside from working out the details of this imagined program, does anyone have ideas about how to accomplish what I want?
Have I overlooked something obvious? Are one of the options I mentioned easier than I think? Are there additional options I am not aware of? Is there some big roadblock to my idea?
And if such an application DID exist as what I just described, would it be valuable to you? Would you pay for it?
Erik
[COLOR=black #e0e0e0]For SQL and technical ideas, visit my blog, Squared Thoughts.
The best part about anything that has cheese is the cheese.[/color]
The goal
Perform regular internet activity of any kind from a location that only allows port 80 traffic over its firewall. Bonus: encrypt all traffic.
Resources
I have a spare computer at home that is reachable over the internet and can have any software loaded or be configured in any way. I am using dynamic DNS for it.
Ideas so far
• Install VPN software at home, create a VPN tunnel over port 80 to that system, use a pre-built proxy server or just use RDP to remote control the computer and do what I want. Problems: clunky (working inside of an RDP window). Requires installing VPN client software on local computer. Requires double-downloading: once to home computer, once to firewalled computer. Not sure if any VPN software will let me use port 80. I might be able to use the home internet connection directly via being virtually on my home LAN, but then there are routing problems. I want some programs and instances to use the proxy, but others not to.
• Use the VPN with a local virtual machine that can have its routing table rewritten (answering one of the problems of the previous point but adding the additional problem of installing a virtual machine).
• Use an anonymizer/web proxy such as [/white]/ww[white][/white]w.freeproxy.ru/en/free_proxy/cgi-proxy.htm]these. Problems: doesn't work for every ftp site. Secure data is exposed to third party. Not 100% reliable. Sites may be blocked by firewall. Doesn't support things like remote desktop. Doesn't help me reach inside my own home firewall to do things on my home computer.
• Write my own application that does these routing/proxy/tunneling functions.
Let's say I want to connect to ftp:/[white][/white]/ft[white][/white]p.somesite.com:21/filename.zip.
what if I construct a URL to talk to my application at mydomain.com, like so:
[tt] ftp:/[white][/white]/port-21.ft[white][/white]p.apple.com.proxy.mydomain.com:80/file.zip[/tt]
This would be an instruction to my application to basically be a router, converting my port 80 connection to it to a port 21 connection to ft[white][/white]p.apple.com/file.zip
- It wouldn't need to know the protocol because it is only relaying traffic back and forth.
- It would simply forward every packet between me and the ftp site, doing a flip of the ports
Or lets say I wanted to do some banking to https:/[white][/white]/ww[white][/white]w.wamu.com
it could be something like this:
[tt] https:/[white][/white]/port-443.ssl-intermediate.url-rewrite.prot-https.ww[white][/white]w.wamu.com.proxy.mydomain.com:80[/tt]
This would instruct the software to act as a web server insofar as it decrypts the SSL session to do any necessary URL rewriting in the transmitted page, then establish its own connection to ala https:/[white][/white]/ww[white][/white]w.wamu.com:443.
I was thinking about representing the information in the domain name because of cases where the connection I want to make does not use directories (such as RDP) so I couldn't use a scheme like:
[tt]proxy1
or
[tt]http:/[white][/white]/proxy1
I already confirmed that using dynamic DNS I can add all the garbage I want in front of the real domain name. If it is mydomain.com, using anything.I.want.here.mydomain.com works. And at least for web requests, I should see in the headers what page is being requested. Of course, I am not so sure that I can read out the full-text domain name for things like an RDP connection, so that's a big problem.
So maybe I could do something like a mix of the VPN + the proxy/routing application. Or perhaps I could always submit two requests! The first could be information about how to handle the next request from me. Then the next request works correctly.
Okay, so totally aside from working out the details of this imagined program, does anyone have ideas about how to accomplish what I want?
Have I overlooked something obvious? Are one of the options I mentioned easier than I think? Are there additional options I am not aware of? Is there some big roadblock to my idea?
And if such an application DID exist as what I just described, would it be valuable to you? Would you pay for it?
Erik
[COLOR=black #e0e0e0]For SQL and technical ideas, visit my blog, Squared Thoughts.
The best part about anything that has cheese is the cheese.[/color]