Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

Wireguard sur Debian 9

Rédigé par dada / / 1 commentaire



Heztner, c'est vraiment un hébergeur qui propose un cloud peu cher et performant. Vraiment. Par contre, il n'y a que ça. Jusqu'à peu, nous n'avions pas la possibilité d'ajouter des volumes pour gonfler l'espace disque des machines et pas de réseau privé. Maintenant, les volumes sont là, mais toujours pas de réseau privé. Tant pis, on va le faire à la main.

On m'a parlé de Wireguard : un outil simple, puissant et sécurisé pour monter des VPN entre nos serveurs. J'ai testé, j'approuve. Je n'aime pas le réseau, c'est pas mon truc mais avec Wireguard et mes balades sous Kubernetes, je commence à presque apprécier cette chose.

Voici donc comment mettre en place des connexions privées entre vos machines pour y faire transiter ce que vous voulez sans que ça se balade sur l'Internet mondial.

Installation de Wireguard

Au moment où j'écris ces lignes, l'outil n'est disponible que dans les dépôts unstable. C'est chiant, mais rien de grave.

Ajouter les dépôts installables

# echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list

Faire un peu de pinning

Pourquoi ? Parce qu'avec le dépôt que vous venez d'ajouter, si vous n'y faites pas attention, vous allez massacrer la stabilité de votre machine.
# printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable

Installer les paquets

On va d'abord installer les headers pour permettre à Wireguard de bien s'installer :
apt install linux-headers-$(uname -r)
On peut maintenant installer la bête :
# apt update && apt install wireguard
C'est installé !

Configuration

Exemple simple

On va prendre deux serveurs et on va s'amuser à les interconnecter. Sur les deux machines, nous allons générer les clés privées et publiques :
wg genkey | tee privatekey | wg pubkey > publickey

Configuration de l'interface réseau

Tout va se passer dans le fichier wg0.conf, qui sera placé dans /etc/wireguard/. Sur la première machine, son contenu va ressembler à ça :
# Votre premier serveur
[Interface]
Address = 10.0.42.1
PrivateKey = kEQpUJDtur3yHqtoto42Y0+FXNK5lyJoUhh2g21BFWo= 
ListenPort = 1190

# Votre deuxième serveur
[Peer]
PublicKey = MnL98kIZYrHgopn1U3kptoto42L/8MqgyqKh2g2Hixo=
Endpoint = IP.DE.MON.PEER:1190
AllowedIPs = 10.0.42.2/32
Sur la deuxième machine :
# Votre deuxième serveur
[Interface]
Address = 10.0.42.2
PrivateKey = kEQpUJDtur3yHqtoto42Y0+FXNK5lyJoUhh2g21BFWo= 
ListenPort = 1190

# Votre premier serveur
[Peer]
PublicKey = MnL98kIZYrHgopn1U3kptoto42L/8MqgyqKh2g2Hixo=
Endpoint = IP.DE.MON.PEER:1190
AllowedIPs = 10.0.42.1/32
Non, je n'ai pas changé les clés, la flemme. Pensez quand même à vérifier que vous n'avez pas fait de coquille en copiant/collant tout ça. C'est souvent en se trompant entre les clés qu'on perd un temps fou à déboguer.

Interface

La partie [Interface] porte bien son nom : c'est là que vous allez définir l'IP de la machine sur laquelle vous bossez, configurer sa clé privée et le port qui sera utilisé par Wireguard. Allez récupérer la clé privée générée quelques secondes auparavant et remplacez ma valeur de test.

Peer

La partie [Peer], qui porte aussi bien son nom si on speak l'english, permet de configurer un pair, c'est à dire un serveur distant qui va pouvoir passer par le VPN pour faire des coucous à votre première machine.
Endpoint est à remplir avec la véritable IP de la machine et AllowedIPs doit contenir les IP (ou range) VPN de vos machines clientes. Pas la véritable IP publique.

Tester la connexion

On va activer la connexion en tapant ça sur les deux machines :
root@master:/etc/wireguard# wg-quick up wg0
Vous devriez avoir une réponse, pour le premier serveur, dans le genre :
root@test1:/home/dada# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip address add 10.0.42.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip route add 10.0.42.2/32 dev wg0
Et pour le deuxième :
root@test2:/home/dada# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip address add 10.0.42.2 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip route add 10.0.42.1/32 dev wg0
Maintenant, si tout s'est bien passé, vous devriez pouvoir faire des pings sur les IPs VPN des machines !

Démarrer Wireguard avec la machine

Avec systemd :
systemctl enable wg-quick@wg0.service
Ça fait quelques semaines que mon infra tourne avec Wireguard sans le moindre souci de latence, de déconnexion ou de bogue. C'est du bon !

1 commentaire

#1  - toto a dit :

Si il est dans unstable il y a une raison il n’est pas assez récent.
Cela a une conséquence simple il ne doit pas être utilisé en production. Priére de bien vouloir au moins mettre des disclamers. Parce que du coup ça casse le coté sécurisé de l’outil.

Répondre

Fil RSS des commentaires de cet article

Écrire un commentaire

Quelle est la première lettre du mot vaey ?