Credits:
I Found this good tutorial for installing Wireguard on https://pimylifeup.com/raspberry-pi-wireguard/
In this section, we will do some initial preparatory work to make sure our Raspberry Pi is ready to install the WireGuard VPN software.
1. The first thing we need to do is ensure our Raspberry Pi is using the latest available packages.
We can do that by running the following two commands.
sudo apt update
sudo apt full-upgrade
2. We need to install the only package that we require to run the install scripts we need.
While this package should be available on most distributions of the Raspbian operating system, we will make sure by running the command below.
sudo apt install curl -y
Installing WireGuard on the Raspberry Pi
Within this section, we are going to make use of the PiVPN script to install WireGuard.
PiVPN makes the process of installing WireGuard on our Raspberry Pi a straightforward process. The script sets up the best defaults for our device.
Starting the PiVPN Install Script
1. Let us start the installation process by running the following command.
curl -L https://install.pivpn.io | bash
This command will use curl
to download the PiVPN setup script from their website and then pipe it straight to bash.
You can verify this script’s contents by going directly to the install PiVPN domain in your web browser.
Installing WireGuard to your Raspberry Pi
1. The first screen you will be greeted with will let you know what this script is about to do.
To start the WireGuard installation process, press the ENTER key.
2. The first thing that we will be configuring through this script is a static IP address.
This screen explains why your Raspberry Pi should have a static IP address when operating as a WireGuard VPN server.
To proceed, press the ENTER key to proceed.
3. You will be asked if you are already using DHCP reservation.
Using DHCP reservation allows you to make your router assign an IP address to your Raspberry Pi.
In this guide, we are going to assume you haven’t used DHCP reservation and will move on to set a static IP address on the Pi itself.
Select the <No>
option and press the ENTER key to continue.
4. To set a static IP address for the WireGuard software. The installation script will want to use your default settings.
If the default IP address and gateway are correct to you, then you can safely select the <Yes>
option.
Continue with this WireGuard set up guide by pressing the ENTER key.
5. You will be warned that you can potentially run into IP conflicts when using this method.
The way around that is to use DHCP reservation. However, most routers should be smart enough to stop this from being a problem.
Press the ENTER key to continue.
6. This screen will tell you that you need to specify a local user to store the WireGuard configuration files.
Continue to the next screen by pressing the ENTER key.
7. You can now select from a list of available users.
Use the ARROW keys to highlight the user then the SPACEBAR to select it.
Once you are happy with the user you have selected, press the ENTER key.
8. Finally, we can select the VPN software we want to install.
As we want to install WireGuard to our Raspberry Pi, you can press the ENTER key to continue.
The reason for this is that default by the PiVPN script selects WireGuard.
9. This screen will allow you to change the port the WireGuard uses on your Raspberry Pi.
It is recommended to keep this the same unless you have a particular reason to change the port.
Press the ENTER key to confirm the specified port.
10. This screen just confirms the port that you set your Raspberry Pi WireGuard VPN to use.
Please note to be able to access your WireGuard VPN from outside of your home network, you will need to port forward the port mentioned here. The type of this port is UDP
.
Confirm that the port is still correct, then press the ENTER key to proceed.
11. We can now specify the DNS provider that we want to use for our VPN clients.
For our tutorial, we chose to use the Cloudflare one as it is relatively speedy, and they purge their logs every 24 hours.
Use the ARROW keys to navigate through this menu. Once you have found the DNS provider you want to use, press the SPACEBAR key.
If you are happy with your selection, press the ENTER key to confirm it.
12. You can specify two different ways you want to access your WireGuard VPN.
Using your public IP address is the easiest option. However, this should only be used if you have a static IP address.
The other option is to use a domain name. You can set up this option by following our dynamic DNS guide.
For this guide, we will be sticking with using our public IP address.
Once you have the option you want to be selected, press the ENTER key to proceed.
13. The PiVPN script will now generate the server key that WireGuard requires.
All you need to do here is press the ENTER key again.
14. This screen will give you a quick rundown about unattended-upgrades and why you should enable them.
Go to the next step by pressing the ENTER key.
15. You can now enable the unattended-upgrades by selecting the <Yes>
option.
We highly recommend that you enable these to ensure your Raspberry Pi will download security fixes regulary.
Not enabling this will potentially leave your WireGuard VPN vulnerable to attack.
Once you have the option you want to be selected, press the ENTER key to confirm it.
16. You have now successfully installed the WireGuard VPN software to your Raspberry Pi.
This screen will let you know that you still need to create profiles for the users, which we will cover in the next section.
Press the ENTER key to continue to the last two steps.
17. You will be asked whether you want to restart your Raspberry Pi before continuing.
We recommend that you choose the <Yes>
option.
Once you have selected to reboot, press the ENTER key twice to restart.
Creating your First WireGuard Profile on your Raspberry Pi
Now that we have successfully installed the WireGuard software to our Raspberry Pi, we can create a profile for it.
To be able to create this profile, we will be making use of the PiVPN script again.
1. To begin creating a new profile for WireGuard, we need to run the following command.
sudo pivpn add
2. All you need to do is type in a name for the profile that you are creating.
For example, we will be calling our profile “PiMyLifeUp
“.
Once you have created a profile, it will be stored within the directory specified in the output.
If you followed the previous steps and used the pi
user, you will be able to find the config file within the /home/pi/configs
directory.
As a final step edit the PiMyLifeUp
in /home/pi/configs
to include the listenport in the interface section, otherwise you will look like connected to the server, but no data is send.
[Interface]
PrivateKey = xxxxxxxxxxxxxxxxxx
Address = xx.xx.xx.xx/24
DNS = 9.9.9.9, 149.112.112.112
ListenPort = 51820
You can use the config file within here to set up your WireGuard clients. However, there is another method which we will go into in the next section.
Generating a QR Code for your WireGuard Profile
In this section, we will show you how to generate a QR code for the WireGuard profile we generated on our Raspberry Pi.
You will be able to scan this QR code using your device. This saves you from having to copy the config file from your device.
Luckily for us, the PiVPN software comes with a QR code generator that we can use.
1. To generate a QR code for your profile, you will need to start by running the following command.
Make sure you replace “PROFILENAME
” with the name you set in the previous section. In our case, this will be “PiMyLifeUp
“.
pivpn -qr PROFILENAME
or
pivpn -qr
And select the profile you are generating the QR code for
2. You can then scan this QR code using your iOS or Android devices.
You can find the WireGuard app on both the Google Play Store and the Apple App Store.
When scanning the QR code, you will be asked to enter a name for the profile.
At this point, you should now have successfully got a WireGuard VPN running on the Raspberry Pi.
Finally, when you have done all steps and are able to connect to the WireGuard server on your Pi, but unable to connect to your LAN or the internet, then run the following command and make the necessary repairs to get it fixed
pivpn -d
If you need to show the QR code for a profile afterwards, then use the following command
sudo su
qrencode -t ansiutf8 < /etc/wireguard/clients/PROFILE.conf
When you have imported the profile in your mobile app and did not change the profile.conf file manually, then change the listen port for the server in the wireguard app from automatic
to 51820
or the port you used when installing the wireguard server.
You can use the following code to check the connection status of your clients
sudo wg show
This will be the displayed result
interface: wg0
public key: xxxxxxxxxxxxxxx=
private key: (hidden)
listening port: 51820
peer: xxxxxxxxxxxxxxxx=
preshared key: (hidden)
endpoint: xx.xx.xx.xx:xx
allowed ips: xx.xx.xx.xx/32
latest handshake: 24 minutes, 30 seconds ago
transfer: 99.52 KiB received, 314.70 KiB sent