« Wireguard » : différence entre les versions

De Wiki doc

(Page créée avec « Category:vpn Wireguard est une solution de VPN libre à source ouverte se voulant plus simple et sécurisée qu'OpenVPN. {{info|Wireguard n'est actuelleme... »)
 
(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..)
Ligne 1 : Ligne 1 :
[[Category:vpn]]
[[Category:vpn]]
Wireguard est une solution de VPN libre à source ouverte se voulant plus simple et sécurisée qu'[[Openvpn|OpenVPN]].
''Wireguard'' est une solution de ''VPN'' libre à source ouverte se voulant plus simple et sécurisée qu'[[Openvpn|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 [https://www.wireguard.com/install/ commandes suivantes]:


{{info|Wireguard n'est actuellement (14/04/19) disponible que dans la branche ''Sid'' de Debian. Il est toutefois possible de l'obtenir via un dépôt dédié avec les [https://www.wireguard.com/install/ commandes suivantes]:
<source lang="bash">
<source 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
Ligne 10 : Ligne 13 :
</source>
</source>


Nous utiliserons une Debian Sid pour cette documentation.
Nous utiliserons une ''Debian Sid'' (du 19/04/19) pour cette documentation. Aussi, '''seule la commande suivante est nécessaire''':
}}
 
=Partie serveur=
'''Installation'''
  apt install wireguard
  apt install wireguard


'''Génération des clés'''
==Génération des clés==
  wg genkey | tee /etc/wireguard/clé_privée_serveur | wg pubkey > /etc/wireguard/clé_publique_serveur
  wg genkey | tee /etc/wireguard/clé_privée_serveur | wg pubkey > /etc/wireguard/clé_publique_serveur


'''Afficher vos clés'''
==Afficher vos clés==
  cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur
  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.''
''Le résultat vous sera utile pour remplir les fichiers de configuration serveur et client.''


'''Configuration du serveur'''
==Configuration du serveur==
  vim /etc/wireguard/wg0.conf
  vim /etc/wireguard/wg0.conf


Ligne 35 : Ligne 34 :
ListenPort = 51820
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
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
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE


Ligne 43 : Ligne 41 :
</source>
</source>


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


'''Appliquer les bons droits'''
==Appliquer les bons droits==
  chown -v root:root /etc/wireguard/wg0.conf
  chown -v root:root /etc/wireguard/wg0.conf
  chmod -v 600 /etc/wireguard/wg0.conf
  chmod -v 600 /etc/wireguard/wg0.conf


'''Démarrer le tunnel'''
==Démarrer le tunnel==
  wg-quick up wg0
  wg-quick up wg0


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


'''Arrêter le tunnel'''
==Arrêter le tunnel==
  wg-quick down wg0
  wg-quick down wg0


'''Activer le tunnel au démarrage'''
==Activer le tunnel au démarrage==
 
Il existe un service [[:Category:Systemd|Systemd]] pré-installé mais désactivé par défaut. Il suffit de l'activer pour lancer automatiquement ''Wireguard'' au démarrage du système.
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
  systemctl enable wg-quick@wg0.service


=Partie cliente=
=Partie cliente=
'''installation'''
==installation==
  apt install wireguard
  apt install wireguard


Ligne 71 : Ligne 68 :
  wg genkey | tee /etc/wireguard/clé_privée_client | wg pubkey > /etc/wireguard/clé_publique_client
  wg genkey | tee /etc/wireguard/clé_privée_client | wg pubkey > /etc/wireguard/clé_publique_client


'''Afficher vos clés'''
==Afficher vos clés==
  cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur
  cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur


'''Configuration du client'''
==Configuration du client==
 
<source lang="bash">
<source lang="bash">
[Interface]
[Interface]
Ligne 87 : Ligne 85 :
</source>
</source>


'''Démarrer le tunnel'''
{{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>.}}
 
==Démarrer le tunnel==
  wg-quick up wg0-client
  wg-quick up wg0-client


'''Arrêter le tunnel'''
==Arrêter le tunnel==
  wg-quick down wg0-client
  wg-quick down wg0-client


'''Faire passer la route par défaut dans le tunnel'''
==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.
Il faudra trouver comment le faire automatiquement mais pour le moment on ce contentera de le faire via la méthode traditionnelle.
 
Ajout de la route statique pour joindre le serveur
ip r a IP_SERVEUR via IP_PASSERELLE
 
Suppression de la route par défaut
ip r d default
 
Ajout de la route par défaut via le tunnel
ip r a default via 10.100.100.1
 
Après extinction du tunnel, il suffit de remettre la route par défaut via la passerelle
ip r a default via IP_PASSERELLE


=Sources=
=Sources=

Version du 21 juillet 2020 à 23:07

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

[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