Outils pour utilisateurs

Outils du site


config-vpn

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édentes Révision précédente
Prochaine révision
Révision précédente
config-vpn [2019/06/13 11:21]
eric
config-vpn [2019/10/17 10:56] (Version actuelle)
ninjatrappeur [Activation du routage IP] Correction sysctl conf (encore)
Ligne 1: Ligne 1:
-===== Mise en route du client VPN =====+===== Mise en place d'un serveur VPN avec WireGuard ===== 
 + 
 +===   === 
 + 
 +=== Présentation === 
 + 
 +Wireguard est un logiciel et un protocol open-source,​ publié sous licence GPL, développé par Jason A. Donenfeld.\\ 
 +WireGuard permet de construire des tunnels VPN via des connexions point-à-point sécurisés et cryptés.\\ 
 +Il peut être configuré en mode routé ou bridgé. Sous Linux il est exécuté en tant que module ​du niyau et se veut plus rapide que OpenVPN ou IPSec Source: [[https://​en.wikipedia.org/​wiki/​WireGuard|Wikipedia]] 
 + 
 +Parler de serveur dans le cas de wireGuard est un abus de langage.\\ 
 +Puisqu'​il fonctionne en mode point-à-point,​ il n'y a pas vraiment de client ​ou de serveur comme avec OpenVPN. Il y a juste un nœud (peer) qui se connecte à un autre noeud. Dans notre cas on va utiliser une machine avec une IP publique qui fera office de serveur ​VPN.\\ 
 +Les "​clients"​ se connecteront à ce serveur à travers leur BOX Fibre ou ADSL et "​sortiront"​ sur internet avec l'​adresse IP publique qui leur aura été fourni. L'​installation à été réalisé sur Debian 10 (Buster). La [[https://​www.wireguard.com/​install/​|documentation officielle]]. est très complète. Ici je ne fait que la résumer et la traduire.\\ 
 +Je vous recommande aussi de suivre le ([[https://​www.wireguard.com/​quickstart/​|Quick Start]]) qui permet de bien comprendre la mise en œuvre de **WireGuard**. 
 +==== Installation du serveur ==== 
 + 
 +\\ 
 +Rappelez-vous que dans le cas de **WireGuard** le terme de serveur est un abus de langage! 
 + 
 +**Notes:** j'ai très souvent, voir toujours eu des problème avec l'​installation du package sous Debian. Installer à partir des sources. Ça fonctionne\\ 
 +à tous les coups. 
 + 
 +C'est part… 
 + 
 +==== Installation des pré-requis ==== 
 + 
 +<code bash> 
 +$ sudo apt update 
 +$ apt install -y libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-config xz-utils 
 +</​code>​ 
 + 
 +**Notes:​** 
 + 
 +   * apt update: met à jour la liste des paquets 
 +  * les paquets linux-headers-$(uname -r) build-essential pkg-config libmnl-dev libelf-dev sont nécessaires pour la compilation du noyau et de l'​outil wg 
 +  * la commande uname -r permet de récupérer la version du noyau installé. 
 + 
 +==== Récupération des sources ==== 
 + 
 +<​code>​ 
 +$ wget https://​git.zx2c4.com/​WireGuard/​snapshot/​WireGuard-0.0.20191012.tar.xz 
 +</​code>​ 
 + 
 +==== Extraction des sources ==== 
 + 
 +Pensez à installer <​pre>​xz-utils</​pre>​ si vous ne l'avez pas… 
 + 
 +<code bash> 
 +# tar xvlf WireGuard-0.0.20191012.tar.xz 
 +</​code>​ 
 + 
 +==== Compilation des sources et installation du noyau ==== 
 + 
 +<code bash> 
 +$ cd WireGuard-0.0.20191012/​src 
 +$ make 
 +$ sudo make install 
 +</​code>​ 
 + 
 +Le dernier make devrait installer les fichiers suivants: 
 + 
 +<​file>​ 
 +/​usr/​share/​man/​man8/​wg.8 
 +/​usr/​share/​man/​man8/​wg-quick.8 
 +/​usr/​share/​bash-completion/​completions/​wg 
 +/​usr/​share/​bash-completion/​completions/​wg-quick 
 +/​usr/​bin/​wg 
 +/​usr/​bin/​wg-quick 
 +/​etc/​wireguard 
 +/​lib/​modules/​$(uname -r)/​extra/​wireguard.ko 
 +</​file>​ 
 + 
 +/​etc/​wireguard/​ ⇒ le répertoire ou est stocké le fichier de configuration \\ /​lib/​modules/​$(uname -r)/​extra/​wireguard.ko ⇒ le module du noyau \\ /usr/bin/wg ⇒ l'​utilitaire pour générer, les clès, configurer les tunnels etc. \\ /​usr/​bin/​wg-quick ⇒ un script bash pour faciliter 
 + 
 +==== Lancement du tunnel au démarrage du système ==== 
 + 
 +On peut lancer automatiquement la conneion au VPN avec systemctl 
 + 
 +<code bash> 
 +$ sudo systemctl enable wg-quick@wg0 
 +</​code>​ 
 + 
 +==== Activation du routage IP ==== 
 + 
 +Pour activer le routage IP au niveau du serveur exécuter les commandes suivantes:​ 
 + 
 +<code bash> 
 +$ sudo sysctl -w net.ipv4.ip_forward=1 
 +</​code>​ 
 + 
 +On oublie pas l'​IPv6:​ 
 + 
 +<code bash> 
 +$ sudo sysctl -w net.ipv6.conf.all.forwarding=1 
 +</​code>​ 
 + 
 +Cette commande autorise le routage des paquets entrants et sortants qui transitent par le tunnel. 
 + 
 +Pour que cette option soit prise en compte au redémarrage du serveur rajouter les ligne suivantes dans /​etc/​sysctl.conf:​ 
 + 
 +<code bash> 
 +net.ipv4.ip_forward = 1 
 +net.ipv6.conf.all.forwarding = 1 
 +</​code>​ 
 + 
 +==== Configuration de WireGuard ==== 
 + 
 +On arrive à la partie croustillante. 
 + 
 +==== Génération des paires de clés ==== 
 + 
 +Pour WireGuard on crée une paire de clés (clé privée, clé publique). \\ La clé privée est gardée secret, c'est elle qui permet de décrypter les paquets. \\ La clé publique est communiquée au nœud distant. C'est elle qui lui permet de crypter le paquet qui ne pourra être décrypté qu'​avec la clé privée. 
 + 
 +<code bash> 
 +$ sudo mkdir /​etc/​wireguard/​private 
 +$ sudo wg genkey | tee /​etc/​wireguard/​private/​privkey | sudo wg pubkey > /​etc/​wireguard/​private/​pubkey 
 +$ sudo chmod 700 /​etc/​wireguard/​private 
 +$ sudo chmod 600 /​etc/​wireguard/​private/​* 
 +</​code>​ 
 + 
 +==== Fichier de configuration ==== 
 + 
 +Dans le répertoire /​etc/​wireguard/​wg0.conf on va mettre les informations nécessaire pour créer l'​interface 
 + 
 +<​file>​ 
 +[Interface] 
 +PrivateKey = sPVFrwgLfETkidY7+ihZHpZCzNT7s/​WARmjRVeoVvFM= 
 +ListenPort = 51820 
 +Address = 10.0.0.1/​24,​ fd00::​1/​64 
 +SaveConfig = false 
 +</​file>​ 
 + 
 +Quelques explications:​ 
 + 
 +**PrivateKey =**  contient la clé privée que l'on a généré juste avant \\ **ListenPort = **C'​est le numéro de port sur lequel sera établie la connexion \\ **Adresses =**  Correspont aux adresses de l'​interfce dans le tunnel \\ **SaveConifg =**  le fichier de configuration de ne sera pas modifié par la cli wg. 
 + 
 +Maintenant on peut démarrer l'​interface wireguard 
 + 
 +<code bash> 
 +$ systemctl start wg-quick@wg0 
 +</​code>​ 
 + 
 +Avec la commande wg0 on peut voir si l'​interface est montée 
 + 
 +<code bash> 
 +root@baionet:/​home/​erjo#​ wg 
 +interface: wg0 
 +public key: pmcbNukQLOFSdImt2Tzy5gG4NLDOxHGI4MYGugBKWAE=\\ 
 +private key: (hidden) 
 +listening port: 51820 
 +</​code>​ 
 + 
 + \\ Maintenant il reste à '​connecter'​ des nœuds clients que l'on va rajouter dans le fichier de configuration (/​etc/​wireguard/​wg0.conf) \\ Dans le principe le '​client'​ doit se générer une paire de clée et nous communiquer sa clée publique. Il met à jour soon fichier de conf et nous le notre. \\ Dans la pratique c'est nous, FAI, qui fournissons à l'​utilisateur un fchier de configuration avec tout ce qu'il faut à l'​intérieur. 
 + 
 +===== Configuration du '​client'​ ===== 
 + 
 +1. On génère les clés comme plus haut. Sauf que dans ce cas on ne conserve pas la clée privée puisque c'est celle du client. \\ On pourrait être tenté de le faire au cas ou le client perdrait son fichier de conf et blabla. \\ Mais dans le principe c'est comme si la banque conservait une copie de votre code de carte bancaire… C'est mal. 
 + 
 +2. On donne au client sont fichier de conf (wg0.conf) qui contiendra:​ 
 + 
 +  * Sa clé privée 
 +  * Ses adresses IPs (v4 et v6) 
 +  * les infos pour ouvrir le tunnel avec le serveur. 
 + 
 +Le fichier ressemble à ça: 
 + 
 +<code bash> 
 +[Interface] 
 +PrivateKey = iFUKDweuPernEUv84czH8jXxvTiNFuH0kJqpK4ClL3c= 
 +Address = 130.89.148.77/​32,​ 2001:​67c:​2564:​a119::​77/​64 
 +DNS = 80.67.169.12,​ 80.67.169.40,​ 2001:​910:​800::​12,​ 2001:​910:​800::​40 
 + 
 +[Peer] 
 +PublicKey = pmcbNukQLOFSdImt2Tzy5gG4NLDOxHGI4MYGugBKWAE= 
 +PresharedKey = N/​PZozZRhOLwc0DttzmDE5V5BvWyc86MVTxfRudzlk4= 
 +PersistentKeepalive = 15 
 +AllowedIPs = 0.0.0.0/0, ::/0 
 +Endpoint = 80.67.186.254:​51820 
 +</​code>​ 
 + 
 +Quelques explications:​ 
 + 
 +**PrivateKey = **Comme plus haut, c'est la clé privé du client. \\ **Address = **Ici on met directement les IPs publiques que l'on a assignés au client. \\ **DNS = **Ce sont ceux de FDN. Il serait assez mal venu d'​utiliser ceux de Google. Nuetralité oblige. 
 + 
 +Dans la section [Peer] on retrouve 
 + 
 +**PublicKey =**  La clé publique du serveur \\ **PersistentKeepalive =**  Pour éviter que le tunnel ne tombe lorsqu'​il n'y a pas de trafic. Particulièrement utile avec une ADSL. \\ **AllowadIPs =**  les IPs que le client est autorisé à se connecter. Il ne faut pas les oublier sinon le client ne pourra discuter qu'​avec le serveur. \\ **Endpoint =**  L'IP et le port du seveur sur lequel va s'​établir le tunnel. 
 + 
 + \\ Et enfin dans le fichier de configuration du serveur on ajoute la section [Peer] qui correspond à notre client. 
 + 
 +<code bash> 
 +[Interface] 
 +PrivateKey = CNngBuFFo4y2TXBT+NLbE+h5LAqqJUt4bVGgcYFm2n0= 
 +ListenPort = 51820 
 +Address = 10.0.0.1/​24,​ fd00::​1/​64 
 +SaveConfig = false 
 + 
 +# User1 
 +[Peer] 
 +PublicKey ​N/​PZozZRhOLwc0DttzmDE5V5BvWyc86MVTxfRudzlk4= 
 +PresharedKey ​N/​PZozZRhOLwc0DttzmDE5V5BvWyc86MVTxfRudzlk4= 
 +AllowedIPs ​130.89.148.77/​32,​ 2001:​67c:​2564:​a119::​77/​64 
 +</​code>​ 
 + 
 +**Note:** \\ Vous devriez avoir autant de section [Peer] que vous avez de clients. 
 + 
 + \\ That's All Folks!
  
-=== Comment ça marche ===  
-=== Installation du client === 
-[[https://​www.wireguard.com/​install/​|WireGuard]] 
  
-=== Configuration du client === 
-=== Démarrage automatique === 
config-vpn.1560417716.txt.gz · Dernière modification: 2019/06/13 11:21 par eric