VPN Wireguard site to site EdgeRouter X

Je suis l’heureux propriétaire de plusieurs routeurs EdgeRouter ER-X de la marque Ubiquiti, robustes et peu chers (environ 60 euros). Je me sers de ce routeur pour isoler mon réseau personnel de la box fournie par mon fournisseur d’accès à internet.

D’autre part, il se trouve que j’habite à 450 km de mon lieu de travail, et donc que je loue un studio près de mon entreprise où je suis en présentiel 3 jours par semaine. J’ai donc un deuxième abonnement internet fibre dans ce studio où j’héberge une partie de mon matériel informatique (mon “PC dans le Cloud“, mon serveur de sauvegardes externalisées et un serveur FreshRSS).

Jusqu’à présent, pour accéder à l’un ou l’autre des deux réseaux privés, j’utilisais des serveurs OpenVPN que j’ai mis en place dans chacun des réseaux. Mais pour simplifier mes usages, j’ai voulu mettre en place un VPN site à site reliant mes deux réseaux domestiques. J’ai fait pas mal de tests, que je ne détaillerai pas ici, à base de serveurs dédiés, jusqu’à optimiser la chose (de mon point de vue) en utilisant WireGuard positionné directement sur les routeurs ER-X.

Attention : relier deux sites par un VPN permanent site à site présente un risque important de sécurité. Si l’un des réseaux est compromis, l’autre l’est aussi. A faire à vos risques et périls.

Disclaimer : Je ne suis pas admin réseau, donc réfléchissez bien à deux fois avant de reproduire cette configuration. Si vous êtes spécialiste réseau, n’hésitez pas à améliorer cette configuration ER-X en commentaire, c’est aussi pour cela que je la partage.

Mon objectif est de mettre en place le schéma suivant :

Relier deux réseaux domestiques par un VPN site to site

ATTENTION 1 : J’utilise un FAI qui me propose (encore) une adresse IPv4 fixe pour chaque box. Il est possible de mettre en place cette configuration avec des adresses IPv4 dynamiques, mais il faut disposer d’un DNS dynamique associé à ces adresses IPv4.

ATTENTION 2 : Chaque box envoie tout son trafic entrant vers son routeur ER-X (configuré en IPv4 DMZ, config possible sur une box en mode routeur). Je bloque le trafic IPv6 car je ne maîtrise pas son fonctionnement.

La configuration se fait en 3 étapes:
– 1) Sauvegarde des configurations des routeurs ER-X
– 2) Installation de WireGuard sur chaque routeur
– 3) Configuration de chaque routeur

Première étape : sauvegarde des configurations des routeurs ER-X

Vous pouvez pour cela utiliser l’interface web d’administration du routeur (voir image ci-dessous), à la fois pour sauvegarder la configuration et pour la restaurer.

Je vous recommande également de vous entraîner sur un routeur de test avant de vous lancer sur un routeur de production le vendredi soir…

Deuxième étape : installation de WireGuard sur chaque routeur ER-X

Conformément aux instructions du site https://github.com/WireGuard/wireguard-vyatta-ubnt/wiki/EdgeOS-and-Unifi-Gateway, il faut choisir la dernière version du logiciel correspondant à votre routeur ER-X (et à sa version d’EdgeOS).

Pour les routeurs ER-X, il s’agit de la version e50, et à la date d’écriture de ce billet, du fichier e50-v1-v1.0.20211208-v1.0.20210914.deb

Pour le routeur ER-X A :

ssh adminERXA@192.168.A.254
adminERXA# curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20211208-1/e50-v1-v1.0.20211208-v1.0.20210914.deb
adminERXA# sudo dpkg -i e50-v1-v1.0.20211208-v1.0.20210914.deb

Il faut ensuite générer les clefs avec la commande suivante :

adminERXA# wg genkey | tee /config/auth/wg.key | wg pubkey >  wg.public

Vous obtiendrez des clefs qui ressembleront à cela :

adminERXA# more /config/auth/wg.key #clé privée ER-X A
ADndfjehry126857hhdfyendjfk0983274nsud+jdhf=
adminERXA# more wg.public #clé publique ER-X A
AHsdkfhehdhkqjhgdiuhzdhkjhsciukjc23374485+z=

Profitez-en pour les sauvegarder dans votre KeyPass ou équivalent.

Procédez de même sur le deuxième routeur ER-X B :

ssh adminERXB@192.168.B.254
adminERXB# curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20211208-1/e50-v1-v1.0.20211208-v1.0.20210914.deb
adminERXB# sudo dpkg -i e50-v1-v1.0.20211208-v1.0.20210914.deb
adminERXB# wg genkey | tee /config/auth/wg.key | wg pubkey >  wg.public
adminERXB# more /config/auth/wg.key #clé privée ER-X B
ERDncbfjhgdlkjoijdelzkj145858kjhdfkhkzh+zdd=
adminERXB# more wg.public #clé publique ER-X B
BJFURHFgshkhzihh148576091+jhzgaduygdjfjhkdz=

Troisième étape : configuration de chaque routeur ER-X

Sur le premier routeur ER-X A, créez une interface wg0 avec comme adresse IPv4 10.C.0.1/30 écoutant sur le port UDP 51820 :

ssh adminERXA@192.168.A.254
configure
set interfaces wireguard wg0 address 10.C.0.1/30
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
set interfaces wireguard wg0 private-key /config/auth/wg.key
commit

Puis il faut autoriser le routeur distant B et ses réseaux (avec la clef publique de ER-X B) :

set interfaces wireguard wg0 peer BJ...dz= endpoint IPv4_FAI_B:51820
set interfaces wireguard wg0 peer BJ...dz= persistent-keepalive 15
set interfaces wireguard wg0 peer BJ...dz= allowed-ips 192.168.B.0/24
set interfaces wireguard wg0 peer BJ...dz= allowed-ips 10.C.0.0/30
commit

Il faut également modifier le pare-feu avec les commandes :

set firewall name WAN_LOCAL rule 15 action accept
set firewall name WAN_LOCAL rule 15 protocol udp
set firewall name WAN_LOCAL rule 15 description 'Wireguard'
set firewall name WAN_LOCAL rule 15 destination port 51820
commit

Vérifiez que tout est configuré comme vous le souhaitez :

run show ip route

Si oui, vous pouvez enregistrer la configuration dans le routeur pour qu’elle soit lue à son prochain démarrage.

save
exit

Même opération sur le deuxième routeur ER-X B (avec l’adresse IPv4 10.C.0.2/30 pour l’autre extrémité du tunnel, et la clef publique du routeur ER-X A) :

ssh adminERXB@192.168.B.254
configure
set interfaces wireguard wg0 address 10.C.0.2/30
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
set interfaces wireguard wg0 private-key /config/auth/wg.key
commit
set interfaces wireguard wg0 peer AH...z= endpoint IPv4_FAI_A:51820
set interfaces wireguard wg0 peer AH...z= persistent-keepalive 15
set interfaces wireguard wg0 peer AH...z= allowed-ips 192.168.A.0/24
set interfaces wireguard wg0 peer AH...z= allowed-ips 10.C.0.0/30
commit
set firewall name WAN_LOCAL rule 15 action accept
set firewall name WAN_LOCAL rule 15 protocol udp
set firewall name WAN_LOCAL rule 15 description 'Wireguard'
set firewall name WAN_LOCAL rule 15 destination port 51820
commit
run show ip route
save
exit

A ce stade, le tunnel VPN devrait fonctionner et vous devriez pouvoir voir les machines situées sur l’autre réseau… Sinon, bon courage.

Mon réseau dans deux ans…

Les images réseaux de ce billet ont été construites avec ce site https://app.diagrams.net/

12 réflexions sur « VPN Wireguard site to site EdgeRouter X »

  1. Ubiquiti faisait de bons produits mais aussi quelques… boulettes. Pour les plus récentes :
    https://www.grc.com/sn/sn-813.htm (avril 2021): It appears clear that Ubiquiti has been proactively covering up the extreme customer-affecting severity of a data breach
    https://www.grc.com/sn/sn-700.htm (février 2019) : Ubiquiti network devices are being remotely exploited via port 10001 discovery service
    Est-ce que leurs produits restent dignes de confiance ?

  2. Bonjour,

    Petite question, comment as-tu choisi ton routeur et trouvé celui qui correspond à tes besoins ?
    Je n’ai trouvé nul part de comparatif de routeur (pas cher) qui n’ont pas de NAT obligatoire et permettent des segmentation de réseau ou des conf rigolotes comme la tienne

    • Bonjour,
      Un admin réseau m’a un jour recommandé le “EdgeRouter X” d’Ubiquiti et comme il coûtait moins de 100 euros, j’ai acheté pour tester, et j’ai adopté. Je voulais faire du loadbalancing de liaisons internet. J’ai été un peu décontenancé par les règles du pare-feu (qui est assez particulier), mais une fois bien aiguillé, c’est facile. Par contre, je me sens bien incompétent pour prétendre faire un test comparatif de routeurs, et donner des conseils sur ces appareils du diable.

  3. Bonjour,
    Mon fils aîné habite la “west coast”. Nous à Paris. Je ne sais pas si nous avons une configuration similaire à la vôtre…. mais nous ne devons pas en être loin. Nos routeurs, ici et la bas sont des petits Netgear (ce sont des modèles qui ne se font plus à ma connaissance) mais tous “reflashés” avec openWRT.

  4. Lorsque vous avez choisi Wireguard, est-ce que vous avez envisagé IPsec dans les alternatives ? Si oui, vos éventuels arguments dans un sens ou dans l’autre m’intéressent !

    • Je n’ai pas choisi WireGuard en menant une analyse complète des solutions et des performances, donc je ne pourrai pas vous donner d’arguments. J’ai testé WireGuard comme alternative à OpenVPN, et comme je constatais de bien meilleures performances sur mes accès distants à base de NoMachine, j’ai adopté. Et j’aime bien leur système de clefs… Rien de bien reluisant comme arguments 🙂

  5. Bonjour,
    N’ayant jamais utilisé la fonction DMZ du routeur de mon FAI, j’ai une question qui me taraude:
    Est ce que entre BOX – A et ER-X A, le réseau est différent de 192.168.A.0/24 ?
    Je suppose que le pare feu fait le nat entre le réseau interne et celui fournis par la box ?
    Merci pour cet article

    • Bonjour, oui tout à fait : la BOX-A et le routeur ERX-A sont sur un réseau intermédiaire différent de 192.168.A.0/24 et dont je n’ai pas parlé pour ne pas surcharger le schéma. Chez moi, ce réseau (ces réseaux en fait car c’est la même chose côté BOX-B) est considéré comme “géré et sous le contrôle du FAI”, puisque déclaré et géré par la box. J’y place peu d’actifs : le contrôleur des panneaux solaires de la maison, et un nœud Tor hébergé directement sous forme de VM sur la box.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.