Relier plusieurs sites via VPN avec pfSense (OpenVPN)
OpenVPN S2S multi-sites sur topologie Hub&Spoke.
Dans le monde professionnel, il n’est pas rare que l’on puisse vous demander comment connecter diffĂ©rents sites Ă un siĂšge principal. Il existe plusieurs mĂ©thodes bien-entendu, mais ici nous allons utiliser notre bon vieux pfSense ainsi que la technologie OpenVPN pour rĂ©aliser une topologie de type « Hub & Spoke », c’est-Ă -dire que nous aurons un site central (Paris), et deux sites distants qui seront en mode Clients (New-York, et Bruxelles).
Ătant donnĂ© qu’une image vaut mieux que mille mots, voici un rapide schĂ©ma :

Les deux flĂšches orange symbolisent la liaison OpenVPN Ă destination du serveur, le siĂšge central.
CÎté réseau, nous aurons donc ceci :
- prs-fw-01 :
- WAN, 192.168.1.50/24
- LAN, 192.168.10.1/24
- bxl-fw-01 :
- WAN, 192.168.1.60/24
- LAN, 192.168.20.1/24
- ny-fw-01 :
- WAN, 192.168.1.70/24
- LAN, 192.168.30.1/24
Classique, mais efficace. A noter qu’ici chaque rĂ©seau LAN possĂšde un subnet diffĂ©rent, ce qui est prĂ©conisĂ© par OpenVPN (sinon vous allez vous amuser avec le NAT et autre…). Par rapport au rĂ©seau utilisĂ© pour le tunnel VPN lui-mĂȘme, nous opterons pour un 10.0.0.0/27, ce qui nous offrira une trentaine d’hĂŽtes disponibles, de quoi voir aisĂ©ment venir si cette fameuse sociĂ©tĂ© fictive dĂ©sire s’implĂ©menter sur d’autres sites đ
Sans plus tarder, allons-y !
I) Installation des pfSense, et création de la CA
Ayant dĂ©jĂ fait bon nombre d’articles sur l’installation/configuration de base d’un pare-feu/routeur pfSense, je ne vais pas re-dĂ©tailler tout le processus ici. Sachez simplement que pour le moment, les adresses IP ont juste Ă©tĂ© setupĂ©es, rien de plus.
Bien, désormais, nous allons créer notre CA (Certificate Authority) sur notre firewall de Paris, et ensuite nous allons pouvoir générer deux certificats clients que nous copierons sur celui de Bruxelles et de New-York.
Vous l’aurez compris, ici nous n’allons pas utiliser de simple pre-shared keys, mais bien des certificats. Rassurez-vous, c’est bien moins complexe qu’il n’y paraĂźt !
Donc, pour crĂ©er notre CA (ici, elle sera créée directement sur le pfSense, mais sachez que j’ai rĂ©alisĂ© un article expliquant comment crĂ©er une CA dĂ©diĂ©e via easyRsa, disponible juste ici), nous nous rendons dans la partie System puis Cert. Manager et nous cliquons sur Add :

Ensuite, il convient d’ajuster les paramĂštres Ă vos besoins, mais globalement on choisi un nom descriptif, on coche Ă©ventuellement la case Randomize Serial, le type de clĂ© (je vous conseille ECDSA quand c’est possible, ici la courbe utilisĂ©e Ă savoir prime256v1 est compatible avec OpenVPN donc pas de soucis), puis on renseigne ensuite les paramĂštres plus classique (CN, Country Code, Province, City…).
Et c’est tout ! Notre CA est dĂ©sormais fonctionnelle. On pourrait Ă©ventuellement crĂ©er une CRL (fichier regroupant les diffĂ©rents certificats rĂ©voquĂ©s), mais ici cela reste un lab donc nous sauterons cette Ă©tape.
Vient ensuite la crĂ©ation de certificats pour nos deux sites distants ! Ici nous allons faire ça « proprement », c’est-Ă -dire que si vous ĂȘtes du genre pressĂ©, vous pouvez directement crĂ©er les deux certificats clients sur le pfSense principal (Paris ici en l’occurence), et les envoyer aux deux autres, ou bien vous pouvez vous rendre sur les deux autres et crĂ©er une CSR (une demande de certificat, pour faire simple), puis importer cette CSR sur le pfSense principal pour les signer et gĂ©nĂ©rer les deux certificats.
Bref, rendons-nous donc sur celui de Bruxelles, toujours dans la partie Cert. Manager !

Ici, on remplis donc les champs de maniĂšre classique, en choisisant bien le Certificate Type Ă User certificate en bas de page. Et c’est tout !
Ensuite, dans la partie Certificates, nous avons un bouton permettant d’exporter la requĂȘte fraĂźchement créée :

On exporte le fichier, et on retourne sur Paris, toujours dans la partie Certificates :

Ici, on choisit donc Sign a CSR, on choisi la CA Root qui va signer le certificat (celle créée en dĂ©but d’article), puis on colle les donnĂ©es CSR dans l’endroit prĂ©vu, et c’est tout ! Bien vĂ©rifier qu’en bas de page User Certificate soit toujours choisi, et le compte est bon. Au passage, vous verrez sur la droite de la capture d’Ă©cran le contenu du fichier CSR.
On valide, et la demande est signée !
Pour ensuite mettre Ă jour notre demande sur le pare-feux de Bruxelles, il nous faut donc exporter le certificat en cliquant sur l’icĂŽne adĂ©quat (Ă ce stade, nous sommes toujours sur celui de Paris) :

Maintenant, avec ce fichier .crt en poche, on retourne une fois de plus sur celui de Bruxelles pour le mettre Ă jour. Il nous suffit de cliquer sur « Update CSR » (l’icĂŽne en forme de crayon…), toujours dans la partie Certificates, puis de coller le contenu du certificat :

On valide, et le tour est jouĂ© ! Notre certificat est bien signĂ© đ
Bien-entendu, il convient de rĂ©pĂ©ter cette opĂ©ration pour celui de New-York. L’avant-derniĂšre Ă©tape cĂŽtĂ© certificats est donc de crĂ©er un dernier certificat, mais un certificat de type Server cette-fois ci, qui sera donc toujours notre firewall de Paris. Rien de trĂšs compliquĂ© en soit, vous commencez Ă connaĂźtre :

Et enfin (promis, on touche au but !) il convient d’exporter le certificat de notre CA Root sur nos deux clients. Pour ce faire, on se rend dans la partie CAs, puis nous cliquons sur le bouton Export certificate :

Ensuite, on clique sur Add sur nos clients et on importe notre certificat, rien de plus facile !

Cette-fois, c’est fini pour de bon cĂŽtĂ© certificats ! Passons au VPN lui-mĂȘme…
II) Création du serveur OpenVPN sur prs-fw-01
Toujours sur notre firewall principal, nous allons donc sans surprise dans la partie OpenVPN puis Servers.
Ici, nous rentrons notamment les informations suivantes :
- Server Mode: Peer to Peer SSL/TLS ;
- Local Port: 1194 (mais libre Ă vous de le changer) ;
- TLS Configuration: Use a TLS Key + Automatically generate a TLS Key
- Peer Certificate Authority: CA-PARIS-01 (notre CA Root générée en début) ;
- Server Certificate: celui créé en dernier, certificat pour le firewall de Paris ;
- ECDH Curve: prime256v1 ;
- Data Encryption Algorithms: valeurs par dĂ©faut, Ă noter que si vous possĂ©dez un pare-feu physique sous ARM, restreindre le choix de l’algorithme Ă CHACHA peut ĂȘtre un bon choix, car les processeurs ARM n’ont pas les jeux d’instructions pour AES ;
- Certificate Depth: One (Client + Server). Nous aurons créé une CA Intermedite (voir un autre de mes articles), nous aurions pu augmenter la profondeur ;
- IPv4 Tunnel Network: 10.0.0.0/27 ;
- IPv4 Local Network: 192.168.10.0/24 ;
- IPv4 Remote Networks: 192.168.20.0/24,192.168.30.0/24 ;
- Custom Options: ici nous pouvons Ă©ventuellement rajouter « tls-version-min 1.3 » pour des raisons de sĂ©curitĂ©, mais nous n’allons pas le faire ici. Cela peut ĂȘtre cependant trĂšs intĂ©ressant dans le cadre de VPN client-2-site !
Et c’est tout ! Pas si mal tout de mĂȘme… on peut donc valider et voilĂ notre serveur créé.
Passons donc aux clients désormais !
III) Configuration des clients OpenVPN
Commençons par Bruxelles, à noter que ce que nous allons faire ici sera donc à répliqué sur Paris aussi.
Toujours dans la partie OpenVPN, on se rend sur Clients cette-fois ci, puis Add.
Les champs intéressants sont les suivants :
- Server Mode: Peer to Peer (SSL/TLS) ;
- Server Host: 192.168.1.50 ;
- TLS Configuration: Use a TLS Key, + copier/coller la clé TLS créée sur le serveur OpenVPN (sur le firewall de Paris donc) ;
- Peer Certificate Authority: CA-PARIS-01 ;
- Client certificate: CERT-OPENVPN-BXL-FW-01 ;
- IPv4 Tunnel Network: 10.0.0.0/27 ;
- IPv4 Remote Network: 192.168.10.0/24 ;
- Gateway creation: Both (mĂȘme si nous n’utilisons pas IPv6 ici) ;
Et c’est tout bon ! On peut donc valider, et rĂ©aliser le mĂȘme processus cĂŽtĂ© New-York.
En redémarrant ensuite le service OpenVPN cÎté serveur (et éventuellement cÎté Client), vous devriez obtenir ceci :

Nos deux sites sont bien reliĂ©s ! Mais se pose alors une question… au niveau du routage, si un client prĂ©sent Ă Paris souhaite communiquer avec New-York ou bien Bruxelles, comment pfSense sait quelle route emprunter ?
C’est ce que nous allons voir ici !
IV) RĂšgles de pare-feux, Client Specific Overrides, et tests finaux
Car oui, la premiĂšre Ă©tape avant toute chose est d’autoriser la communication… donc pour cela, rendez-vous dans Firewall, puis Rules, et enfin OpenVPN :

Ici nous rajoutons une simple rĂšgle autorisant tout le trafic, ni plus, ni moins ! Libre Ă vous de l’adapter bien-entendu.
Ensuite, on peut vĂ©rifier si Paris arrive Ă ping l’interface LAN de Bruxelles et de New-York :

Ce n’est pas le cas… pas de soucis, on va vĂ©rifier ça par la suite. Quid de Bruxelles ou New-York Ă destination du LAN de Paris justement ?

Ah ! Ici, ça fonctionne ! Donc nos clients arrivent Ă accĂ©der au LAN de notre site principal, mais ce dernier n’arrive pas Ă accĂ©der Ă leurs LAN…
Et oui, il faut indiquer Ă pfSense (ou plutĂŽt, Ă OpenVPN) quel chemin utiliser pour quel LAN… on se rend donc dans la partie Client Specific Overrides d’OpenVPN, sur notre firewall de Paris.
Ici, il faudra donc rajouter une premiĂšre configuration pour BXL puis ensuite pour NY. Rien de trĂšs sorcier :

On choisi notre serveur OpenVPN (nous n’en avons qu’un), puis on renseigne le CN du certificat utilisateur utilisĂ© par le client distant, avec une Ă©ventuellement description (ici j’ai remis le CN mais libre Ă vous de mettre autre chose).
Plus bas on ré-écrit les paramÚtres réseaux, cà d le network pour le tunnel VPN, le LAN, et enfin le Remote network.

Et c’est tout, Ă faire de mĂȘme pour celui de NY en adaptant les valeurs bien-entendu.
Et désormais, si on retente un ping de NY par exemple vers Paris :

Toujours fonctionnel, et maintenant de Paris Ă NY :

It works désormais ! Vous avez donc votre VPN Site-to-Site sur base de topologie Hub&Spoke ! Pas mal !
Cet article est Ă prĂ©sent terminĂ©, j’espĂšre comme d’habitude vous avoir appris quelques bricoles voir plus, et je vous reviens bientĂŽt pour d’autres articles (aprĂšs une bonne pĂ©riode Ă bas-rĂ©gime) ! đ
10 comments