Wireguard - Mise en place
Configuration serveur Wireguard
Installation
Sous debian 12, wireguard est déjà installé dans les packages de base. S’il n’est pas installé :
apt update && apt install wireguard
Configuration Serveur
Génération de fichier contenant la clé publique du serveur, ainsi que la clé privée :
root@wireguard:~# wg genkey |sudo tee /etc/wireguard/wg-srv-private.key | wg pubkey | sudo tee /etc/wireguard/wg-srv-public.key
Cela va générer 2 fichiers :
- wg-srv-private.key → Clé privée pour le serveur
- wg-srv-public.key → Clé publique, commune aux clients, à renseigner sur les configurations des clients
Ensuite, on va créer le fichier de configuration, contenant les paramètres du serveur, ainsi que la configuration des clients autorisés à se connecter dessus.
On va donc créer le fichier /etc/wireguard/wg0.conf :
root@wireguard:~# vi /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.8.0/24
SaveConfig = true
ListenPort = 51820
PrivateKey = mIfuF3/hSHJVvkRwlxWCBcEIbQs36SZqp882YMgMHkk=
Détail des options :
- Address : Adresse IP du serveur, utilisée pour la communication entre les clients et le serveur
- SaveConfig : Pour conserver la config quand le VPN est actif, protégeant la config après arrêt du tunnel
- ListenPort : port d’écoute de Wiregard
- PrivateKey : clé privée du serveur, pour le chiffrement des échanges
Ensuite on démarre notre tunnel wireguard :
sudo wg-quick up wg0
Après ça, on devrait voir apparaitre notre tunnel, via la commande « ip -a » :
root@wireguard:~# ip a show dev wg0
13: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.8.254/24 scope global wg0
valid_lft forever preferred_lft forever
Et aussi avec la commande « wg show », pour voir les interfaces de wireguard actives :
root@wireguard:~# wg show
interface: wg0
public key: snWqZfuc54sEVrWBghBkxi1LkO1X4W1t0sjtJD5S9n8=
private key: (hidden)
listening port: 41820
Pour que notre configuration soit persistante et active après redémarrage du serveur, on créer un service associé :
sudo systemctl enable wg-quick@wg0.service
Pour que les paquets soient routées d’une interface à une autre, il faut activer l’IP Forwarding :
Dans le fichier /etc/sysctl.conf, décommenter la ligne suivante et modifier la valeur :
net.ipv4.ip_forward=1
Il faut aussi activer l’IP masquerade, pour mettre en place le NAT sur la machine.
Configuration du parefeu nftable :
root@wireguard:~# cat /yziact/scripts/nft.fw
table inet filter {
chain input {
type filter hook input priority filter; policy accept;
ip saddr 10.8.8.0/24 accept
udp dport 41820 accept
ct state vmap { invalid : drop, established : accept, related : accept }
drop
}
chain output {
type filter hook output priority filter; policy accept;
ct state invalid drop
}
chain prerouting {
type nat hook prerouting priority filter; policy accept;
}
chain postrouting {
type nat hook postrouting priority filter; policy accept;
ip saddr 10.8.8.0/24 oif "ens256" snat ip to 192.168.1.1
ip saddr 10.8.8.0/24 masquerade
}
}
Ajout d'un client
Après avoir créer un couple de clé privée / publique sur le client, via wireguard sous windows, il faut ajouter le client sur le serveur.
Arret du service wgà:
systemctl stop wg-quick@wg0.service
Ajout du client dans le fichier /etc/wireguard.wg0.conf:
# Config VPN Exemple
[Peer]
PublicKey = 4eLau52rcERa1CTCbISUs3ysCnkpjqb1j0K2fhuKBTE=
AllowedIPs = 10.8.8.1/32
On relance le service de wireguard:
systemctl start wg-quick@wg0.service
On peut aussi utiliser la commande suivante sur le serveur, pour ajouter le client (évitant de redémarrer le service):
sudo wg set wg0 peer 4eLau52rcERa1CTCbISUs3ysCnkpjqb1j0K2fhuKBTE= allowed-ips 10.8.8.1/32
la configuration côté client, doit être la suivante:
[Interface]
PrivateKey = client_priv_key
Address = 10.8.8.1/24
[Peer]
PublicKey = server_pub_key
AllowedIPs = 10.8.8.0/24
Endpoint = ip_publique_serverur_wg:41820
Si tout est fonctionnel, notre client doit pouvoir pinguer le serveur.
Docs supplémentaires
→ Digital Ocean: wireguard
→ IT-Connect: Mise en place wireguard debian 11