Créer un VPN site à site (shared key) Pfsense

De Travail-ivan

Monter un accès VPN OpenVPN site-à-site (shared key) sur pfSense

1) 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 :

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.

Configuration du Firewall