For a few years I have been using a commercial VPN service for my personal use. It gave me the capability to tunnel to a slew of countries around the globe, and provides apps on my Mac and my phone. It balanced my privacy and easy-of-use needs, as most commercial VPN’s do these days.
However, as with most paid services that are easy to use, you give up a certain amount of control or an ability to fine-tune (or just play around). In this case, one aspect I could control is the IP address of the server I’m tunneling through. Another aspect out of my reach is the level at which the commercial VPN hides information about the ones using it. Being naturally curious anyway and with some free time, I undertook figuring out how to setup my own VPN on Linode, where I already host my server for my website and other projects.
After some research I settled on Algo VPN, which seemed to achieve formidable tech community acceptance from both it’s ease of install and robustness. And for connecting VPN clients, there are configuration instructions available for tunneling via Linux, Windows, Mac OS, iOS, and Android. In my case I primarily use Linux, Mac OS and Android, so I was set.
The Linode
I selected creating a Linode Nano, which is their smallest box: a 1024 GB memory instance with 1 CPU and 25 GB of disk…. more than adequate for Algo VPN. At $5/month, it is roughly consistent with the cost of my existing VPN. For this instance it allows 1 TB total transfer each month (in and out), but for my own testing this was fine, as I’m not planning to stream movies though it.
As a note, DO NOT TRY to use any of your existing server instances which is used for other purposes, such as hosting websites. Algo VPN will change core network settings and probably mess up your server.
I installed Ubuntu 18.04 LTS (the current long term support version available at the time of writing) on the instance, and performed all the package updates to bring it current.
VPN Installation
The command line instructions included with Algo VPN were as easy as they had been reviewed by others. It will walk you through a series of questions, and then perform it’s install. I won’t go through the how-to here since other people already have elsewhere, but suffice to say it, in an hour or so, I had it up.
With software that easy to setup, I was eerily skeptical if it would actually work though when I connected.
And…it did!
For my Mac, one of the files that is produced out of the installation is useable directly in Mac OS to configure the VPN. Within a minute I had my tunnel established.
For Android, there is an open client app you can download, and import another configuration file created during Algo installation, within another few minutes my phone was connected.
None of these instructions, as easy as they are, will be EASY for the mass market type of VPN customer. But in terms of what I’ve dealt with in the past, and that I’m well accustomed to manual configuration of most anything, it was a breeze.
Testing
Of course I began by visiting specific sites that will tell you how your VPN is looking from the outside. As I hoped they reported seeing my Linode instance’s IP address correctly, and not my computer’s IP. I ran a DNS leak test as well (e.g. DNSLeakTest, DoILeak, Whoer), and the DNS requests going through the tunnel did not give away my true location.
Both services did point out an issue with WebRTC in Chrome giving away my computer’s IP, but that’s a Chrome issue and only via web browsing in that browser, which is something I need to look into. WebRTC cannot be disabled (at least easily) in Chrome from leaking this information.
On Linode, I can see my traffic going through the VPN on the various graphs provided for my instance… something that appeases the engineer in me. Nothing really more to say about it.
A big benefit here is that, as often as I want, I can quickly spin up other Linodes which clone this configuration, all of which have different IP addresses.
I’m still evaluating this little experiment, but at least I can say that Algo VPN is what it’s cracked up to be.