Configurer un serveur WireGuard sur macOS Tahoe

Introduction

Ce guide détaille la configuration complète d'un serveur VPN WireGuard sur macOS Tahoe (macOS 26).
L'objectif est de permettre à des clients distants de se connecter au Mac via un tunnel VPN sécurisé,
avec isolation des clients : les clients connectés ne peuvent pas communiquer entre eux,
mais uniquement accéder aux services hébergés sur le Mac (qui joue le rôle de serveur).

Prérequis


Étape 1 : Installation de Homebrew

Si Homebrew n'est pas encore installé sur votre Mac, exécutez la commande suivante dans Terminal :

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Une fois l'installation terminée, configurez le PATH comme indiqué dans les "Next Steps" :

echo >> ~/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

Étape 2 : Installation des outils WireGuard

Installez les paquets nécessaires : wireguard-tools, wireguard-go et bash
(la version système de bash est trop ancienne pour wg-quick).

brew install wireguard-tools wireguard-go bash

Vérifiez que les outils sont accessibles :

wg --version

Étape 3 : Création du répertoire de configuration

Créez le répertoire de configuration sécurisé :

sudo mkdir -p /opt/homebrew/etc/wireguard
sudo chmod 700 /opt/homebrew/etc/wireguard
cd /opt/homebrew/etc/wireguard

Étape 4 : Génération des clés cryptographiques

Clés du serveur

Générez la paire de clés du serveur :

umask 077
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key

(La clé publique du serveur s'affiche à l'écran, par exemple : t98DHBwUxZlo9zsoTAnj3TrmICGpf6KwvZpEoKAi7lw=)

Clés du client 1

Générez la paire de clés du client 1 :

wg genkey | sudo tee client1_private.key | wg pubkey | sudo tee client1_public.key

(La clé publique du client 1 s'affiche à l'écran, par exemple : 2Els7sNPxMf+gQ/RnO1smO6Zc3+jCgBwth8w/iHLnQQ=)

Clé pré-partagée (PSK)

Générez une clé pré-partagée pour renforcer la sécurité :

wg genpsk | sudo tee client1_psk.key

(La clé PSK s'affiche à l'écran, par exemple : yNGIcM7fB+FQt++A0fK8/79+qoUcz1rTdwnW/H/7hPE=)

Sécurisation des fichiers de clés

sudo chmod 600 /opt/homebrew/etc/wireguard/*.key
ls -la

Étape 5 : Configuration du serveur WireGuard

Récupération des clés

Affichez les clés nécessaires pour créer le fichier de configuration :

echo "=== Clés pour wg0.conf ==="
echo "Server Private Key:"
sudo cat server_private.key
echo "Client1 Public Key:"
sudo cat client1_public.key
echo "Client1 PSK:"
sudo cat client1_psk.key

Voici un exemple de sortie :

=== Clés pour wg0.conf ===
Server Private Key:
wLxpDHMT735N0WjwWTN6ti/zYoj3PoxPDmDxRvsP53g=
Client1 Public Key:
2Els7sNPxMf+gQ/RnO1smO6Zc3+jCgBwth8w/iHLnQQ=
Client1 PSK:
yNGIcM7fB+FQt++A0fK8/79+qoUcz1rTdwnW/H/7hPE=

Création du fichier wg0.conf

Créez le fichier de configuration du serveur.
Dans cet exemple, nous utilisons le réseau VPN 172.26.18.0/28.
Adaptez les clés avec vos propres valeurs générées précédemment, puis copiez/collez le bloc entier.

sudo tee /opt/homebrew/etc/wireguard/wg0.conf << 'EOF'
[Interface]
Address = 172.26.18.1/28
PrivateKey = wLxpDHMT735N0WjwWTN6ti/zYoj3PoxPDmDxRvsP53g=
ListenPort = 51820

[Peer]
# Client 1
PublicKey = 2Els7sNPxMf+gQ/RnO1smO6Zc3+jCgBwth8w/iHLnQQ=
PresharedKey = yNGIcM7fB+FQt++A0fK8/79+qoUcz1rTdwnW/H/7hPE=
AllowedIPs = 172.26.18.2/32
EOF

Sécurisez le fichier de configuration :

sudo chmod 600 /opt/homebrew/etc/wireguard/wg0.conf

Étape 6 : Configuration du pare-feu (isolation des clients)

Identification de l'interface réseau

Identifiez l'interface réseau principale du Mac :

route -n get default | grep interface

(L'interface principale du Mac est généralement en0)

Script PostUp

Créez le script PostUp qui configure les règles de pare-feu pour l'isolation des clients.
Les clients ne pourront communiquer qu'avec le serveur (172.26.18.1), pas entre eux. Adpatez puis copiez/collez le bloc entier.

sudo tee /opt/homebrew/etc/wireguard/postup.sh << 'EOF'
#!/bin/bash
# WireGuard PostUp - macOS Tahoe
# Isolation des clients et accès au serveur uniquement

WG_SUBNET="172.26.18.0/28"
WG_SERVER="172.26.18.1"

# Charger les règles pf dans un anchor
pfctl -a com.apple/wireguard -f - </dev/null || true

echo "$(date): WireGuard PostUp exécuté" >> /var/log/wireguard.log
EOF

Script PostDown

Créez le script PostDown pour le nettoyage des règles lors de l'arrêt :

sudo tee /opt/homebrew/etc/wireguard/postdown.sh << 'EOF'
#!/bin/bash
# WireGuard PostDown - macOS Tahoe
# Nettoyage des règles pf

# Vider les règles de l'anchor WireGuard
pfctl -a com.apple/wireguard -F all 2>/dev/null || true

echo "$(date): WireGuard PostDown exécuté" >> /var/log/wireguard.log
EOF

Permissions des scripts

Rendez les scripts exécutables et sécurisez-les :

sudo chmod 700 /opt/homebrew/etc/wireguard/postup.sh
sudo chmod 700 /opt/homebrew/etc/wireguard/postdown.sh
sudo chown root:wheel /opt/homebrew/etc/wireguard/*.sh

Intégration des scripts dans wg0.conf

Ajoutez les directives PostUp et PostDown dans le fichier wg0.conf. Copiez/collez le bloc :

sudo sed -i '' '/ListenPort = 51820/a\
PostUp = /opt/homebrew/etc/wireguard/postup.sh\
PostDown = /opt/homebrew/etc/wireguard/postdown.sh
' /opt/homebrew/etc/wireguard/wg0.conf

Vérifiez le contenu final :

sudo cat /opt/homebrew/etc/wireguard/wg0.conf

Voici ce que vous devez obtenir :

[Interface]
Address = 172.26.18.1/28
PrivateKey = wLxpDHMT735N0WjwWTN6ti/zYoj3PoxPDmDxRvsP53g=
ListenPort = 51820
PostUp = /opt/homebrew/etc/wireguard/postup.sh
PostDown = /opt/homebrew/etc/wireguard/postdown.sh

[Peer]
# Client 1
PublicKey = 2Els7sNPxMf+gQ/RnO1smO6Zc3+jCgBwth8w/iHLnQQ=
PresharedKey = yNGIcM7fB+FQt++A0fK8/79+qoUcz1rTdwnW/H/7hPE=
AllowedIPs = 172.26.18.2/32

Étape 7 : Démarrage et vérification

Démarrage de WireGuard

sudo wg-quick up wg0

Voici ce que vous devez obtenir :

[#] wireguard-go utun
[+] Interface for wg0 is utun4
[#] wg setconf utun4 /dev/fd/63
[#] ifconfig utun4 inet 172.26.18.1/28 172.26.18.1 alias
[#] ifconfig utun4 up
[#] route -q -n add -inet 172.26.18.2/32 -interface utun4
[+] Backgrounding route monitor
[#] /opt/homebrew/etc/wireguard/postup.sh
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

No ALTQ support in kernel
ALTQ related functions disabled

(Les avertissements pfctl sont normaux et sans conséquence. ALTQ n'est pas supporté sur macOS, c'est attendu.)

Vérification de l'état

sudo wg show

Voici ce que vous devez obtenir :

interface: utun4
 public key: t98DHBwUxZlo9zsoTAnj3TrmICGpf6KwvZpEoKAi7lw=
 private key: (hidden)
 listening port: 51820

peer: 2Els7sNPxMf+gQ/RnO1smO6Zc3+jCgBwth8w/iHLnQQ=
 preshared key: (hidden)
 allowed ips: 172.26.18.2/32

Le serveur WireGuard est opérationnel et écoute sur le port 51820.


Étape 8 : Configuration du client

Informations nécessaires

Pour configurer le client, vous avez besoin de :

Récupérez ces informations :

# Clé privée du client 1
sudo cat client1_private.key

# IP publique du Mac (ou utiliser le nom de domaine)
curl -4 ifconfig.me

# Ou l'IP locale si vous faites cela en labo pour tester
ifconfig en0

Fichier de configuration client

Voici la configuration tunnel WireGuard à importer sur le client.
Adaptez les valeurs avec vos propres clés et l'IP de votre serveur.

[Interface]
Address = 172.26.18.2/32
PrivateKey = 6H5n93WlnxeheNG9LhnKaxr++4QmfLQfJMRJdyuJWHY=
DNS = 1.1.1.1

[Peer]
PublicKey = t98DHBwUxZlo9zsoTAnj3TrmICGpf6KwvZpEoKAi7lw=
PresharedKey = yNGIcM7fB+FQt++A0fK8/79+qoUcz1rTdwnW/H/7hPE=
Endpoint = 192.168.0.174:51820
AllowedIPs = 172.26.18.1/32
PersistentKeepalive = 25

Cette configuration peut être importée dans l'application WireGuard sur iOS, Android, Windows, macOS ou Linux.

Autorisation du pare-feu applicatif

Lors de la première connexion d'un client au Mac via WireGuard, le pare-feu applicatif de macOS affichera une demande d'autorisation pour wireguard-go.

Pour un serveur WireGuard, choisissez :

Cliquez sur "Allow" avec ces paramètres pour autoriser WireGuard à recevoir les connexions VPN.


Rollback complet (suppression)

Pour supprimer la totalité de la configuration WireGuard du Mac, suivez ces étapes dans l'ordre :

1. Arrêter WireGuard

sudo wg-quick down wg0

2. Supprimer les règles pf

sudo pfctl -a com.apple/wireguard -F all

3. Supprimer le répertoire de configuration

cd ~
sudo rm -rf /opt/homebrew/etc/wireguard

4. Supprimer le log WireGuard

sudo rm -f /var/log/wireguard.log

5. Désinstaller les paquets Homebrew

brew uninstall wireguard-tools wireguard-go

6. (Optionnel) Désinstaller Homebrew entièrement

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
sed -i '' '/brew shellenv/d' ~/.zprofile
sudo rm -f /etc/paths.d/homebrew

7. Révoquer l'autorisation pare-feu pour wireguard-go

Si votre Coupe-feu est activé, allez dans :
Réglages Système → Réseau → Coupe-feu → Options
Trouvez "wireguard-go" dans la liste et supprimez-le.

(Si le Coupe-feu n'est pas activé, il n'y a rien à faire pour cette étape.)


Voici un script en .command permettant de déployer automatiquement un serveur WireGuard et de générer des configurations pour des clients.
📥 Télécharger wireguard-manager.command.zip



↑ Haut de page