PiVPN — Installer un VPN maison avec un Raspberry Pi

Avoir un serveur OpenVPN installé à la maison peut avoir beaucoup d’avantage.

PirateLab

--

Voici comment en installer un grâce à un Raspberry Pi, un carte SD (8go minimum), NoIP et PiVPN.

Pour ceux qui ont déjà un Raspberry Pi flashé et le SSH activé, vous pouvez passer directement à la configuration de votre Box.

Installer Raspbian sur votre Raspberry Pi :

Pour commencer, il faut flasher votre carte SD avec l’image disque de l’OS Raspbian. Je vous conseille vivement le petit utilitaire Etcher pour cette étape .

1. Vous téléchargez la dernière version de Raspbian, insérez votre SD et en 3 cliques c’est joué.

choisissez l’image disque que vous venez de télécharger, votre carte SD et 📸

2. Il va falloir activer le SSH maintenant (il n’est plus activé par défaut dans les dernières version de Raspbian). Il y a deux méthodes pour le faire :

  • Avec votre clavier/écran/souris. Vous branchez votre Raspberry Pi avec la carte SD insérée. Allez dans les paramètres de configuration dans l’onglet interfaces . Là vous passez SSH à Enabled.
  • Ou ajouter un fichier qui s’appelle ssh (peu importe le contenu mais attention il ne doit pas y avoir d’extension de type .txt ou autre) et placez le dans /boot/(à faire avant d’insérer la carte SD dans le Raspberry Pi). Pour plus de détails n’hésitez pas à aller voir ce lien.

⚠️ Une fois le SSH activé pensez à changer le mot de passe par défaut. ⚠️

Le mot de passe par défaut de l’utilisateur pi étant raspberry, un peu trop facile…

  • Si vous êtes avec l’interface graphique, allez dans les paramètres de configuration dans l’onglet System et cliquer sur changer le mot de passe ( essayer d’en mettre un solide 😜).
C’est le moment d’être inventif !

Vous pouvez également désactiver l’interface graphique car vous en aurez plus besoin (attention si vous désactivé cette option, vous n’aurez plus de bureau pour vos futurs manipulations).

  • Si vous êtes déjà connecté en SSH, il vous suffira de taper passwd dans votre console et faites le changement.

Il ne reste plus qu’à brancher votre Raspberry Pi à votre box si ce n’est déjà fait.

Astuce : si vous trouvez que la sortie Ethernet est trop lente pour vos besoins (depuis la V1 du Raspberry Pi, elle est en 10/100 Mbps), il possible de la bypasser en passant par les USB 2.0 qui ont un débit théorique maximum de de 480 Mbps. Il suffit d’utiliser un adaptateur USB 3.0 (rétrocompatible USB 2.0) qui à l’avantage de proposer une connexion Ethernet en Gigabit (1000 Mbps) et qui permettra de profiter au maximum de l’USB 2.0 (celui-ci fera très bien l’affaire). Si vous souhaitez avoir un peu plus d’informations, voici un petit article à ce sujet avec tests à l’appui.

Configuration de votre Box :

Maintenant il faut configurer votre box afin que votre serveur OpenVPN soit accessible depuis l’extérieur et plus seulement en local. Tous les exemples suivants sont réalisés sur ma Livebox mais des réglages similaires existent sur les autres box, à vous de les trouver 🕵.

Nous allons premièrement fixer l’IP de votre Raspberry Pi pour que le routage en interne se fasse toujours vers le bon appareil.

Vous vous connectez sur votre Box, direction configuration avancée/configuration réseau/DHCP. Une fois là vous sélectionnez votre Raspberry Pi dans la liste et vous l’ajoutez.

Onglet DHCP

Ensuite on ouvre le port 1194 qui est utilisé par le VPN dans configuration avancée/configuration pare-feu. Là vous choisissez le protocole UDP, votre Raspberry Pi dans la liste, vous mettez le port 1194, ajouter et surtout à la fin n’oubliez pas de cliquer sur enregistrer.

Maintenant on va configurer le NAT/PAT pour que toutes connexions depuis internet pointes directement vers votre Raspberry Pi. Pour faire cela, vous allez dans configuration avancée/configuration réseau/NAT/PAT. Pour l’application/service, j’ai mis WebServeur mais c’est pas très important. Pour le port interne et externe il faut mettre 1194. Le protocole est toujours UDP. Et pour finir vous sélectionnez votre Raspberry Pi et on enregistre.

Nous en avons fini pour le moment avec la configuration de la Box, passons à NoIP maintenant.

Configuration de NoIP :

NoIP est un service qui vous permet d’avoir une URL qui pointe toujours vers l’IP de votre box malgré le fait qu’elle soit dynamique. Ce qui est quasiment le cas de toutes les box actuelles.

il existe évidemment d’autres sites qui proposent le même service.

Il faut premièrement créer un compte. Vous allez définir un hostname qui n’est rien d’autre que l’URL que vous allez utiliser pour vous connecter à votre box et VPN. C’est elle que l’on rentrera lors de la configuration de PiVPN. Vous pouvez toujours le définir plus tard si besoin.

La version gratuite fera très bien l’affaire.

Attention pour il faut reconfirmer tous les 30 jours que l’on souhaite bien garder l’URL que vous avez choisi, sinon vous allez la perdre.

Vous arrivez maintenant sur votre dashboard. Dans le panneau à gauche allez dans la section Configuration Assistant. Sélectionnez l’hostname que vous avez défini dans la liste. Si vous n’en aviez pas défini, vous pouvez également le faire maintenant.

Soyez imaginatif pour le nom

Ici vous allez sélectionner la marque de votre Box/routeur (en l’occurrence je suis sur une Livebox) et le service que l’on va utiliser : OpenVPN.

je n’ai pas testé toutes les box pour savoir si elles étaient disponibles

Maintenant vous répondez “No” à la question : “est-ce que votre ordinateur est toujours connecté au réseau ?” Sinon il va vous proposer de télécharger un utilitaire.

On répond “No” ici

Ensuite on vous demande si vous pouvez vous connecter à NoIP depuis votre Box. C’est effectivement la méthode que l’on va utiliser donc vous répondez “Yes”.

Là on répond “yes”

Là il va vous fournir les informations de configuration à rentrer dans les réglages de votre Box (les miennes sont évidemment effacés 😄).

Direction votre Box pour finir le paramétrage maintenant.

Vous allez sur l’onglet configuration avancée/configuration réseau/DynDNS. Vous choisissez le service No-IP, le nom d’hôte complet sera le hostname avec le @ quelquechose fournis par NoIP. Le mail et le mot de passe seront ceux que vous avez utilisé pour créer votre compte NoIP. Vous pouvez maintenant enregistrer.

On revient au site NoIP pour vérifier que la configuration a bien fonctionné. Dernière étape, NoIP va vérifier que le port 1194 est bien ouvert.

Dernière étape

C’est fini ! Pour NoIP… 🔚

Installation de PiVPN :

L’installation est on ne peut plus simple. Commencez par vous connecter en SSH à votre Pi. Pour ça il faut taper dans votre terminal :

ssh pi@ADRESSE_IP

Il va vous demandé le mot de passe que vous avez défini précédemment lors de la modification de mot de passe de votre Raspberry Pi. Pour l’IP, celle de votre Raspberry Pi est donnée par votre box (nous l’avons précédemment fixé dans votre Box pour éviter qu’elle change lors des déconnexions).

Maintenant voici les commandes pour télécharger et lancer le script d’installation de PiVPN.

curl -L https://install.pivpn.io | bash

Ça s’installe et se met à jour.

l’installation continue

Maintenant la configuration pas à pas commence.

PiVPN vous expliquer qu’il va utiliser l’adresse IP attribuée via DHCP par votre routeur ou votre box et qu’il faut que celle-ci soit fixe. C’est ce que l’on a fait précédemment.

Vous lui validez que son adresse IP actuelle sera bien fixe.

Yes et on continue ➡️

Il va ensuite vous demander de choisir un utilisateur local qui gérera toutes les configs OpenVPN. Comme tout ordinateur vous pouvez potentiellement avoir plusieurs utilisateurs. En l’occurrence là vous ne devriez en avoir qu’un seul : c’est pi.

Ensuite il vous demande si vous l’autorisé à installer lui même les mises à jours de sécurité.

Sélectionnez l’UDP comme protocole.

Par défaut il vous propose le port 1194 pour le serveur OpenVPN. Si vous n’avez pas de besoin particulier, laissez le (nous l’avons précédemment débloqué sur votre box).

1194 est le port par défaut utilisé par OpenVPN

Maintenant vous allez définir le niveau de chiffrement utilisé par OpenVPN. Plus c’est élevé, plus le chiffrement sera évidemment dur à casser. Ayant du temps devant moi lors de la configuration, j’ai choisi 4096-bit mais vous pouvez tout à fait rester sur du 2048-bit.

PiVPN va générer le certificat de chiffrement.

cliquez sur <Ok> pour continuer
génération du certificat

La génération des paramètres Diffie Hellman peut prendre beaucoup de temps à faire sur le Raspberry Pi (plusieurs heures). Je vous recommande de prendre votre mal en patience et de choisir « No ». Mais si vous voulez aller plus vite, PiVPN vous propose de récupérer des paramètres générés aléatoirement sur un serveur public (choisir « Yes »). Up to you 😎.

c’est le moment du grand saut !

Maintenant, on vous demande si les clients vont se connecter en utilisant l’adresse IP publique de votre Raspberry Pi ou un nom de domaine (référencé sur DNS public). Nous on va choisir le nom de domaine et mettre celui que l’on a créé sur NoIP. Vous sélectionnez donc DNS Entry.

j’ai oublié de faire un aperçu d’écran à cette étape donc c’est celui de quelqu’un sur Google 😟

Vous rentrez l’URL que vous avez créé dans NoIP.

j’ai oublié de faire un aperçu d’écran à cette étape donc c’est celui de quelqu’un sur Google 😟

Puis vous devez choisir les serveurs DNS qui vont être utilisés. Par simplicité j’ai choisi OpenDNS.

A cette étape il vous explique la commande que l’on va utiliser pour créer un profile OpenVPN.

L’installation est terminée, il faut redémarrer le système avant de pouvoir ajouter des profiles.

Une fois redémarré, vous vous reconnectez en SSH à votre Raspberry Pi. On va maintenant ajouter un utilisateur. Il va vous falloir taper la commande suivante :

pivpn -a

Vous rentrer un nom d’utilisateur ainsi qu’un mot de passe que vous reconfirmez. Notez bien toutes ces informations que vous rentrez.

PiVPN vous génère un certificat que vous utiliserez côté client dans votre outil. Pour récupérer ce certificat, voici une petite ligne de commande :

scp pi@ADRESSE_IP:/home/pi/ovpns/user.ovpn /yourpath

Pensez à remplacer user.ovpn par le nom exacte de votre fichier et /yourpath par le chemin que vous souhaitez. Cette commande ne se fait pas en étant connecté en SSH. Pour l’effectuer, ouvrez une nouvelle fenêtre dans votre terminal.

Et voilà vous avez tout pour vous connecter sur votre VPN !

Connecter votre ordinateur avec sur votre VPN tout neuf :

Il va vous falloir un logiciel pour la connexion (personnellement j’ai choisit Tunnelblick étant sous Mac mais il y a en a pour toutes les plateformes), votre certificat que vous avez généré lors de la configuration de PiVPN et le mot de passe lié.

Vous glissez votre certificat dans le panneau de gauche (ou cliquez sur +). Ensuite vous cliquez sur connecter, il va vous demander votre mot de passe. C’est celui que vous avez rentré quand vous avez créé votre profile PiVPN.

Et voilà ! Vous êtes connecté en VPN 🙌

NB.1 : Si vous avez un message d’erreur ressemblant à ça:

2018–02–24 17:32:23 TCP/UDP: Incoming packet rejected from [AF_INET]192.168.1.30:1194[2], expected peer address: [AF_INET]**.***.**.***:1194 (allow this incoming source address/port by removing — remote or adding — float)

Voici la manip pour régler le problème :

  1. Ouvrez le certificat que vous a fourni PiVPN lors de la création de votre profil utilisateur avec un éditeur de texte.
  2. Ajoutez sur une nouvelle ligne float juste en dessous de l’url de connexion.

Cela devrait régler votre erreur.

NB.2 : Le VPN peut ne pas fonctionner en local. Donc pour le tester, vous pouvez le faire avec un partage de connexion de la 4G de votre smartphone.

--

--