WireGuard — un VPN prometteur pour l'avenir ?

WireGuard — un VPN prometteur pour l'avenir ?

Le moment est venu où le VPN n'est plus un outil exotique réservé aux administrateurs systèmes barbus. Les utilisateurs ont des besoins variés, mais il est indéniable que le VPN est devenu nécessaire pour tout le monde.

Le problème des solutions VPN actuelles est qu'elles sont difficiles à configurer correctement, coûteuses à entretenir et qu'elles contiennent beaucoup 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 en avait assez et a commencé à travailler sur WireGuard. Actuellement, WireGuard est en cours d'intégration dans le noyau Linux, il a même reçu des éloges de la part de Linus Torvalds et dans au sénat américain.

Les avantages déclarés de WireGuard par rapport à d'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 à analyser pour les vulnérabilités.
  • Haute performance.
  • Clair et bien pensé spécification.

Est-ce qu'une solution miracle a été trouvée ? Est-il temps de mettre OpenVPN et IPSec au placard ? J'ai décidé de me pencher sur la question et j'ai également créé un script pour l'installation automatique d'un serveur VPN personnel.

Principes de fonctionnement

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

  • Une interface WireGuard est créée, à laquelle une clé privée et une adresse IP sont attribuées. Les paramètres des autres pairs sont chargés : leurs clés publiques, adresses IP, etc.
  • Tous les paquets IP entrants sur l'interface WireGuard sont encapsulés dans UDP et livrés en toute sécurité à d'autres pairs.
  • Les clients saisissent l'adresse IP publique du serveur dans les paramètres. Le serveur prend automatiquement connaissance des adresses externes des clients lorsqu'il reçoit des données correctement authentifiées.
  • Le serveur peut changer d'adresse IP publique sans interrompre le service. Dans ce cas, il envoie une notification aux clients connectés et ceux-ci mettent à jour leur configuration à la volée.
  • Le concept de routage est utilisé Cryptokey Routing. WireGuard reçoit et envoie des paquets sur la base de la clé publique du pair. Lorsque le serveur déchiffre un paquet correctement authentifié, il vérifie son champ src. S'il correspond à la configuration allowed-ips du pair authentifié, le paquet est accepté par l'interface WireGuard. Lors de l'envoi d'un paquet sortant, une procédure similaire est appliquée : le champ dst est pris en compte et, sur cette base, le pair correspondant est sélectionné, le paquet est signé avec sa propre clé, chiffré avec la clé du pair et envoyé à l'endpoint distant.

Toute la logique principale de WireGuard occupe moins de 4000 lignes de code, tandis qu'OpenVPN et IPSec en comptent des centaines de milliers. Pour prendre en charge les algorithmes cryptographiques modernes, il est proposé d'intégrer une nouvelle API cryptographique dans le noyau de Linux. Zinc. Actuellement, une discussion est en cours pour déterminer si c'est une bonne idée.

Performance

Le maximum des performances (comparé à OpenVPN et IPSec) sera particulièrement visible sur les systèmes Linux, car WireGuard y est implémenté sous forme de module noyau. De plus, il prend en charge macOS, Android, iOS, FreeBSD et OpenBSD, mais dans ces systèmes, WireGuard s'exécute en espace utilisateur avec toutes les conséquences sur les performances. Un support pour Windows est promis dans un avenir proche.

Les résultats des benchmarks avec le site officiel:

WireGuard — un VPN prometteur pour l'avenir ?

Mon expérience d'utilisation

Je ne suis pas un expert en configuration VPN. Une fois, j'ai configuré OpenVPN à la main et cela a été très laborieux, et je n'ai même pas tenté IPSec. Il y a trop de décisions à prendre, et il est très facile de se tirer une balle dans le pied. C'est pourquoi j'ai toujours utilisé des scripts prêts à l'emploi pour configurer le serveur.

Donc, à mon avis, WireGuard est vraiment idéal pour l'utilisateur. Toutes les solutions de bas niveau sont incluses dans la spécification, c'est pourquoi le processus de préparation d'une infrastructure VPN typique ne prend que quelques minutes. Il est presque impossible de se tromper dans la configuration.

Processus d'installation décrit en détail sur le site officiel, il convient de souligner l'excellente prise en charge d'OpenWRT.

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

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

Ensuite, il faut créer un fichier de configuration 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 établir le tunnel avec le script wg-quick:

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

Dans les systèmes avec systemd, on peut utiliser à la place sudo systemctl start wg-quick@wg0.service.

Sur la machine cliente, créer un fichier de 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 externe du serveur
PersistentKeepalive = 25 

Et établir 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 c'est tout prêt !

Cette simplicité d'utilisation et la compacité de la base de code ont été réalisées en renonçant à la fonctionnalité de distribution de clés. Il n'y a pas de système complexe de certificats ou tout cet horrible corporate, les clés de chiffrement courtes se distribuent à peu près comme des clés SSH. Cependant, cela pose un problème : il ne sera pas si facile d'intégrer WireGuard dans certains réseaux existants.

Parmi les inconvénients, il faut noter que WireGuard ne fonctionnera pas via un proxy HTTP, car il n'utilise que le protocole UDP comme transport. La question se pose, est-il possible d'obfusquer 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 camoufler sous HTTPS, ce qui aide les habitants des pays totalitaires à utiliser Internet pleinement.

Conclusions

En résumé, c'est un projet très intéressant et prometteur, que l'on peut déjà utiliser sur des serveurs personnels. Quels sont les avantages ? Haute performance sur les systèmes Linux, simplicité d'installation et de support, base de code compacte et lisible. Cependant, il est encore prématuré de tout transférer sur WireGuard, il vaut mieux attendre son inclusion dans le noyau Linux.

Pour économiser mon temps (et le vôtre), j'ai développé un installateur automatique de WireGuard. Avec celui-ci, vous pouvez mettre en place un VPN personnel pour vous et vos connaissances sans même rien y comprendre.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster