
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 . Actuellement, WireGuard est en cours d'intĂ©gration dans le noyau Linux, il a mĂȘme reçu des Ă©loges de la part de et dans .
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é .
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éé .
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 à 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é . 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-ipsdu 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. . 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 :

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 sur le site officiel, il convient de souligner l'excellente .
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/32et établir le tunnel avec le script wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confDans 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.confIl 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Ă© . 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
