WireGuard est-il le grand VPN du futur ?

WireGuard est-il le grand VPN du futur ?

Le moment est venu où le VPN n’est plus un 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 à maintenir et regorgent de code existant de qualité douteuse.

Il y a plusieurs années, Jason A. Donenfeld, spécialiste canadien de la sécurité de l'information, a décidé qu'il en avait assez et a commencé à travailler sur WireGuard. WireGuard est en cours de préparation pour être inclus dans le noyau Linux et a même reçu les éloges de Linus Torvalds et Sénat américain.

Avantages revendiqués de WireGuard par rapport aux autres solutions VPN :

  • Facile à utiliser.
  • Utilise une cryptographie moderne : Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Code compact et lisible, plus facile à rechercher pour les vulnérabilités.
  • Haute performance.
  • Clair et élaboré spécification.

Une solution miracle a-t-elle été trouvée ? Est-il temps d’enterrer OpenVPN et IPSec ? J'ai décidé de m'occuper de ça, et en même temps je l'ai fait script pour installer automatiquement un serveur VPN personnel.

Principes de travail

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

  • Une interface WireGuard est créée et 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 en UDP et livré en toute sécurité d'autres pairs.
  • Les clients spécifient 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 sont reçues de leur part.
  • Le serveur peut modifier l'adresse IP publique sans interrompre son travail. Parallèlement, il enverra une alerte aux clients connectés et ceux-ci mettront à jour leur configuration à la volée.
  • La notion de routage est utilisée Routage de clé de chiffrement. WireGuard accepte et envoie des paquets en fonction de la clé publique du homologue. Lorsque le serveur décrypte un paquet correctement authentifié, son champ src est vérifié. Si cela correspond à la configuration allowed-ips homologue 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, sur cette base, le homologue correspondant est sélectionné, le paquet est signé avec sa clé, crypté avec la clé du homologue et envoyé au point final distant .

Toute la logique de base de WireGuard occupe moins de 4 XNUMX lignes de code, tandis qu'OpenVPN et IPSec en contiennent des centaines de milliers. Pour prendre en charge les algorithmes cryptographiques modernes, il est proposé d'inclure une nouvelle API cryptographique dans le noyau Linux Zinc. Il y a actuellement une discussion en cours pour savoir si c'est une bonne idée.

Performance

L'avantage maximal en termes de performances (par rapport à OpenVPN et IPSec) sera perceptible sur les systèmes Linux, puisque WireGuard y est implémenté en tant que module du noyau. De plus, macOS, Android, iOS, FreeBSD et OpenBSD sont pris en charge, mais WireGuard s'exécute dans l'espace utilisateur avec toutes les conséquences qui en découlent sur les performances. La prise en charge de Windows devrait être ajoutée dans un avenir proche.

Résultats de référence avec site officiel:

WireGuard est-il le grand VPN du futur ?

Mon expérience d'utilisation

Je ne suis pas un expert VPN. Une fois, j’ai configuré OpenVPN manuellement et c’était très fastidieux, et je n’ai même pas essayé IPSec. Il y a trop de décisions à prendre, c'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, de sorte que le processus de préparation d'une infrastructure VPN typique ne prend que quelques minutes. Il est quasiment impossible de tricher dans la configuration.

Processus d'installation décrit en détail sur le site officiel, je voudrais souligner séparément l'excellent Prise en charge d'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 une configuration de 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 élève le tunnel avec un script wg-quick:

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

Sur les systèmes avec systemd, vous pouvez l'utiliser à la place sudo systemctl start [email protected].

Sur la machine client, créez une 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 relevez le tunnel de la même manière :

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

Il ne reste plus qu'à configurer le NAT sur le serveur pour que les clients puissent accéder à Internet, et le tour est joué !

Cette facilité d'utilisation et cette compacité de la base de code ont été obtenues en éliminant la fonctionnalité de distribution de clés. Il n’existe pas de système de certificat complexe et toute cette horreur d’entreprise ; les clés de chiffrement courtes sont distribuées un peu comme les clés SSH. Mais cela pose un problème : WireGuard ne sera pas si simple à mettre en œuvre sur certains réseaux existants.

Parmi les inconvénients, il convient de noter que WireGuard ne fonctionnera pas via un proxy HTTP, puisque seul le protocole UDP est disponible en tant que transport. La question se pose : sera-t-il possible de brouiller le protocole ? Bien sûr, ce n'est pas la tâche directe d'un VPN, 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.

résultats

Pour résumer, c'est un projet très intéressant et prometteur, vous pouvez déjà l'utiliser sur des serveurs personnels. Quel est le bénéfice ? Hautes performances 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 : il vaut la peine d'attendre son inclusion dans le noyau Linux.

Pour gagner mon (et votre) temps, j'ai développé Installateur automatique WireGuard. Avec son aide, vous pouvez configurer un VPN personnel pour vous et vos amis sans même rien y comprendre.

Source: habr.com

Ajouter un commentaire