A few months ago, I started looking at new VPN applications and what I could do with it (getting around certain regional game blocks). In late April, I decided I would take on the project. However, how would I accomplish this and what would the project be like?
I named the project “Nebula”, since a nebula is like a stars in a constellation, VPN servers are like the same around the world. The concept of this project is to make an application where you can get a VPN server spun up in a location for a time frame of just as low as 1 minute and up to 72 hours. All you would have to do is load up the application on your phone or computer, then information such as location, time, and the login information for the user. It would then return either an OpenVPN file to open on a device or the server’s IP address, username, and password.
First, I had to find a way to make a REST API to ensure that my project could communicate with bare metal cloud services. I chose to use Cloudflare Workers for it’s easy access and free usage up to 300,000 requests a month. It could also use NodeJS and other javascript functions for ease of use in my REST API. After writing some code, I had to get creative on implementing the login and password functions. I would first have to encrypt the registration information and then send it to a MongoDB Atlas cluster since it’s an easy JSON database.
After this though, I was having trouble visualizing how I would get the data from the server after sending it the request. I was thinking of using Docker containers in order to spin up new clusters using pre-made containers that I made that would auto-install OpenVPN, setup the config file and then run the OpenVPN application using randomly generated credentials and then return them.
However, I would have to make the credentials in the creation of the request since returning it after would be a hastle since I would have to implement a way for the server to return the credentials, which for security reasons and feasibility reasons, I chose not to do.
Now, I’m going to be using AWS’s ECS system in order to distribute Docker containers in their datacenters as it’s the easiest to use with the AWS ECS API for NodeJS and it would be easier for me to write the code for it. Since I know that I won’t have too much time in the next few months, this is most of the progress that I’ve done so far, and although, I can’t show too much code since it could result in security issues down the line, it’s been a fun time looking at how VPNs could be made and how I can make this project into reality.