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 interlocuteursconfidentialité 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 clientpcDistant.csr: Certificat à garder sur le serveurpcDistant.key: Clés pour le clientCopier 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 :

ca.crt: Certificat du serveurclient.conf: Fichier de configuration du client OpenVPN (Linux, BSD, MacOS X)client.ovpn: Fichier de configuration du client OpenVPN (Windows)pcDistant.crt: Certificat du clientpcDistant.key: Clés du clientta.key: Clés pour l'authentificationIl 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\configet 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 !

à partir d'un poste Ubuntu