« Wireguard » : différence entre les versions

De Wiki doc

(Création de sous-titres à la place du gras + actualisation des explications + correction de mise en forme + ajout d'une explication sur le routage + ajout d'une astuce concernant les scripts..)
(Modification des balises 'source' en 'syntaxhighlight' et ajout du chemin de la configuration du client)
 
Ligne 6 : Ligne 6 :
Il est actuellement (21/07/20) disponible dans les branches ''buster-backports'', ''bullseye'' et ''Sid'' de ''Debian''. L'outil est présent sous forme de module ''DKMS'' jusqu'au noyau ''5.5'' et c'est au ''5.6'' qu'il est intégré complètement à celui-ci. Il est également possible de l'obtenir via un dépôt dédié avec les [https://www.wireguard.com/install/ commandes suivantes]:
Il est actuellement (21/07/20) disponible dans les branches ''buster-backports'', ''bullseye'' et ''Sid'' de ''Debian''. L'outil est présent sous forme de module ''DKMS'' jusqu'au noyau ''5.5'' et c'est au ''5.6'' qu'il est intégré complètement à celui-ci. Il est également possible de l'obtenir via un dépôt dédié avec les [https://www.wireguard.com/install/ commandes suivantes]:


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


Nous utiliserons une ''Debian Sid'' (du 19/04/19) pour cette documentation. Aussi, '''seule la commande suivante est nécessaire''':
Nous utiliserons une ''Debian Sid'' (du 19/04/19) pour cette documentation. Aussi, '''seule la commande suivante est nécessaire''':
Ligne 27 : Ligne 27 :
  vim /etc/wireguard/wg0.conf
  vim /etc/wireguard/wg0.conf


<source lang="bash">
<syntaxhighlight lang="bash">
[Interface]
[Interface]
Address = 10.100.100.1/24
Address = 10.100.100.1/24
Ligne 39 : Ligne 39 :
PublicKey = INSÉRER_LA_CLÉ_PUBLIQUE_DU_CLIENT
PublicKey = INSÉRER_LA_CLÉ_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.100.100.2/32
AllowedIPs = 10.100.100.2/32
</source>
</syntaxhighlight>


==Activer le routage==
==Activer le routage==
Ligne 72 : Ligne 72 :


==Configuration du client==
==Configuration du client==
vim /etc/wireguard/wg0-client.conf


<source lang="bash">
<syntaxhighlight lang="bash">
[Interface]
[Interface]
Address = 10.100.100.2/32
Address = 10.100.100.2/32
Ligne 83 : Ligne 84 :
AllowedIPs = 0.0.0.0/0
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
PersistentKeepalive = 25
</source>
</syntaxhighlight>


{{Astuce|Il est également possible d'exécuter un script après l'établissement et à la destruction du tunnel (afin de changer vos serveurs DNS  ou d'ajouter des [https://www.cyberciti.biz/faq/how-to-set-up-wireguard-firewall-rules-in-linux/ règles de pare-feu] par exemple) via les directives <source lang="bash" inline>PostUp</source> et <source lang="bash" inline>PostDown</source> de la section <source lang="bash" inline>[Interface]</source>.}}
{{Astuce|Il est également possible d'exécuter un script après l'établissement et à la destruction du tunnel (afin de changer vos serveurs DNS  ou d'ajouter des [https://www.cyberciti.biz/faq/how-to-set-up-wireguard-firewall-rules-in-linux/ règles de pare-feu] par exemple) via les directives <syntaxhighlight lang="bash" inline>PostUp</syntaxhighlight> et <syntaxhighlight lang="bash" inline>PostDown</syntaxhighlight> de la section <syntaxhighlight lang="bash" inline>[Interface]</syntaxhighlight>.}}


==Démarrer le tunnel==
==Démarrer le tunnel==
Ligne 94 : Ligne 95 :


==Routage==
==Routage==
''Wireguard'' utilise le [[routage par la source]] afin de faire transiter l'ensemble des paquets dans le tunnel. Lorsque le client monte le lien, l'outil se charge d'exécuter des commandes [[:Category:iproute2|Iproute2]] (affichées dans le ''stdout'') afin de créer une table n°51820 et d'y ajouter la règle <source lang="bash" inline>ip -4 route add 0.0.0.0/0 dev wg0-client table 51820</source>. Ceci peut être déroutant au premier abord du fait que la route par défaut n'est pas supprimée de la table de routage standard, ce qui pourrai laisser penser que le ''VPN'' n'est pas utilisé pour le traffic ''WAN'' mais il n'est est rien. Une capture réseau le confirmera asser facilement.
''Wireguard'' utilise le [[routage par la source]] afin de faire transiter l'ensemble des paquets dans le tunnel. Lorsque le client monte le lien, l'outil se charge d'exécuter des commandes [[:Category:iproute2|Iproute2]] (affichées dans le ''stdout'') afin de créer une table n°51820 et d'y ajouter la règle <syntaxhighlight lang="bash" inline>ip -4 route add 0.0.0.0/0 dev wg0-client table 51820</syntaxhighlight>. Ceci peut être déroutant au premier abord du fait que la route par défaut n'est pas supprimée de la table de routage standard, ce qui pourrai laisser penser que le ''VPN'' n'est pas utilisé pour le traffic ''WAN'' mais il n'est est rien. Une capture réseau le confirmera asser facilement.


=Sources=
=Sources=

Dernière version du 5 mars 2022 à 10:03

Wireguard est une solution de VPN libre à source ouverte se voulant plus simple et sécurisée qu'OpenVPN.

Partie serveur

Installation

Il est actuellement (21/07/20) disponible dans les branches buster-backports, bullseye et Sid de Debian. L'outil est présent sous forme de module DKMS jusqu'au noyau 5.5 et c'est au 5.6 qu'il est intégré complètement à celui-ci. Il est également possible de l'obtenir via un dépôt dédié avec les commandes suivantes:

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

Nous utiliserons une Debian Sid (du 19/04/19) pour cette documentation. Aussi, seule la commande suivante est nécessaire:

apt install wireguard

Génération des clés

wg genkey | tee /etc/wireguard/clé_privée_serveur | wg pubkey > /etc/wireguard/clé_publique_serveur

Afficher vos clés

cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur

Le résultat vous sera utile pour remplir les fichiers de configuration serveur et client.

Configuration du serveur

vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.100.100.1/24
SaveConfig = true
PrivateKey = INSÉRER_LA_CLÉ_PRIVÉE_DU_SERVEUR
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = INSÉRER_LA_CLÉ_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.100.100.2/32

Activer le routage

sed -i '/net.ipv4.ip_forward/s/^#//g' /etc/sysctl.conf
sysctl -p

Appliquer les bons droits

chown -v root:root /etc/wireguard/wg0.conf
chmod -v 600 /etc/wireguard/wg0.conf

Démarrer le tunnel

wg-quick up wg0

Une interface wg0 est créée avec l'adresse IP fournie dans le fichier de configuration.

Arrêter le tunnel

wg-quick down wg0

Activer le tunnel au démarrage

Il existe un service Systemd pré-installé mais désactivé par défaut. Il suffit de l'activer pour lancer automatiquement Wireguard au démarrage du système.

systemctl enable wg-quick@wg0.service

Partie cliente

installation

apt install wireguard

Génération des clés

wg genkey | tee /etc/wireguard/clé_privée_client | wg pubkey > /etc/wireguard/clé_publique_client

Afficher vos clés

cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur

Configuration du client

vim /etc/wireguard/wg0-client.conf
[Interface]
Address = 10.100.100.2/32
PrivateKey = 8BOBheDTB8I0FpYfX4MM0OVRcchfPMPw1epH+rTaEm0=

[Peer]
PublicKey = sX3l46346afcqNeCUgXOY7dxfGat0/pO7O2g75vtGhU=
Endpoint = wg.toto.fr:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

ASTUCE

Il est également possible d'exécuter un script après l'établissement et à la destruction du tunnel (afin de changer vos serveurs DNS ou d'ajouter des règles de pare-feu par exemple) via les directives PostUp et PostDown de la section [Interface].

Démarrer le tunnel

wg-quick up wg0-client

Arrêter le tunnel

wg-quick down wg0-client

Routage

Wireguard utilise le routage par la source afin de faire transiter l'ensemble des paquets dans le tunnel. Lorsque le client monte le lien, l'outil se charge d'exécuter des commandes Iproute2 (affichées dans le stdout) afin de créer une table n°51820 et d'y ajouter la règle ip -4 route add 0.0.0.0/0 dev wg0-client table 51820. Ceci peut être déroutant au premier abord du fait que la route par défaut n'est pas supprimée de la table de routage standard, ce qui pourrai laisser penser que le VPN n'est pas utilisé pour le traffic WAN mais il n'est est rien. Une capture réseau le confirmera asser facilement.

Sources