Installation sous Alpine Linux du serveur VPN WireGuard

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche


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


Proxmox

Testé avec le modèle de conteneur alpine-3.22-defaut_20250617_amd64.tar.xz.


Paramètres de mon serveur sous Alpine Linux

Exemple de procédure de configuration d’Alpine Linux :

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 le fichier /etc/wireguard/privatekey :

gJ**********************************************01c=

La clé publique sera dans le fichier /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 :

CRTL + X pour quitter l’éditeur nano.

Y pour confirmer l’enregistrement des modifications.

Entrée pour confirmer le nom du fichier.

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

Activer l'IP forwarding (L'IP forwarding est le processus par lequel un appareil réseau, tel qu'un routeur, transfère ou relaie des paquets IP).

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 un fichier .conf :

nano /etc/sysctl.d/local.conf

Ajouter la ligne dans le fichier :

net.ipv4.ip_forward=1

Vérifier si le service sysctl est activé :

service sysctl status

Si le service est actif, vous devriez voir une ligne comme :

status: started

Si le service n’est pas activé, exécutez :

rc-update add sysctl boot

Pour appliquer les paramètres sysctl sans attendre le prochain redémarrage :

service sysctl start

Pour confirmer que vos paramètres (comme net.ipv4.ip_forward=1) sont bien chargés, utilisez :

sysctl -a | grep net.ipv4.ip_forward

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 518** 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
apk upgrade

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

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**

Après modifications.

CRTL + X pour quitter l’éditeur nano.

O pour confirmer l’enregistrement des modifications.

Entrée pour confirmer le nom du fichier.

  • 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.

Voir également

Création d’un partage Samba sous Alpine Linux