Découverte d’OPNSense et Wireguard (VPN Site-à-Site)

Découverte d’OPNSense et Wireguard (VPN Site-à-Site)

25 avril 2020 4 Par Mairien Anthony

Le fameux logiciel/protocole VPN Wireguard ainsi que le fork de pfSense, OPNSense. Petite découverte ici et mise en place d’un VPN Site-à-Site !

J’ai découvert Wireguard il y a quelques temps, mais il était encore en bêta donc je n’y ai pas prêté plus d’attention que ça. Puis, dernièrement, j’ai vu que ce protocole/logiciel était désormais inclut dans le noyau Linux 5.4 ! Et beh, ça aura été sacrément rapide ! Les raisons sont assez simples, ce protocole/logiciel est bien plus stable et rapide qu’OpenVPN et est multi-plateformes, si en plus on rajoute le fait que Linus Torvald lui-même l’adore, c’est win-win.

Je me suis donc dit qu’il était temps de tester un peu ça en faisant un petit lab avec une liaison VPN Site-à-Site. Au début, j’me suis dit que je n’allais pas m’embêter et que j’allais utiliser ce bon vieux pfSense, mais à l’heure actuelle il n’y a pas de package officielle pour supporter Wireguard… tant pis, je vais installer deux Ubuntu Server et je vais taper un peu de CLI tant qu’à faire.

Sauf que non, j’ai découvert qu’OPNSense avait quant à lui un package officiel… et là aussi, je n’ai jamais trop prêté attention à ce fork de pfSense, car ce dernier me convenait très bien… mais bon, je me dis que faire un article parlant non pas d’une découverte mais de deux, ce serait pas mal donc go for it !

I) OPNSense, en quelques lignes

C’est donc un fork de pfSense, et à ce titre on peut dire que c’est donc « grosso modo du pfSense ». L’installation est sensiblement identitique (pas de bug de clavier qwerty contrairement à pfSense d’ailleurs durant l’install’ !) et l’interface web est très différente, mais on retrouver les même fonctionnalités, avec quelques babioles en plus.

Ici je l’ai donc installé de manière classique, en créant une IP sur le WAN 192.168.1.50/24 et en rajoutant une interface LAN via un LAN Segment VMWare nommé LAN-01 et avec comme IP 192.168.2.1/24.

Classique, mais efficace.

On rajoute une simple règle de pare-feu flottante permettant d’autoriser tout le trafic LAN>WAN et WAN>LAN et on termine par l’activation d’un petit DHCP sur le LAN et le tour est joué ! Bien entendu, la production n’est pas le Vatican, on ne laisse pas les portes grandes ouvertes, mais ici c’est un lab donc aucun soucis à ce niveau là.

Je ne vais pas plus décrire OPNSense, libre à vous de le tester si vous voulez vous faire une idée, personnellement je trouve l’interface bien sympa avec le menu déroulant sur la gauche, après c’est chacun ses goûts.

II) Le schéma réseau, bref qu’est-ce qu’on va faire au juste

Car oui, je vous ai parlé d’OPNSense et donné deux trois IP mais grossièrement, on va vers quoi là ? Et bien rien de compliqué, juste un lab permettant de tester la mise en place ce Wireguard de façon classique :

On aura donc nos deux VMs OPNSense, avec pour chacune une carte réseau en Bridge et une carte réseau en LAN Segment dans le LAN correspondant (LAN-01/LAN-02). Ensuite il ne nous reste plus qu’à créer X VM qui feront office de clients, pour ma part ce sera une VM Ubuntu en 20.04 dans le premier LAN ainsi qu’un serveur CentOS dans le second LAN.

III) Et Wireguard au fait, c’est quoi au juste ?

Ah oui, j’allais presque oublier… pour résumer, Wireguard c’est comme du OpenVPN, dans le sens où :

  • C’est un logiciel ET protocole ;
  • C’est du multi-plateformes (Windows, BSD, GNU/Linux, iOS…) ;
  • Ca fonctionne en UDP sur le port 51820 (par défaut) ;
  • C’est OpenSource ;

L’avantage contrairement à OpenVPN, c’est la vitesse de connexion. Il vous suffit de regarder un peu sur le net en tapant des recherches du type « OpenVPN vs Wiregaurd » pour vous en rendre compte et avoir les chiffres exactes, mais Wireguard semble plus stable qu’OpenVPN et surtout bien plus rapide : jusqu’à 2x pour la plupart des cas.

Ensuite, comme j’ai dit en introduction, Wireguard a été introduit nativement dans le noyau Linux en version 5.4, et est désormais considéré comme « stable ». Il est aussi bien plus simple à mettre en place, et ne possède « que » 4000 lignes de code, ce qui permet de debug plus facilement et d’avoir quelque chose de tout simplement plus propre.

Le fonctionnement est semblable à SSH, on génère une paire de clés publique/privé contrairement à OpenVPN avec ses certificats SSL.

Et c’est à peu près tout ce qu’il y a à savoir… l’installation/configuration via CLI est très simple aussi, même si je ne l’expliquerai pas dans cet article (un prochain arrivera sûrement).

IV) Installation du package Wireguard sur OPNSense

Une fois notre OPNsense correctement installé et configuré, il convient de se rendre dans l’onglet Firmware puis Plugins pour installer le paquet
os-wireguard :

A partir de là, il apparaîtra dans la partie VPN du tableau de bord, on peut d’ores et déjà aller l’activer :

Mention au passage, OPNSense nous dit qu’il est encore en phase expérimental, donc à prendre avec des pincettes (même si le protocole/logiciel en eux-même ne sont plus en bêta).

V) Configuration du VPN

A partir de là, c’est très simple mais aussi très rapide (même la doc’ officielle d’OPNSense le dit !). Il nous suffit de nous rendre dans l’onglet Local puis de cliquer sur le petit icône en forme de + :

Comme vous pouvez le voir, c’est très simple à configurer ! On choisi un nom, un port d’écoute, serveur DNS, réseau pour le tunnel, et c’est
tout ! Concenrnant la clée privée/publique elles ne s’afficheront ici qu’une fois le tout sauvegardé (ce qui était le cas sur cette capture c’écran), et sur notre second OPNSense il nous faudra copier la clé publique qui aura été générée, mais nous allons le voir dans quelques instants.

*Petite note tout de même, lors de l’encodage des serveurs DNS et du réseau pour le tunnel, j’ai eut personnellement un petit bug d’affichage qui faisait en sorte que je ne voyais pas ce que j’écrivais… cela s’affichait seulement dès que je cliquais autre part.

On se rend donc sur notre second OPNSense et on le configure de la même manière, en sauvegardant pour générer clée privée/publique. Une fois fait, on retourne de nouveau sur le premier OPNSense puis on se rend dans l’onglet Endpoint de Wireguard. Ici même chose, on clique sur le + :

Sauf qu’ici, on vient copier la clé publique du OPNSense-02, on choisi un réseau pour le VPN, et enfin on spécifie l’IP du OPNSense-02. Et vous aurez compris la chanson, il convient de faire la même chose sur le second, en mettant cette fois la clé publique du premier…

Une fois fait, si on se rend de nouveau dans l’onglet Local on voit que l’on peut choisir notre paire créé précédement, et comme d’habitude, faites la même chose pour le second.

A partir de là, le plus gros est fait ! Il ne nous reste plus grand chose à faire.

Occupons-nous donc des règles de pare-feu, car même si nous avions autorisé le trafic LAN/WAN, il convient de rajouter une règle sur l’onglet Pare-Feu, Règles, Wireguard car par défaut aucune n’est ajoutée donc le trafic est purement et simplement bloqué :

Comme écrit en description de la règle, c’est une « full pass » avec la mention « lab only » ; comprenez qu’en production on n’autorisera que le port 51820 en UDP.

Enfin, en dernier lieu, il ne nous reste qu’à retourner sur nos deux OPNSense et rajouter nos deux réseaux (LAN et LAN distant) dans l’onglet Endpoint :

(Notez que nous aurions pu le rajouter déjà auparvant, mais bon, étant donné que comme souvent je rédige l’article au fur et à mesure du lab, je n’en parle que maintenant 😅).

A partir de là, tout est bon ! Notre Wireguard est configuré sur nos deux routeurs, nous avons notre règle de pare-feu pour les deux aussi, et les réseaux sont autorisés. Nous allons procéder aux tests…

VI) Vérification

On va déjà tester de ping notre propre tunnel puis ensuite la gateway du LAN distant (tout ceci depuis le LAN-01, depuis la fameuse Ubuntu 20.04) :

On dirait qu’on s’est pas mal débrouillé jusqu’à maintenant non ? On poursuit ! J’ai installé rapidement un petit HTTPD sur notre VM CentOS sur notre LAN-02, voyons si je sais le joindre…

Tadaaaaa ! It works ! Nous avons donc notre liaison VPN correctement configurée et fonctionnelle !

Je ne vais pas réaliser de test de performance ici, car étant donné que tout est virtualisé, ce serait bien entendu biaisé. Je n’ai donc plus qu’à vous souhaiter une bonne journée/soirée, en espérant vous avoir au minimum fait découvrir OpenSense et Wireguard, et au mieux vous avoir aidé à créé votre propre tunnel VPN Site-à-Site ! 😉