Après avoir utilisé OpenVPN pendant plusieurs années, j'ai décidé de le remplacer pour un Wireguard qui a l'avantage d'être très simplifié et beaucoup plus rapide. J'en profite donc pour vous partager l'installation et sa configuration de base sous Alpine Linux.

Introduction

J'utilise donc un Alpine Linux en tant que micro serveur à la maison, et hébergé par l'intermédiaire de ma Freebox Delta (upgradé avec 8Go de ram). L'OS est vraiment très minime, consomme vraiment pas grand chose et donc ça tourne vraiment bien ! Un exemple de sa consommation actuelle avec quelques services :

screenshot_-2020-02-15-at-13.48.53

Bien évidemment il vous faudra les accès root sur le serveur.

Installation

Le gestionnaire de package sous Alpine Linux c'est apk, donc pour installer wireguard ce sera avec cette méthode (doc officielle) :

apk add -U wireguard-tools

Ensuite on édite le fichier /etc/network/interfaces pour rajouter la nouvelle interface wg0 qui sera utilisée :

auto wg0
iface wg0 inet static
    address 192.168.167.1
    netmask 255.255.255.0
    pre-up ip link add dev wg0 type wireguard
    pre-up wg setconf wg0 /etc/wireguard/wg0.conf
    post-up ip route add 192.168.167.0/24 dev wg0
    post-down ip link delete dev wg0

On autorise le forward :

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf

On rajoute wireguard en module puis on redémarre le réseau :

echo wireguard >> /etc/modules
/etc/init.d/networking restart

A partir d'ici on a une interface wg0 qui est visible (status down mais c'est normal), on passe à la suite avec la configuration.

Configuration

La configuration est découpée en 2 parties, l'une étant le serveur et l'autre étant le(s) client(s).

Serveur

On génère maintenant une clé privée (privatekey) et publique (publickey) qu'utilisera notre serveur :

mkdir -p /etc/wireguard/server
cd /etc/wireguard/server
wg genkey | tee privatekey | wg pubkey > publickey
chmod 600 privatekey publickey

Puis on prépare le fichier de configuration /etc/wireguard/wg0.conf lié à l'interface wg0 :

[Interface]
Address = 192.168.167.1
PrivateKey = <<server/privatekey>>
ListenPort = 33444
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Et ensuite on active l'interface wg0 :

wg-quick up wg0

Client(s)

Comme pour la partie serveur, on génère à chaque fois une clé privée (privatekey) et publique (publickey) pour le(s) client(s), on mettra ça dans un dossier plutôt dédié au(x) client(s) :

mkdir -p /etc/wireguard/client/xorhak-macbook
cd /etc/wireguard/client/xorhak-macbook
wg genkey | tee privatekey | wg pubkey > publickey

Puis on créé un fichier de configuration /etc/wireguard/client/xorhak-macbook/config avec une configuration de ce type :

[Interface]
PrivateKey = <<client/xorhak-macbook/privatekey>>
Address = 192.168.167.2/32
DNS = 1.1.1.1, 1.0.0.1, 8.8.8.8, 8.8.4.4

[Peer]
PublicKey = <<server/publickey>>
AllowedIPs = 0.0.0.0/0, ::1/128
Endpoint = <<ip_publique>>:33444

Maintenant que le premier client est créé, il faut mettre à jour la configuration du serveur, c'est une nouvelle rubrique Peer qu'on rajoutera :

[Peer]
PublicKey = <<client/xorhak-macbook/publickey>>
AllowedIPs = 192.168.167.2/32

Je redémarre toujours l'interface wg0 pour bien prendre en compte les modifications :

wg-quick down wg0
wg-quick up wg0

Pour afficher le status global (mais générique) :

wg show

C'est terminé ! Il ne reste plus qu'à importer le fichier de configuration sur le client. Si jamais une option d'importation par qrcode est possible, la solution est très simpe :

apk -U add libqrencode
qrencode -t ansiutf8 < /etc/wireguard/client/xorhak-macbook/config

Pour un accès depuis l'extérieur, on oublira pas de rediriger le port 33444/udp vers le serveur Wireguard, sinon évidemment ça fonctionnera pas.

N'hésitez pas dans les commentaires si vous avez des sugestions ou astuces intéressantes :)