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 :
Le VPN apporte certains éléments essentiels dans la transmission de données :
avec pptpd :
avec open vpn : Un serveur VPN sur Raspberry Pi avec OpenVPN
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.
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.
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 :
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 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 :
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
Télécharger OpenVPN Windows sur le site officiel http://openvpn.net.
Une fois installé,
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 !