We need access to the Pi via terminal. You may need to enable SSH on the Pi before you can access the terminal remotely. Visit our guide for steps on how to enable SSH on Raspberry Pi OS. You can log into the terminal using a command-line interface. For more details, check out our SSH Raspberry Pi login guide.
Once you're in the terminal window, run the following:
curl -L https://install.pivpn.io | bash
The package will begin installation automatically. When prompted with "This installer will transform your Raspberry Pi into an Open VPN server!" Choose OK.
The installation wizard will walk you through the setup process. Here's a quick overview of each step.
Define a static IP address
You will be prompted to edit your network settings. Our Raspberry Pi VPN needs a static IP address. You can leave the default value or choose one of your own if your ISP supports static IPs.
Choose a user to manage VPN settings
You will see a dialogue that states “Choose a local user that will hold your ovpn configurations.” Select OK and choose an account to use. I’m leaving mine set to the default account, but you can use any account you want here.
Set up "Unattended Upgrades"
The next prompt will ask about "Unattended Upgrades". This automatically downloads updates, but it won’t reboot your Pi. You’ll have to reboot the Pi manually from time to time. If you want to use these enable them now.
Choose TCP or UDP
You will be asked to choose between TCP or UDP. If you're not sure what to put here, UDP is a safe bet.
Set a port number
On the next screen, you can set a custom port number or leave the default value of 1194. You will be prompted to confirm the port settings.
If you have clients running OpenVPN 2.4 or later, you can integrate features for it by choosing Yes. Otherwise, choose No.
Choose encryption settings
Choosing what level of encryption to use it up to you. 1024 bit is on the lower end and hardly recommended. 4096 bit offers the greatest security but also causes the most latency. 2048 bit seems to be in the sweet spot for what we want to accomplish.
Server key is generated
Up next, PiVPN will create a server key. This may take a little while, just leave the Pi running while it generates the key. The creator stated this process took up to 45 minutes on his Pi 3B+, however, I experienced a much shorter wait time on mine.
When prompted for DNS settings, you can opt to use a DNS. However, I'll be using my public IP.
Select the DNS provider
Choose one of the DNS providers from the list or select "custom" to use your own.
The default port value used by PiVPN is 1194. If you changed this port number, now is the time to open it on your router. You will need to log into your router in order to set up port forwarding. Visit our guide for help logging in and resetting your router password.
We want to create a whitelist of clients that can use our new PiVPN. To do this, we will create a file known as an ovpn profile. Open a terminal window for the Pi and run the following:
Choose a name for the client you want to add and create a password. We can use this ovpn profile file to create a connection.
|Operating System||Client URL|
To connect the two devices, we need to put software on the client that can read the profile we created. I'll be installing the Windows 10 OpenVPN desktop client. You can find other versions, check the table to find the client you need.
Once you’ve uploaded the profile into the client, you should be given prompts to connect to your PiVPN setup.
Congratulations! You’re now the owner of a personal VPN. We trust you’ll use your SysAdmin powers wisely. Remember to periodically check to make sure your VPN is actively securing your internet usage.
If you’re looking for more ways to fine-tune your network, why not set up a Raspberry Pi adblocker? Check out our Pi-Hole setup guide to get started. Alternatively, you can use NordVPN on Raspberry Pi to get both their VPN service and built-in adblocker.
Using a VPN can make working from home a breeze. Connecting to a VPN in Windows is simple enough; all you need is a VPN to connect to.