22
0
Fork 0

Amélioration du Howto avec notamment l'ajout de la configuration sous OpenBSD

This commit is contained in:
Tristan PILAT 2020-06-29 15:18:58 +02:00
parent 63913a4bf3
commit 69e0469446
1 changed files with 157 additions and 0 deletions

View File

@ -1,3 +1,144 @@
---
title: Howto Wireguard
categories: sysadmin network vpn
...
* OpenBSD Manpage <https://man.openbsd.org/wg>
* Debian Manpage <https://manpages.debian.org/unstable/wireguard-tools/wg.8.en.html>
[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 désormais partie du Kernel.
## Configuration
### Manuelle sous OpenBSD
On commence par créer une interface wg en générant une clé privée et en indiquant un port d'écoute (UDP).
~~~
server# ifconfig wg0 create wgkey $(openssl rand -base64 32) wgport 51820
~~~
On voit maintenant la clé publique à utiliser côté client « wgpubkey » au retour de la commande qui suit.
~~~
server# ifconfig wg0
wg0: flags=8082<BROADCAST,NOARP,MULTICAST> mtu 1420
index 9 priority 0 llprio 3
wgport 51820
wgpubkey gbLaHdkEhFxikmRaC5seub45rVQBZcHuzZFMq/ylXg8=
groups: wg
~~~
On utilise la même commande côté client sans besoin ici d'indiquer le port d'écoute puisqu'il s'agit d'une configuration cliente.
~~~
client# ifconfig wg0 create wgkey $(openssl rand -base64 32)
client# ifconfig wg0
wg0: flags=8082<BROADCAST,NOARP,MULTICAST> mtu 1420
index 13 priority 0 llprio 3
wgpubkey x90CP/5AdicGeJxYY+rj0uXGtE+dvW9Dyi5SL8HJsSg=
groups: wg
~~~
On note la clé publique affichée côté client.
Côté serveur, on définit les clients autorisés. Il s'agit des adresses IP à partir desquelles le traffic entrant à déchiffrer sera autorisé. On indique donc l'adresse IP et la clé publique du client à autoriser :
~~~
server# ifconfig wg0 wgpeer x90CP/5AdicGeJxYY+rj0uXGtE+dvW9Dyi5SL8HJsSg= wgaip 203.0.113.2/32
server# ifconfig wg0
wg0: flags=8082<BROADCAST,NOARP,MULTICAST> mtu 1420
index 9 priority 0 llprio 3
wgport 51820
wgpubkey gbLaHdkEhFxikmRaC5seub45rVQBZcHuzZFMq/ylXg8=
wgpeer x90CP/5AdicGeJxYY+rj0uXGtE+dvW9Dyi5SL8HJsSg=
tx: 0, rx: 0
wgaip 203.0.113.2/32
groups: wg
~~~
On fait la même chose côté client en indiquant également l'adresse et le port à utiliser pour se connecter au serveur. Pour pouvoir envoyer tout le trafic via le tunnel VPN, les adresses IP autorisées sont définies sur 0.0.0.0/0.
~~~
client# ifconfig wg0 wgpeer gbLaHdkEhFxikmRaC5seub45rVQBZcHuzZFMq/ylXg8= wgendpoint vpn.example.com 51820 wgaip 0.0.0.0/0
client# ifconfig wg0
wg0: flags=8082<BROADCAST,NOARP,MULTICAST> mtu 1420
index 13 priority 0 llprio 3
wgpubkey x90CP/5AdicGeJxYY+rj0uXGtE+dvW9Dyi5SL8HJsSg=
wgpeer gbLaHdkEhFxikmRaC5seub45rVQBZcHuzZFMq/ylXg8=
wgendpoint 203.0.113.1 51820
tx: 0, rx: 0
wgaip 0.0.0.0/0
groups: wg
~~~
Enfin, il ne nous reste plus qu'à attribuer une adresse IP de chaque côté.
~~~
server# ifconfig wg0 192.0.2.1/24 up
~~~
~~~
client# ifconfig wg0 192.0.2.2/24 up
~~~
On peut maintenant tester le bon fonctionnement du VPN :
~~~
client$ ping 192.0.2.1
PING 192.0.2.1 (192.0.2.1): 56 data bytes
64 bytes from 192.0.2.1: icmp_seq=0 ttl=255 time=32.350 ms
64 bytes from 192.0.2.1: icmp_seq=1 ttl=255 time=25.615 ms
~~~
Côté client on peut ajouter des routes vers des IPs spécifiques voire plus généralement la route par défaut.
Pour une configuration « roadwarrior », par exemple, deux routes sont nécéssaires :
* Une route spécifique vers l'IP publique du serveur WireGuard avec une priorité importante
* Une route par défaut vers l'IP privée du serveur avec une priorité moindre
~~~
client# route add -priority 2 198.51.100.1 192.0.2.1
client# route add -priority 7 default 192.0.2.1
~~~
### Persistante sous OpenBSD
__Côté serveur__
Création d'une interface wg contenant la clé privée, le port d'écoute, le ou les clients autorisés ainsi que l'IP privée du serveur.
On générera préalablement une clé privée à l'aide de la commande « openssl rand -base64 32 ». La clé publique à indiquer pour « wgpeer » sera la sortie de « ifconfig wg0 | wgpubkey » sur le client.
~~~
server# cat /etc/hostname.wg0
wgkey XXXXXXXXXXXXXXXXXXXXX
wgport 51820
wgpeer x90CP/5AdicGeJxYY+rj0uXGtE+dvW9Dyi5SL8HJsSg= 203.0.113.2/32
inet 192.0.2.1/24
up
~~~
__Côté client__
On fait la même chose côté client à la différence que l'on omettra le paramètre « wgport ». On peut également indiquer des routes à charger lors de l'initialisation de l'interface. La clé publique à indiquer pour « wgpeer » sera la sortie de « ifconfig wg0 | wgpubkey » sur le serveur.
~~~
client# cat /etc/hostname.wg0
wgkey XXXXXXXXXXXXXXXXXXXXX
wgpeer gbLaHdkEhFxikmRaC5seub45rVQBZcHuzZFMq/ylXg8= wgendpoint vpn.example.com 51820 wgaip 0.0.0.0/0
inet 192.0.2.2/24
#!route add -priority 2 198.51.100.1 192.0.2.1
#!route add -priority 7 default 192.0.2.1
up
~~~
### Sous Debian
Sur le serveur :
~~~
@ -25,3 +166,19 @@ Sur le client :
# wg
# wg set wg0 peer ${La clé publique du serveur} allowed-ips 10.10.10.1/32 endpoint ${IPWAN serveur:port}
~~~
## 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
~~~
## Liens
* [Creating a Wireguard VPN on OpenBSD](https://xosc.org/wireguard.html)
* [Simple-network-interface](https://www.wireguard.com/#simple-network-interface)