Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
configurer_un_vpn_wireguard_site-a-site [2023/07/20 21:04] superadminconfigurer_un_vpn_wireguard_site-a-site [2023/09/11 16:50] (Version actuelle) – [Mise en place] superadmin
Ligne 3: Ligne 3:
 ===== Introduction ===== ===== Introduction =====
  
-Ce tutoriel a pour but d'apprendre à configurer une liaison VPN pair-à-pair grâce au protocole WireGuard. WireGuard est un protocole de tunneling open source basé sur UDP. Il est optimisé pour être plus rapide que ses alternatives OpenVPN et IPSec. Il permet d'établir des liaisons virtuelles sécurisées de pair à pair, il n'y a donc pas de notions de client ou de serveur dans ce type d'architecture.+Ce tutoriel a pour but d'apprendre à configurer une liaison VPN pair-à-pair grâce au protocole WireGuard. WireGuard est un protocole de tunneling open source basé sur UDP. Il est optimisé pour être plus rapide que ses alternatives OpenVPN et IPSec. Il permet d'établir des liaisons virtuelles sécurisées de pair à pair.
  
 Plus précisément, on établira une liaison confidentielle entre deux machines distantes sous Alma Linux (qu'on nommera ici "les serveurs"), cachées derrière un NAT et ayant accès à un réseau WAN par le biais d'un routeur. Ce WAN simulera Internet ou un quelconque réseau public n'étant pas sous contrôle du propriétaire des deux LANs (donc potentiellement sujet aux attaques).  Plus précisément, on établira une liaison confidentielle entre deux machines distantes sous Alma Linux (qu'on nommera ici "les serveurs"), cachées derrière un NAT et ayant accès à un réseau WAN par le biais d'un routeur. Ce WAN simulera Internet ou un quelconque réseau public n'étant pas sous contrôle du propriétaire des deux LANs (donc potentiellement sujet aux attaques). 
  
-La liaison Wireguard permettra aux serveurs d'être joignables sur un même réseau virtuel comme si elles étaient branchées physiquement l'une à l'autre, sauf qu'en réalité les paquets transiteront via le WAN de façon fiable et sécurisée.+La liaison Wireguard permettra aux serveurs d'être joignables sur un même réseau virtuel comme si elles étaient branchées physiquement l'une à l'autre, sauf qu'en réalité les paquets transiteront via le WAN de façon sécurisée.
  
 ===== Topologie du lab ===== ===== Topologie du lab =====
  
 {{ ::schema_vpn_wireguard.png |Architecture du lab : Interconnexion sécurisée de deux machines distantes avec Wireguard }} {{ ::schema_vpn_wireguard.png |Architecture du lab : Interconnexion sécurisée de deux machines distantes avec Wireguard }}
 +
 +Dans cet exemple, le pair wireguard de Paris sera considéré comme le serveur, celui de Marseille comme le client.
  
 ===== Pré-requis ===== ===== Pré-requis =====
Ligne 19: Ligne 21:
   * 2 routeurs quelconques   * 2 routeurs quelconques
  
-===== Mise en place =====+===== Instructions =====
  
-<A refaire> 
 ==== Installation de Wireguard ==== ==== Installation de Wireguard ====
  
Ligne 28: Ligne 29:
 Pour les systèmes basés sur debian : Pour les systèmes basés sur debian :
  
-<code>apt install wireguard </code>+<code>apt install wireguard</code>
  
 Pour les systèmes basés sur Redhat : Pour les systèmes basés sur Redhat :
Ligne 34: Ligne 35:
 <code>dnf install wireguard-tools</code> <code>dnf install wireguard-tools</code>
  
-==== Configuration du serveur ==== +Et créer le répertoire ''/etc/wireguard'' s'il n'existe pas :
- +
-Tout d'abord, créer le répertoire '/etc/wireguard'' s'il n'existe pas :+
  
 <code>mkdir -m 0700 /etc/wireguard/</code> <code>mkdir -m 0700 /etc/wireguard/</code>
  
-Puis aller dedans :+==== Génération des clés de chiffrement ====
  
-<code>cd /etc/wireguard</code>+Afin de chiffrer les échanges sur la future liaison, il faut d'abord générer un couple de clés publique-privée sur chaque pair.
  
 +Dans le répertoire ''/etc/wireguard'', générer les clés avec la commande suivante :
  
-Ensuite générer les clés comme ceci : +<code>umask 077; wg genkey | tee privatekey | wg pubkey > publickey</code>
- +
-<code>wg genkey | tee privatekey | wg pubkey > publickey </code>+
  
 Pour les afficher : Pour les afficher :
  
-<code>cat privatekey publickey </code>+<code>cat privatekey publickey</code>
  
-===== Configurer la liaison =====+==== Configuration côté serveur ====
  
 Pour configurer une liaison Wireguard, il faut créer un fichier de configuration dédiée à la carte réseau virtuelle avec le nom ''wgX.conf'' (où X correspond à un chiffre choisi) et placé dans le répertoire ''/etc/wireguard/'', par exemple : Pour configurer une liaison Wireguard, il faut créer un fichier de configuration dédiée à la carte réseau virtuelle avec le nom ''wgX.conf'' (où X correspond à un chiffre choisi) et placé dans le répertoire ''/etc/wireguard/'', par exemple :
Ligne 61: Ligne 59:
 Entrer ceci dans le fichier : Entrer ceci dans le fichier :
  
-<code>[Interface] +<code> 
-PrivateKey = 4K2MgNR7jGtRAXBEjvP077g9rGlBgXEtf9GWH5JBa30= #clé privée du serveur +[Interface] 
-Address = 172.16.0.1/24 #Adresse IP du serveur +Address=10.8.0.65/30 #adresse du serveur dans le tunnel 
-SaveConfig = false +ListenPort = 51820 #port de connexion au VPN 
-ListenPort = 51820 #Port d'écoute +PrivateKey 6GZQ4Xus5lrJK9UxRASMCwoRuXw9HHhya0KA771h2XI#clé privée de la machine 
-PostUp iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -$ +SaveConfig true #Garde en mémoire et protège la configuration le temps que l'interface est active
-PostDown iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING$ +
-DNS 1.1.1.1 #Serveurs DNS à utiliser (facultatif, nécessite le paquet resolvconf)+
  
 [Peer] [Peer]
-PublicKey = 3rskJFYJc2IKzeEUGi9xrsTX/k/wNnecujv83stM8VM= #clé publique du client +PublicKey = sXFf8WX9sr8MwinKKotNgMSB44R2eooSfFFXi+XQeB4= #clé publique du client 
-AllowedIPs = 172.16.0.2/32 #Adresse IP du client à l'autre bout du tunnel+AllowedIPs = 10.8.0.66/32 #adresses IP autorisées à communiquer avec la machine (ici le client uniquement)
 </code> </code>
 +
 +Activer l'interface décrite dans la configuration :
 +<code>wg-quick up wg0</code>
 +
 +Pour désactiver l'interface :
 +</code>wg-quick down wg0</code>
 +
 +Vérifier si l'interface réseau virtuelle a bien été créée :
 +<code>ip a</code>
 +
 +{{ ::wg1.png?800 |L'interface wg0 parmi les interfaces réseau du système}}
 +
 +On peut aussi utiliser la commande suivante pour afficher des informations supplémentaires sur l'interface virtuelle :
 +
 +<code>wg show wg0</code>
 +
 +{{ ::wg2.png?800 |Informations sur l'interface wg0}}
 +
 +==== Configuration côté client ====
 +
 +Même chose côté client, il faut créer un fichier de configuration pour la liaison :
  
 <code> <code>
 [Interface] [Interface]
-PrivateKey = cFJfwY8cyIT1ShE0zAiSDagKpt7AvtIycYQwDJjBtFk= #clé privée du client +Address=10.8.0.66/30 #adresse du client dans le tunnel 
-Address = 172.16.0.2/24 #Adresse IP du client+ListenPort = 51820 #port de connexion au VPN 
 +PrivateKey = eJ1bmItHSHONKRPYykaFsD/NtWC7fkpLM0kwe/OtcGc= #clé privée de la machine
  
-[Peer+ 
-PublicKey = /h3442wuo67tG2M/yufCz0eZgBjYS0HsFIGk0Wa1bWQ= #clé publique du serveur +[pair
-Endpoint 10.0.0.1:51820 #Adresse publique du serveur (ici adresse du routeur --> Redirection NAT+PublicKey = CE4ETuboYOxGdTehYES1NaN1Z32kRtdYAQn3glB34Xg= #clé publique du serveur 
-AllowedIPs = 172.16.0.1/32 #IP du serveur à l'autre bout du tunnel +AllowedIPs 0.0.0.0/0,::/0 #adresses IP autorisées à communiquer avec la machine (ici le client uniquement
-PersistentKeepalive = 25 #intervalle d'envoi des paquets pour éviter une coupure de connexion par les pare-feux.+Endpoint = 172.16.10.1:51820 #adresse IP du serveur
 </code> </code>
  
-A FINIR+:!: Ici la configuration restreint le client à communiquer avec l'IP du serveur, mais on aurait pu mettre ''0.0.0.0/0,::/0'' pour l'autoriser à communiquer avec n'importe quelle IPv4 ou IPv6 à travers le tunnel (à utiliser dans le cas où le serveur est également un routeur permettant l'accès à Internet). Cette directive permet de filtrer avec qui la machine peut communiquer à travers le tunnel, ce qui constitue une première sécurité.
  
 +:!: La directive ''Endpoint'' est facultative. Elle est notamment utile lorsque le client peut-être amené à avoir une IP dynamique. Entre deux machines dont l'IP est statique, elle n'est pas nécessaire.
 ===== Sources ===== ===== Sources =====
  
 📕 Linux Pratique hors série n°56 📕 Linux Pratique hors série n°56
 +
 +[[https://www.it-connect.fr/mise-en-place-de-wireguard-vpn-sur-debian-11/|IT-Connect : Mise en place de Wireguard]]