Jé pa l'temps #1 - Monter un VPN avec Wireguard

Explications rapides

  • Bien qu’il y ait un serveur (machine à laquelle les requêtes seront adressées), le réseau est plus un peer to peer où chaque machine a un couple de clé publique/privée et s’adresse à une machine par sa clé publique.
  • Chemins par défault pour la configuration :
    • Linux : /etc/wireguard
    • MacOs : /usr/local/etc/wireguard/
  • Reload la configuration (serveur notamment) :
    sudo systemctl reload wg-quick@wg0
    
  • Allumer et éteindre la connexion :
    • ON : wg-quick up wg0
    • OFF : wg-quick down wg0

Installation du CLI

Ressource officielle pour l’installation sur toutes les plateformes : https://www.wireguard.com/install/

Mac OS

brew install wireguard-tools

GUI

L’interface est pas mal et plus appropriée pour gérer sa connexion (https://apps.apple.com/fr/app/wireguard/id1451685025).

⚠️Avec l’interface la résolution DNS ne fonctionne pas si un DNS n’est pas précisé pour le client.

Debian

echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
apt update
apt install wireguard

Arch

# have to reboot after installing !
yaourt -S wireguard-tools wireguard-dkms linux-headers

Serveur

Génération du couple de clé

# Create folder
mkdir -p /etc/wireguard/keys
cd /etc/wireguard && umask 077
cd keys && umask 077

# Generate keys
wg genkey | tee privatekey | wg pubkey > publickey

Création de la configuration

# /etc/wireguard/wg0.conf
[Interface]
# Address is your VPN endpoint's IP
Address = 10.0.10.1/24


# DON'T FORGET TO REPLACE YOUR INTERFACE IN THE FOLLOWING LINES !
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o [YOUR INTERFACE] -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o [YOUR INTERFACE] -j MASQUERADE
# Address is your VPN endpoint's IP
Address = 10.0.10.1/24 # ⚠️/24
# ListenPort is the port which your client will connect to
ListenPort = 59523
PrivateKey = [PRIVATE KEY]

# Comment about Peer #1 identity
[Peer]
PublicKey = [PEER PUBLIC KEY]
AllowedIPs = 10.0.10.2/32 # ⚠️/32

# Comment about Peer #2 identity
[Peer]
PublicKey = [PEER PUBLIC KEY]
AllowedIPs = 10.0.10.3/32 # ⚠️/32

Démarrage automatique

sudo systemctl enable wg-quick@wg0

# To start if not
sudo systemctl start wg-quick@wg0

Client

Tester l’installation du client

wg-quick up wg0

Si des erreurs apparaissent, redémarrer la machine ! Wireguard est un module Linux (et ça demande de redémarrer).

Génération du couple de clé

# Create folder
mkdir -p /etc/wireguard/keys
cd /etc/wireguard && umask 077
cd keys && umask 077

# Generate keys
wg genkey | tee privatekey | wg pubkey > publickey

Création de la configuration

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.10.2/24 # ⚠️/24
PrivateKey = [PRIVATE KEY OF THE CURRENT MACHINE]
# DNS = 1.1.1.1 // Mandatory sometimes for DNS resolution

[Peer]
PublicKey = [PUBLIC KEY OF THE SERVER]
# Indique que l'on veut que tout le traffic passe par le proxy
AllowedIPs = 0.0.0.0/0
# VPN's IP:port
Endpoint = 51.159.31.15:59523
PersistentKeepalive = 25

Lancement automatique au démarrage

sudo systemctl enable wg-quick@wg0

# To start if not
sudo systemctl start wg-quick@wg0

— — — — — — — — — — — — — — — — — — — — — —

La série « Jé pa l’temps » est une série de tutoriels rapides en mode “prise de note” pour avoir une trace de tout ce dont je ne peux me rappeler et pourquoi pas le partager à d’autre. On va à l’essentiel, laissons les jolis pavés à d’autres sites comme medium… LOL !