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 IPv6ListenPort
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
sudo systemctl enable wg-quick@wg0
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
(il suffit d'enlever le dièse au début)sudo sysctl -p
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
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.