Client
In theory, the client is an autonomous entity with whom you negotiate IPs and exchange public keys. In practice, you’ll just create a conf file and distribute it.
Define a Client on The Server
Each participant must have a unique Key-Pair and IP address. You cannot reuse keys as they are hashed and used as for internal routing.
Generate a Key-Pair
# On the 'server'
cd /etc/wireguard
wg genkey > client_privatekey # Generates and saves the client private key
wg pubkey < client_privatekey # Displays the client's public key
Select an IP
Choose an IP for the client and add a block at the bottom of your server’s wg0.conf
. It’s fine to just increment the IP as you add clients . Note the /32, meaning on traffic with that specific IP is accepted from this peer - it’s not a router on the other side, after all.
# Add this block to the bottom of your server's wg0.conf file
## Some Client ##
[Peer]
PublicKey = XXXXXX
AllowedIPs = 192.168.100.2/32
# Load the new config
wg-quick down wg0 && wg-quick up wg0
Create a Client Config File
This is the file that the client needs. It will look similar to this. The [Interface] is about the client and the [Peer] is about the server.
[Interface]
PrivateKey = THE-CLIENT-PRIVATE-KEY
Address = 192.168.100.2/32
[Peer]
PublicKey = YOUR-SERVERS-PUBLIC-KEY
AllowedIPs = 192.168.100.0/24
Endpoint = your.server.org:51820
Put in the keys and domain name, zip it up and send it on to your client as securely as possible. Maybe keep it around for when they loose it. One neat trick is to display a QR code right in the shell. Devices that have a camera can import from that.
qrencode -t ANSIUTF8 < client-wg0.conf
Test On The Client
On Linux
On the client side, install the tools and place the config file.
# Install the wireguard tools
sudo apt install wireguard-tools
# Copy the config file to the wireguard folder
sudo cp /home/you/client-wg0.conf /etc/wireguard/wg0.conf
sudo wg-quick up wg0
ping 192.168.100.1
sudo wg-quick down wg0
# Possibly enable this as a service or import as a network manager profile
systemctl enable --now wg-quick@wg0
## OR ##
# You may want to rename the file as that's used in nm as it's name
nmcli connection import type wireguard file client-wg0.conf
sudo nmcli connection modify client-wg0.conf autoconnect no
On Windows or Mac
You can download the client from here and add the config block
https://www.wireguard.com/install/
Test
You should be able to ping the server from the client and vice versa. If not, take a look at the troubleshooting steps in the Central Server page.
Next Steps
You’re connected to the server - but that’s it. You can’t do anything other than talk to it. The next step depends on if you want to:
- Allow the client Remote Access to the server’s network and/or the internet
- Allow the server to Remote Manage the client.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.