OpenWrt news, tools, tips and discussion. Related projects, such as DD-WRT, Tomato and OpenSAN, are also on-topic.
Adapted from this guide.
I recently figured out how to set up a WireGuard VPN on my Raspberry Pi 3 running OpenWRT and I decided to write an up-to-date guide on how to do it. It should work on any device running a recent-ish build of OpenWRT/LEDE, provided you have enough storage space for it.
This will let you connect to your home network from anywhere, as well as route all your traffic through your home internet so you can avoid content filters at School/Work, as well as keeping your traffic encrypted.
I don't use IPv6 on my network so you'll have to figure that stuff out for yourself.
Before you begin, I'll warn you that the process of setting up WireGuard may disconnect you from the internet a few times so make sure nobody else is using the internet before you start.
SSH
into your OpenWRT device and run the following:
opkg update opkg install luci-proto-wireguard luci-app-wireguard wireguard kmod-wireguard wireguard-tools reboot
(protip: Windows 10 has built in SSH support if you don't have PuTTY installed. You can also use LuCI to install these packages by going to System>Software
)
Go into LuCI and head to Network>Firewall>Port Forwards
Create a new rule using the following input:
Name: WireGuard Protocol: UDP External Zone: WAN External Port: 1234 Internal Zone: LAN Internal IP Address: <The IP address of your device, mine is 192.168.1.1> Internal Port: 1234
Click Add, then Save & Apply. This allows your VPN clients (Phone, Laptop etc) to connect to your OpenWRT device from the internet.
SSH
into your OpenWRT device and run the following:
umask 077 && wg genkey > privkey cat privkey | wg pubkey > pubkey cat /root/pubkey cat /root/privkey
This creates two files in the /root/
directory of your device, pubkey
and privkey
.
You should email yourself the pubkey or transfer it securely to your phone somehow because you'll need it when setting up the VPN connection.
Copy the private key to your clipboard because you'll need it for Step 4.
Go into LuCI and head to Network>Interfaces>Add New Interface
Set the name of the new interface as wg0
Set the protocol to WireGuard VPN
Click Submit
Paste the private key you got from Step 3 into the Private Key
field
Set the listen port to 1234
In the IP Addresses
field, type 10.14.0.1/24
Go to the Firewall Settings
tab and assign the interface to your LAN zone if it's not automatically been assigned. This will enable you to access your LAN devices when you're connected to your VPN. If you want to keep your devices seperate, you can create another Firewall zone specifically for the WireGuard Interface.
Click Save & Apply
Download the WireGuard app from the Play Store or F-Droid or whatever is your preferred source of apps
Open the WireGuard app
Tap the plus icon and go to "Create from scratch"
Make up a name for your VPN connection
Tap "Generate" to generate yourself a public and private key
In the Addresses
field, type 10.14.0.3/32
Leave the Listen Port
and MTU
fields empty unless you need to change them for whatever reason
In the DNS servers field, either type the address of your home DNS server or use a DNS server of your choice (e.g. 1.1.1.1
)
Tap Add Peer
Paste the Public Key from the /root/
directory of your OpenWRT device
Leave the Pre-shared key
field blank
In the Allowed IPs
field, type 0.0.0.0/0,::0
(You should add ::0 even if you aren't using IPv6, as this stops your device from leaking data when connected to IPv6 enabled sites.)
In the Endpoint
field, type the public (WAN) IP address or domain name of your OpenWRT device, followed by a colon and the port number. For example: 69.65.164.12:1234
In the Persistent Keepalive
field, type 25
Save the connection
Now you have to register your phone as a peer to your OpenWRT device. To do this:
In the WireGuard app, copy your Public Key (The one you generated earlier) to the clipboard
Go into LuCI and head to Network>Interfaces
Click Edit
on the WireGuard interface
Go to the Peers section and add click Add
Paste the Public Key from your phone into the Public Key
field
In the Allowed IPs field, type 10.14.0.3/32
Check the Route Allowed IPs
checkbox
Leave the Endpoint Host
and Endpoint Port
fields blank
In the Persistent Keepalive
field, type 25
Click Save & Apply
Reboot the OpenWRT device, either through LuCI>System>Reboot
or by typing reboot
in SSH
Theoretically, everything should be finished now. To test this, go into the WireGuard app and enable the VPN connection. Then open a browser and if you have internet connectivity then it worked. :)
(protip: The WireGuard app has it's own quick settings tile, so you can add it to your quick settings panel for ease of access)
If you have any questions or if it straight up didn't work, leave a comment and I'll try to help as best I can.
Edit: I'm thrilled to see that this post is still helping people six years later! If this post helped you and would like to show your appreciation, a small Bitcoin tip would be greatly appreciated! :-)
BTC: bc1qzjku02tp9ms8jer9y9286uaugpng898cu2q5lc