--- title: Howto Wireguard categories: sysadmin network vpn ... * Site officiel WireGuard : * OpenBSD Manpage * Debian Manpage [WireGuard](https://www.wireguard.com/) est une solution de communication Open source qui implémente la technique de réseau privé virtuel (VPN) pour créer des connexions point à point sécurisées. C'est une solution simple, moderne et rapide qui utilise une cryptographie moderne. Il vise à être plus rapide, plus simple et plus léger que IPsec. Il est également considérablement plus performant que OpenVPN. Initialement publié pour le noyau Linux, il est désormais multiplateforme (Windows, macOS, BSD, iOS, Android) et largement déployable. Il est déjà considéré comme la solution VPN la plus sécurisée et la plus simple à utiliser. ## Installation Sous Debian (Kernel >= 5.6) et OpenBSD (>= 6.8), Wireguard fait partie du Kernel. ### Debian ~~~ # apt install wireguard $ wg --version wireguard-tools v1.0.20210223 - https://git.zx2c4.com/wireguard-tools/ ~~~ ### OpenBSD ~~~ # pkg_add wireguard-tools $ wg --version wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/ ~~~ ## Configuration du serveur Autoriser le routage via `sysctl` : ~~~ # echo "net.ipv4.conf.all.forwarding = 1" >> /etc/sysctl.d/wireguard.conf # echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.d/wireguard.conf # sysctl -p /etc/sysctl.d/wireguard.conf ~~~ Générer une clé privée pour le serveur et sa clé publique : ~~~ # mkdir /etc/wireguard/keys/ # wg genkey | tee /etc/wireguard/keys/serveur_priv | wg pubkey > /etc/wireguard/keys/serveur_pub ~~~ Créer un fichier de configuration `/etc/wireguard/wg0.conf`, pour l'interface `wg0` : ~~~ [Interface] Address = 192.0.2.1/24, 2001:db8::1/64 SaveConfig = false ListenPort = 51820 PrivateKey = ***** # Contenu de /etc/wireguard/keys/serveur_priv ~~~ Avec : * `Address` : l'IP dans le réseau WireGuard attribuée au serveur * `SaveConfig` : si true, la configuration est mise en mémoire (et protégée) tout le temps que l'interface est active ; signifie que si le fichier de configuration est modifié pendant que le VPN est UP, alors il sera remis comme il était au moment de son démarrage lorsqu'il sera coupé * `ListenPort` : le port d'écoute de WireGuard, 51820 est celui par défaut * `PrivateKey` : la valeur de la clé privée du serveur, générée plus tôt Il suffit ensuite de démarrer notre VPN avec `wg-quick` : ~~~ # wg-quick up wg0 OU # systemctl start wg-quick@wg0.service ~~~ On peut voir la configuration en cours avec `wg` : ~~~ # wg interface: wg0 public key: ***** private key: (hidden) listening port: 51820 ~~~ Enfin, on peut activer le démarrage automatique de notre interface `wg0` : ~~~ # systemctl enable wg-quick@wg0.service ~~~ ## Déclaration des clients côté serveur Générer une clé privée pour un client et sa clé publique, puis une clé pré-partagée : ~~~ # wg genkey | tee /etc/wireguard/keys/client_priv | wg pubkey > /etc/wireguard/keys/client_pub # wg genpsk > /etc/wireguard/keys/client_psk ~~~ Dans le fichier de configuration `/etc/wireguard/wg0.conf`, sous le bloc `[Interface]`, on crée un bloc `[Peer]` par client : ~~~ [Peer] # Client 1 PublicKey = ***** # Contenu de /etc/wireguard/keys/client_pub PresharedKey= ***** # Contenu de /etc/wireguard/keys/client_psk AllowedIPs = 192.0.2.0/24, 2001:db8::/64 ~~~ Puis on redémarre l'interface `wg0` : ~~~ # wg-quick down wg0 && wg-quick up wg0 OU # systemctl restart wg-quick@wg0.service ~~~ Et on peut vérifier que la déclaration du peer est bonne : ~~~ # wg interface: wg0 public key: ***** private key: (hidden) listening port: 51820 peer: ***** allowed ips: 192.0.2.0/24, 2001:db8::/64 ~~~ Quand le client aura monté sa connexion WireGuard, son adresse IP sera visible dans une valeur `endpoint`. ## Configuration du client Il faut donner au client les paramètres générés côté serveur : ~~~ [Interface] PrivateKey = ***** # Contenu de /etc/wireguard/keys/client_priv Address = 192.0.2.2/24, 2001:db8::2/64 [Peer] PublicKey = ***** # Contenu de /etc/wireguard/keys/serveur_pub PresharedKey = ***** # Contenu de /etc/wireguard/keys/client_psk Endpoint = :51820 AllowedIPs = 0.0.0.0/0, ::/0 ~~~ ## Débogage Sous OpenBSD : En cas de besoin, il est possible d'activer ou désactiver le débogage. ~~~ # ifconfig wg0 debug # ifconfig wg0 -debug ~~~