Cette procédure a été créée dans la cadre de l’association Niortaise Mémoire Vive. Si vous avez des suggestions pour l’améliorer n’hésitez pas à me contacter.
Dominique Renaudeau
Paramètres de mon serveur sous Alpine Linux
IP 192.168.1.*** (fixe) – Port SSH : 22**
Box
Ajout d’un transfert de port UDP dans la box : port 518** vers 192.168.1.***
Paramètres à remplacer :
- 192.168,1,*** – Adresse IP de votre serveur VPN WireGuard.
- 22** – Port SSH, 22 par défaut, on peut le personnaliser.
- 518** – Port utilisé par le serveur VPN WireGuard,
- Le réseau pour le VPN est le 10.5.0.0/24, l’IP du serveur 10.5.0.1, l’IP pour le client 10.5.0.3 (vous pouvez modifier ces paramètres).
Installation du serveur Wiregard
Les commandes sont à exécuter en administrateur root (su).
On se connecte en SSH depuis Linux ou Windows avec PuTTY pour l’installation (adaptez utilisateur, IP et port SSH) :
ssh utilisateur@192.168.1.*** -p 22**
Se connecter en root : su
Inspiré de ce tuto, https://www.justegeek.fr/tuto-creer-un-serveur-vpn-wireguard-sous-debian-11/
apk update
apk add wireguard-tools
On génère les clés :
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
La clé privée sera dans /etc/wireguard/privatekey :
gJ**********************************************01c=
La clé publique sera dans /etc/wireguard/publickey :
bP**********************************************HQ=
On peut faire un cat des fichiers pour visualiser les clés.
On crée le fichier de configuration sous Linux Alpine
Pour vérifier si le paquet nano est installé, la commande affichera son nom :
apk info -e nano
Intallation de nano :
apk add nano
Pour créer le fichier:
nano /etc/wireguard/wg0.conf
# fichier de configuration
[Interface]
# Adresse IP du serveur à l’intérieur du VPN
Address = 10.5.0.1/24
# Clé privée du serveur
PrivateKey = gJ**********************************************01c=
ListenPort = 518**
# Activer le routage du trafic vers le réseau local
PostUp = iptables -A FORWARD -i wg0 -d 192.168.1.0/24 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -d 192.168.1.0/24 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Clé publique du client
PublicKey = sR*********************************************Ak=
# Adresse IP que le client peut utiliser à l’interieur du VPN
AllowedIPs = 10.5.0.3/24
Après avoir modifié votre fichier vous pouvez enregistrer les modifications et quitter Nano :
[Ctrl] + [X]
[O]
[Entrée]
- Si l’on veut réaliser la procédure sur un autre type de système Linux penser à adapter le nom de l’interface réseau du serveur (eth0 ici).
- Dans notre exemple, à l’intérieure du VPN, le serveur a l’IP 10.5.0.1/24 et le client 10.5.0.3/24. Le /24 correspond au masque 255.255.255.0. Le réseau local est le 192.168.1.0/24.
La technique de l’IP masquerade, ou **mascarade IP**, permet à un réseau privé de dissimuler ses adresses IP internes derrière une seule adresse IP publique. Utilisée dans le cadre de la traduction d’adresses réseau (NAT), elle permet aux appareils d’un réseau local d’accéder à Internet en utilisant une seule adresse IP externe, simplifiant la gestion des adresses IP et renforçant la sécurité du réseau interne.
Explications :
[Interface] : Contient les paramètres de l’interface Wiregard sur le serveur.
- Address : Adresse IP que le serveur utilisera àl’intérieur du VPN.
- Privatekey : La clé privée du serveur, qui doit être gardée secrète.
- ListenPort : Le port sur lequel le serveur écoute les connexions WireGuard.
[Peer] : Contient les paramètres pour un client (une section [Peer] pour chaque client).
- Publickey : La clé publique du client, qui permet au serveur de l’identifier.
- AllowedIPs : Les adresses IP que le client est autorisé à utiliser à l’interieur du VPN.
Activer le routage IP sur le serveur
Pour appliquer la commande immédiatement le temps de la session :
sysctl -w net.ipv4.ip_forward=1
Pour que la commande persiste après un redémarrage on édite le fichier sysctl.conf :
nano /etc/sysctl.conf
# Décommentez la ligne ou l’ajouter dans le fichier.
net.ipv4.ip_forward=1
Pour vérifier si le paquet iptables est installé, la command affichera son nom :
apk info -e iptables
Sinon installation d’iptables :
apk add iptables
Quand tout est prêt on démarre l’interface :
wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.5.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -d 192.168.1.0/24 -j ACCEPT
[#] iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
et on regarde :
wg show wg0
Ajouter une règle dans la chaîne INPUT pour accepter tout trafic entrant sur le port 51879 en utilisant le protocole UDP :
iptables -A INPUT -p udp --dport 518** -j ACCEPT
J’ai ajouté cette règle, mais je n’ai pas fait en sorte qu’elle soit enregistrée, pourtant après un redémarrage sans que cette règle soit active ça fonctionne néanmoins. (à voir).
POUR DEBUGGER
Analyser le trafic sur les interfaces du serveur avec tcpdump (à installer en root si besoin) :
apk add tcpdump
tcpdump -i wg0
Si vous voulez vérifier si des paquets arrivent bien sur eth0.
Utilisez tcpdump pour surveiller l’interface eth et capturer les paquets sur le port 518** :
tcpdump -i eth0 udp port 518**
Commandes pour WireGuard sur le serveur
Pour voir si WireGuard est activé :
wg show
Pour activer WireGuard pour wg0 en administrateur :
wg-quick up wg0
Commandes iptables
En administrateur root :
iptables -L -v -n
iptables -L -v -n | grep udp
Le protocole UDP correspond au 17 dans iptables.
iptables -L INPUT -v -n
Ces commandes affichent des informations sur les règles actives.
Commandes apk
Mise à jour :
apk update
Pour vérifier si un paquet est installé, la command affichera son nom :
apk info -e nano
apk info -e iptables
Installer un paquet :
apk add tcpdump
Mise à jour le 10/11/2024
Configurer le lancement automatique de WireGuard
Lancement automatique de WireGuard au démarrage d’un serveur sous AlpineLinux
Fichier sur le client sous Linux Mint
sudo nano /etc/wireguard/wg2.conf
[Interface]
# Clé privée du client
PrivateKey = 8G*********************************************Gg=
# Adresse IP du client à l’intérieur du VPN
Address = 10.5.0.3/24
[Peer]
# Clé publique du serveur
PublicKey = bP*********************************************HQ=
AllowedIPs = 192.168.1.0/24, 192.168.2.0/24, 10.5.0.0/24
Endpoint = IP_Publique_Serveur:518**
- Dans notre exemple les réseaux IP 192.168.1.0/24 et 192.168.2.0/24 se trouvant sur le site du serveur sont accessibles. Le réseau IP 10.5.0.0/24 est celui de notre VPN.
Clients VPN WireGuard
Installation du client pour VPN WireGuard sous Linux Mint :
Installer WireGuard VPN Client sur Linux Mint
Installation du client pour VPN WireGuard sous Windows 11 :
Installer et configurer le client WireGuard sous Windows 11
À voir également
Installation et configuration de WireGuard dans Home Assistant