Installation et configuration du VPN Wireguard

Le schéma ci-dessus montre ce que nous allons réaliser dans ce tutoriel : nous allons installer un serveur VPN wireguard sur un VPS (machine Linux sur Internet), et un client wireguard sur un laptop Linux. Un tel tunnel chiffré permet des connexions distantes en SSH qui empruntent le tunnel. Il est tout à fait possible (nous le verrons dans un article ultérieur) de n’autoriser la connexion SSH que via ce tunnel Wireguard, ce qui protégera le serveur des attaques par force brute sur SSH.

Qu’est ce que wireguard ?

Il s’agit d’un protocole qui permet de créer un tunnel VPN chiffré entre deux machines, ou entre plusieurs clients et un serveur.

Wireguard n’est pas le seul tunnel VPN que l’on pourrait installer. Il y en a d’autres : OpenVPN, IPSec, etc.

Nous allons utiliser wireguard parce qu’il est très facile à installer, léger, performant et moderne.

Pour que wireguard fonctionne il faut qu’il y ait un serveur wireguard sur le VPS (qui utilise par défaut, mais c’est modifiable si besoin, le port UDP 51820), et un client wireguard sur chacun des postes clients devant se connecter au serveur.

Le principe est simple, wireguard ainsi configuré va permettre de créer un réseau virtuel sécurisé. Une fois activé, le serveur VPS sera vu sur ce réseau avec l’adresse IP 10.0.0.1 et le laptop sera vu sur ce réseau avec l’adresse IP 10.0.0.2

Tout le trafic circulant entre 10.0.0.1 et 10.0.0.2 est chiffré par les protocoles de chiffrement les plus modernes.

Le chiffrement est asymétrique, ce qui signifie que chaque machine du réseau wireguard dispose d’une paire de clés de chiffrement (1 clé publique, et 1 clé privée associée). La clé publique de chaque machine est connue des autres machines, tandis que chaque machine garde pour elle sa clé privée.

L’installation et la configuration de wireguard est simplissime : le même package (wireguard) est utilisé sur le serveur et sur les clients, et un seul fichier de configuration est utilisé (/etc/wireguard/wg0.conf).

Wireguard sur le serveur VPS

On commence par installer wireguard :

sudo apt update

sudo apt install wireguard

Puis on génère la paire de clés du serveur :

mkdir tmp

cd tmp

wg genkey | tee privatekey | wg pubkey > publickey

On peut voir que cette commande a créé 2 fichiers : privatekey qui contient la clé privée du serveur, et publickey qui contient la clé publique du serveur.

Il faut ensuite créer le fichier de configuration /etc/wireguard/wg0.conf et y insérer comme contenu :

[Interface]

PrivateKey = clé_privée_serveur # Remplacer par la clé privée que vous avez générée

Address = 10.0.0.1/24 # Le serveur wireguard aura pour adresse IP 10.0.0.1

ListenPort = 51820 # Port d’écoute UDP par défaut

SaveConfig = true

[Peer] # Mettre une entrée Peer pour chaque poste client qui doit se connecter au serveur

PublicKey = clé_publique_client1 # Pour l’instant elle n’est pas encore créée cette clé

AllowedIPs = 10.0.0.2/32 # Le laptop client aura pour adresse IP 10.0.0.2

Et c’est tout. On ne peut pas faire plus simple.

Lorsqu’on aura créé la paire de clés du client, il faudra revenir sur ce fichier pour renseigner avec la bonne clé publique client la rubrique PublicKey. Et là ce fichier sera complet.

Lorsque le fichier sera complet, il faudra lancer le service wireguard sur le VPS en tapant la commande :

sudo systemctl enable wg-quick@wg0 –now

Enable configure le service pour qu’il démarre automatiquement au boot du serveur, et –now démarre le service immédiatement.

On peut vérifier que le service wireguard est bien lancé sur le VPS en tapant la commande :

sudo systemctl status wg-quick@wg0

Wireguard sur le client

Il faut également installer wireguard, et la commande est la même (à taper dans un shell du client) :

sudo apt update

sudo apt install wireguard

Ensuite on génère une paire de clés avec la même commande que celle utilisée sur le serveur (les clés générées seront différentes) :

mkdir tmp

cd tmp

wg genkey | tee privatekey | wg pubkey > publickey

On va également, sur le client, créer le fichier /etc/wireguard/wg0.conf et mettre ceci dedans :

[Interface]

PrivateKey = clé_privée_client1

Address = 10.0.0.2/24 # Notre laptop aura pour adresse IP 10.0.0.2

[Peer] # On va déclarer ce qu’il faut pour se connecter au serveur

PublicKey = clé_publique_serveur

Endpoint = adresse_IP_publique_serveur :51820

AllowedIPs = 10.0.0.0/24 # le trafic à destination du réseau VPN prendra le tunnel wireguard, le reste du trafic non

PersistentKeepalive = 25

Sur le poste client, le service wireguard n’est pas un service systemd à lancer. Il s’active et se désactive via une ligne de commande.

Pour lancer wireguard sur le client, on tape :

wg-quick up wg0

Pour arrêter wireguard sur le client :

wg-quick down wg0

Pour vérifier son état :

wg show

Test final

Comme on peut le voir, l’installation et la configuration de wireguard n’ont rien de compliqué.

Une fois wireguard actif sur le VPS et lancé sur le client, ils doivent pouvoir se ping sur le réseau 10.0.0.x

Sur le client, activer wireguard, et taper :

Ping 10.0.0.1

Le ping doit fonctionner.

Ou sur le serveur, taper (si wireguard est actif sur le client) :

Ping 10.0.0.2

Le ping doit fonctionner.

Wireguard depuis un smartphone Android

Le tunnel Wireguard que nous avons créé peut être emprunté par un smartphone Android. Pour cela il faut d’abord installer Wireguard pour Android.

Sur un PC on prépare un fichier wg0.conf destiné au smartphone, selon la même méthode que celle du laptop Linux vue ci-dessus (en choisissant une autre adresse IP, comme 10.0.0.3 par exemple). Puis il faut transférer ce fichier sur le smartphone et l’importer dans l’application Wireguard pour Android.

Pour activer ou désactiver le tunnel wireguard avec le serveur, il suffit alors d’activer ou désactiver le bouton On / Off dans l’application.

Une réflexion sur « Installation et configuration du VPN Wireguard »

  1. Anonyme

    Le tuto marche très bien j’ai essayé entre mes deux PC. Merci c’est le tuto le plus clair et le plus simple que j’ai trouvé sur internet

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *