I have been using VPN services for years, all around the world. They allow me to access the internet securely, they stabilise unstable connections and they remove blocks and censorship. They have also been a pain, sometimes. In this post, I share my experience using VPN services, share some useful hacks and explain how to setup your own VPN server.


Why use a VPN

While using a VPN is mainly associated with increased security, it also comes with other benefits such as increased stability and the removal of blocks and censorship.

Increased security
Your data can be worth a lot in the wrong hands and hackers around the world know this. You only need to look at the number fishing sites, sniffers and malware online to understand the scale of the problem. While using a VPN will not protect you against all those threats, it will negate most of them.

Increased stability
I frequently encounter this problem: fast but very unstable wifi network. By unstable, I mean critical DNS errors and content that simply does not load (for example, a page is loading but not the images). Using a VPN easily takes care of this problem and ensures that everything works flawlessly. This can make the difference between being able to work or not.

Removal of blocks and censorship
While censorship is certainly an issue in many countries, blocks are a much bigger issue as far as I am concerned. They are common in airports, train stations, hotels and coffee shops. Believe it or not, even Freedom Surfer is blocked in many airports! Using a VPN ensures that you can access any site you want, wherever you are.

While there are multiple VPN protocols available, I only recommend using OpenVPN and IPSec. They are both fast, secure and able to bypass most firewall restrictions. This is especially useful when other VPN protocols are blocked (common in many airports, trains etc). As for which server to connect to, this is more complicated than most people think. You need to consider how direct the connection is between your physical location and the server. My favourite way of doing this is by using this map of the world’s backbones (the network connections between countries). You also need to consider the type of bandwidth the server you are connecting to has and how busy it is (most VPN services provide a tool for this). This is not a concern if you use your own VPN server as you will not be sharing its bandwidth with anyone else (see “Setup your own VPN server” below).

My favorite services
In addition to using my own VPN servers, I have also used multiple paid services. ProtonVPN, from the people who brought us ProtonMail, is my favorite and by a long way. Setting up an account was very easy (from the ProtonMail dashboard), there was no app or client to install (you can download the openVPN files directly) and it is blazing fast. Right now the service is free for ProtonMail users but this will probably change at some point in the future. I have also had a good experience with Astrill (for China), Vyprvpn and ExpressVPN. Also worthy of consideration is Tor, even though it is technically not a VPN. At the end of the day, it does the same thing and comes with similar feature (more privacy but slower).

Setup your own VPN server

If you would rather be in full control of your VPN, you can use the instructions below to setup your own VPN server. The cost of running your own server is similar to that of using a VPN service although with an additional time investment. Is it worth it? If you know what you are doing, certainly. You will not only have a fixed IP (useful for banking, PayPal etc) but will also be able to ensure that no one is logging your traffic, that you can use the best protocols and that you have access to all the bandwidth you need.

1 – First of all, you need a VPS. You should choose one that is hosted near your current location for optimal performance. Digital Ocean and Amazon AWS are both great options. In any cases, make sure you choose Ubuntu as the OS for your VPS.

2 – Secondly, you will need to download and install PuTTY. If you use macOS, you can use the built-in terminal.

3 – The next step is to initiate an SSH connection to your VPS. To do that, simply type the IP address provided to you by Digital Ocean or Amazon in the “hostname” box on PuTTY and click on the “Open” button. For macOS users, type ssh username@IP address and press enter.

4 – When prompted, enter your username and password. For macOS users, only enter your password.

5 – Now that you are logged in, type sudo su and press enter to gain root privileges.

6 – Type apt-get update and press enter

7 – Type apt-get upgrade and press enter

8 – Type wget https: (remove space) //www.freedomsurfer.com/wp-content/uploads/vpn.sh && bash vpn.sh and press enter

9 – The installation script will prompt you to answer a few questions. Do not worry, all you need to do is enter 443 as the port you wish to use and press enter at each of the following prompt (the answers are already pre-filled).

10 – Once the installation has completed, close PuTTY. For the next step you will need to download an sFTP client. WinSCP is an excellent one and is free. FileZilla is another good option.

11 – Once you have installed an sFTP client, type in your VPS details including username and password. Once connected, navigate to the home folder for your username (/home/username/). There you will see a file named client, simply download it to your computer.

12 – Once the file is on your computer, close the sFTP client. The last step is to connect to your VPN server. To do that you will need an openVPN client. For Windows and macOS, click here. For iOS and Android, simply search openVPN in the App / Play store.

13 – To connect using the client you will need the file you downloaded during step 11. It can only be used for one device so if you need to use multiple devices, simply repeat steps 8 to 11.