Configuration réseaux VPN en cascade DIY avec un RaspBerry

Avant d’aller plus loin, si vous ne savez pas ce qu’est un VPN, cliquez ici.

Présentation du projet :
Création d’un serveur VPN personnel pour accéder à mon réseau local depuis n’importe ou et utilisation d’un service VPN pour accéder à Internet depuis mon réseau local (DIY).

Réseau sécurisé VPN

Dans ma configuration réseau en cascade, les VPN se superposent pour fournir une sécurité renforcée et une connectivité robuste.

Mon serveur VPN personnel constitue le point de départ, offrant un accès sécurisé à mon réseau domestique depuis n’importe où. Une fois connecté à mon réseau local, je peux facilement accéder à tous mes périphériques et ressources. Je complète ma stratégie en utilisant NordVPN, un service VPN bien établi, pour sécuriser mon accès à Internet. Avec cette approche à double niveau, chaque transfert de données est crypté deux fois, garantissant une confidentialité maximale lors de ma navigation en ligne. La configuration de réseaux VPN en cascade assure une tranquillité d’esprit quant à la sécurité de ma connexion, que ce soit pour accéder à mon réseau domestique ou pour surfer sur le web.

Je peux utiliser tous les réseaux Internet publics sans crainte. Je ne risque pas l’ “hameçonnage de point d’accès Wi-Fi” par exemple.

Petit exemple : lorsque je suis hors de chez moi, mon téléphone se connecte toujours à mon réseau local via la 4G ou un réseau Wi-Fi. Pour accéder à mon réseau ou à Internet, il utilise toujours un tunnel VPN vers mon serveur VPN domestique. Ensuite, il se connecte à Internet via NordVPN, qui est installé après mon serveur VPN si j’ai besoin. Cela signifie que mon activité en ligne reste invisible pour les fournisseurs Internet (la 4G ou l’accès wifi ou je suis connecté). Seul NordVPN pourrait connaître mon activité en ligne. Cependant, il s’engage dans le contrat à ne pas enregistrer de journaux d’activités. Je peux faire ce que je veux du flux de ma connexion vers internet (insérer un filtrage dns par exemple pour les pubs, les traçages, … ).

J’ai choisi Wireguard comme serveur VPN et OpenVPN comme client Nord VPN. J’ai utilisé un Raspberry Pi 3B+ équipé d’un disque dure ssd externe. Sur le 3B+ le disque externe USB est bootable directement sans manipulation préalable.

Il est judicieux avant de vous lancer dans ce projet d’avoir souscrit un service de Dynamic Domain Name System (DDNS). J’utilise DuckDns, il est gratuit et sans contraintes.

Tutorial :


Installer Raspberry PI OS Lite
La fondation Raspberry vous propose de télécharger un outil pour le faire : Raspberry Pi Imager

Sélectionnez l’OS Raspberry OS lite 64-BIT,

Sélectionnez votre carte sd ou votre disque dure externe pour le stockage.

Activez SSH et configurez le WIFI si vous souhaitez l’utiliser. Pour une connexion stable, j’ai opté pour une connexion Ethernet directement sur ma box internet. Je n’utilise pas la connexion Wifi pour ce projet. Vous pouvez renseigner un nom d’hôte pour retrouver plus facilement votre Raspberry sur le réseau.

Il suffit maintenant de lancer l’écriture, de patienter un peu et votre carte SD est prête pour le projet.

Par défaut l’adresse ip de votre Raspberry est déterminé par votre serveur DHCP. A vous de la trouver. Il est important de rendre l’ip local fixe. Pour cela vous pouvez configurer votre serveur DHCP et attribuer une adresse fixe grâce à l’adresse MAC de votre appareil. Sinon, vous pouvez aussi renseigner une ip directement sur le Raspberry en faisant attention qu’elle ne soit pas dans la plage d’attribution de votre serveur DHCP.

Putty
Sur Windows pour communiquer en ssh avec mon Raspberry, j’utilise Putty.

Avec cette application, nous allons pouvoir exécuter des lignes de commandes sur le Raspberry. Pas besoin de démarrer avec un écran, un clavier, une souris votre Raspberry.

Il vous suffit de renseigner l’adresse ip et de lancer la connexion sur Putty.

Renseignez votre nom d’utilisateur et mot de passe.

Attribuer une ip fixe sur la Raspberry :

– Trouver la plage DHCP de votre serveur. Si votre réseau domestique n’a subit aucune modification. Vous pouvez obtenir ces informations sur l’administration de votre box internet.

Pour la livebox par exemple.

Choisissez une ip en dehors de l’adresse de début et de fin pour éviter les conflits. Si besoin modifiez la plage pour avoir des adresses libres.

Sur Putty :
Sur la dernière version de Raspberry PI OS lite NetworkManager GUI est installée.
Pour l’exécuter :

sudo nmtui

Configurer votre connexion avec une ip fixe. Gateway c’est la passerelle de votre réseau. C’est sans doute l’adresse ip de votre box. Enregistrer, quitter et redémarrer le Raspberry

sudo reboot

Installer Wireguard

On utilise PiVPN pour installer Wireguard

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

(Sur l’étape d’après vous pouvez sélectionner un serveur DNS perso utile pour filtrer les sites malveillants et supprimer les publicités)

Vous devez renseigner votre ip publique ou votre DDNS

Sur la configuration de votre box internet, il faut renseigner la règle NAT de redirection vers votre Raspberry avec le port renseigné précédemment. Par défaut le port est 51820.

Votre serveur VPN est opérationnel. Pour l’utiliser il faut créer des utilisateur sur le Raspberry et installer l’application client sur votre appareil (téléphone, ordinateur portable, tablette…).

Sur le Raspberry :
Ajouter un utilisateur : pivpn -a
Récupérer un qr code pour une configuration facile sur votre téléphone : pivpn -qr
Lister les utilisateurs : pivpn -l
Voir les utilisateurs connectés : pivpn -c
Supprimer utilisateur : pivpn -r
Lister les commandes: pivpn -?

Pour configurer votre appareil,
il suffit d’utiliser le qr code généré et l’ouvrir avec l’application client,
ou utiliser le fichier de configuration /home/nom_utilisateur_cree/configs/nom_utilisateur_cree.conf

L’application client est disponible sur nombreux systèmes existants : https://www.wireguard.com/install/

Installation client OpenVPN et configuration de NordVPN

Vous avez besoin d’un service VPN pour rendre votre connexion internet chiffré et anonyme.
J’utilise NordVPN et je vous explique la procédure avec ce fournisseur.

sudo apt install openvpn unzip
cd /etc/openvpn/
sudo wget https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip

sudo unzip ovpn.zip

Choisir le serveur VPN Nord VPN que vous souhaitez utiliser :

ls -l /etc/openvpn/ovpn_tcp

Après avoir choisi (pour l’exemple mon choix est le fichier fr673) :

sudo openvpn /etc/openvpn/ovpn_tcp/fr673.nordvpn.com.tcp.ovpn

Renseignez votre nom d’utilisateur et mot de passe accessible depuis votre compte NordVPN (sur votre compte : configurer NordVPN manuellement pour récupérer vos identifiants)

sudo cp /etc/openvpn/ovpn_tcp/fr673.nordvpn.com.tcp.ovpn /etc/openvpn/fr673.conf

Créez un fichier auth :

sudo nano /etc/openvpn/auth.txt

Copiez-y votre nom d’utilisateur et mot de passe de votre compte (Sur deux lignes)

WDb8XdpTcXCkKhAVVuzeAdEM
JnAzCNQbF8ZGqiN9NANjartu9

Éditez le fichier de configuration :

sudo nano /etc/openvpn/fr673.conf

Recherchez la ligne :

auth-user-pass

Remplacez par :

auth-user-pass auth.txt

Pour démarrer automatiquement OpenVPN au démarrage du Raspberry :

sudo nano /etc/default/openvpn

Dé commenter autostart et saisir le préfixe du fichier choisi

AUTOSTART="fr673"

Configurer votre Raspberry Pi pour accéder à Internet via NordVPN avec WireGuard

Si vous utilisez un serveur VPN WireGuard sur votre Raspberry Pi, vous avez peut-être remarqué que l’accès à Internet n’est pas disponible par défaut. Pour remédier à cela et diriger votre connexion Internet à travers NordVPN, quelques ajustements de configuration sont nécessaires.

Configurer WireGuard: Ouvrez le fichier de configuration WireGuard en utilisant la commande suivante :

sudo nano /etc/wireguard/wg0.conf

Ajoutez les lignes FwMark, PreUp et PostDown à votre fichier de configuration.

[Interface]
PrivateKey = Exsxxsxsxccdfcvrgthynhnkukiuiii=
Address = 10.168.65.1/24
MTU = 1420
ListenPort = 51820
FwMark = 0x55
PreUp = iptables -t nat -A POSTROUTING -s 10.168.65.0/24  -o tun0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.168.65.0/24  -o tun0 -j MASQUERADE

Dans ce fichier, vous remarquerez une section [Interface] qui contient des paramètres tels que la clé privée, l’adresse IP, le MTU, le port d’écoute, et une marque de pare-feu (FwMark) définie à 0x55.

Les 2 dernières lignes de configuration permettent d’ajouter et de supprimer des règles iptables pour gérer le routage des paquets sortants du réseau local à travers l’interface VPN (tun0), en utilisant la fonction MASQUERADE pour masquer les adresses source. Cela est couramment utilisé pour permettre à un réseau local de partager une connexion Internet via un serveur VPN. Ces lignes sont utilisées pour définir des actions spécifiques avant l’établissement d’une connexion VPN (PreUp) et après sa fermeture (PostDown). Elles font appel à la commande iptables, qui est utilisée pour configurer les règles du pare-feu Netfilter dans le noyau Linux.

Configuration des règles iptables: Pour orienter le trafic Internet via NordVPN, des règles iptables doivent être ajoutées. On peut les ajouter dans le fichier /etc/rc.local:

sudo iptables -t mangle -A OUTPUT -p tcp -m multiport --sport 8080 -j MARK --set-mark 0x55 
sudo iptables -t mangle -A OUTPUT -p tcp -m multiport --sport 4430 -j MARK --set-mark 0x55 
sudo ip route add default via 192.168.1.1 dev eth0 table 100 
sudo ip rule add fwmark 0x55 priority 1000 table 100
sudo ip route flush cache

Explication des règles iptables:

Ces lignes de commande marquent les paquets TCP sortants ayant le port source 8080 et 4430 avec la valeur de marque 0x55. Ces ports sont associés à HTTP et HTTPS, car mon serveur web Apache fonctionne sur le même Raspberry Pi que le VPN domestique.

L’adresse IP 192.168.1.1 est spécifiée comme la passerelle par défaut pour accéder à Internet. Ces règles permettent au trafic sortant marqué de suivre un itinéraire spécifique défini par la table 100.

Conclusion: En configurant votre Raspberry Pi de cette manière, vous pouvez canaliser le trafic sortant de votre serveur VPN WireGuard à travers NordVPN. Cela garantit une sécurité accrue lors de l’utilisation de votre serveur web local tout en bénéficiant des fonctionnalités de NordVPN pour votre connexion Internet.

Je suis allé plus loin, en installant Adguard sur mon réseau. AdGuard est une solution de filtrage de contenu et de protection de la vie privée qui offre une expérience de navigation plus sûre, plus rapide et plus propre. Que vous naviguiez sur Internet depuis votre ordinateur, votre smartphone ou votre tablette, AdGuard vous protège contre les publicités intrusives, les traqueurs en ligne, les logiciels malveillants et bien plus encore (en filtrant les dns). Sans doute un sujet pour un prochain article.