Pfsense OpenVPN Policy Based Routing

Etape 1 : Présentation de l’infrastructure.

Sur notre schéma ci-dessous nous pouvons voir deux réseaux, un réseau DMZ hébergeant des serveurs en 192.168.0.1/24 et un réseau utilisateur en 10.0.0.0/24.
Pour joindre internet les deux réseaux sortent par leur passerelle par défaut situé en France.

avant

L’objectif ici va être de configurer sur notre PFsense un client OpenVPN pointant vers un serveur vpn situé en Ukraine et de router seulement le réseau utilisateur à travers le tunnel OpenVPN. Voir schema ci-dessous :

Après

Il n’est cependant pas possible de déclarer plusieurs passerelles par défaut.
Pour router l’ensemble des flux utilisateurs à travers le tunnel OpenVPN il va falloir faire du « policy based routing ».
Plus communément appelé PBR cette technique permet à partir de règles de filtrage de router un flux vers une passerelle en particulier.

Etape 2 : Choix du prestataire vpn

Pour faire mon choix entre les différents prestataires vpn existant, je me suis aidé de ce site : https://www.privacytools.io/#vpn

Il regroupe un ensemble de prestataires VPN jugés digne de « confiance ».
Pour ce tutoriel j’ai choisi de prendre un abonnement d’un 1 mois à proxy.sh

Voici l’offre que j’ai chez proxy.sh pour 5$/mois

offreproxysh

Avec cette offre j’ai le choix entre plusieurs pays pour monter mon tunnel OpenVPN : USA, France, Allemagne, Pays-bas, Ukraine.
Pour ma part j’ai choisi l’Ukraine car c’est le seul pays proposait en dehors des Fourteen Eyes.

Etape 3 : Configuration du client OpenVPN sur PFsense

Pour cet exemple je vais me baser sur les informations fournies par Proxy.sh pour configurer mon VPN. Le principe est le même si vous choisissez un autre fournisseur.

La configuration à mettre en place est disponible sur l’interface utilisateur de proxy.sh. Je vous la mets ici, histoire que vous puissiez suivre le tuto sans avoir de compte :)

Sur l’interface de management de pfsense rendez-vous dans System > Certs Manager >  onglet CAs.

Nous allons ajouter le certificat serveur fournis par Proxy.sh.

cert1

Ajoutez un nouveau certificats nommé proxy et copiez/coller le certificat suivant :

cert2

Nous pouvons maintenant procéder à la configuration de client OpenVPN à proprement parler.

Rendez-vous dans VPN > OpenVPN > Onglet Client.
Cliquez sur icone pfsense

openvpn

openvpn2
Peer Certificate Authority : Sélectionnez le certificat que nous avons ajouté toute à l’heure.
Client Certificate : Sélectionnez le certificat de votre client
Encryption algorithm : Sélectionnez None (nous le configurerons dans les options avancé)

Dans advanced configuration nous allons rajouter plusieurs options dont celle qui va nous servir à nous authentifier.

openvpn3Il vous faut maintenant créer sur votre pfsense en ssh un fichier mdp.txt qui va contenir les logins/mdp fournies dans l’interface d’administration de votre prestataire vpn. Pensez à modifier le chemin du fichier si vous n’utilisez pas le même que moi.

un exemple de fichier avec en haut le login et en bas le mot de passe :

Nous allons maintenant vérifier que notre tunnel VPN est bien monté.
Dans System logs > onglet OpenVPN la ligne de log suivante vous indique que le vpn est up :

Nous allons maintenant assigner une interface à notre tunnel vpn.
Dans l’interface d’administration de pfsense selectionnez Interfaces > Assign

openvpn16

Pour me faciliter la vie j’ai renommé mon interface en « VPN_UKRAINE »

openvpn14

Il ne vous reste plus qu’à activer l’interface en cliquant sur « Enable » :

openvpn15

Nous allons maintenant déclarer cette interface comme passerelle.

Dans System > Routing

Cliquez sur icone pfsenseopenvpn12

Sauvegarder la configuration.

La passerelle prendra l’ip attribué dynamiquement par le client VPN.
openvpn13

Etape 3 : NAT

Nous allons maintenant mettre en place le nat pour que le réseau source (10.0.0.0/24) soit translaté sur l’ip publique de notre vpn.

Pour se faire il faut aller dans Firewall > NAT > onglet Outbound
Selectionnez Manual Outbound NAT rule Generation et cliquez sur Save.
Cela va nous permettre de configurer manuellement notre translation d’adresse.
Cliquez sur icone pfsense pour ajouter une nouvelle règles.

openvpn4Interface : Elle correspond à l’interface sur laquelle nous avons monter notre tunnel OpenVPN.
Source : Cela correspond à notre réseau utilisateur.
Translation : Nous spécifions la translation d’adresse qui doit s’effectuer. Ici la source sera modifiée par l’adresse IP publique de l’interface.

Cliquez sur Save.

Pour le réseau 10.0.0.0/24 vous devriez obtenir quelque chose comme suit :

openvpn5Si elle n’existe pas vous pouvez configurer une seconde règles qui vous permettra de sortir sans vpn : openvpn6Le routage étant effectué avant la translation d’adresse il n’y a pas d’incompatibilité à spécifier les deux règles. Le choix de l’interface de sortie se faisant par le biais du PBR.

Etape 4 : Policy Based Routing

La configuration du PBR se fait dans Firewall > Rules > Onglet de votre réseau local.

Imaginons que vous souhaitiez router tous les flux http à travers votre vpn. Rien de plus simple il suffit de créer la règle suivante :

openvpn7Puis dans les options avancées de la règles il vous suffit de préciser la passerelle de sortie.

openvpn8Tous les flux TCP à destination du port 80 (http) passeront par notre tunnel OpenVPN

openvpn9A l’inverse si vous souhaitez faire transiter l’ensemble de vos flux à travers votre tunnel OpenVPN il vous faudra remplacer la règle précédente par la suivante :

openvpn10

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *