Table des matières
Un serveur VPN sur Raspberry Pi
Un réseau privé virtuel (en anglais Virtual Private Network ou VPN) est la connexion entre deux réseaux locaux via internet de façon sécurisée par un protocole de «tunneling» qui encapsule et chiffre les données à transmettre.
Ce réseau est dit :
-
virtuel car il relie deux réseaux physiques (les réseaux locaux) par une liaison Internet,
-
et privé car seuls les ordinateurs des réseaux locaux de part et d'autre du VPN peuvent accéder aux données en clair.
Le VPN apporte certains éléments essentiels dans la transmission de données :
-
authentification des interlocuteurs
-
confidentialité des données (inutilisables par quelqu'un d'autre que le destinataire car chiffrées)
-
les accès à Internet via VPN seront alors vus à partir de l'adresse IP du serveur VPN et non plus par celle de la machine cliente.
avec pptpd :
avec open vpn : Un serveur VPN sur Raspberry Pi avec OpenVPN
avec OpenVPN
Mise en place du serveur OpenVPN sur le RasPi
Configuration et démarrage du serveur
On peut alors lancer le service OpenVpn avec la commande suivante sur le RasPi :
sudo service openvpn start
Le serveur VPN est à présent fonctionnel : les machines clientes vont pouvoir se connecter.
Ouverture au monde extérieur
L'adresse 10.8.0.x n'est par routée en dehors du serveur → impossible d'aller plus loin que ce dernier.
Il faut donc interfacer le serveur avec internet pour que le client connecté au serveur ait plein accès à internet.
Le serveur doit être configuré comme routeur entre l'interface VPN (tun0) et l'interface physique (eth0) et rediriger les adresses en 10.8.0.x vers son adresse IP réelle.
Pour configurer le routage, taper la ligne de commande suivante sur le RasPi :
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Pour rendre ce routage permanent (même après un reboot), éditer le fichier /etc/sysctl.conf :
sudo nano /etc/sysctl.conf
et modifier la ligne suivante :
#net.ipv4.ip_forward = 1
en décommentant (enlever le #) :
net.ipv4.ip_forward = 1
Pour la redirection d'adresse (NAT) et pour la rendre permanente (même après un reboot), taper en ligne de commande sur le RasPi :
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE sudo sh -c "iptables-save > /etc/iptables.rules"
Puis modifier le fichier /etc/network/interfaces
sudo nano /etc/network/interfaces
et y ajouter la ligne suivante après la définition de l'interface réseau principale (“iface eth0 inet…”):
pre-up iptables-restore < /etc/iptables.rules
Le serveur est maintenant prêt à accueillir les clients.
Voyons maintenant comment déclarer un client sur le serveur.
Création d'un compte client OpenVPN
Pour créer une clé pour le client (disons par exemple pcDistant), saisir les commandes suivantes sur le RasPi :
cd /etc/openvpn/easy-rsa source vars ./build-key pcDistant
<note important>Pour protéger l'accès aux clés par un mot de passe (c'est à dire qu'un mot de passe sera demandé à la montée du tunnel VPN), il faut utiliser la commande ./build-key-pass au lieu de ./buil-key.</note>
Le script ./build-key génère 3 fichiers dans le répertoire /etc/openvpn/easy-rsa/keys :
-
pcDistant.crt: Certificat pour le client
-
pcDistant.csr: Certificat à garder sur le serveur
-
pcDistant.key: Clés pour le client
Copier les fichiers nécessaires dans un sous répertoire du répertoire /etc/openvpn/clientconf/ préalablement créé :
sudo mkdir /etc/openvpn/clientconf/pcDistant/ sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/pcDistant.crt keys/pcDistant.key /etc/openvpn/clientconf/pcDistant/
Créer le fichier client.conf dans le répertoire /etc/openvpn/clientconf/pcDistant/
sudo nano /etc/openvpn/clientconf/pcDistant/client.conf
Retrouver l'adresse publique du serveur VPN par la commande :
wget -qO- ifconfig.me/ip
Copier l'exemple ci-dessous en remplaçant A.B.C.D par l'adresse publique du serveur VPN :
- client.conf
# Client client dev tun proto tcp-client remote A.B.C.D 443 resolv-retry infinite cipher AES-256-CBC # Cles ca ca.crt cert pcDistant.crt key pcDistant.key tls-auth ta.key 1 # Securite nobind persist-key persist-tun comp-lzo verb 3
Pour assurer la compatibilité avec le client Windows OpenVPN, on fait une copie du fichier client.conf vers client.ovpn
sudo cp client.conf client.ovpn
le répertoire /etc/openvpn/clientconf/pcDistant/ doit contenir maintenant les fichiers suivants :
-
ca.crt: Certificat du serveur
-
client.conf: Fichier de configuration du client OpenVPN (Linux, BSD, MacOS X)
-
client.ovpn: Fichier de configuration du client OpenVPN (Windows)
-
pcDistant.crt: Certificat du client
-
pcDistant.key: Clés du client
-
ta.key: Clés pour l'authentification
Il ne reste plus qu'à mettre ces fichiers dans une archive ZIP :
sudo zip pcDistant.zip *.*
<note tip>Il faut que zip soit installé. Si ce n'est pas le cas, faire
sudo apt-get install zip
sur le RasPi et recommencer la commande précédente</note>
Transmettre l'archive sur le PC client. Pour cela, se brancher au RasPi par le réseau depuis un PC et copier le fichier pcDistant.zip
Utilisation du VPN
à partir d'un poste Windows
Télécharger OpenVPN Windows sur le site officiel http://openvpn.net.
Une fois installé,
-
décompresser l'archive pcDistant.zip dans le répertoire C:\Program Files\OpenVPN\config
-
et se connecter en utilisant OpenVPN GUI, qui se trouve dans le menu Démarrer.
Une fois lancé, OpenVPN GUI apparaît en bas à droite de la barre de tâche.
Un clic droit dessus, puis sur connect, et vous voila connecté via votre VPN !