Wireguard: VPN Client-to-Site
Wireguard avec serveur Debian et client W10.
Petit article expliquant comment installer Wireguard en tant que serveur sur une Debian 10, et comment ensuite installer son client Windows 10 sur une machine en dehors de ce réseau, de sorte à tester le VPN en mode Client-to-Site.
Sans plus attendre, allons-y !
I) Présentation du lab
Une fois n’est pas coutume, c’est armé de mon petit VMWare Workstation que je ferai ce lab. Et comme toujours, rien de compliqué !
- fw-brussels-01, en 192.168.0.20/24 pour le WAN, et 192.168.1.1/24 pour le LAN ;
- fw-paris-01, en 192.168.0.30/24 pour le WAN, et 192.168.2.1/24 pour le LAN ;
- hoster-vpn-01, en 192.168.2.50/24, sur le réseau LAN de Paris ;
- client-w10, en DHCP et sur le réseau LAN de Bruxelles ;
Le but ici était donc de mimer deux réseaux distincts, avec un serveur VPN présent à Paris, et un client présent à Bruxelles souhaitant s’y connecter.
Côté Firewall –ce n’est pas important– mais il s’agit de simples pfSenses. Fortigate, Sophos, ou même votre simple modem personnel peut suffire, il faudra simplement réaliser du Port Forwarding vers votre serveur VPN.
I) Installation de Wireguard sur Debian 10
Je ne vais pas vous faire l’affront de vous ré-expliquer ce qu’est Wireguard (un protocole ET un software, comme pour OpenVPN), je vous renvois sur un ancien article en lieu et place :
Donc, une fois connecté en SSH sur votre joli petit serveur, installons donc le package (on ajoute le dépôt buster-backports, un petit refresh, et le tour est joué) :
sh -c "echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list"
apt update && apt install wireguard -y
Une fois installé, place à la configuration du serveur !
II) Configuration du serveur Wireguard
La première étape est donc de générer notre paire de clefs publique/privée :
cd /etc/wireguard
# Les fichiers créés dans ce répertoire auront ces permissions de base
umask 077
# Création de la paire de clefs
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Une fois notre paire de clefs générée, on créer le fichier de configuration :
touch /etc/wireguard/wg0.conf
L’interface par défaut sera donc nommée wg0, mais rien ne vous empêche de la nommer vpntest ou encore wg17 si vous avez plusieurs VPN.
Maintenant, place à la configuration :
Dans ce fichier on renseignera donc :
- L’IP de notre interface réseau ;
- Le fait de ne pas sauvegarder automatiquement l’état de la carte réseau lors de son arrêt ;
- Le port sur lequel Wireguard va écouter ;
- Notre Private Key ;
- Le PostUp/PostDown, qui sont des commandes IPtables permettant de réaliser du forward ainsi que du NAT ;
- Nos peers, c’est-à-dire nos clients (voir plus bas) ;
A noter que si votre interface réseau physique se dénomme par ex. eth0, renseignez donc eth0 et non pas ens33 comme dans l’exemple !
### Configuration du serveur
[Interface]
Address = 192.168.2.50/24
ListenPort = 51820
PrivateKey = VotrePrivateKey
SaveConfig = false
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33-j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE
### Configuration des clients
[Peer]
# Windows 10 test client
PublicKey = CléPubliqueDuClient
AllowedIPs = 10.0.0.1/28
On peut ensuite démarrer le service, et l’activer à chaque démarrage :
systemctl start wg-quick@wg0 && systemctl enable wg-quick@wg0
Comme on peut le voir ici, le service est bien démarré !
Il nous reste encore à activer l’IP Forwarding, pour ce faire, rien de plus simple :
nano /etc/sysctl.conf
# Décommentez ensuite la ligne suivante
net.ipv4.ip_forward=1
Côté serveur, tout est bon ! Il vous faudra simplement modifier la section Peers pour renseigner la clef publique ainsi que l’IP qu’aura votre/vos client(s).
IV) Installation du client Windows
Rien de plus facile ! On télécharge le client, au format exe ou msi depuis ce site, et on l’installe (Suivant, Suivant… rien de sorcier).
Ensuite, il nous faudra générer la paire de clefs pour ce client, et la rajouter sur notre serveur Wireguard (voir fichier wg0.conf plus haut). Pour ce faire, on retourne sur notre petite Debian :
wg genkey | tee /etc/wireguard/privatekey_w10_client01 | wg pubkey | tee /etc/wireguard/publickey_w10_client01
Comme vous pouvez le voir, c’est exactement la même commande que pour la paire des clefs générée pour le serveur lui-même en début d’article, mais ici bien-entendu on change le nom de fichier pour la pub/private key :
Prenez donc cette clef publique, et décrivez le client dans votre fichier wg0.conf, voir plus haut.
Une fois ceci fait, on peut créer le fichier de config sur notre client :
[Interface]
PrivateKey = WBbkdVpjwR+1Vz1uAEaKg9QcKpvnjZIjqdh7XJZ2EUA=
Address = 10.0.0.1/28
DNS = 1.1.1.1, 192.168.2.1
[Peer]
PublicKey = qw1dykit4465369rHrIr8ETckP9fmCDR5vB7UetbXmA=
AllowedIPs = 192.168.2.0/24
Endpoint = 192.168.0.30:51820
Le tout dans un petit fichier de type « maconfig.conf » par exemple, et c’est tout ! Importez-le sur le client Wireguard and here we go.
On renseigne donc :
- Sa Private Key ;
- Son adresse pour le tunnel ;
- Le ou les serveurs DNS à utiliser ;
- La Public Key du serveur WIreguard ;
- Concernant le champ AllowedIPs, soit vous pouvez rajouter le réseau distant, pour ne router que le trafic à destination de ce réseau via le VPN, soit si vous désirez router la totalité de votre trafic, vous pouvez mettre « 0.0.0.0/0, ::/0 » pour l’IPv4 et IPv6 respectivement ;
- Et enfin concernant l’Endpoint, il s’agit ni plus ni moins que l’IP/L’hostname du serveur distant. Ici il s’agit donc de l’IP WAN de mon pfSense, où j’ai réalisé un simple port forwarding sur le port 51820 en UDP, à destination de mon serveur Wireguard ;
Une fois ceci fait, on peut tester notre connexion !
V) Test et conclusion
Des images valent mieux que mille mots, voici donc ! A noter que je me suis même permis d’installer rapidement un simple serveur Apache sur le LAN distant pour bien vérifier que notre client à accès au réseau.
Vous avez donc réussi à mettre en place un serveur Wireguard sous une Debian, ainsi qu’à connecter un client sous Windows 10, félicitations !
Je ferai sûrement un prochain article dans le cadre de la mise en place d’un VPN de type Site-to-Site.
Comme à mon habitude, j’espère que ce rapide article vous aura plus, et je vous souhaite une bonne journée/soirée !
Laisser un commentaire