Utiliser le Raspberry Pi comme passerelle OpenVPN pour permettre un accès VPN à tout votre réseau local

Article mis à jour le 3 Février 2016 : prenant en compte Raspbian Jessie et Systemd

Cet article décrit comment utiliser un Raspberry PI (sous Raspbian) comme passerelle OpenVPN (avec le client openvpn) pour permettre à toutes les machines de votre réseau local de se connecter à internet via votre serveur VPN (pour la mise en place de votre serveur VPN, je vous recomande l’article que j’ai écrit récemment qui décrit comment installer un serveur OpenVPN sur votre machine dédiée)

En clair, nous allons voir comment permettre à une machine n’ayant pas de client OpenVPN (comme une playstation 3, une Wii, un téléviseur intelligent, etc.) de se connecter de manière transparente à un serveur OpenVPN, via un RaspberryPi (ou autre machine sous Debian/Ubuntu connectée à votre réseau local)

Installation de Raspbian sur votre  RaspberryPi

On télécharge une image récente de Raspbian (dans mon cas 2015-11-21-raspbian-jessie.zip) l’on installe ensuite sur une SD card (sous Mac OS j’utilise ApplePi Baker).

On peut alors démarrer le RaspberryPi sous Raspbian : après avoir configuré un mot de passe, on peut commencer la configuration de la passerelle (le serveur SSH est ouvert par défaut, par la suite on se connectera en ssh au RaspberryPi, en utilisant pi comme utilisateur, qui a les bons droits sudo)

Configuration de votre RaspberryPi en passerelle OpenVPN

On commence par permettre le forwarding IPv4, en éditant /etc/sysctl.conf :

Ensuite on configure le RaspberryPi pour utiliser une IP statique (non plus obtenue par DHCP), en modifiant /etc/network/interfaces

Remarquez, cette étape n’est pas nécessaire si vous avez le contrôle de votre serveur DHCP, et que vous pouvez y assigner une adresse IP statique à votre Raspberry Pi

Ensuite, on y installe le client openvpn :

On installe le fichier client.ovpn :

Attention ! vous devez utilisez un fichier de configuration client.ovpn ne nécessitant pas d’authentification par mot de passe. Si vous utilisez OpenVPN Access Server, il suffit de vous rendre sur la console d’administration et d’ajouter les droits de « auto login » à votre compte, dans l’onglet « User Permissions »

Screen Shot 2014-09-16 at 10.23.45 AM

Acceptez ensuite de mettre à jour OpenVPN Access Server

Screen Shot 2014-09-16 at 10.23.35 AM

Et enfin rendez vous sur https://monip-vpn/?src=connect pour télécharger le client.opvn sans mot de passe (autologin profile tout en bas)

Screen Shot 2014-09-16 at 10.24.28 AM

Sur notre Raspberry Pi,  on démarre l’accès au VPN en utilisant le fichier .ovpn qui correspond à la configuration de votre serveur OpenVPN :

On autorise enfin le NAT sur la nouvelle interface réseau (tun0) créée par OpenVPN (qui est en fait un tunnel vers votre serveur VPN) :

et le tour est joué, vous n’avez plus qu’à configurer les machines sur votre réseau local pour utiliser votre Raspberry Pi comme passerelle par défaut.

Persister la configuration de votre passerelle

Pour garder ces réglages à chaque redémarrage de votre Raspberry Pi, il faut d’abord configurer OpenVPN pour se lancer au démarrage de la machine.

On copie la configuration client.opvn vers /etc/openvpn/client.conf

Attention ! Spécifique à Raspbian Wheezy !

On commence par autoriser OpenVPN à charger les configurations dans /etc/openvpn au démarrage, en éditant /etc/default/openvpn :

Pour Raspbian Jessie, mise à jour le 3 Février 2016:

On peut tester que tout fonctionne avec systemd :

si tun0 est bien dans la liste, alors il est temps de paramétrer le démarrage automatique (boot startup)

plus de détails : http://uname.pingveno.net/blog/index.php/post/2015/05/23/Migrate-an-OpenVPN-configuration-to-Debian-8-%28Jessie%29-with-systemd

-> fin du spécifique wheezy / jessie

On peut tester :

Il nous reste à persister la configuration NAT; rien de plus facile sous Raspbian :

Acceptez de sauvegarder les règles courantes :

Screen Shot 2014-09-16 at 11.45.40 AM

Vous pouvez vérifier que tout s’est bien passé en faisant un cat :

On retrouve bien nos règles de routing à travers tun0

En redémarrant votre raspberry pi, vous retrouverez votre passerelle en fonctionnement.

Aller plus loin : diagnostiquer

Lister les règles relatives au NAT :

Supprimer les règles relatives au NAT :

Ajouter la règle pour activer le nat sur tun0 :

Connecter une machine du réseau local à travers la passerelle OpenVPN

Pour les serveurs DNS, j’utilise les serveurs public de Google, mais vous pouvez très bien utiliser ceux mis à disposition pour la machine hébergeant le serveur OpenVPN.

Exemple de configuration d’une machine sous Mac OS X

Configurez son Mac pour se connecter via un routeur vpn
Configurez son Mac pour se connecter via un routeur vpn
Configurez son Mac pour se connecter via un routeur vpn
Configurez son Mac pour se connecter via un routeur vpn

 

Exemple de configuration d’une Playstation 3

Rendez vous dans les paramètres réseaux, configuration personnalisée :

Configurez sa PS3 pour se connecter via un routeur vpn
Configurez sa PS3 pour se connecter via un routeur vpn

 

Configurez sa PS3 pour se connecter via un routeur vpn
Configurez sa PS3 pour se connecter via un routeur vpn

 

Bien entendu, n’oubliez pas de remplacer l’adresse ip du routeur par celle de votre raspberry pi.