Provya

Expertise pfSense

Sommaire des articles  -  Liens & Actualités  -  Firewall pour pfSense

[pfSense] Monter un accès OpenVPN site-à-site

icon 31/07/2019

English version: [pfSense] Configuring a Site-to-Site OpenVPN Instance.

Nous allons voir dans cet article comment monter un VPN site-à-site entre deux environnements pfSense en nous reposant sur le logiciel OpenVPN.

Article mis à jour le : 31/07/2019


VPN site-à-site


OpenVPN permet de monter un VPN site-à-site de manière très simple et efficace.

L'un des sites est configuré comme client et l'autre site comme serveur.

Pour monter notre VPN, nous utiliserons ici le système de clés partagées.
Si avez peu de liens VPN site-à-site à monter, il est recommandé d'utiliser des clés partagées. Au delà de 5 à 6 liens VPN site-à-site, il peut être judicieux d'utiliser la gestion de certificat (SSL/TLS - PKI) par simplicité d'administration.



IPsec vs OpenVPN


Faut-il monter son VPN site-à-site avec OpenVPN ou IPsec ? Vaste question à laquelle nous ne répondrons pas ici ! :-)

Nous préciserons simplement qu'IPsec et OpenVPN peuvent tous les deux être actifs et en service en parallèle sur un même serveur pfSense. La seule contrainte étant, évidemment, de ne pas utiliser les mêmes sous-réseaux sur vos lien OpenVPN et IPsec.



OpenVPN Client & Serveur


OpenVPN est basé sur un mode de fonctionnement client-serveur. Qu'un pfSense soit défini comme client ou comme serveur ne changera strictement rien d'un point de vue réseau. Cependant, si vous souhaitez connecter plusieurs sites distants sur un site principal, le plus logique est bien-sûr de définir le site principal comme "serveur" et les sites distants comme "clients".

Dans cet article, nous prendrons l'exemple de configuration suivant :

Schéma réseau OpenVPN pfSense - Provya


Le pfSense du site A sera configuré comme serveur OpenVPN. Le pfSense du site B sera configuré comme client OpenVPN.



Configurer OpenVPN côté "serveur"


Sur le pfSense du site A, se rendre dans le menu VPN > OpenVPN. Vous serez par défaut dirigé sur l'onglet Servers :

menu VPN > OpenVPN - pfSense Provya


Cliquer sur le bouton "+ Add" pour ajouter un serveur VPN.

Les champs à configurer sont les suivants :

  • Server Mode : ici, nous avons cinq possibilités :
  1. Peer to peer (SSL/TLS) : pour monter un VPN site-à-site en utilisant une authentification par certificat.
  2. Peer to peer (Shared Key) : pour monter un VPN site-à-site en utilisant une authentification par clé partagée.
  3. Remote Access (SSL/TLS) : pour monter un accès distant pour clients nomades en utilisant une authentification par certificat.
  4. Remote Access (User Auth) : pour monter un accès distant pour clients nomades en utilisant une authentification par login/password.
  5. Remote Access (SSL/TLS + User Auth) : pour monter un accès distant pour clients nomades en utilisation une authentification par certificat et par login/password.
Nous choisissons Peer to peer (Shared Key).

  • Protocol : nous choisissons "UDP on IPv4 only".
L'utilisation du protocole TCP n'est pas adaptée à un environnement VPN, car en cas de pertes de paquets ceux-ci devront être retransmis. Ce qui n'est pas forcément souhaité. La conséquence serait un ralentissement du lien VPN à cause d'une forte ré-émission de paquets.
TCP est en revanche particulièrement intéressant si vous devez passer au travers d'une connexion particulièrement restrictive. Dans ce cas, l'utilisation du port 443 (correspondant au port HTTPS) est particulièrement judicieux (il est rare que le port 443 soit bloqué en sortie d'un réseau vers Internet). Attention toutefois, si vous choisissez le port 443, assurez-vous d'abord que le WebGUI de pfSense ne tourne pas déjà sur ce port !

  • Device Mode : nous choisissons tun
TUN travaille avec des frames IP.
TAP travaille avec des frames Ethernet.
  • Interface : l'interface sur laquelle le serveur va recevoir les connexions entrantes. Généralement WAN ou OPT1. Il est également possible de choisir "any" et dans ce cas le serveur sera en écoute sur toutes les interfaces.
  • Local port : port d'écoute du serveur OpenVPN. Par défaut, c'est le 1194. Il est à noter que chaque serveur VPN doit disposer de son propre port d'écoute. De la même manière, il est important de s'assurer qu'aucun autre service ne soit déjà en écoute sur le port choisi... y'en a qui ont essayé ils ont eu des problèmes :-)
  • Description : nom que l'on souhaite donner à ce serveur VPN. C'est ce nom qui apparaîtra dans les listes déroulantes de sélection de VPN se trouvant aux différents endroits du WebGUI pfSense. Dans notre cas, nous saisissons "VPN Provya".
  • Shared Key : nous conseillons de laisser coché la case "Automatically generate a shared key". La clé sera à copier/coller côté client.
  • Encryption algorithm : ce paramètre doit être le même côté client et côté serveur si l'une des deux parties ne supporte pas le protocole NCP. N'importe quel algorithme travaillant avec une clé d'au moins 128 bits sera bon. 256 bits sera encore mieux. CAST/DES/RC2 sont moins sécurisés, et donc à bannir. Notre choix se porte sur AES 256 bits CBC
  • Enable NCP : cocher la case permet d'activer le protocole NCP pour que le client et le serveur négocie le protocole de chiffrement le plus approprié. Nous laissons la case cochée.
  • NCP Algorithms : Les algortithmes de chiffrement que nous souhaitons supporter côté serveur.
  • Auth digest algorithm : nous laissons la valeur par défaut SHA256.
  • Hardware Crypto : précise si le serveur dispose d'un support cryptographique.
  • IPv4 Tunnel Network : réseau utilisé pour le tunnel VPN. N'importe quel réseau privé inutilisé dans l'espace d'adressage de la RFC 1918 peut être utilisé. Pour une connexion site-à-site, l'utilisation d'un /30 est suffisant (inutile d'utiliser un /24). Dans notre cas, nous utilisons le sous-réseau 10.0.8.0/30.
  • IPv4 Remote network(s) : désigne le ou les réseaux distants accessibles par le serveur. Il convient d'utiliser la notation CIDR (ex : 192.168.1.0/24). Dans le cas où l'on souhaite indiquer plusieurs réseaux, il faut les séparer par une virgule. Dans notre cas, nous indiquons le réseau utilisé sur le site B, soit 192.168.2.0/24.
  • Concurrent connections : précise le nombre de connexion client possible en simultanée sur ce serveur. Dans le cas d'un VPN site-à-site, ce paramètre peut être renseigné à 1.
  • Compression : permet d'activer la compression LZO/LZ4 sur l'ensemble des flux transitant par ce tunnel VPN. Si les données transitant dans ce tunnel VPN sont principalement des données chiffrées (HTTPS, SSH, etc.), cocher cette option ne fera qu'ajouter un overhead inutile aux paquets.
  • Custom options : permet de passer des paramètres avancés à OpenVPN. Cela peut notamment être utile si l'on décide de faire du VPN natté (entre deux sites ayant le même plan d'adressage) ou pour pousser des routes spécifiques. Nous ne rentrerons pas dans le détail ici.

Une fois la configuration renseignée, nous cliquons sur "Save" pour valider notre configuration.

Exemple de résultat obtenu :

exemple configuration OpenVPN clée partagée pfSense Provya


La configuration openVPN est terminée côté serveur. Il faut maintenant ajouter les règles de filtrage pour rendre accessible le serveur openVPN.



Configuration du Firewall


Il est maintenant nécessaire d'autoriser le flux VPN au niveau du firewall. Pour cela, se rendre dans le menu Firewall > Rules :

menu Firewall > Rules pfSense Provya


Sur l'interface sur laquelle le serveur OpenVPN est en écoute (WAN, dans notre exemple), créer une règle autorisant le trafic à atteindre l'adresse IP et le port du serveur OpenVPN.

Dans notre exemple, nous travaillons sur l'interface WAN, l'adresse IP du pfSense sur le site A est 109.190.190.10, et l'adresse IP publique du site B est 108.198.198.8. Ce qui donne la configuration suivante :

  • Interface : WAN
  • Protocol : UDP
  • Source : si l'adresse IP publique du site distant n'est pas connue on laisse any, sinon on la renseigne en choisissant le type "Single host or alias"
  • Destination : type "Single host or alias", address à 109.190.190.10
  • Destination port range : port choisi lors de la configuration du serveur OpenVPN, soit 1194 dans notre cas.

Ce qui nous donne la règle suivante :

règle firewall openVPN server pfSense Provya



La configuration côté serveur est terminée. Il nous reste simplement à penser à autoriser ou filtrer nos flux transitant à travers notre nouvelle interface OpenVPN. Pour cela, se rendre dans Firewall > Rules > OpenVPN pour créer ses règles.

Exemple de règle à configurer sur l'interface LAN du pfSense du site A :

règle firewall openVPN pour trafic LAN vers LAN pfSense Provya


Exemple de règle à configurer sur l'interface OpenVPN du pfSense du site A :

règle firewall openVPN pour trafic LAN vers LAN pfSense Provya



Passons à la configuration côté client.



Configurer OpenVPN côté "client"


Sur le pfSense du site "client", se rendre dans VPN > OpenVPN, puis dans l'onglet "Clients".

Cliquer sur l'icône "+ Add" pour ajouter un client VPN.

Les champs à configurer sons sensiblement les mêmes que ceux côté serveur :

  • Server Mode : ici, nous avons deux possibilités :
  1. Peer to peer (SSL/TLS)
  2. Peer to peer (Shared Key)
Nous choisissons Peer to peer (Shared Key), conformément à ce que nous avons configuré côté OpenVPN serveur.

  • Protocol : choisir le même protocole que celui choisi côté serveur (soit UDP on IPv4 only)
  • Device mode : choisir tun
  • Interface : l'interface via laquelle le client OpenVPN va joindre le serveur. Dans notre cas, ce sera WAN
  • Local port : si ce champ est laissé vide, un port aléatoire sera choisi
  • Server host or address : l'adresse IP publique du site distant, c'est-à-dire l'adresse IP publique du site A dans notre cas (109.190.190.10)
  • Server port : port d'écoute du serveur OpenVPN distant (ici, 1194)
  • Proxy host or address : adresse du proxy si le pfSense client nécessite de passer par un proxy
  • Proxy port : idem ci-dessus
  • Proxy Authentification : idem ci-dessus
  • Description : le nom que vous souhaitez donner à votre tunnel VPN (ici, VPN Provya)
  • Auto generate / Shared Key : décochez la case "Auto generate" et copier/coller la clé générée côté OpenVPN serveur
  • Encryption algorithm : renseigner le même algorithme que celui saisi côté OpenVPN serveur (AES-256-CBC). Cet algorithme sera utilisé uniquement si NCP n'est pas activé ou supporté
  • NCP Algorithms : les mêmes que ceux sélectionnés côté serveur
  • Auth digest algorithm : on laisse la valeur par défaut, soit SHA256
  • Hardware Crypto : précise si le serveur dispose d'un support cryptographique
  • IPv4 Tunnel Network : même réseau que celui renseigné côté OpenVPN serveur, soit 10.0.8.0/30
  • IPv4 Remote Network(s) : on renseigne le réseau du site distant. Il convient d'utiliser la notation CIDR. Dans le cas où l'on souhaite indiquer plusieurs réseaux, il faut les séparer par une virgule. Dans notre cas, cela donne : 192.168.1.0/24
  • Limit ourgoing bandwidth : bande-passante maxi allouée à ce tunnel VPN. Laisser vide pour ne pas fixer de limite.
  • Compression : doit être similaire à la configuration côté OpenVPN serveur
  • Advanced : permet de passer des paramètres avancés à OpenVPN. Nous ne rentrerons pas dans le détail ici.

Exemple de résultat obtenu :

exemple configuration openVPN client clée partagée pfSense Provya



La configuration côté client est terminée. Il nous reste simplement à penser à autoriser ou filtrer nos flux transitant à travers notre nouvelle interface OpenVPN.

Exemple de règle à configurer sur l'interface LAN du pfSense du site B :

règle firewall openVPN pour trafic LAN vers LAN pfSense Provya


Exemple de règle à configurer sur l'interface OpenVPN du pfSense du site B :

règle firewall openVPN pour trafic LAN vers LAN pfSense Provya




Debug


Pour disposer d'informations sur vos liens OpenVPN (état, date de début de mise en service, volume entrant/sortant, etc.), se rendre dans Status > OpenVPN.

Pour les logs du firewall, se rendre dans Status > System logs > Firewall.



Pour aller plus loin


[pfSense] La gestion des certificats pour les connexions OpenVPN
[pfSense] Monter un VPN natté (Overlap network) avec OpenVPN
[pfSense] Sécurisez l'accès distant de vos collaborateurs nomades avec OpenVPN
[pfSense] Configurer un VPN IPsec site à site
Tous nos articles classés par thème
Voir un article au hasard


Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.


Retrouvez nos services et firewall pour pfSense & OPNsense



Formation pfSense     Formation OPNsense     Liste de filtrage des IP malveillantes     Firewall pro-Soho pour pfSense et OPNsense         Firewall pro-Maxi pour pfSense et OPNsense    

store.provya.fr

icon Tags de l'article :

25 commentaires

toufdepoil - 04/10/2015 à 13:29:08

super merci :)
Je vais essayer ça de suite sur deux sites distant avec pfsense 2.2

@répondre #lien

JOMILY - 14/07/2016 à 10:20:32

Bonjour,

J'aimerai savoir jusqu'à combien de client site-to-site un serveur openvpn pfsense peut supporter.

Merci

@répondre #lien

Guillaume - 19/07/2016 à 08:45:36

Bonjour,

Il n'y a pas vraiment de limites.

La limite sera la puissance de votre serveur.

Nous avons plusieurs installations avec plusieurs dizaines de tunnels VPN.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Chouaib - 29/09/2016 à 23:51:03

Est qu on peut créer plusieurs utilisateurs openvpn actuellement j ai creer un seul utilisateur avec le port 1194 mai je n ai pas réussi à créer un deuxieme utilisateur

@répondre #lien

Guillaume - 02/10/2016 à 07:47:12

@Chouaib : Bonjour,
Vous avez dû créer un serveur (et non un utilisateur) qui est en écoute sur le port 1194. Vous pouvez créer un second serveur OpenVPN et le configurer pour qu'il soit en écoute sur un autre port (1195, par exemple).

Cordialement,

Guillaume
--
Provya

@répondre #lien

Selaire - 22/02/2018 à 18:14:27

BONSOIR JE SOUHAITE SAVOIR QUAND DOIT T ON UTILISER LE VPN iPSEC ET QUAND DOIT ON UTILISER LE OPENVPN ; MERCI D'AVANCE

@répondre #lien

Guillaume - 27/02/2018 à 09:16:48

@Selaire :
Bonjour,

Cela dépend de votre besoin.
Si vous souhaitez monter un VPN entre un pfSense et un autre firewall (Juniper, Cisco, etc.), il convient d'utiliser un VPN IPsec.
Si vous souhaitez monter un VPN entre 2 pfSense, vous pouvez opter pour un VPN IPsec ou un OpenVPN. Il convient de choisir la technologie avec laquelle vous êtes le plus à l'aise.

Si on veut aller plus dans le détail, il y a des différences de performance entre IPsec et OpenVPN. Mais pour un usage standard, ces différences sont négligeables. Les choix de configuration (comme l'algorithme de chiffrement, par exemple) impactent également la performance.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Brylc - 05/12/2019 à 16:05:41

Bonjour,

Je souhaite monter un VPN pour accéder a mon infrastructure autrement que de façon locale. Ici il s'agit surtout d'un Site A se connectant au site B. Moi c'est plus un utilisateur 1 qui veut se connecter a son infra A. faut-il considérer l'utilisateur comme un site au quel cas c'est la même configuration ? Ou est-ce différent ?

Merci d'avance pour votre réponse.
Cordialement,

@répondre #lien

Tonic8 - 09/01/2021 à 19:02:19

Bonsoir

Une des denrieres phrases que vous dite est ' Il nous reste simplement à penser à autoriser ou filtrer nos flux transitant à travers notre nouvelle interface OpenVPN.'

y a t-il un exemple? pour les parametres par exemple pour autoriser un ensemble de client du site B sur le reseau du Pfsense qui est connecté en tant que client vpn a l'autre PFsense?

cordialement
et merci pour le tuto

@répondre #lien

Guillaume - 13/01/2021 à 17:01:30

@Tonic8 :
Bonjour,

Je viens d'ajouter des exemples de règles de filtrage dans le tuto.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Invité - 02/02/2021 à 23:44:29

Bonjour,

Il me semble qu'il y a une erreur :

Vous mettez, pour la partie serveur :
Ipv4 remote network : "Dans notre cas, nous indiquons le réseau utilisé sur le site B, soit 192.168.1.0/24".
Sur la copie écran vous mettez 192.168.2.0/24

Ou n'ai je pas compris un truc ?

@répondre #lien

Guillaume - 03/02/2021 à 08:33:01

@Invité :
Bonjour,

Vous avez raison, il y avait une faute de frappe. Il fallait bien lire 192.168.2.0/24.

Merci de nous l'avoir signalé.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Merveil - 15/04/2021 à 16:03:24

Bonsoir à tous , moi j'ai une question en ce qui concerne mise ne place d'un vpn openvpn par pfsense client to site. Lors de la connexion du vpn elle fonctionne très bien mais j'ai plus accès à internet et aussi j'arrive juste à ping le serveur pfsense cad la machine sur laquelle j'ai installé pfsense mais je ne peut pas acceder aux autres ressources disponibles sur mon serveur or j'ai bien configurer ou declarer les machines et leurs adresses ip dans la partie firewall->rules de pfsense. Si vous avez des suggestions elles sont les bienvenues. Merci

@répondre #lien

cedric - 12/07/2021 à 15:49:13

Bonjour
tout d'abord merci pour votre tutoriel très explicite.
J'ai essayé de suivre votre tutoriel ainsi que d'autres, mais à chaque fois j'ai un problème.
Lorsque je souhaite monter mon vpn client ca me mets ça :
TLS ERROR : TLS key negociation failed to occur within 60 secondes (check your network connectivity)
TLS ERROR : TLS handshake failed
Merci d'avance

@répondre #lien

Guillaume - 19/07/2021 à 07:51:23

@cedric :

Bonjour Cédric,

Il faut vérifier que votre serveur OpenVPN soit bien en écoute sur son interface WAN et qu'une règle de filtrage a bien été mise en place afin d'autoriser le trafic entrant sur le port 1194.

Si vous avez une BOX Internet en amont, il faut vous assurer également que le port 1194 soit bien redirigé vers votre serveur OpenVPN.

Cordialement,

Guillaume
--
Provya

@répondre #lien

noma - 12/12/2021 à 14:37:26

bonjour,
j’ai merci pour votre tutoriel mais un un petit souci: comment tester l’accès distant depuis un poste client Debian version-7 ? sur un poste client windows ça marche bien mais je ne sais pas installer le client openvpn sur les machines debian version-7.
j’ai énormément besoin de votre aide.
merci d’avance.

@répondre #lien

Guillaume - 13/12/2021 à 10:03:59

@noma :
Bonjour,

Si le paquet openvpn est présent dans les dépôts Debian, vous devriez pouvoir utiliser la commande suivante :

apt-get install openvpn

Les fichiers de configuration se trouveront dans le répertoire /etc/openvpn/

Autrement, vous pouvez jeter un œil au site web d'OpenVPN : https://openvpn.net/vpn-software-packages/.

Mais seules les version 10 et 11 de Debian sont prises en compte. Debian 7 est vraiment une vieille version de Debian.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Nacer - 01/02/2022 à 10:04:13

Bonjour,

J'ai un Site A et un Site B relié par un VPN OPENVPN en suivant ce superbe tuto :)
J'ai également un VPN sur le site A auquel je me connecte depuis mon pc.

Ma question est :
En étant connecté au site A avec mon pc, Puis-je atteindre le sous réseau du site B.

Vous remerciant par avance.

Nacer B.

@répondre #lien

Guillaume - 01/02/2022 à 15:54:03

@Nacer :
Bonjour Nacer,

Oui, c'est possible. Il y aura trois modifications à faire :
* Sur le pfSense du site A, il faudra ajouter le sous-réseau du site B dans le champ "Local Network(s)" de la configuration du serveur OpenVPN pour les utilisateurs nomades.
* Sur le pfSense du site A, il faudra ajouter le sous-réseau du tunnel OpenVPN des utilisateurs nomades dans le champ "Local Network(s)" du serveur OpenVPN site à site.
* Sur le pfSense du site B, il faudra ajouter le sous-réseau du tunnel OpenVPN des utilisateurs nomades dans le champ "Remote Network(s)" du serveur OpenVPN site à site.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Bakogomo - 30/05/2023 à 11:23:59

Bonjour,

Tout d'abord merci pour cet article et les plusieurs autres sur pfsense, cependant j'ai une question, est-il possible de connecter les users OpenVPN avec un LDAP d'un groupe AD spécifique pour les clients VPN sur pfsense ?

Merci d'avance pour votre retour

@répondre #lien

Guillaume - 19/06/2023 à 09:57:11

@Bakogomo :

Bonjour,

C'est techniquement possible de filtrer par groupe.

Cordialement,

Guillaume
--
Provya

@répondre #lien

icon Flux RSS des commentaires de cet article