Aujourd'hui nous allons voir comment installer et configurer son propre serveur VPN. Personnellement j'ai choisi de le faire pour mon usage personnel et je l'héberge sur un VPS de chez OVH (à 3€/mois). Cela me permet donc d'économiser une bonne partie comparé aux offres de chez NordVPN, ProtonVPN, ExpressVPN, Cyberghost ...et cie.

Installation

Commençons par récupérer et installer le package. Nous allons tout d'abord vérifier que le système est à jour et que certains composants nécessaires sont installés.

sudo apt update
sudo apt install software-properties-common

Une fois fait, nous pouvons installer Wireguard

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt install wireguard

Une fois l'installation effectuée, vous devriez avoir un message de ce genre.

wireguard:
Running module version sanity check.
Original module
No original module exists within this kernel
Installation
Installing to /lib/modules/5.3.0-46-generic/updates/dkms/
depmod…
DKMS: install completed.

 

Configuration de Wireguard

Nous allons créer le dossier afin d'y stocker les fichiers de configuration nécessaire au bon fonctionnement du VPN.

sudo mkdir /etc/wireguard
cd /etc/wireguard

On peut désormais générer la clé privée et publique pour le serveur.

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

On peut récupérer le contenu de la clé privée avec la commande ci-après :

cat /etc/wireguard/privatekey  

Notez là à côté car vous allez en avoir besoin pour la configuration de Wireguard.

Passons donc à la configuration, nous allons créé un fichier wg0.conf qui contiendra toute la configuration nécessaire au bon fonctionnement du VPN.

sudo nano /etc/wireguard/wg0.conf 

A l'intérieur de celui-ci collez ce contenu :

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVEUR_CLE_PRIVEE
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3-j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

Intéressons-nous au contenu de ce fichier de configuration, car il y a quelque petites choses à modifier pour que ça colle avec votre serveur.

Address l'interface réseau du serveur connectée à Internet. Il peut être IPv4 ou IPv6
ListenPort Il s'agit du port sur lequel nous allons se connecter et qui va être ouvert sur notre par-feu.
PrivateKey La clé du serveur privée à coller ici cat /etc/wireguard/privatekey
PostUp && PostDown Alors ici nous allons devoir modifier le ens3 que j'ai mis en fonction de votre système. Lancez la commande suivante et remplacez si nécessaire ens3 par ce que vous retourne la commande suivante ip -o -4 route show to default | awk '{print $5}' 

 

Maintenant que la configuration de base est terminée, nous allons tout de même sécurisé un peu notre petit VPN car, le fichier de configuration et la clé privée ne doivent pas être accessible en lecture pour les utilisateurs normaux. Nous allons donc utiliser la commande chmod pour effectuer cette petite modification.

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}  

Voilà ! nous sommes prêt à démarrer notre serveur VPN étant donné que la configuration est terminée. Voici la commande à utiliser :

sudo wg-quick up wg0  
Encore une dernière ligne afin de permettre au VPN de se lancer automatiquement en cas de redémarrage du serveur.
sudo systemctl enable wg-quick@wg0
Côté serveur, il nous reste encore deux petites choses à faire.
 
1. Activer la redirection de port
Pour le faire, nous allons éditer le fichier 
sudo nano /etc/sysctl.conf
Et décommenter la ligne net.ipv4.ip_forward=1 (il suffit d'enlever le dièse au début)
Voilà, maintenant on peut sauver et appliquer les changements
sudo sysctl -p  
 
2. Ajouter une règle au part feu pour la connexion sur le port 51820
sudo ufw allow 51820/udp 

Maintenant que l'on voit que tout fonctionne, (à priori), nous allons passer à la prochaine étape, à savoir la configuration d'un client.

Configuration des clients

 

Depuis un smartphone ou une tablette Android

Personnellement, pour configurer mes clients j'aime bien le faire depuis le serveur ce qui me permet de garder toutes les infos en cas de perte/casse du smartphone et de pouvoir être VPN ready rapidement :).

Donc pour ce faire nous allons créer un dossier clients et un dossier avec la marque de notre appareil (ou autre).

sudo mkdir /etc/wireguard/clients/S10plus
cd /etc/wireguard/clients/S10plus

On va générer les clés privée/publique du client :

wg genkey | tee privatekey | wg pubkey > publickey
Maintenant on va créer un fichier de configuration lié à ce client :
sudo nano  /etc/wireguard/clients/S10plus/client.conf
[Interface]
Address = 10.0.0.2/24
PrivateKey = PEER_PRIVATE_KEY
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLICKEY
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = ubuntu.mydomain.com:51820

Attention ici à ne pas mélanger les clés clients (peer) et les clés serveur, sinon ça ne fonctionnera pas. Pour récupérer la clé privée du client cat /etc/wireguard/clients/S10plus/privatekey et pour la clé publique du serveur cat /etc/wireguard/publickey

DNS Pour le DNS, ici j'ai choisi d'utiliser celui de Cloudflare (1.1.1.1). Vous pouvez également utiliser celui de Google (8.8.8.8) ou le vôtre si vous en avez un.

Endpoint il faudra mettre soit le nom de domaine de votre serveur si vous en avez un lié, sinon l'adresse IP de votre serveur (attention il ne faut pas qu'elle soit dynamique).

Une fois que tout les paramètres du client sont correctement configurés, il nous reste à ajouter la clé du client à la configuration du VPN avec la ligne suivante :

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

Comme avant n'oubliez pas de modifier la clé client (peer) et l'ip doit correspondre à celle de l'interface dans le client.conf (à chaque nouveau client nous allons incrémenter le dernier chiffre de l'ip).

Si en exécutant la commande vous avez une erreur, vérifiez bien que WireGuard est bien  lancé.

Nous pouvons maintenant installer le générateur de QR Code :

sudo apt install qrencode

Et enfin on va générer le QR Code du fichier de configuration. Celui-ci une fois la commande lancée va s'afficher en grand dans votre terminal.

qrencode -t ansiutf8 < /etc/wireguard/clients/S10plus/client.conf

Il ne vous reste plus qu'à télécharger l'application WireGuard, l'ouvrir et scanner le QR Code et c'est tout !

Depuis un Windows ou MacOS

Même étape que pour Android, sauf que vous ne pourrez pas copier le QR donc il faudra simplement recopier les informations de connexion.

L'application MacOS est disponible sur l'AppStore, pour WIndows l'application est téléchargeable is (64 bit) et pour finir vous pouvez toujours trouver votre bonheur sur la page d'installation de WireGuard.

Finalisation

Et voilà ! il ne nous reste plus qu'à tester si ça fonctionne. Connectez vous avec votre client (smartphone, Windows, ou autre) à votre VPN et lancé la commande suivante sudo wg.

Si la connexion entre le client et le serveur ne se fait pas vous aurez certainement un retour comme celui-ci :

interface: wg0
  public key: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
  private key: (hidden)
  listening port: 51820

Par contre, si la connexion fonctionne vous aurez une ligne "transfer" et "latest handshake" qui nous le dira :

interface: wg0
  public key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  private key: (hidden)
  listening port: 51820

peer: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  endpoint: XXXXXXX:55581
  allowed ips: 10.0.0.2/32
  latest handshake: 7 seconds ago
  transfer: 842 B received, 1.07 KiB sent

Nous voilà désormais arrivé au terme de ce tutoriel, j'espère que tout à fonctionné pour vous. Si c'est le cas n'hésitez pas à m'en faire par dans les commentaires. Idem si vous rencontrez un soucis.