URGH!!! I am so freaking frustrated. I cannot find a single VPN solution that will work for my specific situation.
Here is what I want to do: I want to set up a piece of software/OS Feature on my Windows Server 2003 machine that takes incoming connections, encrypts them and authenticates against Active Directory, but only uses one TCP and/or UDP port and uses no wacky protocols. I should only have to port-forward ONE FLIPPING PORT on my router and should not requre any special “passthrough” crap. I should not have to pre-generate any special encryption keys; this should be done transparently using a public key cipher system so I dont have to know/remember/hand configure anything. I should not have to memorize any g**damn command lines or install Java either on my server or my client to use the software. I shouldn’t have to put my VPN server in a DMZ. I shoudn’t have to buy specialized hardware. It should JUST FRIGGIN WORK. How hard is that do f**king do?
Microsoft’s PPTP and L2TP implementations both fall short of working in this regard. PPTP uses only one port, but has to use GRE Protocol 47. My router, (which so happens to be my VoIP Adapter), does not support passing through GRE 47. Therefore, PPTP does not work. L2TP requires very “virgin” packets. NAT’s have to do weird things to the packets in order to NAT, so although L2TP doesn’t use weird protocols, it fails because the packets are not “pristine”.
I looked at a couple other solutions, mainly SSL VPN style solutions. The first one, SSL-Explorer simply blows. It does not install properly 80% of the time.You have to have an old version of Java in order for it to run, it has to be installed and confirmed to be working before you EVER double click the VPN installer. The configuration hangs when you try to set it up to authenticate against Active Directory. If you have to stop in the middle of the installation/configuration process for any reason, the software will never again “work” (if you can call it working) unless you complete uninstall the application and reinstall it. NIGHTMARE!
Then, I looked at OpenVPN. Its designed primarily for Linux, but works too on Windows. It has no authentication, other than encryption keys, which you have to generate by yourself. No, the software will not generate them during installation, becuase that would be, you know, helpful. Everything is command line driven. You have to know pathnames. While the VPN is running, you have ugly CLI boxes on the screen. And worst of all, NO ACTIVE DIRECTORY INTEGRATION. It DOES, however, work on only one port and requires no wacky protocols.
Why do I have to go through this hell? All because the VoIP service I use “requires” me to use the VoIP adapter as my router, or else the serivce skips, stutters, echoes, and all other manner of nasty. All because the Sipura/Linksys SPA-2000 DOESNT DO GRE PROTOCOL 47 PASSTHROUGH.
Here is how I see a proper VPN working:
- VPN Server software, upon installation, creates an encryption key using some sort of Public Key Cipher. The client software does the same.
- The connection to the server uses ONE port and NO wacky protocols.
- Upon connection, both ends share their public keys with each other, and use each other’s public key to encrypt data transmission to the other.
- Each end creates a tunnel of encryption using the shared public keys.
- The server (now using encryption) asks the user for credentials.
- The server then authenticates the user against the built in OS user/Domain database implemented on said server
- Upon verifying the credentials as good, all data is then encrypted on the fly and decrypted by the other end
- The client uses the remote end as its gateway, and all non-local traffic is routed through the VPN
- The server takes data destined for its internal network and routes accordingly or takes data destined for the Internet and routes this to its gateway.
Of course, the encryption schemes used could certainly be more sophisticated if necessary, but the basic framework should be as above. This would allow VPNs to EASILY work behind a NAT without any wackiness. How difficult is that to do? It seems quite a bit easier to me to do than using wacky unrouteable protocols and 573,000 layers of stupid. But, as I have found out, apparently, it is not.