J'ai entendu parler de Wireguard dès ça sorti en alpha. Je n'avais pas voulu le mettre sur mes serveurs, car il était trop jeune à mon goût, mais Linus Torvalds l'a ajouté au noyau Linux. Intrigué j'ai testé la solution: j'aurais dû tester bien avant!!!
Pour mettre en place Wireguard, je me suis simplement inspiré de la documentation officielle, ainsi que le blog * FLOZz' Blog* (ces articles-là: 1 et 2)
Je ne fais pas de NAT avec mon VPN, mais pour ceux que ça intéresse: Stan's blog
La mise en place de Wiregard se fait extrêmement simplement avec un simple fichier de configuration (incluant une paire de clé Privé/public):
- Vous pouvez commencer à installer les applications Wiregard sur tous les périphériques que vous allez connecter à Wireguard et sur votre serveur.(apt install Wireguard)
- Ensuite, il y a simplement à comprendre le fonctionnement des fichiers de configuration (de type ini):
- Serveur:
# ==== Configurations du serveur en lui-même ====
[Interface]
# Adresse IP du serveur à l'intérieur du VPN
Address = 10.0.0.1/24
# Clef privée du serveur
PrivateKey = 6DqV+CkNyVreXd...hObXLcwD32sD9b8NUU=
# Port sur lequel le serveur écoute (par défaut c'est 51820, mais ce n'est pas un port enregistré par l'IANA)
ListenPort = 12345
# Les DNS sur lequel écoute pour les clients:(cela permet d'héberger de façon caché vos services avec un dnsmasq)
DNS = 10.0.0.1
# ==== Configuration liée au client ====
[Peer]
#Ordinateur 1
# Clef publique du client
PublicKey = xCpgV+umCzSf6...dFDskojIYo6TSuk1Y=
# Adresse IP que le client peut utiliser à l'intérieur du VPN
AllowedIPs = 10.0.0.10/32
[Peer]
#Peripherique 2
PublicKey = fDDoCcLxlecFr...zUH/uEW3TRyTv870zUE=
AllowedIPs = 10.0.0.11/32
[Peer]
#Ordinateur 3
PublicKey = BF8Ud3Jg6e...21yjdV25+R4YlmQ=
AllowedIPs = 10.0.0.20/32
- Client:
# ==== Configurations du client en lui-même ====
[Interface]
# Adresse IP du client à l'intérieur du VPN
Address = 10.0.0.10/32
# Clef privée du client
PrivateKey = 4O3hLxY1h9...1nvAgnJX7ka8mo=
# ==== Configuration liée au serveur ====
[Peer]
# Clef publique du du serveur
PublicKey = CYFHC+2qwLShoB...syiz4CI+KTrrpZvRWXk=
# Adresse et port du serveur
Endpoint = MonServeurVPN.example.com:12345
# Range d'adresses IP qui doivent être routées à travers le VPN
AllowedIPs = 10.0.0.0/24
# Et pour finir, le keepalive pour éviter d'avoir des soucis
# si le client se trouve derrière un routeur NAT
PersistentKeepalive = 25
- Pour la génération des clés, il faut utiliser wg genkey et wg pubkey, que vous pouvez mettre dans des fichiers. Sauf que je ne le vous conseille pas, sachant que c'est un risque en plus de créer une faille de sécurité. Le stockage des clés directement dans le fichier de configuration (mis aux bonnes permissions), permet de réduire la surface d'attaque possibles.
Pour faire cela, je vous propose cette commande adaptée de la commande officielle donnée sur le site Wireguard:
wg genkey | tee >(wg pubkey | xargs echo Public key: ) >(xargs echo Private key:) &> /dev/null
Elle permet d'afficher la clé publique et privé sans les enregistrer nulle part.
Vous pouvez ainsi remplir le fichier de configuration sans avoir à ouvrir le moindre fichier supplémentaire.
Le nom de vos fichiers sera le nom de vos interfaces local. C'est-à-dire que si vous l'appelez Truc.conf, l'interface s'appellera Truc donc préférer un nom comme wg0 ou tun0 (ou ce que vous voulez, en faites).
Vous pourrez alors enregistrer le fichier dans /etc/wireguard, pour le client comme pour le serveur.Pour finir il suffit de démarrer le serveur avec la commande wg-quick. Le logiciel est intégré à systemd et vous pouvez également le démarrer par systemd avec la commande: systemctl start wg-quick@Truc, et vous pouvez automatiser son démarrage avec la commande: systemctl enable wg-quick@Truc
Une fois le serveur et le client activé, vous pouvez vérifier que tout fonctionne avec la commande wg. La commande vous donne toutes les informations concernant la configuration et les connexions en cours.
Si vous avez latest handshake, c'est que la connexion c'est fait. Et vous avez également le temps associer à la dernière connexion.
Voilà, Wireguard est très simple et je n'ai pas grand-chose d'autre à dire. Donc bonne configuration!!! ^^