URL: https://linuxfr.org/forums/linux-debian-ubuntu/posts/tuto-howto-monter-un-serveur-vpn-avec-pivpn-sur-raspbian Title: [Tuto/HowTo] Monter un serveur VPN avec PiVPN sur Raspbian Authors: EauFroide Date: 2017年05月06日T15:35:52+02:00 License: CC By-SA Tags: réseau, pivpn, libreoffice, linux_mint, ubuntu, tutoriel et openvpn Score: 9 **musique d'ambiance :** [Tryo - Watson](https://www.youtube.com/watch?v=9sN9zRV5sGI) [Tryo - La misère d'en face](https://www.youtube.com/watch?v=W-ui8g4eC7I) **Note :** [PiVPN](http://www.pivpn.io/) fonctionne autant sur [Raspbian](https://fr.wikipedia.org/wiki/Raspbian), [Debian](http://www.debian.org) qu'[Ubuntu](https://fr.wikipedia.org/wiki/Ubuntu) _ ______ _ Qu'est-ce qu'OpenVPN ? =========== - [OpenVPN](https://fr.wikipedia.org/wiki/Openvpn) est un logiciel permettant de créer un [Réseau Virtuel Privé](https://fr.wikipedia.org/wiki/R%C3%A9seau_priv%C3%A9_virtuel) (ou [Virtual Private Network](https://en.wikipedia.org/wiki/Vpn)), plus communément appelé VPN. Le client et le serveur sont sous licence [GPLv3](https://www.gnu.org/licenses/quick-guide-gplv3.fr.html) (libre). - Dans ce tutoriel nous allons utiliser [PiVPN](http://www.pivpn.io/) qui est un ensemble de scripts permettant de faciliter l'installation et l'utilisation d'OpenVPN. Je vous conseil de choisir un Raspberry Pi type 2 ou supérieur (sur le 1 pour un seul client le CPU varie déjà entre 30% et 70%). - **Note :** n'oubliez pas de maintenir à jours votre machine ! _ ______ _ Mise en place d'OpenVPN serveur sur Raspbian (debian pour Raspberry Pi) =========== **Note :** on part de zéro (fresh install) 1. **Passez en administrateur (root)** * sur Raspbian/Ubuntu ``` sudo su ``` * sur Debian ``` su ``` 1. **Balayage du système (pour Raspbian Jessie normal)** ``` apt-get purge libreoffice* wolfram-engine sonic-pi minecraft-pi greenfoot pcmanfm realvnc-vnc-server supercollider-ide ``` ``` apt-get autoremove && apt-get autoclean ``` ``` dpkg -P $(dpkg -l | grep "^rc" | tr -s ' ' | cut -d ' ' -f 2) ``` 1. **Mises à jours du système** ``` apt-get update apt-get dist-upgrade -y #raspberry pi uniquement rpi-update ``` * **Si rpi-update et raspi-config ne sont pas installé (Raspbian Jessie Light) :** ``` apt-get install rpi-update raspi-config ``` 1. **Fixez l'IP de votre Raspberry Pi ([source](https://www.0rion.netlib.re/forum4/viewtopic.php?f=14&t=571), pour [Debian checkez ici](https://www.0rion.netlib.re/forum4/viewtopic.php?f=14&t=581))** * **Éditez _/etc/dhcpcd.conf_** ``` nano /etc/dhcpcd.conf ``` * **Et collez à la fin les lignes suivantes en adaptant à vos souhaits et votre réseau.** ``` interface eth0 static ip_address=192.168.1.42/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.1 ``` **_interface eth0_** => ou eth0 est votre interface réseau **_static ip_address=192.168.1.42/24_** => ou 192.168.1.42 est l'adresse IP que vous souhaitez **_static routers=192.168.1.1_** => ou 192.168.1.1 est l'adresse IP de la passerelle (le routeur) **_static domain_name_servers=192.168.1.1_** => ou 192.168.1.1 est l'adresse IP du serveur DNS à utiliser 1. **Redémarrez la machine** ``` reboot ``` 1. **Re-passez en administrateur (root)** * sur Raspbian/Ubuntu ``` sudo su ``` * sur Debian ``` su ``` 1. **Créer un utilisateur dédié** ``` adduser pivpn ``` 1. **Ouvrez un [screen](https://doc.ubuntu-fr.org/screen) (sera utile si l'installation s'attarde plus que votre patience, surtout si vous générez les clés de chiffrement)** ``` screen -R installation ``` 1. **Lancement de l'installation** ``` curl -L https://install.pivpn.io | bash ``` 1. **Lorsque l'installeur vous demande :** * quel user utiliser => utilisez les flèches et la barre d'espace pour choisir l'utilisateur créé précédemment ( pivpn ). * quel protocole choisir => laissez [UDP](https://fr.wikipedia.org/wiki/User_Datagram_Protocol) sauf si vous souhaitez pouvoir vous connecter à votre VPN depuis le réseau Tor, à ce moment là choisissez TCP * quel port choisir => laissez celui par défaut * la taille de la clés de chiffrement => choisissez la plus élevée (actuellement 4028bit) * s'il faut télécharger ou générer la clés [Diffie-Hellman](https://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman) => Je vous conseil de les générer néanmoins il faut un peu plus de 30 heures pour un [RPI 1b](https://www.raspberrypi.org/products/model-b-plus/) donc c'est suivant votre motivation (vous pouvez quitter le screen sans l’arrêter via le raccourcis clavier CTRL+A => CTRL+D) 1. **Éditez le fichier _/etc/sysctl.conf_** ``` nano /etc/sysctl.conf ``` * **Et dé-commentez (supprimez les # au début) les deux lignes suivantes** >net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 1. **Demandez au système de prendre en compte la précédente commande** ``` sysctl -p ``` 1. **Redémarrez** ``` reboot ``` Forcer toutes les connexions à passer par le VPN ------------------------------------------------ **Note :** Par défaut les clients ne transitent par le VPN que pour contacter d'autres machines à l'intérieur du VPN. Si vous souhaitez faire passer toutes les communications des clients par le serveur VPN suivez cette procédure. **Attention :** Cela rend inaccessible les clients depuis l'extérieur du VPN. 1. **Éditez le fichier _/etc/openvpn/server.conf_** ``` sudo nano /etc/openvpn/server.conf ``` 1. **Cherchez (CTRL+W) _push "redirect-gateway def1"_ et remplacez par _push "redirect-gateway def1 bypass-dhcp"_ OU dé-commentez la ligne en supprimant le point virgule (;) au début de la ligne suivant les fichiers de config. Enfin sauvez et quittez (_CTRL+X_).** _ ______ _ Utilisation côté serveur =========== Comment créer un client/utilisateur pour serveur (sans mot de passe) ? ----------- * **Réponse :** Entrez la commande suivante dans votre terminal. ``` sudo pivpn add nopass ``` **La fin de la commande va vous sortir un paragraphe du style**>Done! myUser.ovpn successfully created! myUser.ovpn was copied to: /home/pivpn/ovpns for easy transfer. Comment ajouter un client/utilisateur (avec mot de passe) ? ----------- - **Réponse :** Entrez la commande suivante dans votre terminal puis choisissez un nom d'utilisateur et un mot de passe. ``` sudo pivpn add ``` **La fin de la commande va vous sortir un paragraphe du style**>Done! myUser.ovpn successfully created! myUser.ovpn was copied to: /home/pivpn/ovpns for easy transfer. Comment supprimer un client/utilisateur ? ----------- - **Réponse :** Entrez la commande suivante dans votre terminal puis choisissez le nom de l'utilisateur. ``` sudo pivpn revoke ``` Peut-on afficher la liste des clients connecté au serveur ? ----------- - **Réponse :** Bien sur, entrez la commande suivante sur le serveur. ``` sudo pivpn -c ``` Ligne de commande : fixer l'adresse IP d'un client ou plusieurs clients sur le VPN ----------- 1. **Voyez ce tutoriel : [[Tuto/HowTo] Fixer ip des clients sur openvpn](https://linuxfr.org/forums/linux-debian-ubuntu/posts/tuto-howto-fixer-ip-des-client-sur-openvpn)** _ ______ _ Utilisation d'OpenVPN côté client =========== **Bonus :** Si besoin, vous pouvez vérifier votre IP (publique) à [cette adresse](https://www.0rion.netlib.re/outils/myIP.php) (PHP) ou [encore ici](https://www.0rion.netlib.re/outils/torInfos.php) (PHP + javascript). Si vous voulez checker votre IPv4 en ligne de commande : ``` curl -s -k -L https://www.0rion.netlib.re/outils/myIP.php | cat ``` Interface Graphique : installer OpenVPN client sur Ubuntu, Xubuntu, Kubuntu, Voyager OS, Linux Mint et le connecter ----------- **Note :** vous devez utiliser le même nom de domaine que configuré sur le serveur VPN. Ainsi si votre serveur VPN est configuré pour être accédé depuis _vpn.helloWorld.com_, vous ne pourrez pas y accéder en entrant directement son ip (par exemple 192.168.1.42). Vous pouvez modifier votre fichier _/etc/hosts_ pour corriger ce problème facilement :) 1. **Installez les pré-requis** ``` sudo apt-get install openvpn network-manager-openvpn-gnome ``` 1. **Vous devez disposer de votre fichier _nomUtilisateur.ovpn_ si vous ne l'avez pas importez le ou demandez le à l'admin du VPN** 1. **Lancez le gestionnaire réseau de votre distribution et choisissez "_Modifications des connexions_" puis "_Ajouter_" et enfin "Importer une configuration VPN enregistrée" et finalisez avec "_Créer_".** 1. **Le logiciel vous demande le fichier _.ovpn_** 1. **Enfin entrez le mot de passe associé à l'utilisateur (qui permet d'accéder à la clés) et si vous désirez ou non que le VPN soit disponible aux autres utilisateurs du système.** 1. **Enregistrez puis tentez de vous connecter à votre VPN pour le tester :)** Ligne de commande : Installer OpenVPN client sur Raspbian/Ubuntu et le connecter ----------- **Note :** vous devez utiliser le même nom de domaine que configuré sur le serveur VPN. Ainsi si votre serveur VPN est configuré pour être accédé depuis _vpn.helloWorld.com_, vous ne pourrez pas y accéder en entrant directement son ip (par exemple 192.168.1.42). Vous pouvez modifier votre fichier _/etc/hosts_ pour corriger ce problème facilement :) 1. **Installez les pré-requis** ``` sudo apt-get install openvpn ``` 1. **Vous devez disposer de votre fichier _nomUtilisateur.ovpn_ si vous ne l'avez pas importez le ou demandez le à l'admin du VPN** 1. **Placez le fichier _nomUtilisateur.ovpn_ dans _/etc/openvpn/_** ``` sudo mv ~/Download/nomUtilisateur.ovpn /etc/openvpn/ ``` 1. **Accordez le droit de lecture uniquement pour l'utilisateur qui en a besoin.** ``` sudo chown root:root /etc/openvpn/nomUtilisateur.ovpn sudo chmod 770 /etc/openvpn/nomUtilisateur.ovpn ``` 1. **Lancez openvpn avec le fichier de configuration** ``` sudo openvpn --daemon --cd /etc/openvpn --config nomUtilisateur.ovpn ``` **Note :** Si vous êtes sur Ubuntu ou Raspbian et que vous souhaitez pouvoir accéder aux machines connectées à votre VPN sans pour autant que tout le trafic ne transitent par le VPN, alors ajoutez dans la commande _--route-nopull_ comme suit ``` sudo openvpn --daemon --route-nopull --cd /etc/openvpn --config nomUtilisateur.ovpn ``` 1. **Testez ! :)** **Si vous avez forcé le passage par le VPN** ``` curl -s -k -L https://www.0rion.netlib.re/outils/myIP.php | cat ``` **Si vous n'avez pas forcé le passage par le VPN** ``` ping -c 10 10.8.0.1 ``` _ ______ _ Astuces =========== Checker si openvpn est bien lancé ----------- 1. **Lancez la commande suivante :** ``` ps -aux | grep -E '[o]penvpn' ``` Afficher la version d'openvpn installée (autant client que serveur) ----------- ``` openvpn --version ``` Est-ce qu'OpenVPN consomme beaucoup de ressources ? ----------- Voici un screenshot pris lorsque j'ai connecté mon serveur [ZoneMinder](https://zoneminder.com/) à un OpenVPN installé sur un [RPI 1B+](https://www.raspberrypi.org/products/model-b-plus/) puis que j'ai affiché une des cameras de surveillance (qui est passé de +-21FPS a 1fps, tout le trafic réseau de ZoneMinder transitant par le VPN soit un flux variable entre 1Mo/s et 2Mo/s)  _ ______ _ Farm Link =========== * [[Tuto/HowTo] Configurer un nom de domaine gratuit Netlib.re](https://www.0rion.netlib.re/forum4/viewtopic.php?f=45&t=285) * [[Tuto/HowTo] Garder un contrôle discret sur son serveur avec tor et ssh](https://www.0rion.netlib.re/forum4/viewtopic.php?f=45&t=159) * [ubuntu-FR - Wiki : OpenVPN](https://doc.ubuntu-fr.org/openvpn) * [ubuntu-FR - Wiki : Client OpenVPN](https://doc.ubuntu-fr.org/client_openvpn) * [Ubuntu 16.04 » Guide du serveur Ubuntu » VPN](https://help.ubuntu.com/lts/serverguide/openvpn.html) * [Setting up a Home VPN Server Using Your Raspberry Pi](https://www.sitepoint.com/setting-up-a-home-vpn-using-your-raspberry-pi/) * [PiVPN - Simplest OpenVPN setup and configuration, designed for Raspberry Pi.](http://www.pivpn.io/#install) * [[RPI] Raspbian Optimization](https://www.0rion.netlib.re/forum4/viewtopic.php?f=67&t=92&p=128#p128) * [PiVPN – Pour transformer un Raspberry Pi en serveur OpenVPN](https://korben.info/pivpn-transformer-raspberry-pi-serveur-openvpn.html) * [OpenVPN - Downloads](https://openvpn.net/index.php/open-source/downloads.html) * [No Internet Access and No LAN Access #151](https://github.com/pivpn/pivpn/issues/151) * [How To Set Up an OpenVPN Server on Ubuntu 16.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-16-04) * [[Tuto/HowTo] [GNU/Linux] Monter un serveur VPN sur Raspberry Pi (Raspbian) avec PiVPN](https://www.0rion.netlib.re/forum4/viewtopic.php?f=14&t=569) (tutoriel d'origine) * [[Tuto/HowTo] [GNU/Linux] Monter un serveur VPN sur Odroid (Ubuntu Minimal) avec PiVPN](https://www.0rion.netlib.re/forum4/viewtopic.php?f=14&t=621)