- Contenu
- Wireguard
Wireguard¶
Le VPN Kiss, utilisant les dernières règles de l'art, construit pour être audité & performant ! au revoir IPSec & OpenVPN !
Attention cependant Wireguard est un VPN de niveau 3 ! (on ne peut pas par exemple avoir du broadcast pour DHCP ou des VIP Keepalived)
Aquilenet utilise Wireguard avec succès depuis mi-2019, pour interconnecter une partie de ses îlots à son [[infrastructure:|cœur de réseau]].
Le 8 décembre 2019, Wireguard a enfin fait son entrée dans la branche 'net-next' du noyau Linux et pourrait donc faire partie intégrante de la version 5.6 prévue début 2020.
Aujourd'hui Wireguard est intégré dans les noyaux des principaux systèmes: Linux/*BSD/Windows/Mac
Chez Aquilenet¶
Deux serveurs pour du failover (avec BGP) : Hypnos et Thanatos.
Installation¶
Configuration¶
Config serveur (Hypnos)¶
Section Interface¶
- Ajouter à la mano
umask 077
#wg genkey > /etc/wireguard/private
wg genkey | tee /etc/wireguard/private | wg pubkey > /etc/wireguard/publickey
wg set wg0 private-key /etc/wireguard/private
ip link set wg0 up
/etc/wireguard/wg0.conf
[Interface] ListenPort = 50000 FwMark = 0x64 PrivateKey = `cat /etc/wireguard/private`
/etc/network/interfaces
On ajoute les informations suivantes pour Wireguard (on n'utilise pas wg-quick)
Chaque IP cliente est ajoutée dans la table de routage.
auto wg0 iface wg0 inet static address 185.233.101.127 netmask 255.255.255.255 pre-up /sbin/ip link add dev $IFACE type wireguard || true pre-up wg setconf $IFACE /etc/wireguard/$IFACE.conf || true post-up /etc/wireguard/wg-addroute.sh add pre-down /etc/wireguard/wg-addroute.sh del #pre-up wg addconf $IFACE /etc/wireguard/users/*/$IFACE.conf || true up /sbin/ip link set $IFACE up || true up /sbin/ip route add default dev $IFACE || true down /sbin/ip link del dev $IFACE || true iface wg0 inet6 static address 2a0c:e300:13::1/48
- /etc/wireguard/wg-addroute.sh
::: info
Suggestion d'ajout de l'action replace
:::
#!/bin/bash
interface="wg0"
if [[ $1 == "add" || $1 == "del" || $1 == "replace"]]; then # Ajout de replace pour permettre l'ajout de routes à la conf existante
action="$1"
else
exit 1
fi
allowed_ips=$(grep -i allowedip /etc/wireguard/wg0.conf | awk -F= '{print $2}')
for ip_line in $allowed_ips; do
for ip in $ip_line; do
ip=$(echo "$ip" | sed 's/[ ,]$//')
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ ]]; then
ip route $action $ip dev $interface proto static
elif [[ $ip =~ ^[a-f0-9:]+ ]]; then
ip -6 route $action $ip dev $interface proto static
else
exit 1
fi
done
done
La section [Peer]
suivante doit être ajoutée à la configuration de l'utilisateur
[Peer] Endpoint = hypnos.aquilenet.fr:50000 PublicKey = XRhI4WqBipwY21pxPZ9Q7EWkypnQCKKtJjqu2tUUTVo= AllowedIPs = 0.0.0.0/0, ::/0
Le paramètre AllowedIPs
définit les adresses qui seront routées dans le VPN par l'utilisateur.
Si l'utilisateur ne veut router que de l'ipv6 il peut la positionner à la valeur AllowedIPs = ::/0
Ou, s'il ne veut router qu'Aquilenet AllowedIPs = 185.233.100.0/22, 2a0c:e300::/29
Sections pairs¶
Chaque client VPN est un pair Wireguard et aura sa propre section [Peer]
Chaque section est constitué d'au moins 2 éléments :
# User
: Pour identifier rapidement le propriétaire de la connexionPublicKey
: La clef publique du client, elle doit être fournie par l'utilisateur et peut être échangée par n'importe quel canal.AllowedIPs
: Les adresses ip attribuées à l'utilisateur. Ce paramètre est constitué au minimum d'une adresse IPv6 ou IPv4- L'adresse IPv4 est une adresse disponible du réseau 185.233.101.0/24
- L'adresse IPv6 peut être :
- une adresse /128 disponible du réseau 2a0c:e300:13::/64
- un préfixe /64 du réseau 2a0c:e300:13::/48 attribué par l'équipe admin
- un préfixe /56 du réseau 2a0c:e300:5::/48 attribué par l'équipe admin (Attention, ces réseaux sont aussi utilisés pour les connexions OpenVPN)
Les paramètres suivants optionnels peuvent être ajoutés sur demande :
PresharedKey
: Ce paramètre permet d'ajouter une couche de chiffrement symétrique pour ajouter une résistance post-quantique. Il doit être échangé avec l'utilisateur par un canal de communication sécurisé. Dans le cadre d'une utilisation en tant qu'accès Internet public, ce paramètre n'est pas réellement utile.Endpoint
: Si l'utilisateur dispose d'une adresse IP fixe, ce paramètre permet au serveur d'initier la connexion vers le pair distant. Ce paramètre n'apporte que peu d'avantage dans le cadre d'une utilisation en tant qu'accès Internet, ni même pour de l'auto-hébergement.PersistentKeepalive
: La plus part des utilisateurs n'auront pas besoin de ce paramètre
Modèle de section :
[Peer] # User PublicKey = $user_pubkey AllowedIPs = [185.233.101.$user_ipv4/32, ]2a0c:e300:(13::$user_ipv6/128|13:$user_64prefix::/64|5:$user_56prefix::/56
Une fois la section [Peer]
ajoutée ou en cas de modification sur le fichier /etc/wireguard/wg0.conf
exécuter les commande suivantes pour prise en compte des changements :
wg syncconf wg0 /etc/wireguard/wg0.conf /etc/wireguard/wg-addroute.sh replace
Client¶
Voir plutôt [[infrastructure:Pom_buster_install_2019-07]] pour une configuration détaillée.
umask 077 wg genkey | tee /etc/wireguard/private | wg pubkey > /etc/wireguard/publickey wg set wg0 private-key /etc/wireguard/private ip link add dev wg0 type wireguard ip link set wg0 up
Archives¶
1er test: sacha's Home (Fibre Bouygues) --> @Hypnos (VM Aquilenet)¶
root@hypnos:/etc/wireguard# iperf3 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 10.33.33.2, port 60038 [ 5] local 10.33.33.1 port 5201 connected to 10.33.33.2 port 60040 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 15.1 MBytes 127 Mbits/sec [ 5] 1.00-2.00 sec 19.9 MBytes 167 Mbits/sec [ 5] 2.00-3.00 sec 20.1 MBytes 169 Mbits/sec [ 5] 3.00-4.00 sec 20.1 MBytes 169 Mbits/sec [ 5] 4.00-5.00 sec 19.7 MBytes 166 Mbits/sec [ 5] 5.00-6.00 sec 20.0 MBytes 168 Mbits/sec [ 5] 6.00-7.00 sec 20.2 MBytes 169 Mbits/sec [ 5] 7.00-8.00 sec 20.2 MBytes 170 Mbits/sec [ 5] 8.00-9.00 sec 20.1 MBytes 169 Mbits/sec [ 5] 9.00-10.00 sec 20.2 MBytes 169 Mbits/sec [ 5] 10.00-10.03 sec 566 KBytes 165 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 5] 0.00-10.03 sec 0.00 Bytes 0.00 bits/sec sender [ 5] 0.00-10.03 sec 196 MBytes 164 Mbits/sec receiver ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
root@hypnos:/etc/wireguard# wg interface: wg0 public key: Va0X1zOpRc9471Aa3DEUUy7UkAv5aq5SojtIPqOSqwg= private key: (hidden) listening port: 50000 peer: VEfmgnq/aXPX3qBB7Q2fgxAawQdfUYZDRKEQSPC8tnA= endpoint: 5.51.0.155:3418 allowed ips: 10.33.33.0/24 latest handshake: 4 minutes, 30 seconds ago transfer: 208.75 MiB received, 6.68 MiB sent
InstallDebian sur Apu2¶
apt-get install aptitude \ dhcpd resolvconf \ curl dnsutils htop iperf3 tcpdump tmux whois \ debian-security-support debsums needrestart
#!/bin/bash gw=`ip route | awk '/default/ { print $3 }'` sysctl -w net.ipv4.ip_forward=1 ip link add dev wg0 type wireguard ip address add dev wg0 10.33.33.2/24 ip link set up dev wg0 ip route add 185.233.100.19/32 via $gw dev enp1s0 ip route del default ip route add default dev wg0 wg setconf wg0 /etc/wireguard/wg0.conf
https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8
https://git.zx2c4.com/WireGuard/about/src/tools/wg.8