WireGuard est-il un excellent VPN pour l'avenir?


Le temps est venu où le VPN n'est plus une sorte d'outil exotique pour les administrateurs système barbus. Les utilisateurs ont des tâches différentes, mais le fait est que tout le monde a besoin d'un VPN.


Le problème avec les solutions VPN actuelles est qu'elles sont difficiles à configurer correctement, coûteuses à entretenir et qu'elles sont également pleines de code hérité de qualité douteuse.


Il y a quelques années, le spécialiste canadien de la sécurité de l'information Jason A. Donenfeld a décidé qu'il devait endurer cela et a commencé à travailler sur WireGuard . WireGuard se prépare maintenant à être inclus dans le noyau Linux; il a même reçu des éloges de Linus Torvalds et du Sénat américain .


Les avantages déclarés de WireGuard par rapport aux autres solutions VPN:


  • Facile à utiliser.
  • Utilise la cryptographie moderne: cadre de protocole de bruit, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Code lisible compact, plus facile à rechercher pour les vulnérabilités.
  • Haute performance.
  • Spécifications claires et détaillées.

Une balle d'argent a-t-elle été trouvée? Est-il temps de creuser dans OpenVPN et IPSec? J'ai décidé de m'occuper de cela, et en même temps j'ai fait un script pour installer automatiquement un serveur VPN personnel .


Principes de fonctionnement


Les principes de fonctionnement peuvent être décrits comme suit:


  • Une interface WireGuard est créée, une clé privée et une adresse IP lui sont attribuées. Les paramètres des autres pairs sont chargés: leurs clés publiques, adresses IP, etc.
  • Tous les paquets IP arrivant à l'interface WireGuard sont encapsulés dans UDP et livrés en toute sécurité à d' autres homologues.
  • Les clients définissent l'adresse IP publique du serveur dans les paramètres. Le serveur reconnaît automatiquement les adresses externes des clients lorsque des données correctement authentifiées en proviennent.
  • Le serveur peut changer l'adresse IP publique sans interrompre le travail. Dans le même temps, il enverra une alerte aux clients connectés et ils mettront à jour leur configuration à la volée.
  • Le concept de routage Cryptokey est utilisé . WireGuard reçoit et envoie des paquets en fonction de la clé publique de l'homologue. Lorsque le serveur déchiffre un paquet correctement authentifié, son champ src est vérifié. S'il correspond à la allowed-ips authentifié, le paquet est reçu par l'interface WireGuard. Lors de l'envoi d'un paquet sortant, la procédure correspondante se produit: le champ dst du paquet est pris et l'homologue correspondant est sélectionné en fonction de celui-ci, le paquet est signé avec sa propre clé, chiffré avec la clé d'homologue et envoyé au point d'extrémité distant.

Toute la logique principale de WireGuard occupe moins de 4 000 lignes de code, tandis que OpenVPN et IPSec ont des centaines de milliers de lignes. Pour prendre en charge les algorithmes cryptographiques modernes, il est proposé d'inclure la nouvelle API cryptographique Zinc dans le noyau Linux. En ce moment, il y a une discussion sur la qualité de cette idée.


Performances


L'avantage de performance maximum (par rapport à OpenVPN et IPSec) sera perceptible sur les systèmes Linux, car WireGuard y est implémenté en tant que module de noyau. De plus, macOS, Android, iOS, FreeBSD et OpenBSD sont pris en charge, mais WireGuard fonctionne sur l'espace utilisateur avec toutes les implications de performances qui en résultent. Windows promet d'ajouter un support dans un avenir proche.


Résultats de référence sur le site officiel :



Mon expérience d'utilisation


Je ne suis pas un expert en configuration VPN. Une fois, j'ai configuré OpenVPN avec des poignées et c'était très morne, mais IPSec n'a même pas essayé. Trop de décisions doivent être prises, il est très facile de se tirer une balle dans le pied. Par conséquent, j'ai toujours utilisé des scripts prêts à l'emploi pour configurer le serveur.


Ainsi, WireGuard, de mon point de vue, est généralement idéal pour l'utilisateur. Toutes les décisions de bas niveau sont prises dans la spécification, donc le processus de préparation d'une infrastructure VPN typique ne prend que quelques minutes. Il est presque impossible de s'accumuler dans la configuration.


Le processus d'installation est décrit en détail sur le site officiel, je voudrais mentionner un excellent support pour OpenWRT .


Les clés de chiffrement sont générées par l'utilitaire wg :


 SERVER_PRIVKEY=$( wg genkey ) SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey ) CLIENT_PRIVKEY=$( wg genkey ) CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey ) 

Ensuite, vous devez créer la configuration du serveur /etc/wireguard/wg0.conf avec le contenu suivant:


 [Interface] Address = 10.9.0.1/24 PrivateKey = $SERVER_PRIVKEY [Peer] PublicKey = $CLIENT_PUBKEY AllowedIPs = 10.9.0.2/32 

et soulevez le tunnel avec le script wg-quick :


 sudo wg-quick up /etc/wireguard/wg0.conf 

Sur les systèmes avec systemd, vous pouvez utiliser sudo systemctl start wg-quick@wg0.service .


Sur la machine cliente, créez la configuration /etc/wireguard/wg0.conf :


 [Interface] PrivateKey = $CLIENT_PRIVKEY Address = 10.9.0.2/24 [Peer] PublicKey = $SERVER_PUBKEY AllowedIPs = 0.0.0.0/0 Endpoint = 1.2.3.4:51820 #  IP  PersistentKeepalive = 25 

Et soulevez le tunnel de la même manière:


 sudo wg-quick up /etc/wireguard/wg0.conf 

Il reste à configurer NAT sur le serveur pour que les clients puissent accéder à Internet, et vous avez terminé!


Cette facilité d'utilisation et la compacité de la base de code ont été obtenues en raison du rejet de la fonctionnalité de distribution des clés. Il n'y a pas de système de certificat compliqué et toute cette horreur d'entreprise; les clés de chiffrement courtes sont distribuées approximativement comme les clés SSH. Mais à cet égard, un problème se pose: WireGuard ne sera pas si facile à mettre en œuvre dans certains réseaux existants.


Parmi les lacunes, il convient de noter que WireGuard ne fonctionnera pas via un proxy HTTP, car il n'y a que le protocole UDP comme transport. La question est, est-il possible de brouiller le protocole? Bien sûr, ce n'est pas une tâche VPN directe, mais pour OpenVPN, par exemple, il existe des moyens de se déguiser en HTTPS, ce qui aide les résidents des pays totalitaires à utiliser pleinement Internet.


Conclusions


En résumé, c'est un projet très intéressant et prometteur, vous pouvez maintenant l'utiliser sur des serveurs personnels. Quel est le profit? Haute performance sur les systèmes Linux, facilité d'installation et de support, base de code compacte et lisible. Cependant, il est trop tôt pour se précipiter pour transférer une infrastructure complexe vers WireGuard, cela vaut la peine d'attendre l'inclusion dans le noyau Linux.


Pour économiser mon temps (et votre temps), j'ai développé le programme d'installation automatique de WireGuard . Avec lui, vous pouvez créer un VPN personnel pour vous et vos amis sans même rien comprendre à ce sujet.

Source: https://habr.com/ru/post/fr432686/


All Articles